/* -*- 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 #include #include #include #include #include #include #include #include #include #include #include #include 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 : is_typed_flags {}; } 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, COUNT_BOUND_FUNC> pBoundItems; VclPtr pWindow; std::unique_ptr mxMenuBuilder; std::unique_ptr mxMenu; OString sLastItemIdent; SfxModule* pModule; std::unique_ptr pIdle; std::unique_ptr pStyleFamilies; std::array, MAX_FAMILIES> pFamilyState; SfxStyleSheetBasePool* pStyleSheetPool; SfxObjectShell* pCurObjShell; css::uno::Reference xModuleManager; DeletionWatcher* m_pDeletionWatcher; std::unique_ptr mxFmtLb; std::unique_ptr mxTreeBox; std::unique_ptr mxPreviewCheckbox; std::unique_ptr mxFilterLb; std::unique_ptr m_xTreeView1DropTargetHelper; std::unique_ptr 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 m_xToolbarDropTargetHelper; std::unique_ptr m_xActionTbL; std::unique_ptr m_xActionTbR; std::unique_ptr 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: */