summaryrefslogtreecommitdiffstats
path: root/sfx2/source/inc
diff options
context:
space:
mode:
Diffstat (limited to 'sfx2/source/inc')
-rw-r--r--sfx2/source/inc/StyleList.hxx248
-rw-r--r--sfx2/source/inc/alienwarn.hxx39
-rw-r--r--sfx2/source/inc/appbaslib.hxx98
-rw-r--r--sfx2/source/inc/appdata.hxx148
-rw-r--r--sfx2/source/inc/appopen.hxx36
-rw-r--r--sfx2/source/inc/documentfontsdialog.hxx49
-rw-r--r--sfx2/source/inc/docundomanager.hxx159
-rw-r--r--sfx2/source/inc/eventsupplier.hxx91
-rw-r--r--sfx2/source/inc/fltoptint.hxx62
-rw-r--r--sfx2/source/inc/helper.hxx41
-rw-r--r--sfx2/source/inc/helpids.h57
-rw-r--r--sfx2/source/inc/hintpost.hxx59
-rw-r--r--sfx2/source/inc/macroloader.hxx88
-rw-r--r--sfx2/source/inc/nochaos.hxx35
-rw-r--r--sfx2/source/inc/objshimp.hxx159
-rw-r--r--sfx2/source/inc/openflag.hxx33
-rw-r--r--sfx2/source/inc/openuriexternally.hxx40
-rw-r--r--sfx2/source/inc/openurlhint.hxx38
-rw-r--r--sfx2/source/inc/partwnd.hxx63
-rw-r--r--sfx2/source/inc/preview.hxx41
-rw-r--r--sfx2/source/inc/recfloat.hxx61
-rw-r--r--sfx2/source/inc/sfxpicklist.hxx42
-rw-r--r--sfx2/source/inc/sfxtypes.hxx51
-rw-r--r--sfx2/source/inc/sfxurlrelocator.hxx52
-rw-r--r--sfx2/source/inc/slotserv.hxx59
-rw-r--r--sfx2/source/inc/splitwin.hxx125
-rw-r--r--sfx2/source/inc/statcach.hxx154
-rw-r--r--sfx2/source/inc/templatesearchviewitem.hxx28
-rw-r--r--sfx2/source/inc/templdgi.hxx242
-rw-r--r--sfx2/source/inc/tplcitem.hxx45
-rw-r--r--sfx2/source/inc/versdlg.hxx91
-rw-r--r--sfx2/source/inc/workwin.hxx301
32 files changed, 2835 insertions, 0 deletions
diff --git a/sfx2/source/inc/StyleList.hxx b/sfx2/source/inc/StyleList.hxx
new file mode 100644
index 0000000000..fe4ff6269b
--- /dev/null
+++ b/sfx2/source/inc/StyleList.hxx
@@ -0,0 +1,248 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <sal/config.h>
+
+#include <o3tl/typed_flags_set.hxx>
+#include <sfx2/bindings.hxx>
+#include <sfx2/styfitem.hxx>
+#include <svl/eitem.hxx>
+#include <svl/style.hxx>
+#include <vcl/idle.hxx>
+#include <vcl/transfer.hxx>
+#include <vcl/weld.hxx>
+
+class SfxObjectShell;
+class SfxStyleFamilyItem;
+class SfxTemplateItem;
+class SfxCommonTemplateDialog_Impl;
+class SfxTemplateControllerItem;
+
+enum class StyleFlags
+{
+ NONE = 0,
+ UpdateFamilyList = 1,
+ UpdateFamily = 2
+};
+
+namespace o3tl
+{
+template <> struct typed_flags<StyleFlags> : is_typed_flags<StyleFlags, 3>
+{
+};
+}
+
+class TreeViewDropTarget;
+
+constexpr int MAX_FAMILIES = 6;
+constexpr int COUNT_BOUND_FUNC = 14;
+
+class StyleList final : public SfxListener
+{
+ friend class TreeViewDropTarget;
+ friend class SfxTemplateControllerItem;
+
+public:
+ // Constructor
+ StyleList(weld::Builder* pBuilder, SfxBindings* pBindings, SfxCommonTemplateDialog_Impl* Parent,
+ weld::Container* pC, OUString treeviewname, OUString flatviewname);
+
+ // Destructor
+ ~StyleList();
+
+ // This function connects m_xTreeBox, m_xFmtLb and m_pParentDialog with certain LINKs
+ void Initialize();
+
+ // It selects the style in treeview
+ // bIsCallBack is true for the selected style. For eg. if "Addressee" is selected in
+ // styles, bIsCallBack will be true for it.
+ void SelectStyle(const OUString& rStr, bool bIsCallback);
+ // Checks whether a family has a saved state
+ bool CurrentFamilyHasState() { return nullptr != m_pFamilyState[m_nActFamily - 1]; }
+
+ // This function is a subpart of Dialog's SetFamilyState
+ // When a new style is selected for use, it resets it.
+ void SetFamilyState(sal_uInt16 nSlotId, const SfxTemplateItem* pItem);
+
+ // It is used in Dialog's EnableExample_Impl
+ // When the value of m_bNewbyExampleDisabled is updated there
+ // while creating a new style by example,
+ // the corresponding value gets updated here too.
+ void EnableNewByExample(bool newByExampleDisabled);
+
+ // This function is used to set a hierarchical view.
+ void SetHierarchical();
+ // This function handles the controls while setting a filter except hierarchical
+ void SetFilterControlsHandle();
+ // Return whether treeview is visible
+ // It is used in StyleList's UpdateStyles_Hdl
+ // It is used to defaultly set the hierarchical view
+ bool IsTreeView() const { return m_xTreeBox->get_visible(); }
+
+ // Helper function: Access to the current family item
+ // Used in Dialog's updateStyleHandler, Execute_Impl etc...
+ const SfxStyleFamilyItem* GetFamilyItem() const;
+ // Used to get the current selected entry in treeview
+ // Used in Dialog's Execute_Impl, Action_Select etc...
+ OUString GetSelectedEntry() const;
+ // Returns the Family Item at ith index
+ // Used in Dialog's ReadResource_Hdl
+ const SfxStyleFamilyItem& GetFamilyItemByIndex(size_t i) const;
+ bool IsHierarchical() const { return m_bHierarchical; }
+
+ void Enabledel(bool candel) { m_bCanDel = candel; }
+ void Enablehide(bool canhide) { m_bCanHide = canhide; }
+ void Enableshow(bool canshow) { m_bCanShow = canshow; }
+ void Enablenew(bool cannew) { m_bCanNew = cannew; }
+ void Enableedit(bool canedit) { m_bCanEdit = canedit; }
+
+ // Used in Dialog's Execute_Impl
+ // It is a necessary condition to execute a style
+ bool EnableExecute();
+
+ void connect_UpdateStyles(const Link<StyleFlags, void>& rLink) { m_aUpdateStyles = rLink; }
+ void connect_ReadResource(const Link<StyleList&, void>& rLink) { m_aReadResource = rLink; }
+ void connect_ClearResource(const Link<void*, void>& rLink) { m_aClearResource = rLink; }
+ void connect_LoadFactoryStyleFilter(const Link<SfxObjectShell const*, sal_Int32>& rLink);
+ void connect_SaveSelection(const Link<StyleList&, SfxObjectShell*> rLink);
+ void connect_UpdateFamily(const Link<StyleList&, void> rLink) { m_aUpdateFamily = rLink; }
+
+ void FamilySelect(sal_uInt16 nEntry, bool bRefresh = false);
+ void FilterSelect(sal_uInt16 nActFilter, bool bsetFilter);
+
+ DECL_LINK(NewMenuExecuteAction, void*, void);
+
+ bool HasStylesHighlighterFeature() { return m_bModuleHasStylesHighlighterFeature; }
+ void SetHighlightParaStyles(bool bSet) { m_bHighlightParaStyles = bSet; }
+ bool IsHighlightParaStyles() { return m_bHighlightParaStyles; }
+ void SetHighlightCharStyles(bool bSet) { m_bHighlightCharStyles = bSet; }
+ bool IsHighlightCharStyles() { return m_bHighlightCharStyles; }
+
+private:
+ void FillTreeBox(SfxStyleFamily eFam);
+
+ void UpdateFamily();
+ void UpdateStyles(StyleFlags nFlags);
+
+ OUString getDefaultStyleName(const SfxStyleFamily eFam);
+ SfxStyleFamily GetActualFamily() const;
+ void GetSelectedStyle() const;
+
+ sal_Int8 AcceptDrop(const AcceptDropEvent& rEvt, const DropTargetHelper& rHelper);
+ void DropHdl(const OUString& rStyle, const OUString& rParent);
+
+ void MenuSelect(const OUString& rIdent);
+ void PrepareMenu(const Point& rPos);
+ void ShowMenu(const CommandEvent& rCEvt);
+ void CreateContextMenu();
+
+ void Notify(SfxBroadcaster& rBC, const SfxHint& rHint);
+
+ // In which FamilyState do I have to look, in order to get the
+ // information of the ith Family in the pStyleFamilies.
+ sal_uInt16 StyleNrToInfoOffset(sal_uInt16 i);
+
+ DECL_LINK(ReadResource, void*, size_t);
+ DECL_LINK(Clear, void*, void);
+ DECL_LINK(Cleanup, void*, void);
+ DECL_LINK(ExecuteDrop, const ExecuteDropEvent&, sal_Int8);
+ DECL_LINK(IsSafeForWaterCan, void*, bool);
+ DECL_LINK(HasSelectedStyle, void*, bool);
+ DECL_LINK(UpdateStyleDependents, void*, void);
+ DECL_LINK(TimeOut, Timer*, void);
+ DECL_LINK(EnableTreeDrag, bool, void);
+ DECL_LINK(EnableDelete, void*, void);
+ DECL_LINK(SetWaterCanState, const SfxBoolItem*, void);
+ DECL_LINK(SetFamily, sal_uInt16, void);
+
+ void InvalidateBindings();
+
+ void Update();
+ Link<StyleFlags, void> m_aUpdateStyles;
+ Link<StyleList&, void> m_aReadResource;
+ Link<void*, void> m_aClearResource;
+ Link<SfxObjectShell const*, sal_Int32> m_aLoadFactoryStyleFilter;
+ Link<StyleList&, SfxObjectShell*> m_aSaveSelection;
+ Link<StyleList&, void> m_aUpdateFamily;
+
+ void NewHdl();
+ void EditHdl();
+ void DeleteHdl();
+ void HideHdl();
+ void ShowHdl();
+
+ DECL_LINK(DragBeginHdl, bool&, bool);
+ DECL_LINK(KeyInputHdl, const KeyEvent&, bool);
+ DECL_LINK(QueryTooltipHdl, const weld::TreeIter&, OUString);
+ DECL_LINK(CustomRenderHdl, weld::TreeView::render_args, void);
+ DECL_LINK(FmtSelectHdl, weld::TreeView&, void);
+ DECL_LINK(TreeListApplyHdl, weld::TreeView&, bool);
+ DECL_LINK(MousePressHdl, const MouseEvent&, bool);
+ DECL_STATIC_LINK(StyleList, CustomGetSizeHdl, weld::TreeView::get_size_args, Size);
+ DECL_LINK(PopupFlatMenuHdl, const CommandEvent&, bool);
+ DECL_LINK(PopupTreeMenuHdl, const CommandEvent&, bool);
+ DECL_LINK(MenuSelectAsyncHdl, void*, void);
+
+ bool m_bHierarchical : 1;
+
+ bool m_bAllowReParentDrop : 1;
+ bool m_bNewByExampleDisabled : 1;
+ bool m_bDontUpdate : 1;
+ bool m_bTreeDrag : 1;
+ bool m_bCanEdit : 1;
+ bool m_bCanHide : 1;
+ bool m_bCanShow : 1;
+ bool m_bCanNew : 1;
+ bool m_bUpdateFamily : 1;
+ bool m_bCanDel : 1;
+ bool m_bBindingUpdate : 1;
+ SfxStyleSheetBasePool* m_pStyleSheetPool;
+ sal_uInt16 m_nActFilter;
+ std::unique_ptr<weld::TreeView> m_xFmtLb;
+ std::unique_ptr<weld::TreeView> m_xTreeBox;
+
+ std::unique_ptr<weld::Builder> mxMenuBuilder;
+ std::unique_ptr<weld::Menu> mxMenu;
+
+ std::optional<SfxStyleFamilies> m_xStyleFamilies;
+ std::array<std::unique_ptr<SfxTemplateItem>, MAX_FAMILIES> m_pFamilyState;
+ SfxObjectShell* m_pCurObjShell;
+ sal_uInt16 m_nActFamily;
+ SfxStyleSearchBits m_nAppFilter; // Filter, which has set the application (for automatic)
+
+ std::unique_ptr<TreeViewDropTarget> m_xTreeView1DropTargetHelper;
+ std::unique_ptr<TreeViewDropTarget> m_xTreeView2DropTargetHelper;
+
+ SfxCommonTemplateDialog_Impl* m_pParentDialog;
+ SfxBindings* m_pBindings;
+ std::array<std::unique_ptr<SfxTemplateControllerItem>, COUNT_BOUND_FUNC> pBoundItems;
+
+ std::unique_ptr<Idle> pIdle;
+
+ OUString sLastItemIdent;
+ SfxModule* m_Module;
+ sal_uInt16 m_nModifier;
+ weld::Container* m_pContainer;
+
+ bool m_bModuleHasStylesHighlighterFeature = false;
+ bool m_bHighlightParaStyles = false;
+ bool m_bHighlightCharStyles = false;
+};
diff --git a/sfx2/source/inc/alienwarn.hxx b/sfx2/source/inc/alienwarn.hxx
new file mode 100644
index 0000000000..7c4f8cb364
--- /dev/null
+++ b/sfx2/source/inc/alienwarn.hxx
@@ -0,0 +1,39 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_ALIENWARN_HXX
+#define INCLUDED_SFX2_SOURCE_INC_ALIENWARN_HXX
+
+#include <vcl/weld.hxx>
+
+class SfxAlienWarningDialog final : public weld::MessageDialogController
+{
+private:
+ std::unique_ptr<weld::Button> m_xKeepCurrentBtn;
+ std::unique_ptr<weld::Button> m_xUseDefaultFormatBtn;
+ std::unique_ptr<weld::CheckButton> m_xWarningOnBox;
+
+public:
+ SfxAlienWarningDialog(weld::Window* pParent, std::u16string_view _rFormatName,
+ const OUString& _rDefaultExtension, bool rDefaultIsAlien);
+ virtual ~SfxAlienWarningDialog() override;
+};
+
+#endif // INCLUDED_SFX2_SOURCE_INC_ALIENWARN_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/appbaslib.hxx b/sfx2/source/inc/appbaslib.hxx
new file mode 100644
index 0000000000..04f4199960
--- /dev/null
+++ b/sfx2/source/inc/appbaslib.hxx
@@ -0,0 +1,98 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_APPBASLIB_HXX
+#define INCLUDED_SFX2_SOURCE_INC_APPBASLIB_HXX
+
+#include <svl/lstner.hxx>
+
+#include <com/sun/star/script/XStorageBasedLibraryContainer.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+#include <vector>
+
+class BasicManager;
+
+/** helper class which holds and manipulates a BasicManager
+*/
+class SfxBasicManagerHolder final
+ : public SfxListener
+{
+private:
+ BasicManager* mpBasicManager;
+ css::uno::Reference< css::script::XStorageBasedLibraryContainer >
+ mxBasicContainer;
+ css::uno::Reference< css::script::XStorageBasedLibraryContainer >
+ mxDialogContainer;
+
+public:
+ SfxBasicManagerHolder();
+
+ enum ContainerType
+ {
+ SCRIPTS, DIALOGS
+ };
+
+ /** returns <TRUE/> if and only if the instance is currently bound to a non-<NULL/>
+ BasicManager.
+ */
+ bool isValid() const { return mpBasicManager != nullptr; }
+
+ /** returns the BasicManager which this instance is currently bound to
+ */
+ BasicManager*
+ get() const { return mpBasicManager; }
+
+ /** binds the instance to the given BasicManager
+ */
+ void reset( BasicManager* _pBasicManager );
+
+ css::script::XLibraryContainer *
+ getLibraryContainer( ContainerType _eType );
+
+ /** calls the storeLibraries at both our script and basic library container
+ */
+ void storeAllLibraries();
+
+ /** calls the setStorage at all our XStorageBasedLibraryContainer.
+ */
+ void setStorage(
+ const css::uno::Reference< css::embed::XStorage >& _rxStorage
+ );
+
+ /** calls the storeLibrariesToStorage at all our XStorageBasedLibraryContainer.
+ */
+ void storeLibrariesToStorage(
+ const css::uno::Reference< css::embed::XStorage >& _rxStorage
+ );
+
+
+ /** checks if any modules in the SfxLibraryContainer exceed the binary
+ limits.
+ */
+ bool ImgVersion12PsswdBinaryLimitExceeded( std::vector< OUString >& sModules );
+
+ virtual void Notify(SfxBroadcaster& rBC, SfxHint const& rHint) override;
+
+private:
+ void impl_releaseContainers();
+};
+
+#endif // INCLUDED_SFX2_SOURCE_INC_APPBASLIB_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/appdata.hxx b/sfx2/source/inc/appdata.hxx
new file mode 100644
index 0000000000..6362d05d09
--- /dev/null
+++ b/sfx2/source/inc/appdata.hxx
@@ -0,0 +1,148 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_APPDATA_HXX
+#define INCLUDED_SFX2_SOURCE_INC_APPDATA_HXX
+
+#include <config_features.h>
+
+#include <rtl/ref.hxx>
+#include <rtl/ustring.hxx>
+#include <svl/svdde.hxx>
+#include <svtools/ehdl.hxx>
+#include <sfx2/app.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/doctempl.hxx>
+#include <sfx2/fcontnr.hxx>
+#include <sfx2/msgpool.hxx>
+#include <o3tl/enumarray.hxx>
+#include "sfxpicklist.hxx"
+#include <com/sun/star/ui/XAcceleratorConfiguration.hpp>
+
+#include <bitset.hxx>
+#include <memory>
+#include <vector>
+
+class SfxApplication;
+class SfxProgress;
+class SfxDdeDocTopic_Impl;
+class DdeService;
+class SfxItemPool;
+class SfxFilterMatcher;
+class ISfxTemplateCommon;
+class SfxStatusDispatcher;
+class SfxDdeTriggerTopic_Impl;
+class SfxFrame;
+class SfxViewFrame;
+class SfxInterface;
+class BasicManager;
+class SfxBasicManagerHolder;
+class SfxBasicManagerCreationListener;
+namespace sfx2::sidebar { class Theme; }
+
+
+
+class SfxAppData_Impl
+{
+public:
+ IndexBitSet aIndexBitSet; // for counting noname documents
+ OUString aLastDir; // for IO dialog
+
+ // DDE stuff
+ std::unique_ptr<DdeService> pDdeService;
+ std::vector<SfxDdeDocTopic_Impl*> maDocTopics;
+ std::unique_ptr<SfxDdeTriggerTopic_Impl> pTriggerTopic;
+ std::unique_ptr<DdeService> pDdeService2;
+
+ // single instance classes
+ std::vector<SfxChildWinFactory> maFactories;
+ std::vector<SfxFrame*> vTopFrames;
+
+ // application members
+ std::optional<SfxFilterMatcher> pMatcher;
+ std::optional<SfxErrorHandler> m_pToolsErrorHdl;
+ std::optional<SfxErrorHandler> m_pSoErrorHdl;
+#if HAVE_FEATURE_SCRIPTING
+ std::optional<SfxErrorHandler> m_pSbxErrorHdl;
+#endif
+ rtl::Reference<SfxStatusDispatcher> mxAppDispatch;
+ std::optional<SfxPickList> mxAppPickList;
+ std::optional<SfxDocumentTemplates> pTemplates;
+
+ // global pointers
+ SfxItemPool* pPool;
+
+ // "current" functionality
+ SfxProgress* pProgress;
+
+ sal_uInt16 nDocModalMode; // counts documents in modal mode
+ sal_uInt16 nRescheduleLocks;
+
+ std::vector<SfxTbxCtrlFactory>
+ maTbxCtrlFactories;
+ std::vector<SfxStbCtrlFactory>
+ maStbCtrlFactories;
+ std::vector<SfxViewFrame*> maViewFrames;
+ std::vector<SfxViewShell*> maViewShells;
+ std::unordered_map<OUString, css::uno::Reference<css::ui::XAcceleratorConfiguration>> maAcceleratorConfs;
+ std::vector<SfxObjectShell*>
+ maObjShells;
+ std::unique_ptr<SfxBasicManagerHolder>
+ pBasicManager;
+ std::unique_ptr<SfxBasicManagerCreationListener>
+ pBasMgrListener;
+ SfxViewFrame* pViewFrame;
+ std::optional<SfxSlotPool> pSlotPool;
+ std::optional<SfxDispatcher>
+ pAppDispat; // Dispatcher if no document
+ ::rtl::Reference<sfx2::sidebar::Theme> m_pSidebarTheme;
+
+ bool bDowning:1; // sal_True on Exit and afterwards
+ bool bInQuit : 1;
+
+ SfxAppData_Impl();
+ ~SfxAppData_Impl();
+
+ SfxDocumentTemplates* GetDocumentTemplates();
+ void DeInitDDE();
+
+ o3tl::enumarray<SfxToolsModule, std::unique_ptr<SfxModule>> aModules;
+
+ /** called when the Application's BasicManager has been created. This can happen
+ explicitly in SfxApplication::GetBasicManager, or implicitly if a document's
+ BasicManager is created before the application's BasicManager exists.
+ */
+ void OnApplicationBasicManagerCreated( BasicManager& _rManager );
+};
+
+class SfxDdeTriggerTopic_Impl final : public DdeTopic
+{
+#if defined(_WIN32)
+public:
+ SfxDdeTriggerTopic_Impl()
+ : DdeTopic( "TRIGGER" )
+ {}
+
+ virtual bool Execute( const OUString* ) override { return true; }
+#endif
+};
+
+#endif // INCLUDED_SFX2_SOURCE_INC_APPDATA_HXX
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/appopen.hxx b/sfx2/source/inc/appopen.hxx
new file mode 100644
index 0000000000..5e32a24904
--- /dev/null
+++ b/sfx2/source/inc/appopen.hxx
@@ -0,0 +1,36 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_APPOPEN_HXX
+#define INCLUDED_SFX2_SOURCE_INC_APPOPEN_HXX
+
+#include <sal/config.h>
+#include <comphelper/errcode.hxx>
+
+class SfxItemPool;
+class SfxMedium;
+class SfxObjectShell;
+
+ErrCode CheckPasswd_Impl(SfxObjectShell* pDoc, SfxMedium* pFile);
+
+void SetTemplate_Impl(std::u16string_view, const OUString&, SfxObjectShell*);
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/documentfontsdialog.hxx b/sfx2/source/inc/documentfontsdialog.hxx
new file mode 100644
index 0000000000..9ce447669a
--- /dev/null
+++ b/sfx2/source/inc/documentfontsdialog.hxx
@@ -0,0 +1,49 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_DOCUMENTFONTSDIALOG_HXX
+#define INCLUDED_SFX2_SOURCE_INC_DOCUMENTFONTSDIALOG_HXX
+
+#include <sfx2/tabdlg.hxx>
+
+/**
+ Tab page for document font settings in the document properties dialog.
+*/
+class SfxDocumentFontsPage final : public SfxTabPage
+{
+public:
+ SfxDocumentFontsPage(weld::Container* pPage, weld::DialogController* pController,
+ const SfxItemSet& set);
+ virtual ~SfxDocumentFontsPage() override;
+ static std::unique_ptr<SfxTabPage>
+ Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* set);
+
+private:
+ virtual bool FillItemSet(SfxItemSet* set) override;
+ virtual void Reset(const SfxItemSet* set) override;
+
+ std::unique_ptr<weld::CheckButton> embedFontsCheckbox;
+ std::unique_ptr<weld::CheckButton> embedUsedFontsCheckbox;
+ std::unique_ptr<weld::CheckButton> embedLatinScriptFontsCheckbox;
+ std::unique_ptr<weld::CheckButton> embedAsianScriptFontsCheckbox;
+ std::unique_ptr<weld::CheckButton> embedComplexScriptFontsCheckbox;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/docundomanager.hxx b/sfx2/source/inc/docundomanager.hxx
new file mode 100644
index 0000000000..98bf827fb1
--- /dev/null
+++ b/sfx2/source/inc/docundomanager.hxx
@@ -0,0 +1,159 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_DOCUNDOMANAGER_HXX
+#define INCLUDED_SFX2_SOURCE_INC_DOCUNDOMANAGER_HXX
+
+#include <sfx2/sfxbasemodel.hxx>
+
+#include <com/sun/star/document/XUndoManager.hpp>
+
+#include <cppuhelper/implbase.hxx>
+#include <vcl/svapp.hxx>
+
+#include <memory>
+
+/** base class for sub components of an SfxBaseModel, which share their ref count and lifetime with the SfxBaseModel
+*/
+class SfxModelSubComponent
+{
+public:
+ /** checks whether the instance is alive, i.e. properly initialized, and not yet disposed
+ */
+ void MethodEntryCheck()
+ {
+ m_rModel.MethodEntryCheck( true );
+ }
+
+protected:
+ SfxModelSubComponent( SfxBaseModel& i_model )
+ :m_rModel( i_model )
+ {
+ }
+ virtual ~SfxModelSubComponent();
+
+ void acquireModel() { m_rModel.acquire(); }
+ void releaseModel() { m_rModel.release(); }
+
+protected:
+ const SfxBaseModel& getBaseModel() const { return m_rModel; }
+ SfxBaseModel& getBaseModel() { return m_rModel; }
+
+private:
+ SfxBaseModel& m_rModel;
+};
+
+class SfxModelGuard
+{
+public:
+ enum AllowedModelState
+ {
+ // not yet initialized
+ E_INITIALIZING,
+ // fully alive, i.e. initialized, and not yet disposed
+ E_FULLY_ALIVE
+ };
+
+ SfxModelGuard( SfxBaseModel const & i_rModel, const AllowedModelState i_eState = E_FULLY_ALIVE )
+ : m_aGuard()
+ {
+ i_rModel.MethodEntryCheck( i_eState != E_INITIALIZING );
+ }
+ SfxModelGuard( SfxModelSubComponent& i_rSubComponent )
+ :m_aGuard()
+ {
+ i_rSubComponent.MethodEntryCheck();
+ }
+
+ void clear()
+ {
+ m_aGuard.clear();
+ }
+
+private:
+ SolarMutexClearableGuard m_aGuard;
+};
+
+namespace sfx2
+{
+ //= DocumentUndoManager
+
+ struct DocumentUndoManager_Impl;
+ class DocumentUndoManager final : public ::cppu::WeakImplHelper<css::document::XUndoManager>
+ ,public SfxModelSubComponent
+ {
+ friend struct DocumentUndoManager_Impl;
+
+ public:
+ DocumentUndoManager( SfxBaseModel& i_document );
+ virtual ~DocumentUndoManager() override;
+ DocumentUndoManager(const DocumentUndoManager&) = delete;
+ DocumentUndoManager& operator=(const DocumentUndoManager&) = delete;
+
+ void disposing();
+
+ // non-UNO API for our owner
+ /** determines whether we have an open Undo context. No mutex locking within this method, no disposal check - this
+ is the responsibility of the owner.
+ */
+ bool isInContext() const;
+
+ // XInterface
+ virtual void SAL_CALL acquire( ) noexcept override;
+ virtual void SAL_CALL release( ) noexcept override;
+
+ // XUndoManager
+ virtual void SAL_CALL enterUndoContext( const OUString& i_title ) override;
+ virtual void SAL_CALL enterHiddenUndoContext( ) override;
+ virtual void SAL_CALL leaveUndoContext( ) override;
+ virtual void SAL_CALL addUndoAction( const css::uno::Reference< css::document::XUndoAction >& i_action ) override;
+ virtual void SAL_CALL undo( ) override;
+ virtual void SAL_CALL redo( ) override;
+ virtual sal_Bool SAL_CALL isUndoPossible( ) override;
+ virtual sal_Bool SAL_CALL isRedoPossible( ) override;
+ virtual OUString SAL_CALL getCurrentUndoActionTitle( ) override;
+ virtual OUString SAL_CALL getCurrentRedoActionTitle( ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getAllUndoActionTitles( ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getAllRedoActionTitles( ) override;
+ virtual void SAL_CALL clear( ) override;
+ virtual void SAL_CALL clearRedo( ) override;
+ virtual void SAL_CALL reset( ) override;
+ virtual void SAL_CALL addUndoManagerListener( const css::uno::Reference< css::document::XUndoManagerListener >& i_listener ) override;
+ virtual void SAL_CALL removeUndoManagerListener( const css::uno::Reference< css::document::XUndoManagerListener >& i_listener ) override;
+
+ // XLockable, base of XUndoManager
+ virtual void SAL_CALL lock( ) override;
+ virtual void SAL_CALL unlock( ) override;
+ virtual sal_Bool SAL_CALL isLocked( ) override;
+
+ // XChild, base of XUndoManager
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getParent( ) override;
+ virtual void SAL_CALL setParent( const css::uno::Reference< css::uno::XInterface >& Parent ) override;
+
+ private:
+ std::unique_ptr< DocumentUndoManager_Impl > m_pImpl;
+ };
+
+
+} // namespace sfx2
+
+
+#endif // INCLUDED_SFX2_SOURCE_INC_DOCUNDOMANAGER_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/eventsupplier.hxx b/sfx2/source/inc/eventsupplier.hxx
new file mode 100644
index 0000000000..56aa8f95e7
--- /dev/null
+++ b/sfx2/source/inc/eventsupplier.hxx
@@ -0,0 +1,91 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_EVENTSUPPLIER_HXX
+#define INCLUDED_SFX2_SOURCE_INC_EVENTSUPPLIER_HXX
+
+#include <sal/types.h>
+
+#include <com/sun/star/document/DocumentEvent.hpp>
+#include <com/sun/star/container/XNameReplace.hpp>
+#include <com/sun/star/document/XDocumentEventListener.hpp>
+#include <com/sun/star/document/XDocumentEventBroadcaster.hpp>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/Type.hxx>
+#include <cppuhelper/implbase.hxx>
+#include <mutex>
+#include <vector>
+
+namespace comphelper
+{
+ class NamedValueCollection;
+}
+
+class SfxObjectShell;
+class SvxMacro;
+
+
+class SfxEvents_Impl final : public ::cppu::WeakImplHelper< css::container::XNameReplace, css::document::XDocumentEventListener >
+{
+ css::uno::Sequence< OUString > maEventNames;
+ std::vector< css::uno::Sequence < css::beans::PropertyValue > > maEventData;
+ css::uno::Reference< css::document::XDocumentEventBroadcaster > mxBroadcaster;
+ std::mutex maMutex;
+ SfxObjectShell *mpObjShell;
+
+public:
+ SfxEvents_Impl( SfxObjectShell* pShell,
+ css::uno::Reference< css::document::XDocumentEventBroadcaster > const & xBroadcaster );
+ virtual ~SfxEvents_Impl() override;
+
+ // --- XNameReplace ---
+ virtual void SAL_CALL replaceByName( const OUString & aName, const css::uno::Any & aElement ) override;
+
+ // --- XNameAccess ( parent of XNameReplace ) ---
+ virtual css::uno::Any SAL_CALL getByName( const OUString& aName ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override;
+ virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override;
+
+ // --- XElementAccess ( parent of XNameAccess ) ---
+ virtual css::uno::Type SAL_CALL getElementType() override;
+ virtual sal_Bool SAL_CALL hasElements() override;
+
+ // --- ::document::XDocumentEventListener ---
+ virtual void SAL_CALL documentEventOccured(const css::document::DocumentEvent& aEvent) override;
+
+ // --- ::lang::XEventListener ---
+ virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
+
+ // convert and normalize
+ static std::unique_ptr<SvxMacro> ConvertToMacro( const css::uno::Any& rElement, SfxObjectShell* pDoc );
+ static void NormalizeMacro( const css::uno::Any& rIn, css::uno::Any& rOut, SfxObjectShell* pDoc );
+ static void NormalizeMacro(
+ const ::comphelper::NamedValueCollection& i_eventDescriptor,
+ ::comphelper::NamedValueCollection& o_normalizedDescriptor,
+ SfxObjectShell* i_document );
+ static void Execute( css::uno::Sequence < css::beans::PropertyValue > const & aEventData, const css::document::DocumentEvent& aTrigger, SfxObjectShell* pDoc );
+
+private:
+ /// Check if script URL whitelist exists, and if so, if current script url is part of it
+ static bool isScriptURLAllowed(const OUString& aScriptURL);
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/fltoptint.hxx b/sfx2/source/inc/fltoptint.hxx
new file mode 100644
index 0000000000..ca9537bfe1
--- /dev/null
+++ b/sfx2/source/inc/fltoptint.hxx
@@ -0,0 +1,62 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_FLTOPTINT_HXX
+#define INCLUDED_SFX2_SOURCE_INC_FLTOPTINT_HXX
+
+#include <com/sun/star/document/XInteractionFilterOptions.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+#include <comphelper/interaction.hxx>
+#include <cppuhelper/implbase.hxx>
+#include <rtl/ref.hxx>
+
+class FilterOptionsContinuation final : public comphelper::OInteraction< css::document::XInteractionFilterOptions >
+{
+ css::uno::Sequence< css::beans::PropertyValue > rProperties;
+
+public:
+ virtual void SAL_CALL setFilterOptions( const css::uno::Sequence< css::beans::PropertyValue >& rProp ) override;
+ virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getFilterOptions( ) override;
+};
+
+class RequestFilterOptions final : public ::cppu::WeakImplHelper< css::task::XInteractionRequest >
+{
+ css::uno::Any m_aRequest;
+
+ rtl::Reference<comphelper::OInteractionAbort> m_xAbort;
+ rtl::Reference<FilterOptionsContinuation> m_xOptions;
+
+public:
+ RequestFilterOptions( css::uno::Reference< css::frame::XModel > const & rModel,
+ const css::uno::Sequence< css::beans::PropertyValue >& rProperties );
+
+ bool isAbort() const { return m_xAbort->wasSelected(); }
+
+ css::uno::Sequence< css::beans::PropertyValue > getFilterOptions()
+ {
+ return m_xOptions->getFilterOptions();
+ }
+
+ virtual css::uno::Any SAL_CALL getRequest() override;
+
+ virtual css::uno::Sequence< css::uno::Reference< css::task::XInteractionContinuation >
+ > SAL_CALL getContinuations() override;
+};
+
+#endif
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/helper.hxx b/sfx2/source/inc/helper.hxx
new file mode 100644
index 0000000000..b2787a3ad1
--- /dev/null
+++ b/sfx2/source/inc/helper.hxx
@@ -0,0 +1,41 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_HELPER_HXX
+#define INCLUDED_SFX2_SOURCE_INC_HELPER_HXX
+
+#include <rtl/ustring.hxx>
+
+#include <vector>
+
+// class SfxContentHelper ------------------------------------------------
+
+class SfxContentHelper
+{
+public:
+ static std::vector<OUString> GetResultSet(const OUString& rURL);
+ static std::vector<OUString> GetHelpTreeViewContents(const OUString& rURL);
+ static OUString GetActiveHelpString(const OUString& rURL);
+ static bool IsHelpErrorDocument(std::u16string_view rURL);
+
+ static sal_Int64 GetSize(std::u16string_view rContent);
+};
+
+#endif // INCLUDED_SFX2_SOURCE_INC_HELPER_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/helpids.h b/sfx2/source/inc/helpids.h
new file mode 100644
index 0000000000..1d5ff141c4
--- /dev/null
+++ b/sfx2/source/inc/helpids.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_HELPIDS_H
+#define INCLUDED_SFX2_SOURCE_INC_HELPIDS_H
+
+#include <rtl/ustring.hxx>
+
+inline constexpr OUString HID_TEMPLATE_FMT = u"SFX2_HID_TEMPLATE_FMT"_ustr;
+inline constexpr OUString HID_TEMPLATE_FILTER = u"SFX2_HID_TEMPLATE_FILTER"_ustr;
+inline constexpr OUString HID_TEMPLDLG_NEWBYEXAMPLE = u"SFX2_HID_TEMPLDLG_NEWBYEXAMPLE"_ustr;
+inline constexpr OUString HID_TEMPLDLG_UPDATEBYEXAMPLE = u"SFX2_HID_TEMPLDLG_UPDATEBYEXAMPLE"_ustr;
+inline constexpr OUString HID_TEMPLDLG_WATERCAN = u"SFX2_HID_TEMPLDLG_WATERCAN"_ustr;
+inline constexpr OUString HID_NAVIGATOR_WINDOW = u"SFX2_HID_NAVIGATOR_WINDOW"_ustr;
+inline constexpr OUString HID_TABDLG_RESET_BTN = u"SFX2_HID_TABDLG_RESET_BTN"_ustr;
+inline constexpr OUString HID_TABDLG_STANDARD_BTN = u"SFX2_HID_TABDLG_STANDARD_BTN"_ustr;
+inline constexpr OUString HID_TEMPLDLG_TOOLBOX_LEFT = u"SFX2_HID_TEMPLDLG_TOOLBOX_LEFT"_ustr;
+inline constexpr OUString HID_HELP_WINDOW = u"SFX2_HID_HELP_WINDOW"_ustr;
+inline constexpr OUString HID_HELP_TOOLBOX = u"SFX2_HID_HELP_TOOLBOX"_ustr;
+inline constexpr OUString HID_HELP_TOOLBOXITEM_INDEX = u"SFX2_HID_HELP_TOOLBOXITEM_INDEX"_ustr;
+inline constexpr OUString HID_HELP_TOOLBOXITEM_START = u"SFX2_HID_HELP_TOOLBOXITEM_START"_ustr;
+inline constexpr OUString HID_HELP_TOOLBOXITEM_BACKWARD = u"SFX2_HID_HELP_TOOLBOXITEM_BACKWARD"_ustr;
+inline constexpr OUString HID_HELP_TOOLBOXITEM_FORWARD = u"SFX2_HID_HELP_TOOLBOXITEM_FORWARD"_ustr;
+inline constexpr OUString HID_HELP_TOOLBOXITEM_PRINT = u"SFX2_HID_HELP_TOOLBOXITEM_PRINT"_ustr;
+inline constexpr OUString HID_HELP_TOOLBOXITEM_BOOKMARKS = u"SFX2_HID_HELP_TOOLBOXITEM_BOOKMARKS"_ustr;
+inline constexpr OUString HID_HELP_TOOLBOXITEM_SEARCHDIALOG = u"SFX2_HID_HELP_TOOLBOXITEM_SEARCHDIALOG"_ustr;
+
+inline constexpr OUString HID_TEMPLATEDLG_OPEN = u"SFX2_HID_TEMPLATEDLG_OPEN"_ustr;
+inline constexpr OUString HID_TEMPLATEDLG_EDIT = u"SFX2_HID_TEMPLATEDLG_EDIT"_ustr;
+inline constexpr OUString HID_TEMPLATEDLG_DEFAULT = u"SFX2_HID_TEMPLATEDLG_DEFAULT"_ustr;
+inline constexpr OUString HID_TEMPLATEDLG_RENAME = u"SFX2_HID_TEMPLATEDLG_RENAME"_ustr;
+inline constexpr OUString HID_TEMPLATEDLG_DELETE = u"SFX2_HID_TEMPLATEDLG_DELETE"_ustr;
+inline constexpr OUString HID_TEMPLATEDLG_MOVE = u"SFX2_HID_TEMPLATEDLG_MOVE"_ustr;
+inline constexpr OUString HID_TEMPLATEDLG_EXPORT = u"SFX2_HID_TEMPLATEDLG_EXPORT"_ustr;
+
+inline constexpr OUString HID_QUERY_LOAD_TEMPLATE = u"SFX2_HID_QUERY_LOAD_TEMPLATE"_ustr;
+
+inline constexpr OUString HID_SIDEBAR_WINDOW = u"SFX2_HID_SIDEBAR_WINDOW"_ustr;
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/hintpost.hxx b/sfx2/source/inc/hintpost.hxx
new file mode 100644
index 0000000000..ac37fde446
--- /dev/null
+++ b/sfx2/source/inc/hintpost.hxx
@@ -0,0 +1,59 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_HINTPOST_HXX
+#define INCLUDED_SFX2_HINTPOST_HXX
+
+#include <tools/link.hxx>
+#include <tools/ref.hxx>
+#include <functional>
+#include <memory>
+
+
+class SfxRequest;
+
+/** [Description]
+
+ This class allows sending unique events via VCL's
+ Application::PostUserEvent(). When the User-Event is dispatched,
+ the handler <Event()> is called, which calls the Link provided with
+ SetEventHdl().
+
+ The instances are held via Ref-Count until a possibly sent
+ event has arrived. If the target dies before delivery,
+ the connection must be severed with SetEventHdl(Link()).
+*/
+class SfxHintPoster final : public SvRefBase
+{
+private:
+ std::function<void (std::unique_ptr<SfxRequest>)> m_Link;
+
+ DECL_LINK( DoEvent_Impl, void*, void );
+
+ virtual ~SfxHintPoster() override;
+
+public:
+ SfxHintPoster(std::function<void (std::unique_ptr<SfxRequest>)> aLink);
+
+ void Post( std::unique_ptr<SfxRequest> pHint );
+ void SetEventHdl(const std::function<void (std::unique_ptr<SfxRequest>)>& rLink);
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/macroloader.hxx b/sfx2/source/inc/macroloader.hxx
new file mode 100644
index 0000000000..d0cd3fb146
--- /dev/null
+++ b/sfx2/source/inc/macroloader.hxx
@@ -0,0 +1,88 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_MACROLOADER_HXX
+#define INCLUDED_SFX2_SOURCE_INC_MACROLOADER_HXX
+
+#include <sal/config.h>
+
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/frame/DispatchDescriptor.hpp>
+#include <com/sun/star/frame/XDispatch.hpp>
+#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/frame/XNotifyingDispatch.hpp>
+#include <com/sun/star/frame/XDispatchResultListener.hpp>
+#include <com/sun/star/frame/XSynchronousDispatch.hpp>
+#include <com/sun/star/util/URL.hpp>
+
+#include <cppuhelper/implbase.hxx>
+#include <cppuhelper/weakref.hxx>
+#include <comphelper/errcode.hxx>
+
+class SfxObjectShell;
+
+class SfxMacroLoader final : public cppu::WeakImplHelper<
+ css::frame::XDispatchProvider,
+ css::frame::XNotifyingDispatch,
+ css::frame::XSynchronousDispatch,
+ css::lang::XServiceInfo>
+{
+ css::uno::WeakReference < css::frame::XFrame > m_xFrame;
+ SfxObjectShell* GetObjectShell_Impl();
+
+public:
+ /// @throws css::uno::Exception
+ /// @throws css::uno::RuntimeException
+ SfxMacroLoader(const css::uno::Sequence< css::uno::Any >& aArguments);
+
+ virtual OUString SAL_CALL getImplementationName() override;
+
+ virtual sal_Bool SAL_CALL supportsService(OUString const & ServiceName) override;
+
+ virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
+
+ /// @throws css::uno::RuntimeException
+ /// @throws css::ucb::ContentCreationException
+ static ErrCode loadMacro( const OUString& aURL, css::uno::Any& rRetval, SfxObjectShell* pDoc );
+
+ virtual css::uno::Reference < css::frame::XDispatch > SAL_CALL queryDispatch(
+ const css::util::URL& aURL, const OUString& sTargetFrameName,
+ sal_Int32 eSearchFlags ) override;
+
+ virtual css::uno::Sequence< css::uno::Reference < css::frame::XDispatch > > SAL_CALL queryDispatches(
+ const css::uno::Sequence < css::frame::DispatchDescriptor >& seqDescriptor ) override;
+
+ virtual void SAL_CALL dispatchWithNotification( const css::util::URL& aURL, const css::uno::Sequence< css::beans::PropertyValue >& lArgs, const css::uno::Reference< css::frame::XDispatchResultListener >& Listener ) override;
+
+ virtual void SAL_CALL dispatch( const css::util::URL& aURL, const css::uno::Sequence< css::beans::PropertyValue >& lArgs ) override;
+
+ virtual css::uno::Any SAL_CALL dispatchWithReturnValue( const css::util::URL& aURL, const css::uno::Sequence< css::beans::PropertyValue >& lArgs ) override;
+
+ virtual void SAL_CALL addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xControl, const css::util::URL& aURL ) override;
+
+ virtual void SAL_CALL removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xControl, const css::util::URL& aURL ) override;
+
+ static SfxObjectShell* GetObjectShell(const css::uno::Reference<css::frame::XFrame>& xFrame);
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/nochaos.hxx b/sfx2/source/inc/nochaos.hxx
new file mode 100644
index 0000000000..4baee35fca
--- /dev/null
+++ b/sfx2/source/inc/nochaos.hxx
@@ -0,0 +1,35 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_NOCHAOS_HXX
+#define INCLUDED_SFX2_SOURCE_INC_NOCHAOS_HXX
+
+#include <sal/types.h>
+
+class SfxItemPool;
+
+class NoChaos
+{
+public:
+ static SfxItemPool* GetItemPool();
+ static sal_uInt16 ReleaseItemPool();
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/objshimp.hxx b/sfx2/source/inc/objshimp.hxx
new file mode 100644
index 0000000000..88b715a124
--- /dev/null
+++ b/sfx2/source/inc/objshimp.hxx
@@ -0,0 +1,159 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_OBJSHIMP_HXX
+#define INCLUDED_SFX2_SOURCE_INC_OBJSHIMP_HXX
+
+#include <com/sun/star/uno/Sequence.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/ref.hxx>
+#include <tools/datetime.hxx>
+
+#include <sfx2/objsh.hxx>
+#include <sfx2/docmacromode.hxx>
+#include <sfx2/namedcolor.hxx>
+#include <bitset.hxx>
+#include <vcl/timer.hxx>
+
+#include "appbaslib.hxx"
+
+namespace svtools { class AsynchronLink; }
+
+class SfxViewFrame;
+
+class SfxBasicManagerHolder;
+
+class AutoReloadTimer_Impl final : public Timer
+{
+ OUString aUrl;
+ SfxObjectShell* pObjSh;
+
+public:
+ AutoReloadTimer_Impl( OUString aURL, sal_uInt32 nTime,
+ SfxObjectShell* pSh );
+ virtual void Invoke() override;
+};
+
+struct SfxObjectShell_Impl final : public ::sfx2::IMacroDocumentAccess
+{
+ std::unique_ptr<::comphelper::EmbeddedObjectContainer> mxObjectContainer;
+ SfxBasicManagerHolder aBasicManager;
+ SfxObjectShell& rDocShell;
+ css::uno::Reference< css::script::XLibraryContainer >
+ xBasicLibraries;
+ css::uno::Reference< css::script::XLibraryContainer >
+ xDialogLibraries;
+ ::sfx2::DocumentMacroMode
+ aMacroMode;
+ SfxProgress* pProgress;
+ OUString aTitle;
+ OUString aTempName;
+ DateTime nTime;
+ sal_uInt16 nVisualDocumentNumber;
+ SignatureState nDocumentSignatureState;
+ SignatureState nScriptingSignatureState;
+ bool bClosing:1, // sal_True while Close(), to prevent recurrences Notification
+ bIsSaving:1,
+ bIsNamedVisible:1,
+ bIsAbortingImport:1, // Import operation should be canceled.
+ bInPrepareClose : 1,
+ bPreparedForClose : 1,
+ bForbidReload : 1,
+ bBasicInitialized :1,
+ bIsPrintJobCancelable :1, // Stampit disable/enable cancel button for print jobs ... default = true = enable!
+ bOwnsStorage:1,
+ bInitialized:1,
+ bModelInitialized:1, // whether the related model is initialized
+ bPreserveVersions:1,
+ m_bMacroSignBroken:1, // whether the macro signature was explicitly broken
+ m_bNoBasicCapabilities:1,
+ m_bDocRecoverySupport:1,
+ bQueryLoadTemplate:1,
+ bLoadReadonly:1,
+ bUseUserData:1,
+ bUseThumbnailSave:1,
+ bSaveVersionOnClose:1,
+ m_bSharedXMLFlag:1, // whether the document should be edited in shared mode
+ m_bAllowShareControlFileClean:1, // whether the flag should be stored in xml file
+ m_bConfigOptionsChecked:1, // whether or not the user options are checked after the Options dialog is closed.
+ m_bMacroCallsSeenWhileLoading:1, // whether or not macro calls were seen when loading document.
+ m_bHadCheckedMacrosOnLoad:1; // if document contained macros (or calls) when loaded
+
+ IndexBitSet aBitSet;
+ ErrCodeMsg lErr;
+ SfxEventHintId nEventId; // If Open/Create as to be sent
+ // before Activate
+ std::unique_ptr<AutoReloadTimer_Impl> pReloadTimer;
+ SfxLoadedFlags nLoadedFlags;
+ SfxLoadedFlags nFlagsInProgress;
+ bool bModalMode;
+ bool bRunningMacro;
+ bool bReadOnlyUI;
+ tools::SvRef<SvKeyValueIterator> xHeaderAttributes;
+ ::rtl::Reference< SfxBaseModel >
+ pBaseModel;
+ sal_uInt16 nStyleFilter;
+
+ bool m_bEnableSetModified;
+ bool m_bIsModified;
+
+ tools::Rectangle m_aVisArea;
+ MapUnit m_nMapUnit;
+
+ bool m_bCreateTempStor;
+ css::uno::Reference< css::embed::XStorage > m_xDocStorage;
+
+ bool m_bIsInit;
+
+ OUString m_aSharedFileURL;
+
+ bool m_bIncomplEncrWarnShown;
+
+ // TODO/LATER: m_aModifyPasswordInfo should completely replace m_nModifyPasswordHash in future
+ sal_uInt32 m_nModifyPasswordHash;
+ css::uno::Sequence< css::beans::PropertyValue > m_aModifyPasswordInfo;
+ bool m_bModifyPasswordEntered;
+ /// If true, then this is not a real save, just the signatures change.
+ bool m_bSavingForSigning;
+ bool m_bAllowModifiedBackAfterSigning;
+
+ /// Holds Infobars until View is fully loaded
+ std::vector<InfobarData> m_aPendingInfobars;
+
+ // Recent colors used by toolbar buttons
+ std::unordered_map<sal_uInt16, NamedColor> m_aRecentColors;
+
+ SfxObjectShell_Impl( SfxObjectShell& _rDocShell );
+ virtual ~SfxObjectShell_Impl();
+
+ // IMacroDocumentAccess overridables
+ virtual sal_Int16 getCurrentMacroExecMode() const override;
+ virtual void setCurrentMacroExecMode( sal_uInt16 nMacroMode ) override;
+ virtual OUString getDocumentLocation() const override;
+ virtual bool documentStorageHasMacros() const override;
+ virtual bool macroCallsSeenWhileLoading() const override;
+ virtual css::uno::Reference< css::document::XEmbeddedScripts > getEmbeddedDocumentScripts() const override;
+ virtual SignatureState getScriptingSignatureState() override;
+
+ virtual bool hasTrustedScriptingSignature(
+ const css::uno::Reference<css::task::XInteractionHandler>& _rxInteraction) override;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/openflag.hxx b/sfx2/source/inc/openflag.hxx
new file mode 100644
index 0000000000..11421d8cfc
--- /dev/null
+++ b/sfx2/source/inc/openflag.hxx
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_OPENFLAG_HXX
+#define INCLUDED_SFX2_SOURCE_INC_OPENFLAG_HXX
+
+// Open file for editing, then only the third option (reading a copy) works
+#define SFX_STREAM_READWRITE (StreamMode::READWRITE | StreamMode::SHARE_DENYWRITE)
+// I work on the original, not a copy
+// -> file then can not be opened for editing
+#define SFX_STREAM_READONLY (StreamMode::READ | StreamMode::SHARE_DENYWRITE) // + !bDirect
+// Someone else is editing the file, a copy it created
+// -> the file can then be opened for editing
+#define SFX_STREAM_READONLY_MAKECOPY (StreamMode::READ | StreamMode::SHARE_DENYNONE)
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/openuriexternally.hxx b/sfx2/source/inc/openuriexternally.hxx
new file mode 100644
index 0000000000..cf78d1b713
--- /dev/null
+++ b/sfx2/source/inc/openuriexternally.hxx
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_OPENURIEXTERNALLY_HXX
+#define INCLUDED_SFX2_SOURCE_INC_OPENURIEXTERNALLY_HXX
+
+#include <sal/config.h>
+
+#include <rtl/ustring.hxx>
+
+namespace weld
+{
+class Widget;
+}
+
+namespace sfx2
+{
+/** Open a URI via com.sun.star.system.SystemShellExecute
+
+ Handles XSystemShellExecute.execute's IllegalArgumentException (throwing a
+ RuntimeException if it is unexpected, i.e., not caused by the given sURI not
+ being an absolute URI reference).
+
+ Handles XSystemShellExecute.execute's SystemShellExecuteException unless the
+ given bHandleSystemShellExecuteException is false (in which case the
+ exception is re-thrown).
+*/
+void openUriExternally(const OUString& sURI, bool bHandleSystemShellExecuteException,
+ weld::Widget* pDialogParent);
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/openurlhint.hxx b/sfx2/source/inc/openurlhint.hxx
new file mode 100644
index 0000000000..abe41cd698
--- /dev/null
+++ b/sfx2/source/inc/openurlhint.hxx
@@ -0,0 +1,38 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SFX2_STRINGHINT_HXX
+#define INCLUDED_SFX2_STRINGHINT_HXX
+
+#include <svl/hint.hxx>
+#include <rtl/ustring.hxx>
+
+class SfxOpenUrlHint final : public SfxHint
+{
+ OUString msDocumentURL;
+
+public:
+ SfxOpenUrlHint(OUString sDocumentURL);
+ const OUString& GetDocumentURL() const;
+ virtual ~SfxOpenUrlHint() override;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/partwnd.hxx b/sfx2/source/inc/partwnd.hxx
new file mode 100644
index 0000000000..1d51329f68
--- /dev/null
+++ b/sfx2/source/inc/partwnd.hxx
@@ -0,0 +1,63 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_PARTWND_HXX
+#define INCLUDED_SFX2_SOURCE_INC_PARTWND_HXX
+
+#include <sfx2/childwin.hxx>
+#include <sfx2/dockwin.hxx>
+
+
+namespace com::sun::star::frame { class XFrame; }
+
+// forward ---------------------------------------------------------------
+
+// class SfxPartChildWnd_Impl -----------------------------------
+
+class SfxPartChildWnd_Impl final : public SfxChildWindow
+{
+public:
+ SfxPartChildWnd_Impl( vcl::Window* pParent, sal_uInt16 nId,
+ SfxBindings* pBindings,
+ SfxChildWinInfo* pInfo );
+
+ SFX_DECL_CHILDWINDOW(SfxPartChildWnd_Impl);
+ virtual ~SfxPartChildWnd_Impl() override;
+
+ virtual bool QueryClose() override;
+};
+
+// class SfxExplorerDockWnd_Impl -----------------------------------------
+
+class SfxPartDockWnd_Impl final : public SfxDockingWindow
+{
+ virtual bool EventNotify( NotifyEvent& rNEvt ) override;
+
+public:
+ SfxPartDockWnd_Impl( SfxBindings* pBindings,
+ SfxChildWindow* pChildWin,
+ vcl::Window* pParent,
+ WinBits nBits );
+
+ bool QueryClose();
+ virtual void FillInfo(SfxChildWinInfo&) const override;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/preview.hxx b/sfx2/source/inc/preview.hxx
new file mode 100644
index 0000000000..b1a5621ab8
--- /dev/null
+++ b/sfx2/source/inc/preview.hxx
@@ -0,0 +1,41 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_PREVIEW_HXX
+#define INCLUDED_SFX2_SOURCE_INC_PREVIEW_HXX
+
+#include <vcl/customweld.hxx>
+
+class SfxObjectShell;
+class GDIMetaFile;
+
+class SfxPreviewWin_Impl final : public weld::CustomWidgetController
+{
+private:
+ virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&) override;
+ std::shared_ptr<GDIMetaFile> xMetaFile;
+
+public:
+ SfxPreviewWin_Impl();
+ void SetObjectShell(SfxObjectShell const* pObj);
+ static void ImpPaint(vcl::RenderContext& rRenderContext, GDIMetaFile* pFile);
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/recfloat.hxx b/sfx2/source/inc/recfloat.hxx
new file mode 100644
index 0000000000..e5720e155c
--- /dev/null
+++ b/sfx2/source/inc/recfloat.hxx
@@ -0,0 +1,61 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_RECFLOAT_HXX
+#define INCLUDED_SFX2_SOURCE_INC_RECFLOAT_HXX
+
+#include <sfx2/basedlgs.hxx>
+#include <sfx2/childwin.hxx>
+#include <sfx2/weldutils.hxx>
+
+class SfxRecordingFloatWrapper_Impl final : public SfxChildWindow
+{
+ SfxBindings* pBindings;
+public:
+ SfxRecordingFloatWrapper_Impl( vcl::Window* pParent ,
+ sal_uInt16 nId ,
+ SfxBindings* pBindings ,
+ SfxChildWinInfo const * pInfo );
+ virtual ~SfxRecordingFloatWrapper_Impl() override;
+
+ SFX_DECL_CHILDWINDOW(SfxRecordingFloatWrapper_Impl);
+ virtual bool QueryClose() override;
+};
+
+class SfxRecordingFloat_Impl final : public SfxModelessDialogController
+{
+ std::unique_ptr<weld::Toolbar> m_xToolbar;
+ std::unique_ptr<ToolbarUnoDispatcher> m_xDispatcher;
+ ImplSVEvent *mnPostUserEventId;
+ bool m_bFirstActivate;
+
+ DECL_LINK(PresentParentFrame, void*, void);
+
+public:
+ SfxRecordingFloat_Impl(SfxBindings* pBindings,
+ SfxChildWindow* pChildWin,
+ weld::Window* pParent);
+ virtual ~SfxRecordingFloat_Impl() override;
+ virtual void FillInfo(SfxChildWinInfo& rInfo) const override;
+ virtual void Activate() override;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/sfxpicklist.hxx b/sfx2/source/inc/sfxpicklist.hxx
new file mode 100644
index 0000000000..b8af2310d4
--- /dev/null
+++ b/sfx2/source/inc/sfxpicklist.hxx
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_SFXPICKLIST_HXX
+#define INCLUDED_SFX2_SOURCE_INC_SFXPICKLIST_HXX
+
+#include <memory>
+
+#define PICKLIST_MAXSIZE 100
+
+class SfxApplication;
+class SfxPickListImpl;
+
+class SfxPickList
+{
+private:
+ std::unique_ptr<SfxPickListImpl> mxImpl;
+
+public:
+ SfxPickList(SfxApplication& rApp);
+ ~SfxPickList();
+};
+
+#endif // INCLUDED_SFX2_SOURCE_INC_SFXPICKLIST_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/sfxtypes.hxx b/sfx2/source/inc/sfxtypes.hxx
new file mode 100644
index 0000000000..acc17ff9a3
--- /dev/null
+++ b/sfx2/source/inc/sfxtypes.hxx
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_SFXTYPES_HXX
+#define INCLUDED_SFX2_SOURCE_INC_SFXTYPES_HXX
+
+#include <sal/config.h>
+#include <sal/log.hxx>
+
+#if defined(DBG_UTIL)
+
+class SfxStack
+{
+ static unsigned nLevel;
+
+public:
+ SfxStack(const char* pName)
+ {
+ ++nLevel;
+ SAL_INFO("sfx.control", "STACK: enter " << nLevel << " " << pName);
+ }
+ ~SfxStack()
+ {
+ SAL_INFO("sfx.control", "STACK: leave " << nLevel);
+ --nLevel;
+ }
+};
+
+#define SFX_STACK(s) SfxStack aSfxStack_(#s)
+#else
+#define SFX_STACK(s)
+#endif
+
+#endif // INCLUDED_SFX2_SOURCE_INC_SFXTYPES_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/sfxurlrelocator.hxx b/sfx2/source/inc/sfxurlrelocator.hxx
new file mode 100644
index 0000000000..e93e79a182
--- /dev/null
+++ b/sfx2/source/inc/sfxurlrelocator.hxx
@@ -0,0 +1,52 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_SFXURLRELOCATOR_HXX
+#define INCLUDED_SFX2_SOURCE_INC_SFXURLRELOCATOR_HXX
+
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/util/XOfficeInstallationDirectories.hpp>
+#include <com/sun/star/util/XMacroExpander.hpp>
+
+#include <rtl/ustring.hxx>
+#include <mutex>
+
+class SfxURLRelocator_Impl
+{
+ std::mutex maMutex;
+ css::uno::Reference< css::uno::XComponentContext > mxContext;
+ css::uno::Reference< css::util::XOfficeInstallationDirectories > mxOfficeInstDirs;
+ css::uno::Reference< css::util::XMacroExpander > mxMacroExpander;
+
+public:
+ static bool propertyCanContainOfficeDir( std::u16string_view rPropName );
+ void initOfficeInstDirs();
+ void makeRelocatableURL( OUString & rURL );
+ void makeAbsoluteURL( OUString & rURL );
+
+ SfxURLRelocator_Impl( css::uno::Reference< css::uno::XComponentContext > xContext );
+ ~SfxURLRelocator_Impl();
+
+private:
+ void implExpandURL( OUString& io_url );
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/slotserv.hxx b/sfx2/source/inc/slotserv.hxx
new file mode 100644
index 0000000000..e5bd07dce6
--- /dev/null
+++ b/sfx2/source/inc/slotserv.hxx
@@ -0,0 +1,59 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_SLOTSERV_HXX
+#define INCLUDED_SFX2_SOURCE_INC_SLOTSERV_HXX
+
+#include <sal/types.h>
+
+class SfxSlot;
+
+class SfxSlotServer
+{
+private:
+ const SfxSlot* _pSlot;
+ sal_uInt16 _nShellLevel;
+
+public:
+ SfxSlotServer();
+
+ sal_uInt16 GetShellLevel() const;
+ void SetShellLevel(sal_uInt16 nLevel) { _nShellLevel = nLevel; }
+ void SetSlot(const SfxSlot* pSlot) { _pSlot = pSlot; }
+ const SfxSlot* GetSlot() const;
+};
+
+inline SfxSlotServer::SfxSlotServer():
+ _pSlot(nullptr),
+ _nShellLevel(0)
+{
+}
+
+inline sal_uInt16 SfxSlotServer::GetShellLevel() const
+{
+ return _nShellLevel;
+}
+
+inline const SfxSlot* SfxSlotServer::GetSlot() const
+{
+ return _pSlot;
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/splitwin.hxx b/sfx2/source/inc/splitwin.hxx
new file mode 100644
index 0000000000..4b65830b96
--- /dev/null
+++ b/sfx2/source/inc/splitwin.hxx
@@ -0,0 +1,125 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_SPLITWIN_HXX
+#define INCLUDED_SFX2_SOURCE_INC_SPLITWIN_HXX
+
+#include <vcl/splitwin.hxx>
+#include <sfx2/childwin.hxx>
+#include <sfx2/dockwin.hxx>
+
+#include <vector>
+#include <memory>
+
+class SfxWorkWindow;
+class SfxDockingWindow;
+class SfxEmptySplitWin_Impl;
+
+struct SfxDock_Impl
+{
+ sal_uInt16 nType;
+ VclPtr<SfxDockingWindow> pWin; // SplitWindow has this window
+ bool bNewLine;
+ bool bHide; // SplitWindow had this window
+};
+
+class SfxSplitWindow final : public SplitWindow
+{
+friend class SfxEmptySplitWin_Impl;
+
+private:
+ SfxChildAlignment eAlign;
+ SfxWorkWindow* pWorkWin;
+ std::vector<std::unique_ptr<SfxDock_Impl> >
+ maDockArr;
+ bool bPinned;
+ VclPtr<SfxEmptySplitWin_Impl> pEmptyWin;
+ VclPtr<SfxDockingWindow> pActive;
+
+ void InsertWindow_Impl( SfxDock_Impl const * pDockWin,
+ const Size& rSize,
+ sal_uInt16 nLine,
+ sal_uInt16 nPos,
+ bool bNewLine );
+
+ DECL_LINK( TimerHdl, Timer*, void );
+ bool CursorIsOverRect() const;
+ void SetPinned_Impl( bool );
+ void SetFadeIn_Impl( bool );
+ void SaveConfig_Impl();
+ void FadeOut_Impl();
+
+ virtual void StartSplit() override;
+ virtual void SplitResize() override;
+ virtual void Split() override;
+ virtual void MouseButtonDown ( const MouseEvent& ) override;
+
+public:
+ SfxSplitWindow( vcl::Window* pParent, SfxChildAlignment eAl,
+ SfxWorkWindow *pW, bool bWithButtons );
+
+ virtual ~SfxSplitWindow() override;
+ virtual void dispose() override;
+
+ void ReleaseWindow_Impl(SfxDockingWindow const *pWin, bool bSaveConfig=true);
+
+ void InsertWindow( SfxDockingWindow* pDockWin,
+ const Size& rSize);
+
+ void InsertWindow( SfxDockingWindow* pDockWin,
+ const Size& rSize,
+ sal_uInt16 nLine,
+ sal_uInt16 nPos,
+ bool bNewLine );
+
+ void MoveWindow( SfxDockingWindow* pDockWin,
+ const Size& rSize,
+ sal_uInt16 nLine,
+ sal_uInt16 nPos,
+ bool bNewLine );
+
+ void RemoveWindow( SfxDockingWindow const * pDockWin, bool bHide=true);
+
+ void Lock( bool bLock=true )
+ {
+ SetUpdateMode( !bLock );
+ }
+
+ bool GetWindowPos( const SfxDockingWindow* pWindow,
+ sal_uInt16& rLine, sal_uInt16& rPos ) const;
+ bool GetWindowPos( const Point& rTestPos,
+ sal_uInt16& rLine, sal_uInt16& rPos ) const;
+ sal_uInt16 GetLineCount() const;
+ tools::Long GetLineSize( sal_uInt16 ) const;
+ sal_uInt16 GetWindowCount(sal_uInt16 nLine) const;
+ sal_uInt16 GetWindowCount() const;
+
+ bool IsPinned() const { return bPinned; }
+ bool IsFadeIn() const;
+ bool IsAutoHide( bool bSelf ) const;
+ SplitWindow* GetSplitWindow();
+
+ virtual void FadeOut() override;
+ virtual void FadeIn() override;
+ void SetActiveWindow_Impl( SfxDockingWindow* pWin );
+};
+
+#endif // INCLUDED_SFX2_SOURCE_INC_SPLITWIN_HXX
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/statcach.hxx b/sfx2/source/inc/statcach.hxx
new file mode 100644
index 0000000000..388e184f66
--- /dev/null
+++ b/sfx2/source/inc/statcach.hxx
@@ -0,0 +1,154 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_STATCACH_HXX
+#define INCLUDED_SFX2_SOURCE_INC_STATCACH_HXX
+
+#include <com/sun/star/frame/XDispatch.hpp>
+#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/frame/XStatusListener.hpp>
+#include <com/sun/star/frame/FeatureStateEvent.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <tools/debug.hxx>
+#include <rtl/ref.hxx>
+
+#include <sfx2/bindings.hxx>
+
+#include "slotserv.hxx"
+
+class SfxControllerItem;
+class SfxDispatcher;
+class BindDispatch_Impl final : public ::cppu::WeakImplHelper< css::frame::XStatusListener >
+{
+friend class SfxStateCache;
+ css::uno::Reference< css::frame::XDispatch > xDisp;
+ css::util::URL aURL;
+ css::frame::FeatureStateEvent aStatus;
+ SfxStateCache* pCache;
+ const SfxSlot* pSlot;
+
+public:
+ BindDispatch_Impl(
+ css::uno::Reference< css::frame::XDispatch > xDisp,
+ css::util::URL aURL,
+ SfxStateCache* pStateCache, const SfxSlot* pSlot );
+
+ virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& Event ) override;
+ virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
+
+ const css::frame::FeatureStateEvent& GetStatus() const { return aStatus;}
+ sal_Int16 Dispatch( const css::uno::Sequence < css::beans::PropertyValue >& aProps, bool bForceSynchron );
+ void Release();
+};
+
+class SfxStateCache
+{
+friend class BindDispatch_Impl;
+ rtl::Reference<BindDispatch_Impl>
+ mxDispatch;
+ sal_uInt16 nId; // Slot-Id
+ SfxControllerItem* pInternalController;
+ css::uno::Reference < css::frame::XDispatch > xMyDispatch;
+ SfxControllerItem* pController; // Pointer to first bound Controller (interlinked with each other)
+ SfxSlotServer aSlotServ; // SlotServer, SlotPtr = 0 -> not on Stack
+ SfxPoolItem* pLastItem; // Last sent Item, never -1
+ SfxItemState eLastState; // Last sent State
+ bool bCtrlDirty:1; // Update Controller?
+ bool bSlotDirty:1; // Present Function, must be updated
+ bool bItemVisible:1; // item visibility
+ bool bItemDirty; // Validity of pLastItem
+
+private:
+ SfxStateCache( const SfxStateCache& rOrig ) = delete;
+ void SetState_Impl( SfxItemState, const SfxPoolItem*, bool bMaybeDirty );
+
+public:
+ SfxStateCache( sal_uInt16 nFuncId );
+ ~SfxStateCache();
+
+ sal_uInt16 GetId() const;
+
+ const SfxSlotServer* GetSlotServer( SfxDispatcher &rDispat, const css::uno::Reference< css::frame::XDispatchProvider > & xProv );
+ const SfxSlotServer* GetSlotServer( SfxDispatcher &rDispat )
+ { return GetSlotServer( rDispat, css::uno::Reference< css::frame::XDispatchProvider > () ); }
+ css::uno::Reference< css::frame::XDispatch > GetDispatch() const;
+ sal_Int16 Dispatch( const SfxItemSet* pSet, bool bForceSynchron );
+ bool IsControllerDirty() const
+ { return bCtrlDirty; }
+ void ClearCache();
+
+ void SetState( SfxItemState, const SfxPoolItem*, bool bMaybeDirty=false );
+ void SetCachedState(bool bAlways);
+ void Invalidate( bool bWithSlot );
+ void SetVisibleState( bool bShow );
+ void GetState( boost::property_tree::ptree& );
+
+ SfxControllerItem* ChangeItemLink( SfxControllerItem* pNewBinding );
+ SfxControllerItem* GetItemLink() const;
+ void SetInternalController( SfxControllerItem* pCtrl )
+ { DBG_ASSERT( !pInternalController, "Only one internal controller allowed!" ); pInternalController = pCtrl; }
+ void ReleaseInternalController() { pInternalController = nullptr; }
+ SfxControllerItem* GetInternalController() const { return pInternalController; }
+ const css::uno::Reference < css::frame::XDispatch >&
+ GetInternalDispatch() const
+ { return xMyDispatch; }
+ void SetInternalDispatch( const css::uno::Reference < css::frame::XDispatch >& rDisp )
+ { xMyDispatch = rDisp; }
+};
+
+
+// clears Cached-Item
+
+inline void SfxStateCache::ClearCache()
+{
+ bItemDirty = true;
+}
+
+
+// registers an item representing this function
+
+inline SfxControllerItem* SfxStateCache::ChangeItemLink( SfxControllerItem* pNewBinding )
+{
+ SfxControllerItem* pOldBinding = pController;
+ pController = pNewBinding;
+ if ( pNewBinding )
+ {
+ bCtrlDirty = true;
+ bItemDirty = true;
+ }
+ return pOldBinding;
+}
+
+
+// returns the func binding which becomes called on spreading states
+
+inline SfxControllerItem* SfxStateCache::GetItemLink() const
+{
+ return pController;
+}
+
+
+inline sal_uInt16 SfxStateCache::GetId() const
+{
+ return nId;
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/templatesearchviewitem.hxx b/sfx2/source/inc/templatesearchviewitem.hxx
new file mode 100644
index 0000000000..e9ba57f1cd
--- /dev/null
+++ b/sfx2/source/inc/templatesearchviewitem.hxx
@@ -0,0 +1,28 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_TEMPLATESEARCHVIEWITEM_HXX
+#define INCLUDED_SFX2_SOURCE_INC_TEMPLATESEARCHVIEWITEM_HXX
+
+#include <templateviewitem.hxx>
+
+struct TemplateSearchViewItem final : public TemplateViewItem
+{
+ TemplateSearchViewItem(ThumbnailView& rView, sal_uInt16 nId)
+ : TemplateViewItem(rView, nId)
+ , mnAssocId(0)
+ {
+ }
+
+ sal_uInt16 mnAssocId; //Associated item id to the TemplateViews
+};
+
+#endif // INCLUDED_SFX2_SOURCE_INC_TEMPLATESEARCHVIEWITEM_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/templdgi.hxx b/sfx2/source/inc/templdgi.hxx
new file mode 100644
index 0000000000..59c21f659b
--- /dev/null
+++ b/sfx2/source/inc/templdgi.hxx
@@ -0,0 +1,242 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_TEMPLDGI_HXX
+#define INCLUDED_SFX2_SOURCE_INC_TEMPLDGI_HXX
+
+#include <sal/config.h>
+
+#include <memory>
+
+#include <vcl/transfer.hxx>
+#include <vcl/weld.hxx>
+#include <svl/eitem.hxx>
+
+#include <svl/style.hxx>
+
+#include <sfx2/objsh.hxx>
+#include <sfx2/styfitem.hxx>
+#include <sfx2/templdlg.hxx>
+
+#include "StyleList.hxx"
+
+class SfxTemplateControllerItem;
+class SfxStyleFamilyItem;
+class SfxTemplateItem;
+class SfxBindings;
+class SfxStyleSheetBase;
+class SfxStyleSheetBasePool;
+class StyleTreeListBox_Impl;
+class SfxTemplateDialog_Impl;
+class SfxCommonTemplateDialog_Impl;
+namespace com::sun::star::frame {
+ class XModuleManager2;
+}
+
+class SfxCommonTemplateDialog_Impl
+{
+private:
+ class DeletionWatcher;
+ friend class DeletionWatcher;
+
+ DeletionWatcher* impl_setDeletionWatcher(DeletionWatcher* pNewWatcher);
+
+protected:
+#define MAX_FAMILIES 6
+#define COUNT_BOUND_FUNC 14
+
+ friend class SfxTemplateControllerItem;
+
+ SfxBindings* pBindings;
+
+ css::uno::Reference<css::frame::XModuleManager2> xModuleManager;
+ DeletionWatcher* m_pDeletionWatcher;
+
+ StyleList m_aStyleList;
+ std::unique_ptr<weld::CheckButton> mxPreviewCheckbox;
+ std::unique_ptr<weld::CheckButton> mxHighlightCheckbox;
+ std::unique_ptr<weld::ComboBox> mxFilterLb;
+
+ sal_uInt16 nActFamily; // Id in the ToolBox = Position - 1
+ sal_uInt16 nActFilter; // FilterIdx
+
+ bool bIsWater :1;
+ bool bUpdate :1;
+ bool bWaterDisabled :1;
+ bool bNewByExampleDisabled :1;
+ bool bUpdateByExampleDisabled :1;
+ bool m_bWantHierarchical :1;
+
+ Link<void*, size_t> m_aStyleListReadResource;
+ Link<void*, void> m_aStyleListClear;
+ Link<void*, void> m_aStyleListCleanup;
+ Link<const ExecuteDropEvent&, sal_Int8> m_aStyleListExecuteDrop;
+ Link<void*, void> m_aStyleListNewMenu;
+ Link<void*, bool> m_aStyleListWaterCan;
+ Link<void*, bool> m_aStyleListHasSelectedStyle;
+ Link<void*, void> m_aStyleListUpdateFamily;
+ Link<void*, void> m_aStyleListUpdateStyleDependents;
+ Link<bool, void> m_aStyleListEnableTreeDrag;
+ Link<void*, void> m_aStyleListEnableDelete;
+ Link<const SfxBoolItem*, void> m_aStyleListSetWaterCanState;
+ Link<sal_uInt16, void> m_aStyleListSetFamily;
+
+ DECL_LINK(FilterSelectHdl, weld::ComboBox&, void );
+ DECL_LINK(PreviewHdl, weld::Toggleable&, void);
+ DECL_LINK(HighlightHdl, weld::Toggleable&, void);
+
+ virtual void InsertFamilyItem(sal_uInt16 nId, const SfxStyleFamilyItem& rItem) = 0;
+ virtual void EnableFamilyItem(sal_uInt16 nId, bool bEnabled) = 0;
+ virtual void ClearFamilyList() = 0;
+ virtual void ReplaceUpdateButtonByMenu();
+
+ void Initialize();
+ void EnableHierarchical(bool, StyleList& rStyleList);
+
+ void FilterSelect( sal_uInt16 nFilterIdx );
+ void SetFamilyState( sal_uInt16 nSlotId, const SfxTemplateItem* );
+ void SetWaterCanState( const SfxBoolItem* pItem );
+ bool IsSafeForWaterCan() const;
+
+ void SetFamily(SfxStyleFamily nFamily);
+ void ActionSelect(const OUString& rId, StyleList& rStyleList);
+
+ void SaveFactoryStyleFilter(SfxObjectShell const* i_pObjSh, sal_Int32 i_nFilter);
+
+ DECL_LINK(ReadResource_Hdl, StyleList&, void);
+ DECL_LINK(ClearResource_Hdl, void*, void);
+ DECL_LINK(SaveSelection_Hdl, StyleList&, SfxObjectShell*);
+ DECL_LINK(LoadFactoryStyleFilter_Hdl, SfxObjectShell const*, sal_Int32);
+ DECL_LINK(UpdateStyles_Hdl, StyleFlags, void);
+ DECL_LINK(UpdateFamily_Hdl, StyleList&, void);
+ DECL_LINK(UpdateStyleDependents_Hdl, void*, void);
+
+public:
+ // Used in StyleList::NewMenuExecuteAction, StyleList::UpdateStyleDependents, StyleList::NewHdl, EditHdl...
+ // It comes into action whenever an existing style is selected for use, or a new style is created etc..
+ bool Execute_Impl(sal_uInt16 nId, const OUString& rStr, const OUString& rRefStr,
+ sal_uInt16 nFamily, StyleList& rStyleList, SfxStyleSearchBits nMask = SfxStyleSearchBits::Auto,
+ sal_uInt16* pIdx = nullptr, const sal_uInt16* pModifier = nullptr);
+
+ // This function handles drop of content into the treeview to create a new style
+ sal_Int8 ExecuteDrop(const ExecuteDropEvent& rEvt);
+ // This function is used when a newstyle is created
+ DECL_LINK(OnAsyncExecuteDrop, void*, void);
+
+ // Used in StyleList::UpdateStyles, StyleList::Update
+ // Whenever a new family(Eg. Character, List etc.) is selected it comes into action
+ void FamilySelect(sal_uInt16 nId, StyleList& rStyleList, bool bRefresh = false);
+
+ // Constructor
+ SfxCommonTemplateDialog_Impl(SfxBindings* pB, weld::Container*, weld::Builder* pBuilder);
+
+ // Destructor
+ virtual ~SfxCommonTemplateDialog_Impl();
+
+ // Used in StyleList::SelectStyle, StyleList::Notify, IMPL_LINK(PopupFlatMenuHdl)
+ // These functions are used when a style is edited, deleted, created etc..
+ virtual void EnableEdit(bool b, StyleList* rStyleList);
+ void EnableDel(bool b, const StyleList* rStyleList);
+ void EnableNew(bool b, const StyleList* rStyleList);
+ void EnableHide(bool b, const StyleList* rStyleList);
+ void EnableShow(bool b, const StyleList* rStyleList);
+
+ // Used in TreeDrag
+ void EnableTreeDrag(bool b);
+ // It comes into action when a style is created or updated or newmenu is created
+ void EnableExample_Impl(sal_uInt16 nId, bool bEnable);
+
+ // This comes into action when a family is selected or a style is applied for use
+ virtual void CheckItem(const OUString& /*rMesId*/, bool /*bCheck*/ = true) {}
+ // This is used for watercan or when newmenu or watercan is enabled or updated
+ virtual void EnableItem(const OUString& /*rMesId*/, bool /*bCheck*/ = true) {}
+ // This is used for watercan
+ virtual bool IsCheckedItem(const OUString& /*rMesId*/) { return true; }
+
+ // This is used when a style is selected
+ void SelectStyle(const OUString& rStyle, bool bIsCallback, StyleList& rStyleList);
+
+ //When a new document is created, it comes into action
+ void IsUpdate(StyleList&);
+
+ // This function return the value of bUpdate in Stylelist
+ // This value is used in StyleList's Notify
+ bool GetNotifyUpdate() const { return bUpdate; }
+ // This function sets the value of bUpdate in Dialog
+ // This function is used in StyleList's Notify to update the value of bUpdate when required
+ void SetNotifyupdate(bool b) { bUpdate = b; }
+
+ void connect_stylelist_read_resource(const Link<void*, size_t>& rLink) { m_aStyleListReadResource = rLink; }
+ void connect_stylelist_clear(const Link<void*, void>& rLink) { m_aStyleListClear = rLink; }
+ void connect_stylelist_cleanup(const Link<void*, void>& rLink) { m_aStyleListCleanup = rLink; }
+ void connect_stylelist_execute_drop(const Link<const ExecuteDropEvent&, sal_Int8>& rLink);
+ void connect_stylelist_execute_new_menu(const Link<void*, void>& rLink) { m_aStyleListNewMenu = rLink; }
+ void connect_stylelist_for_watercan(const Link<void*, bool>& rLink) { m_aStyleListWaterCan = rLink; }
+ void connect_stylelist_has_selected_style(const Link<void*, bool>& rLink);
+ void connect_stylelist_update_style_dependents(const Link<void*, void>& rLink);
+ void connect_stylelist_enable_tree_drag(const Link<bool, void> rLink);
+ void connect_stylelist_enable_delete(const Link<void*, void> rLink);
+ void connect_stylelist_set_water_can_state(const Link<const SfxBoolItem*, void> rLink);
+ void connect_set_family(const Link<sal_uInt16, void> rLink) { m_aStyleListSetFamily = rLink; }
+};
+
+class ToolbarDropTarget;
+class DropTargetHelper;
+
+class SfxTemplateDialog_Impl final : public SfxCommonTemplateDialog_Impl
+{
+private:
+ friend class SfxTemplateControllerItem;
+ friend class SfxTemplatePanelControl;
+
+ std::unique_ptr<ToolbarDropTarget> m_xToolbarDropTargetHelper;
+ std::unique_ptr<weld::Toolbar> m_xActionTbL;
+ std::unique_ptr<weld::Toolbar> m_xActionTbR;
+ std::unique_ptr<weld::Menu> m_xToolMenu;
+ int m_nActionTbLVisible;
+
+ void FillToolMenu();
+
+ DECL_LINK(ToolBoxLSelect, const OUString&, void);
+ DECL_LINK(ToolBoxRSelect, const OUString&, void);
+ DECL_LINK(ToolMenuSelectHdl, const OUString&, void);
+
+ virtual void EnableEdit( bool, StyleList* rStyleList) override;
+ virtual void EnableItem(const OUString& rMesId, bool bCheck = true) override;
+ virtual void CheckItem(const OUString& rMesId, bool bCheck = true) override;
+ virtual bool IsCheckedItem(const OUString& rMesId) override;
+ virtual void InsertFamilyItem(sal_uInt16 nId, const SfxStyleFamilyItem& rItem) override;
+ virtual void EnableFamilyItem(sal_uInt16 nId, bool bEnabled) override;
+ virtual void ClearFamilyList() override;
+ virtual void ReplaceUpdateButtonByMenu() override;
+
+public:
+ friend class SfxTemplateDialog;
+
+ SfxTemplateDialog_Impl( SfxBindings*, SfxTemplatePanelControl* pDlgWindow );
+ virtual ~SfxTemplateDialog_Impl() override;
+
+ sal_Int8 AcceptToolbarDrop(const AcceptDropEvent& rEvt, const DropTargetHelper& rHelper);
+
+ void Initialize();
+};
+
+#endif // INCLUDED_SFX2_SOURCE_INC_TEMPLDGI_HXX
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/tplcitem.hxx b/sfx2/source/inc/tplcitem.hxx
new file mode 100644
index 0000000000..9c532fbc85
--- /dev/null
+++ b/sfx2/source/inc/tplcitem.hxx
@@ -0,0 +1,45 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_TPLCITEM_HXX
+#define INCLUDED_SFX2_SOURCE_INC_TPLCITEM_HXX
+
+#include <sfx2/ctrlitem.hxx>
+#include <tools/link.hxx>
+
+struct ImplSVEvent;
+class SfxCommonTemplateDialog_Impl;
+
+class SfxTemplateControllerItem final : public SfxControllerItem
+{
+ SfxCommonTemplateDialog_Impl &rTemplateDlg;
+ sal_uInt8 nWaterCanState;
+ ImplSVEvent* nUserEventId;
+
+ DECL_LINK(SetWaterCanStateHdl_Impl, void*, void);
+
+ virtual void StateChangedAtToolBoxControl(sal_uInt16, SfxItemState, const SfxPoolItem* pState) override;
+
+public:
+ SfxTemplateControllerItem(sal_uInt16 nId, SfxCommonTemplateDialog_Impl& rDialog, SfxBindings& rBindings);
+ virtual ~SfxTemplateControllerItem() override;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/versdlg.hxx b/sfx2/source/inc/versdlg.hxx
new file mode 100644
index 0000000000..02bcccf966
--- /dev/null
+++ b/sfx2/source/inc/versdlg.hxx
@@ -0,0 +1,91 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SFX2_SOURCE_INC_VERSDLG_HXX
+#define INCLUDED_SFX2_SOURCE_INC_VERSDLG_HXX
+
+#include <sfx2/basedlgs.hxx>
+#include <vcl/weld.hxx>
+
+class SfxViewFrame;
+struct SfxVersionInfo;
+
+class SfxVersionTableDtor;
+class SfxVersionDialog final : public SfxDialogController
+{
+ SfxViewFrame* m_pViewFrame;
+ bool m_bIsSaveVersionOnClose;
+ std::unique_ptr<SfxVersionTableDtor> m_pTable;
+ std::unique_ptr<weld::Button> m_xSaveButton;
+ std::unique_ptr<weld::CheckButton> m_xSaveCheckBox;
+ std::unique_ptr<weld::Button> m_xOpenButton;
+ std::unique_ptr<weld::Button> m_xViewButton;
+ std::unique_ptr<weld::Button> m_xDeleteButton;
+ std::unique_ptr<weld::Button> m_xCompareButton;
+ std::unique_ptr<weld::Button> m_xCmisButton;
+ std::unique_ptr<weld::TreeView> m_xVersionBox;
+
+ DECL_LINK(DClickHdl_Impl, weld::TreeView&, bool);
+ DECL_LINK(SelectHdl_Impl, weld::TreeView&, void);
+ DECL_LINK(ButtonHdl_Impl, weld::Button&, void);
+ DECL_LINK(ToggleHdl_Impl, weld::Toggleable&, void);
+ void Init_Impl();
+ void Open_Impl();
+
+public:
+ SfxVersionDialog(weld::Window* pParent, SfxViewFrame* pFrame, bool);
+ virtual ~SfxVersionDialog() override;
+ bool IsSaveVersionOnClose() const { return m_bIsSaveVersionOnClose; }
+};
+
+class SfxViewVersionDialog_Impl final : public SfxDialogController
+{
+private:
+ SfxVersionInfo& m_rInfo;
+
+ std::unique_ptr<weld::Label> m_xDateTimeText;
+ std::unique_ptr<weld::Label> m_xSavedByText;
+ std::unique_ptr<weld::TextView> m_xEdit;
+ std::unique_ptr<weld::Button> m_xOKButton;
+ std::unique_ptr<weld::Button> m_xCancelButton;
+ std::unique_ptr<weld::Button> m_xCloseButton;
+
+ DECL_LINK(ButtonHdl, weld::Button&, void);
+
+public:
+ SfxViewVersionDialog_Impl(weld::Window* pParent, SfxVersionInfo& rInfo, bool bEdit);
+};
+
+class SfxCmisVersionsDialog final : public SfxDialogController
+{
+ SfxViewFrame* m_pViewFrame;
+ std::unique_ptr<SfxVersionTableDtor> m_pTable;
+
+ std::unique_ptr<weld::TreeView> m_xVersionBox;
+
+ void LoadVersions();
+
+public:
+ SfxCmisVersionsDialog(weld::Window* pParent, SfxViewFrame* pFrame);
+ virtual ~SfxCmisVersionsDialog() override;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/inc/workwin.hxx b/sfx2/source/inc/workwin.hxx
new file mode 100644
index 0000000000..684459ff32
--- /dev/null
+++ b/sfx2/source/inc/workwin.hxx
@@ -0,0 +1,301 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SFX2_SOURCE_INC_WORKWIN_HXX
+#define INCLUDED_SFX2_SOURCE_INC_WORKWIN_HXX
+
+#include <utility>
+#include <vector>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/task/XStatusIndicator.hpp>
+#include <com/sun/star/frame/XLayoutManagerListener.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <cppuhelper/weakref.hxx>
+
+#include <o3tl/typed_flags_set.hxx>
+
+#include <sfx2/basedlgs.hxx>
+#include <sfx2/childwin.hxx>
+#include <sfx2/frame.hxx>
+#include <sfx2/objface.hxx>
+#include <sfx2/shell.hxx>
+#include <sfx2/toolbarids.hxx>
+
+class SfxSplitWindow;
+class SfxWorkWindow;
+
+
+// This struct makes all relevant Information available of Toolboxes
+struct SfxObjectBar_Impl
+{
+ ToolbarId eId; // ConfigId of Toolbox
+ SfxVisibilityFlags nMode; // special visibility flags
+ bool bDestroy;
+
+ SfxObjectBar_Impl() :
+ eId(ToolbarId::None),
+ nMode(SfxVisibilityFlags::Invisible),
+ bDestroy(false)
+ {}
+};
+
+// This struct makes all relevant Information available of the status bar
+
+struct SfxStatBar_Impl
+{
+ StatusBarId eId;
+
+ SfxStatBar_Impl() :
+ eId(StatusBarId::None)
+ {}
+};
+
+enum class SfxChildVisibility
+{
+ NOT_VISIBLE = 0,
+ ACTIVE = 1, // not disabled through HidePopups
+ NOT_HIDDEN = 2, // not disabled through HideChildWindow
+ FITS_IN = 4, // not too large for output size of the parent
+ VISIBLE = 7, // NOT_HIDDEN | ACTIVE | FITS_IN)
+};
+namespace o3tl
+{
+ template<> struct typed_flags<SfxChildVisibility> : is_typed_flags<SfxChildVisibility, 0x07> {};
+}
+
+
+struct SfxChild_Impl
+{
+ VclPtr<vcl::Window> pWin;
+ std::shared_ptr<SfxDialogController> xController;
+ Size aSize;
+ SfxChildAlignment eAlign;
+ SfxChildVisibility nVisible;
+ bool bResize;
+ bool bSetFocus;
+
+ SfxChild_Impl( vcl::Window& rChild, const Size& rSize,
+ SfxChildAlignment eAlignment, bool bIsVisible ):
+ pWin(&rChild), aSize(rSize), eAlign(eAlignment), bResize(false),
+ bSetFocus( false )
+ {
+ nVisible = bIsVisible ? SfxChildVisibility::VISIBLE : SfxChildVisibility::NOT_VISIBLE;
+ }
+
+ SfxChild_Impl(std::shared_ptr<SfxDialogController> xChild,
+ SfxChildAlignment eAlignment):
+ pWin(nullptr), xController(std::move(xChild)), eAlign(eAlignment), bResize(false),
+ bSetFocus( false )
+ {
+ nVisible = xController->getDialog()->get_visible() ? SfxChildVisibility::VISIBLE : SfxChildVisibility::NOT_VISIBLE;
+ }
+};
+
+struct SfxChildWin_Impl
+{
+ sal_uInt16 nSaveId; // the ChildWindow-Id
+ sal_uInt16 nId; // current Id
+ SfxChildWindow* pWin;
+ bool bCreate;
+ SfxChildWinInfo aInfo;
+ SfxChild_Impl* pCli; // != 0 at direct Children
+ SfxVisibilityFlags nVisibility;
+ bool bEnable;
+
+ SfxChildWin_Impl( sal_uInt32 nID ) :
+ nSaveId(static_cast<sal_uInt16>(nID & 0xFFFF) ),
+ nId(nSaveId),
+ pWin(nullptr),
+ bCreate(false),
+ pCli(nullptr),
+ nVisibility( SfxVisibilityFlags::Invisible ),
+ bEnable( true )
+ {}
+};
+
+enum class SfxChildIdentifier
+{
+ DOCKINGWINDOW,
+ SPLITWINDOW
+};
+
+enum class SfxDockingConfig
+{
+ SETDOCKINGRECTS,
+ ALIGNDOCKINGWINDOW,
+ TOGGLEFLOATMODE
+};
+
+
+#define SFX_SPLITWINDOWS_LEFT 0
+#define SFX_SPLITWINDOWS_TOP 2
+#define SFX_SPLITWINDOWS_RIGHT 1
+#define SFX_SPLITWINDOWS_MAX 4
+
+
+class LayoutManagerListener final : public ::cppu::WeakImplHelper<
+ css::frame::XLayoutManagerListener,
+ css::lang::XComponent >
+{
+ public:
+ LayoutManagerListener( SfxWorkWindow* pWrkWin );
+ virtual ~LayoutManagerListener() override;
+
+ void setFrame( const css::uno::Reference< css::frame::XFrame >& rFrame );
+
+
+ // XComponent
+
+ virtual void SAL_CALL addEventListener( const css::uno::Reference< css::lang::XEventListener >& xListener ) override;
+ virtual void SAL_CALL removeEventListener( const css::uno::Reference< css::lang::XEventListener >& aListener ) override;
+ virtual void SAL_CALL dispose() override;
+
+
+ // XEventListener
+
+ virtual void SAL_CALL disposing( const css::lang::EventObject& aEvent ) override;
+
+
+ // XLayoutManagerEventListener
+
+ virtual void SAL_CALL layoutEvent( const css::lang::EventObject& aSource, ::sal_Int16 eLayoutEvent, const css::uno::Any& aInfo ) override;
+
+ private:
+ bool m_bHasFrame;
+ SfxWorkWindow* m_pWrkWin;
+ css::uno::WeakReference< css::frame::XFrame > m_xFrame;
+};
+
+class SfxWorkWindow final
+{
+ friend class LayoutManagerListener;
+
+ std::vector<sal_uInt16> aSortedList;
+ SfxStatBar_Impl aStatBar;
+ std::vector< SfxObjectBar_Impl > aObjBarList;
+ tools::Rectangle aClientArea;
+ tools::Rectangle aUpperClientArea;
+ VclPtr<SfxSplitWindow> pSplit[SFX_SPLITWINDOWS_MAX];
+ std::vector<std::unique_ptr<SfxChild_Impl>>
+ aChildren;
+ std::vector<std::unique_ptr<SfxChildWin_Impl>>
+ aChildWins;
+ SfxBindings* pBindings;
+ VclPtr<vcl::Window> pWorkWin;
+ VclPtr<vcl::Window> pActiveChild;
+ SfxVisibilityFlags nUpdateMode;
+ sal_uInt16 nChildren;
+ SfxVisibilityFlags nOrigMode;
+ bool bSorted : 1;
+ bool bDockingAllowed : 1;
+ bool bInternalDockingAllowed : 1;
+ bool bAllChildrenVisible : 1;
+ bool bIsFullScreen : 1;
+ bool bShowStatusBar : 1;
+ sal_Int32 m_nLock;
+ css::uno::Reference< css::lang::XComponent > m_xLayoutManagerListener;
+ SfxFrame* pMasterFrame;
+ SfxFrame* pFrame;
+
+ void CreateChildWin_Impl(SfxChildWin_Impl*,bool);
+ void RemoveChildWin_Impl(SfxChildWin_Impl*);
+ void Sort_Impl();
+ SfxChild_Impl* FindChild_Impl( const vcl::Window* rWindow ) const;
+ bool RequestTopToolSpacePixel_Impl( SvBorder aBorder );
+ tools::Rectangle GetTopRect_Impl() const;
+ SvBorder Arrange_Impl();
+ void SaveStatus_Impl(SfxChildWindow*, const SfxChildWinInfo&);
+ static bool IsPluginMode( SfxObjectShell const * pObjShell );
+
+ void FlushPendingChildSizes();
+
+public:
+ SfxWorkWindow( vcl::Window* pWin, SfxFrame* pFrm, SfxFrame* pMaster );
+ ~SfxWorkWindow();
+ SfxBindings& GetBindings()
+ { return *pBindings; }
+ vcl::Window* GetWindow() const
+ { return pWorkWin; }
+ tools::Rectangle GetFreeArea( bool bAutoHide ) const;
+ void SetDockingAllowed(bool bSet)
+ { bDockingAllowed = bSet; }
+ void SetInternalDockingAllowed(bool bSet)
+ { bInternalDockingAllowed = bSet; }
+ bool IsDockingAllowed() const
+ { return bDockingAllowed; }
+ bool IsInternalDockingAllowed() const
+ { return bInternalDockingAllowed; }
+
+ // Methods for all Child windows
+ void DataChanged_Impl();
+ void ReleaseChild_Impl( vcl::Window& rWindow );
+ void ReleaseChild_Impl(const SfxDialogController&);
+ SfxChild_Impl* RegisterChild_Impl( vcl::Window& rWindow, SfxChildAlignment eAlign );
+ SfxChild_Impl* RegisterChild_Impl(std::shared_ptr<SfxDialogController>& rController, SfxChildAlignment eAlign);
+ void ShowChildren_Impl();
+ void HideChildren_Impl();
+ bool PrepareClose_Impl();
+ void ArrangeChildren_Impl( bool bForce = true );
+ void DeleteControllers_Impl();
+ void HidePopups_Impl(bool bHide, sal_uInt16 nId=0);
+ void ConfigChild_Impl(SfxChildIdentifier,
+ SfxDockingConfig, sal_uInt16);
+ void MakeChildrenVisible_Impl( bool bVis );
+ void ArrangeAutoHideWindows( SfxSplitWindow *pSplit );
+ bool IsAutoHideMode( const SfxSplitWindow *pSplit );
+ void EndAutoShow_Impl( Point aPos );
+ void SetFullScreen_Impl( bool bSet ) { bIsFullScreen = bSet; }
+
+ // Methods for Objectbars
+ void UpdateObjectBars_Impl();
+ void UpdateObjectBars_Impl2();
+ void ResetObjectBars_Impl();
+ void SetObjectBar_Impl(sal_uInt16 nPos, SfxVisibilityFlags nFlags, ToolbarId eId);
+ bool IsVisible_Impl() const;
+ void MakeVisible_Impl( bool );
+ void Lock_Impl( bool );
+
+ // Methods for ChildWindows
+ void UpdateChildWindows_Impl();
+ void ResetChildWindows_Impl();
+ void SetChildWindowVisible_Impl( sal_uInt32, bool, SfxVisibilityFlags );
+ void ToggleChildWindow_Impl(sal_uInt16,bool);
+ bool HasChildWindow_Impl(sal_uInt16);
+ bool KnowsChildWindow_Impl(sal_uInt16);
+ void ShowChildWindow_Impl(sal_uInt16, bool bVisible, bool bSetFocus);
+ void SetChildWindow_Impl(sal_uInt16, bool bOn, bool bSetFocus);
+ SfxChildWindow* GetChildWindow_Impl(sal_uInt16);
+ void InitializeChild_Impl(SfxChildWin_Impl*);
+ SfxSplitWindow* GetSplitWindow_Impl(SfxChildAlignment);
+
+ bool IsVisible_Impl( SfxVisibilityFlags nMode ) const;
+ bool IsFloating( sal_uInt16 nId );
+ void SetActiveChild_Impl( vcl::Window *pChild );
+ const VclPtr<vcl::Window>& GetActiveChild_Impl() const { return pActiveChild; }
+
+ // Methods for StatusBar
+ void ResetStatusBar_Impl();
+ void SetStatusBar_Impl(StatusBarId eResId);
+ void UpdateStatusBar_Impl();
+ css::uno::Reference< css::task::XStatusIndicator > GetStatusIndicator();
+ css::uno::Reference< css::frame::XFrame > GetFrameInterface();
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */