summaryrefslogtreecommitdiffstats
path: root/sfx2/source/inc/templdgi.hxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sfx2/source/inc/templdgi.hxx313
1 files changed, 313 insertions, 0 deletions
diff --git a/sfx2/source/inc/templdgi.hxx b/sfx2/source/inc/templdgi.hxx
new file mode 100644
index 000000000..57b95edf9
--- /dev/null
+++ b/sfx2/source/inc/templdgi.hxx
@@ -0,0 +1,313 @@
+/* -*- 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
+
+class SfxTemplateControllerItem;
+
+#include <sal/config.h>
+
+#include <array>
+#include <memory>
+
+#include <vcl/toolbox.hxx>
+#include <vcl/transfer.hxx>
+#include <vcl/weld.hxx>
+#include <svl/lstner.hxx>
+#include <svl/eitem.hxx>
+
+#include <svl/style.hxx>
+
+#include <sfx2/childwin.hxx>
+#include <sfx2/objsh.hxx>
+#include <sfx2/styfitem.hxx>
+#include <sfx2/templdlg.hxx>
+
+class SfxStyleFamilyItem;
+class SfxTemplateItem;
+class SfxBindings;
+class SfxStyleSheetBase;
+class SfxStyleSheetBasePool;
+class SvTreeListBox ;
+class StyleTreeListBox_Impl;
+class SfxTemplateDialog_Impl;
+class SfxCommonTemplateDialog_Impl;
+
+namespace com::sun::star::frame {
+ class XModuleManager2;
+}
+
+enum class StyleFlags {
+ NONE=0, UpdateFamilyList=1, UpdateFamily=2
+};
+namespace o3tl {
+ template<> struct typed_flags<StyleFlags> : is_typed_flags<StyleFlags, 3> {};
+}
+
+class TreeViewDropTarget;
+
+class SfxCommonTemplateDialog_Impl : public SfxListener
+{
+private:
+ class DeletionWatcher;
+ friend class DeletionWatcher;
+
+ void ReadResource();
+ void ClearResource();
+ void impl_clear();
+ DeletionWatcher* impl_setDeletionWatcher(DeletionWatcher* pNewWatcher);
+ OUString getDefaultStyleName( const SfxStyleFamily eFam );
+
+protected:
+#define MAX_FAMILIES 6
+#define COUNT_BOUND_FUNC 14
+
+ friend class SfxTemplateControllerItem;
+
+ SfxBindings* pBindings;
+ std::array<std::unique_ptr<SfxTemplateControllerItem>, COUNT_BOUND_FUNC> pBoundItems;
+
+ VclPtr<vcl::Window> pWindow;
+ std::unique_ptr<weld::Builder> mxMenuBuilder;
+ std::unique_ptr<weld::Menu> mxMenu;
+ OString sLastItemIdent;
+ SfxModule* pModule;
+ std::unique_ptr<Idle> pIdle;
+
+ std::unique_ptr<SfxStyleFamilies> pStyleFamilies;
+ std::array<std::unique_ptr<SfxTemplateItem>, MAX_FAMILIES> pFamilyState;
+ SfxStyleSheetBasePool* pStyleSheetPool;
+ SfxObjectShell* pCurObjShell;
+ css::uno::Reference<css::frame::XModuleManager2> xModuleManager;
+ DeletionWatcher* m_pDeletionWatcher;
+
+ std::unique_ptr<weld::TreeView> mxFmtLb;
+ std::unique_ptr<weld::TreeView> mxTreeBox;
+ std::unique_ptr<weld::CheckButton> mxPreviewCheckbox;
+ std::unique_ptr<weld::ComboBox> mxFilterLb;
+ std::unique_ptr<TreeViewDropTarget> m_xTreeView1DropTargetHelper;
+ std::unique_ptr<TreeViewDropTarget> m_xTreeView2DropTargetHelper;
+
+ sal_uInt16 nActFamily; // Id in the ToolBox = Position - 1
+ sal_uInt16 nActFilter; // FilterIdx
+ SfxStyleSearchBits nAppFilter; // Filter, which has set the application (for automatic)
+
+ sal_uInt16 m_nModifier;
+ bool bDontUpdate :1;
+ bool bIsWater :1;
+ bool bUpdate :1;
+ bool bUpdateFamily :1;
+ bool bCanEdit :1;
+ bool bCanDel :1;
+ bool bCanNew :1;
+ bool bCanHide :1;
+ bool bCanShow :1;
+ bool bWaterDisabled :1;
+ bool bNewByExampleDisabled :1;
+ bool bUpdateByExampleDisabled :1;
+ bool bTreeDrag :1;
+ bool bAllowReParentDrop:1;
+ bool bHierarchical :1;
+ bool m_bWantHierarchical :1;
+ bool bBindingUpdate :1;
+
+ void FmtSelect(weld::TreeView* pTreeView, bool bIsCallback);
+
+ DECL_LINK(FilterSelectHdl, weld::ComboBox&, void );
+ DECL_LINK(FmtSelectHdl, weld::TreeView&, void);
+ DECL_LINK(TreeListApplyHdl, weld::TreeView&, bool);
+ DECL_LINK(MousePressHdl, const MouseEvent&, bool);
+ DECL_LINK(TimeOut, Timer*, void );
+ DECL_LINK(PreviewHdl, weld::Button&, void);
+ DECL_LINK(PopupFlatMenuHdl, const CommandEvent&, bool);
+ DECL_LINK(PopupTreeMenuHdl, const CommandEvent&, bool);
+ DECL_LINK(KeyInputHdl, const KeyEvent&, bool);
+ DECL_LINK(QueryTooltipHdl, const weld::TreeIter&, OUString);
+ DECL_LINK(OnAsyncExecuteDrop, void *, void);
+ DECL_LINK(DragBeginHdl, bool&, bool);
+ DECL_LINK(CustomRenderHdl, weld::TreeView::render_args, void);
+ DECL_STATIC_LINK(SfxCommonTemplateDialog_Impl, CustomGetSizeHdl, weld::TreeView::get_size_args, Size);
+
+ void DropHdl(const OUString& rStyle, const OUString& rParent);
+
+ virtual void EnableItem(const OString& /*rMesId*/, bool /*bCheck*/ = true)
+ {}
+ virtual void CheckItem(const OString& /*rMesId*/, bool /*bCheck*/ = true)
+ {}
+ virtual bool IsCheckedItem(const OString& /*rMesId*/ )
+ {
+ return true;
+ }
+
+ void InvalidateBindings();
+ 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 NewHdl();
+ void EditHdl();
+ void DeleteHdl();
+ void HideHdl();
+ void ShowHdl();
+
+ bool Execute_Impl(sal_uInt16 nId, const OUString& rStr, const OUString& rRefStr,
+ sal_uInt16 nFamily, SfxStyleSearchBits nMask = SfxStyleSearchBits::Auto,
+ sal_uInt16* pIdx = nullptr, const sal_uInt16* pModifier = nullptr );
+
+ void UpdateStyles_Impl(StyleFlags nFlags);
+ const SfxStyleFamilyItem* GetFamilyItem_Impl() const;
+ bool IsInitialized() const
+ {
+ return nActFamily != 0xffff;
+ }
+ void EnableDelete();
+ void Initialize();
+ void EnableHierarchical(bool);
+
+ void FilterSelect( sal_uInt16 nFilterIdx, bool bForce );
+ void SetFamilyState( sal_uInt16 nSlotId, const SfxTemplateItem* );
+ void SetWaterCanState( const SfxBoolItem* pItem );
+ bool IsSafeForWaterCan() const;
+
+ void SelectStyle(const OUString& rStyle, bool bIsCallback);
+ bool HasSelectedStyle() const;
+ void GetSelectedStyle() const;
+ void FillTreeBox();
+ void Update_Impl();
+ void UpdateFamily_Impl();
+
+ // 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 );
+
+ void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
+
+ void FamilySelect( sal_uInt16 nId, bool bPreviewRefresh = false );
+ void SetFamily(SfxStyleFamily nFamily);
+ void ActionSelect(const OString& rId);
+
+ sal_Int32 LoadFactoryStyleFilter( SfxObjectShell const * i_pObjSh );
+ void SaveFactoryStyleFilter( SfxObjectShell const * i_pObjSh, sal_Int32 i_nFilter );
+ SfxObjectShell* SaveSelection();
+
+ void PrepareMenu(const Point& rPos);
+ void ShowMenu(const CommandEvent& rCEvt);
+
+public:
+
+ SfxCommonTemplateDialog_Impl(SfxBindings* pB, vcl::Window*, weld::Builder* pBuilder);
+ virtual ~SfxCommonTemplateDialog_Impl() override;
+
+ void MenuSelect(const OString& rIdent);
+ DECL_LINK( MenuSelectAsyncHdl, void*, void );
+
+ virtual void EnableEdit( bool b )
+ {
+ bCanEdit = b;
+ }
+ void EnableDel( bool b )
+ {
+ bCanDel = b;
+ }
+ void EnableNew( bool b )
+ {
+ bCanNew = b;
+ }
+ void EnableHide( bool b )
+ {
+ bCanHide = b;
+ }
+ void EnableShow( bool b )
+ {
+ bCanShow = b;
+ }
+
+ vcl::Window* GetWindow()
+ {
+ return pWindow;
+ }
+
+ weld::Widget* GetFrameWeld()
+ {
+ return pWindow ? pWindow->GetFrameWeld() : nullptr;
+ }
+
+ void EnableTreeDrag(bool b);
+ void EnableExample_Impl(sal_uInt16 nId, bool bEnable);
+ SfxStyleFamily GetActualFamily() const;
+ OUString GetSelectedEntry() const;
+
+ SfxObjectShell* GetObjectShell() const
+ {
+ return pCurObjShell;
+ }
+
+ sal_Int8 AcceptDrop(const AcceptDropEvent& rEvt, const DropTargetHelper& rHelper);
+ sal_Int8 ExecuteDrop(const ExecuteDropEvent& rEvt);
+
+ void CreateContextMenu();
+};
+
+class ToolbarDropTarget;
+class DropTargetHelper;
+
+class SfxTemplateDialog_Impl : 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 OString&, void);
+ DECL_LINK(ToolBoxRSelect, const OString&, void);
+ DECL_LINK(ToolMenuSelectHdl, const OString&, void);
+
+protected:
+ virtual void EnableEdit( bool ) override;
+ virtual void EnableItem(const OString& rMesId, bool bCheck = true) override;
+ virtual void CheckItem(const OString& rMesId, bool bCheck = true) override;
+ virtual bool IsCheckedItem(const OString& 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: */