1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
19 #ifndef INCLUDED_SFX2_DISPATCH_HXX
20 #define INCLUDED_SFX2_DISPATCH_HXX
24 #include <sal/config.h>
25 #include <rtl/ref.hxx>
26 #include <sfx2/dllapi.h>
27 #include <sfx2/toolbarids.hxx>
28 #include <sal/types.h>
30 #include <sfx2/bindings.hxx>
31 #include <o3tl/typed_flags_set.hxx>
33 #include <boost/property_tree/ptree_fwd.hpp>
34 #include <initializer_list>
42 struct SfxDispatcher_Impl
;
44 class SfxPoolItemHolder
;
46 namespace vcl
{ class Window
; }
48 enum class SfxDispatcherPopFlags
57 template<> struct typed_flags
<SfxDispatcherPopFlags
> : is_typed_flags
<SfxDispatcherPopFlags
, 0x07> {};
60 enum class SfxSlotFilterState
64 // enabled even if ReadOnlyDoc
69 class SFX2_DLLPUBLIC SfxDispatcher final
71 std::unique_ptr
<SfxDispatcher_Impl
> xImp
;
73 // Search for temporary evaluated Todos
74 SAL_DLLPRIVATE
bool CheckVirtualStack( const SfxShell
& rShell
);
76 friend class SfxApplication
;
77 friend class SfxViewFrame
;
78 friend class SfxBindings
;
79 friend class SfxStateCache
;
80 friend class SfxPopupMenuManager
;
82 friend class SfxHintPoster
;
84 DECL_DLLPRIVATE_LINK( EventHdl_Impl
, Timer
*, void );
85 void PostMsgHandler(std::unique_ptr
<SfxRequest
>);
87 SAL_DLLPRIVATE
void Call_Impl( SfxShell
& rShell
, const SfxSlot
&rSlot
, SfxRequest
&rReq
, bool bRecord
);
88 SAL_DLLPRIVATE
void Update_Impl_( bool,bool,bool,SfxWorkWindow
*);
91 bool FindServer_( sal_uInt16 nId
, SfxSlotServer
&rServer
);
92 static bool IsCommandAllowedInLokReadOnlyViewMode(const OUString
& commandName
);
93 bool FillState_( const SfxSlotServer
&rServer
,
94 SfxItemSet
&rState
, const SfxSlot
*pRealSlot
);
95 void Execute_( SfxShell
&rShell
, const SfxSlot
&rSlot
,
103 SfxDispatcher( SfxViewFrame
*pFrame
);
105 SAL_DLLPRIVATE
void Construct_Impl();
109 SfxPoolItemHolder
Execute( sal_uInt16 nSlot
,
110 SfxCallMode nCall
= SfxCallMode::SLOT
,
111 const SfxPoolItem
**pArgs
= nullptr,
112 sal_uInt16 nModi
= 0,
113 const SfxPoolItem
**pInternalArgs
= nullptr);
115 SfxPoolItemHolder
Execute(sal_uInt16 nSlot
,
117 SfxItemSet
const * pArgs
,
118 SfxItemSet
const * pInternalArgs
,
121 SfxPoolItemHolder
ExecuteList(sal_uInt16 nSlot
,
123 std::initializer_list
<SfxPoolItem
const*> args
,
124 std::initializer_list
<SfxPoolItem
const*> internalargs
= std::initializer_list
<SfxPoolItem
const*>());
126 SfxPoolItemHolder
Execute( sal_uInt16 nSlot
,
128 const SfxItemSet
&rArgs
);
130 const SfxSlot
* GetSlot( const OUString
& rCommand
);
132 bool IsActive( const SfxShell
& rShell
);
133 sal_uInt16
GetShellLevel( const SfxShell
&rShell
);
134 SAL_RET_MAYBENULL SfxBindings
* GetBindings() const;
136 void Push( SfxShell
& rShell
);
137 void Pop( SfxShell
& rShell
, SfxDispatcherPopFlags nMode
= SfxDispatcherPopFlags::NONE
);
139 SAL_RET_MAYBENULL SfxShell
* GetShell(sal_uInt16 nIdx
) const;
140 SfxViewFrame
* GetFrame() const;
141 SfxModule
* GetModule() const;
143 void ExecutePopup( const OUString
&rResName
, vcl::Window
*pWin
= nullptr, const Point
*pPos
= nullptr );
144 static void ExecutePopup( vcl::Window
*pWin
= nullptr, const Point
*pPosPixel
= nullptr );
146 bool IsAppDispatcher() const;
147 bool IsFlushed() const;
149 void Lock( bool bLock
);
150 bool IsLocked() const;
151 void SetSlotFilter( SfxSlotFilterState nEnable
= SfxSlotFilterState::DISABLED
,
152 std::span
<sal_uInt16
const> pSIDs
= std::span
<sal_uInt16
const>());
154 void HideUI( bool bHide
= true );
155 ToolbarId
GetObjectBarId( sal_uInt16 nPos
) const;
157 SfxItemState
QueryState( sal_uInt16 nSID
, SfxPoolItemHolder
& rState
);
158 SfxItemState
QueryState( sal_uInt16 nSID
, css::uno::Any
& rAny
);
160 void SetDisableFlags( SfxDisableFlags nFlags
);
161 SfxDisableFlags
GetDisableFlags() const;
163 SAL_DLLPRIVATE
void SetMenu_Impl();
164 SAL_DLLPRIVATE
void Update_Impl( bool bForce
= false ); // ObjectBars etc.
165 SAL_DLLPRIVATE
bool IsUpdated_Impl() const;
166 SAL_DLLPRIVATE
bool GetShellAndSlot_Impl( sal_uInt16 nSlot
, SfxShell
**ppShell
, const SfxSlot
**ppSlot
,
167 bool bOwnShellsOnly
, bool bRealSlot
);
168 SAL_DLLPRIVATE
void SetReadOnly_Impl( bool bOn
);
169 SAL_DLLPRIVATE
bool GetReadOnly_Impl() const;
170 SAL_DLLPRIVATE SfxSlotFilterState
IsSlotEnabledByFilter_Impl( sal_uInt16 nSID
) const;
171 SAL_DLLPRIVATE
void SetQuietMode_Impl( bool bOn
);
172 SAL_DLLPRIVATE
bool IsReadOnlyShell_Impl( sal_uInt16 nShell
) const;
173 SAL_DLLPRIVATE
void RemoveShell_Impl( SfxShell
& rShell
);
174 SAL_DLLPRIVATE
void DoActivate_Impl( bool bMDI
);
175 SAL_DLLPRIVATE
void DoDeactivate_Impl( bool bMDI
, SfxViewFrame
const * pNew
);
176 SAL_DLLPRIVATE
void InvalidateBindings_Impl(bool);
178 static boost::property_tree::ptree
fillPopupMenu(const rtl::Reference
<VCLXPopupMenu
>& rMenu
);
183 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */