summaryrefslogtreecommitdiffstats
path: root/sfx2/source/inc/StyleList.hxx
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
commited5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch)
tree7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /sfx2/source/inc/StyleList.hxx
parentInitial commit. (diff)
downloadlibreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz
libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sfx2/source/inc/StyleList.hxx')
-rw-r--r--sfx2/source/inc/StyleList.hxx239
1 files changed, 239 insertions, 0 deletions
diff --git a/sfx2/source/inc/StyleList.hxx b/sfx2/source/inc/StyleList.hxx
new file mode 100644
index 000000000..f6ba9f318
--- /dev/null
+++ b/sfx2/source/inc/StyleList.hxx
@@ -0,0 +1,239 @@
+/* -*- 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, OString treeviewname, OString 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; }
+ // Handles the enabling/Disabling of Preview
+ void EnablePreview(bool bCustomPreview);
+ // 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);
+ void FilterSelect(sal_uInt16 nActFilter, bool bsetFilter);
+
+ DECL_LINK(NewMenuExecuteAction, void*, void);
+
+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 OString& 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;
+
+ OString sLastItemIdent;
+ SfxModule* m_Module;
+ sal_uInt16 m_nModifier;
+ weld::Container* m_pContainer;
+};