Version 7.6.3.2-android, tag libreoffice-7.6.3.2-android
[LibreOffice.git] / include / sfx2 / viewfrm.hxx
bloba5deb63a7ebf60ef634ba99ed32431ef8ab5f02c
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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_VIEWFRM_HXX
20 #define INCLUDED_SFX2_VIEWFRM_HXX
22 #include <memory>
23 #include <sal/config.h>
24 #include <sfx2/dllapi.h>
25 #include <sal/types.h>
26 #include <svl/lstner.hxx>
27 #include <sfx2/frame.hxx>
28 #include <sfx2/objsh.hxx>
29 #include <sfx2/shell.hxx>
30 #include <svl/poolitem.hxx>
31 #include <vcl/svapp.hxx>
33 namespace weld {
34 class Button;
35 class Window;
37 class SvBorder;
38 class SfxDispatcher;
39 class SfxBindings;
40 class SfxProgress;
41 class SfxViewShell;
42 class Point;
43 class Size;
44 class SfxChildWindow;
45 class SfxInfoBarWindow;
46 enum class InfobarType;
47 class CommandPopupHandler;
49 class SFX2_DLLPUBLIC SfxViewFrame final : public SfxShell, public SfxListener
51 std::unique_ptr<struct SfxViewFrame_Impl> m_pImpl;
53 SfxObjectShellRef m_xObjSh;
54 std::unique_ptr<SfxDispatcher> m_pDispatcher;
55 SfxBindings* m_pBindings;
56 ImplSVHelpData* m_pHelpData;
57 ImplSVWinData* m_pWinData;
58 sal_uInt16 m_nAdjustPosPixelLock;
60 std::unique_ptr<CommandPopupHandler> m_pCommandPopupHandler;
62 SAL_DLLPRIVATE void Construct_Impl( SfxObjectShell *pObjSh );
63 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
64 DECL_DLLPRIVATE_LINK(GetInvolvedHandler, weld::Button&, void);
65 DECL_DLLPRIVATE_LINK(DonationHandler, weld::Button&, void);
66 DECL_DLLPRIVATE_LINK(WhatsNewHandler, weld::Button&, void);
67 DECL_DLLPRIVATE_LINK(MacroButtonHandler, weld::Button&, void);
68 DECL_DLLPRIVATE_LINK(EventButtonHandler, weld::Button&, void);
69 DECL_DLLPRIVATE_LINK(SwitchReadOnlyHandler, weld::Button&, void);
70 DECL_DLLPRIVATE_LINK(SignDocumentHandler, weld::Button&, void);
71 DECL_DLLPRIVATE_LINK(HiddenTrackChangesHandler, weld::Button&, void);
72 DECL_DLLPRIVATE_LINK(HyphenationMissingHandler, weld::Button&, void);
73 DECL_DLLPRIVATE_LINK(RefreshMasterPasswordHdl, weld::Button&, void);
74 DECL_DLLPRIVATE_STATIC_LINK(SfxViewFrame, HelpMasterPasswordHdl, weld::Button&, void);
75 SAL_DLLPRIVATE void KillDispatcher_Impl();
77 virtual ~SfxViewFrame() override;
79 public:
80 SfxViewFrame( SfxFrame& rFrame, SfxObjectShell *pDoc );
82 SFX_DECL_INTERFACE(SFX_INTERFACE_SFXVIEWFRM)
84 private:
85 /// SfxInterface initializer.
86 static void InitInterface_Impl();
88 void AppendContainsMacrosInfobar();
89 public:
91 static void SetViewFrame( SfxViewFrame* );
93 static SfxViewFrame* LoadHiddenDocument( SfxObjectShell const & i_rDoc, SfxInterfaceId i_nViewId );
94 static SfxViewFrame* LoadDocument( SfxObjectShell const & i_rDoc, SfxInterfaceId i_nViewId );
95 static SfxViewFrame* LoadDocumentIntoFrame( SfxObjectShell const & i_rDoc, const SfxFrameItem* i_pFrameItem, SfxInterfaceId i_nViewId );
96 static SfxViewFrame* LoadDocumentIntoFrame( SfxObjectShell const & i_rDoc, const css::uno::Reference< css::frame::XFrame >& i_rFrameItem );
97 static SfxViewFrame* DisplayNewDocument( SfxObjectShell const & i_rDoc, const SfxRequest& i_rCreateDocRequest );
99 SAL_WARN_UNUSED_RESULT static SfxViewFrame* Current();
100 SAL_WARN_UNUSED_RESULT static SfxViewFrame* GetFirst( const SfxObjectShell* pDoc = nullptr, bool bOnlyVisible = true );
101 SAL_WARN_UNUSED_RESULT static SfxViewFrame* GetNext( const SfxViewFrame& rPrev, const SfxObjectShell* pDoc = nullptr, bool bOnlyVisible = true );
103 SAL_WARN_UNUSED_RESULT static SfxViewFrame* Get( const css::uno::Reference< css::frame::XController>& i_rController, const SfxObjectShell* i_pDoc );
105 void DoActivate(bool bMDI);
106 void DoDeactivate(bool bMDI, SfxViewFrame const *pOld);
108 using SfxShell::GetDispatcher;
109 SfxDispatcher* GetDispatcher() { return m_pDispatcher.get(); }
110 SfxBindings& GetBindings() { return *m_pBindings; }
111 const SfxBindings& GetBindings() const { return *m_pBindings; }
112 vcl::Window& GetWindow() const;
113 weld::Window* GetFrameWeld() const;
115 SfxProgress* GetProgress() const;
117 void LockAdjustPosSizePixel()
118 { m_nAdjustPosPixelLock++; }
119 void UnlockAdjustPosSizePixel()
120 { m_nAdjustPosPixelLock--; }
121 void DoAdjustPosSizePixel( SfxViewShell * pSh,
122 const Point &rPos, const Size &rSize,
123 bool inplaceEditModeChange );
124 void Show();
125 bool IsVisible() const;
126 void ToTop();
127 void Enable( bool bEnable );
128 void Close();
129 virtual void Activate( bool bUI ) override;
130 virtual void Deactivate( bool bUI ) override;
132 void UpdateTitle();
134 // interne Handler
135 SAL_DLLPRIVATE void SetBorderPixelImpl( const SfxViewShell *pSh, const SvBorder &rBorder );
136 SAL_DLLPRIVATE const SvBorder& GetBorderPixelImpl() const;
137 SAL_DLLPRIVATE void InvalidateBorderImpl( const SfxViewShell *pSh );
139 virtual SfxObjectShell* GetObjectShell() override;
140 SfxInterfaceId GetCurViewId() const;
141 SfxFrame& GetFrame() const;
142 SfxViewFrame* GetTopViewFrame() const;
144 bool DoClose();
145 static void GetTargetList( TargetList& rList )
146 { SfxFrame::GetDefaultTargetList( rList ); }
148 void SetModalMode( bool );
149 bool IsInModalMode() const;
150 void Resize(bool bForce=false);
152 void SetChildWindow(sal_uInt16 nId, bool bVisible, bool bSetFocus=true);
153 void ToggleChildWindow(sal_uInt16);
154 bool HasChildWindow(sal_uInt16);
155 bool KnowsChildWindow(sal_uInt16);
156 void ShowChildWindow(sal_uInt16,bool bVisible=true);
157 SfxChildWindow* GetChildWindow(sal_uInt16);
158 void ChildWindowExecute(SfxRequest&);
159 void ChildWindowState(SfxItemSet&);
161 /** Append a new InfoBar (see https://wiki.documentfoundation.org/Design/Whiteboards/Infobar).
163 The buttons will be added from Right to Left at the right of the info bar. The parent, size
164 and position of each button will be changed: only the width will remain unchanged.
166 VclPtr<SfxInfoBarWindow> AppendInfoBar(const OUString& sId,
167 const OUString& sPrimaryMessage,
168 const OUString& sSecondaryMessage,
169 InfobarType aInfobarType,
170 bool bShowCloseButton=true);
171 void RemoveInfoBar(std::u16string_view sId);
172 void UpdateInfoBar(std::u16string_view sId, const OUString& sPrimaryMessage,
173 const OUString& sSecondaryMessage,
174 InfobarType eType);
175 bool HasInfoBarWithID(std::u16string_view sId);
176 void AppendReadOnlyInfobar();
178 SAL_DLLPRIVATE void GetDocNumber_Impl();
179 SAL_DLLPRIVATE void SetViewShell_Impl( SfxViewShell *pVSh );
180 SAL_DLLPRIVATE void ReleaseObjectShell_Impl();
182 SAL_DLLPRIVATE void GetState_Impl( SfxItemSet &rSet );
183 void ExecReload_Impl(SfxRequest& rReq);
184 SAL_DLLPRIVATE void StateReload_Impl( SfxItemSet &rSet );
185 SAL_DLLPRIVATE void ExecView_Impl( SfxRequest &rReq );
186 SAL_DLLPRIVATE void StateView_Impl( SfxItemSet &rSet );
187 SAL_DLLPRIVATE void ExecHistory_Impl( SfxRequest &rReq );
188 SAL_DLLPRIVATE void StateHistory_Impl( SfxItemSet &rSet );
189 SAL_DLLPRIVATE void ForceOuterResize_Impl();
190 SAL_DLLPRIVATE void UpdateDocument_Impl();
192 SAL_DLLPRIVATE void LockObjectShell_Impl();
194 SAL_DLLPRIVATE void MakeActive_Impl( bool bActivate );
195 SAL_DLLPRIVATE const Size& GetMargin_Impl() const;
196 SAL_DLLPRIVATE OUString GetActualPresentationURL_Impl() const;
197 SAL_DLLPRIVATE void MiscExec_Impl(SfxRequest &);
198 SAL_DLLPRIVATE void MiscState_Impl(SfxItemSet &);
199 SAL_DLLPRIVATE SfxWorkWindow* GetWorkWindow_Impl();
200 SAL_DLLPRIVATE void AddDispatchMacroToBasic_Impl(const OUString& sMacro);
202 SAL_DLLPRIVATE void Exec_Impl(SfxRequest &);
203 SAL_DLLPRIVATE void INetExecute_Impl(SfxRequest &);
204 SAL_DLLPRIVATE void INetState_Impl(SfxItemSet &);
206 SAL_DLLPRIVATE void SetCurViewId_Impl( const SfxInterfaceId i_nID );
208 private:
209 SAL_DLLPRIVATE bool SwitchToViewShell_Impl( sal_uInt16 nNo, bool bIsIndex = false );
210 SAL_DLLPRIVATE void PopShellAndSubShells_Impl( SfxViewShell& i_rViewShell );
211 SAL_DLLPRIVATE void SaveCurrentViewData_Impl( const SfxInterfaceId i_nNewViewId );
213 /** loads the given existing document into the given frame
215 This is done using the XComponentLoader interface of the frame, so the SFX document loader is invoked.
217 @param i_rDoc
218 the document to load
219 @param i_rFrame
220 the frame to load the document into
221 @param i_rLoadArgs
222 the arguments to pass to the component loader. If this sequence is empty, then the current arguments of the
223 model will be obtained, and passed to the loader. This ensures that any arguments in the model will be preserved,
224 instead of being reset.
225 @param i_nViewId
226 the ID of the view to create
227 @throws Exception
228 if something goes wrong. The caller is responsible for handling this.
230 SAL_DLLPRIVATE static SfxViewShell* LoadViewIntoFrame_Impl(
231 const SfxObjectShell& i_rDoc,
232 const css::uno::Reference< css::frame::XFrame >& i_rFrame,
233 const css::uno::Sequence< css::beans::PropertyValue >& i_rLoadArgs,
234 const SfxInterfaceId i_nViewId,
235 const bool i_bHidden
238 /** loads the given existing document into the given frame
240 This is done using the XComponentLoader interface of the frame, so the SFX document loader is invoked.
242 If no frame is given, a blank top level frame is created.
244 If anything fails during the process, as much as possible is cleaned up.
246 @param i_rDoc
247 the document to load
248 @param i_rFrame
249 the frame to load the document into. Might be <NULL/>, in which case a new frame is created.
250 @param i_nViewId
251 the ID of the view to create
253 SAL_DLLPRIVATE static SfxViewFrame* LoadViewIntoFrame_Impl_NoThrow(
254 const SfxObjectShell& i_rDoc,
255 const css::uno::Reference< css::frame::XFrame >& i_rFrame,
256 const SfxInterfaceId i_nViewId,
257 const bool i_bHidden
262 class SFX2_DLLPUBLIC SfxViewFrameItem final : public SfxPoolItem
264 SfxViewFrame* pFrame;
266 public:
267 SfxViewFrameItem( SfxViewFrame *pViewFrame ):
268 SfxPoolItem( 0 ),
269 pFrame( pViewFrame)
272 virtual bool operator==( const SfxPoolItem& ) const override;
273 virtual SfxViewFrameItem* Clone( SfxItemPool *pPool = nullptr ) const override;
275 SfxViewFrame* GetFrame() const
276 { return pFrame; }
279 #endif
281 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */