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
23 #include <sal/config.h>
24 #include <sfx2/dllapi.h>
25 #include <sfx2/toolbarids.hxx>
26 #include <sal/types.h>
28 #include <sfx2/bindings.hxx>
29 #include <o3tl/typed_flags_set.hxx>
30 #include <o3tl/span.hxx>
32 #include <boost/property_tree/ptree_fwd.hpp>
33 #include <vcl/menu.hxx>
34 #include <initializer_list>
42 struct SfxDispatcher_Impl
;
44 namespace vcl
{ class Window
; }
46 enum class SfxDispatcherPopFlags
55 template<> struct typed_flags
<SfxDispatcherPopFlags
> : is_typed_flags
<SfxDispatcherPopFlags
, 0x07> {};
58 enum class SfxSlotFilterState
62 // enabled even if ReadOnlyDoc
67 class SFX2_DLLPUBLIC SfxDispatcher final
69 std::unique_ptr
<SfxDispatcher_Impl
> xImp
;
71 // Search for temporary evaluated Todos
72 SAL_DLLPRIVATE
bool CheckVirtualStack( const SfxShell
& rShell
);
74 friend class SfxApplication
;
75 friend class SfxViewFrame
;
76 friend class SfxBindings
;
77 friend class SfxStateCache
;
78 friend class SfxPopupMenuManager
;
81 DECL_DLLPRIVATE_LINK( EventHdl_Impl
, Timer
*, void );
82 void PostMsgHandler(std::unique_ptr
<SfxRequest
>);
84 SAL_DLLPRIVATE
void Call_Impl( SfxShell
& rShell
, const SfxSlot
&rSlot
, SfxRequest
&rReq
, bool bRecord
);
85 SAL_DLLPRIVATE
void Update_Impl_( bool,bool,bool,SfxWorkWindow
*);
88 bool FindServer_( sal_uInt16 nId
, SfxSlotServer
&rServer
);
89 bool FillState_( const SfxSlotServer
&rServer
,
90 SfxItemSet
&rState
, const SfxSlot
*pRealSlot
);
91 void Execute_( SfxShell
&rShell
, const SfxSlot
&rSlot
,
99 SfxDispatcher( SfxViewFrame
*pFrame
);
101 SAL_DLLPRIVATE
void Construct_Impl();
105 const SfxPoolItem
* Execute( sal_uInt16 nSlot
,
106 SfxCallMode nCall
= SfxCallMode::SLOT
,
107 const SfxPoolItem
**pArgs
= nullptr,
108 sal_uInt16 nModi
= 0,
109 const SfxPoolItem
**pInternalArgs
= nullptr);
111 const SfxPoolItem
* Execute(sal_uInt16 nSlot
,
113 SfxItemSet
const * pArgs
,
114 SfxItemSet
const * pInternalArgs
,
117 const SfxPoolItem
* ExecuteList(sal_uInt16 nSlot
,
119 std::initializer_list
<SfxPoolItem
const*> args
,
120 std::initializer_list
<SfxPoolItem
const*> internalargs
= std::initializer_list
<SfxPoolItem
const*>());
122 const SfxPoolItem
* Execute( sal_uInt16 nSlot
,
124 const SfxItemSet
&rArgs
);
126 const SfxSlot
* GetSlot( const OUString
& rCommand
);
128 bool IsActive( const SfxShell
& rShell
);
129 sal_uInt16
GetShellLevel( const SfxShell
&rShell
);
130 SfxBindings
* GetBindings() const;
132 void Push( SfxShell
& rShell
);
133 void Pop( SfxShell
& rShell
, SfxDispatcherPopFlags nMode
= SfxDispatcherPopFlags::NONE
);
135 SfxShell
* GetShell(sal_uInt16 nIdx
) const;
136 SfxViewFrame
* GetFrame() const;
137 SfxModule
* GetModule() const;
139 void ExecutePopup( const OUString
&rResName
, vcl::Window
*pWin
= nullptr, const Point
*pPos
= nullptr );
140 static void ExecutePopup( vcl::Window
*pWin
= nullptr, const Point
*pPosPixel
= nullptr );
142 bool IsAppDispatcher() const;
143 bool IsFlushed() const;
145 void Lock( bool bLock
);
146 bool IsLocked() const;
147 void SetSlotFilter( SfxSlotFilterState nEnable
= SfxSlotFilterState::DISABLED
,
148 o3tl::span
<sal_uInt16
const> pSIDs
= o3tl::span
<sal_uInt16
const>());
150 void HideUI( bool bHide
= true );
151 ToolbarId
GetObjectBarId( sal_uInt16 nPos
) const;
153 SfxItemState
QueryState( sal_uInt16 nSID
, const SfxPoolItem
* &rpState
);
154 SfxItemState
QueryState( sal_uInt16 nSID
, css::uno::Any
& rAny
);
156 void SetDisableFlags( SfxDisableFlags nFlags
);
157 SfxDisableFlags
GetDisableFlags() const;
159 SAL_DLLPRIVATE
void SetMenu_Impl();
160 SAL_DLLPRIVATE
void Update_Impl( bool bForce
= false ); // ObjectBars etc.
161 SAL_DLLPRIVATE
bool IsUpdated_Impl() const;
162 SAL_DLLPRIVATE
bool GetShellAndSlot_Impl( sal_uInt16 nSlot
, SfxShell
**ppShell
, const SfxSlot
**ppSlot
,
163 bool bOwnShellsOnly
, bool bRealSlot
);
164 SAL_DLLPRIVATE
void SetReadOnly_Impl( bool bOn
);
165 SAL_DLLPRIVATE
bool GetReadOnly_Impl() const;
166 SAL_DLLPRIVATE SfxSlotFilterState
IsSlotEnabledByFilter_Impl( sal_uInt16 nSID
) const;
167 SAL_DLLPRIVATE
void SetQuietMode_Impl( bool bOn
);
168 SAL_DLLPRIVATE
bool IsReadOnlyShell_Impl( sal_uInt16 nShell
) const;
169 SAL_DLLPRIVATE
void RemoveShell_Impl( SfxShell
& rShell
);
170 SAL_DLLPRIVATE
void DoActivate_Impl( bool bMDI
);
171 SAL_DLLPRIVATE
void DoDeactivate_Impl( bool bMDI
, SfxViewFrame
const * pNew
);
172 SAL_DLLPRIVATE
void InvalidateBindings_Impl(bool);
174 static boost::property_tree::ptree
fillPopupMenu(Menu
* pMenu
);
179 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */