/* -*- 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_INC_TEMPLATEDLG_HXX #define INCLUDED_SFX2_INC_TEMPLATEDLG_HXX #include #include #include #include #include #include #include #include class ThumbnailViewItem; namespace com { namespace sun::star::frame { class XDesktop2; class XModel; } } class SFX2_DLLPUBLIC SfxTemplateManagerDlg : public weld::GenericDialogController { typedef bool (*selection_cmp_fn)(const ThumbnailViewItem*, const ThumbnailViewItem*); public: SfxTemplateManagerDlg(weld::Window* parent); virtual ~SfxTemplateManagerDlg() override; virtual short run() override; void setDocumentModel(const css::uno::Reference& rModel); void setTemplateViewMode(TemplateViewMode eViewMode); TemplateViewMode getTemplateViewMode() const; protected: void getApplicationSpecificSettings(); void readSettings(); void writeSettings(); void fillFolderComboBox(); DECL_DLLPRIVATE_LINK(SelectApplicationHdl, weld::ComboBox&, void); DECL_DLLPRIVATE_LINK(SelectRegionHdl, weld::ComboBox&, void); DECL_DLLPRIVATE_LINK(OkClickHdl, weld::Button&, void); void ImportActionHdl(); static void ExtensionsActionHdl(); DECL_DLLPRIVATE_LINK(TVItemStateHdl, const ThumbnailViewItem*, void); DECL_DLLPRIVATE_LINK(MenuSelectHdl, const OString&, void); void DefaultTemplateMenuSelectHdl(std::string_view rIdent); DECL_DLLPRIVATE_LINK(OpenRegionHdl, void*, void); DECL_DLLPRIVATE_LINK(CreateContextMenuHdl, ThumbnailViewItem*, void); DECL_DLLPRIVATE_LINK(OpenTemplateHdl, ThumbnailViewItem*, void); DECL_DLLPRIVATE_LINK(EditTemplateHdl, ThumbnailViewItem*, void); DECL_DLLPRIVATE_LINK(DeleteTemplateHdl, void*, void); DECL_DLLPRIVATE_LINK(DefaultTemplateHdl, ThumbnailViewItem*, void); DECL_DLLPRIVATE_LINK(MoveTemplateHdl, void*, void); DECL_DLLPRIVATE_LINK(ExportTemplateHdl, void*, void); void SearchUpdate(); DECL_DLLPRIVATE_LINK(SearchUpdateHdl, weld::Entry&, void); DECL_DLLPRIVATE_LINK(GetFocusHdl, weld::Widget&, void); DECL_DLLPRIVATE_LINK(LoseFocusHdl, weld::Widget&, void); DECL_DLLPRIVATE_LINK(ImplUpdateDataHdl, Timer*, void); DECL_DLLPRIVATE_LINK(KeyInputHdl, const KeyEvent&, bool); DECL_DLLPRIVATE_LINK(ListViewHdl, weld::Toggleable&, void); DECL_DLLPRIVATE_LINK(ThumbnailViewHdl, weld::Toggleable&, void); DECL_DLLPRIVATE_LINK(FocusRectLocalHdl, weld::Widget&, tools::Rectangle); void OnTemplateImportCategory(std::u16string_view sCategory); // static void OnTemplateLink (); void OnTemplateOpen(); void OnTemplateExport(); void OnTemplateState(const ThumbnailViewItem* pItem); void OnCategoryNew(); void OnCategoryRename(); void OnCategoryDelete(); void updateMenuItems(); /** * * Move templates stored in the filesystem to another folder. * **/ void localMoveTo(sal_uInt16 nMenuId); /// Return filter according to the currently selected application filter. FILTER_APPLICATION getCurrentApplicationFilter() const; protected: std::set maSelTemplates; css::uno::Reference m_xModel; css::uno::Reference mxDesktop; Timer m_aUpdateDataTimer; std::unique_ptr mxSearchFilter; std::unique_ptr mxCBApp; std::unique_ptr mxCBFolder; std::unique_ptr mxOKButton; std::unique_ptr mxCBXHideDlg; std::unique_ptr mxActionBar; std::unique_ptr mxLocalView; std::unique_ptr mxLocalViewWeld; std::unique_ptr mxListViewButton; std::unique_ptr mxThumbnailViewButton; TemplateViewMode mViewMode; bool bMakeSelItemVisible; }; // class SfxTemplateCategoryDialog ------------------------------------------------------------------- class SfxTemplateCategoryDialog final : public weld::GenericDialogController { private: OUString msSelectedCategory; bool mbIsNewCategory; std::unique_ptr mxLBCategory; std::unique_ptr mxNewCategoryEdit; std::unique_ptr mxOKButton; public: DECL_LINK(NewCategoryEditHdl, weld::Entry&, void); DECL_LINK(SelectCategoryHdl, weld::TreeView&, void); void SetCategoryLBEntries(std::vector names); const OUString& GetSelectedCategory() const { return msSelectedCategory; }; bool IsNewCategoryCreated() const { return mbIsNewCategory; } public: explicit SfxTemplateCategoryDialog(weld::Window* pParent); virtual ~SfxTemplateCategoryDialog() override; }; // class SfxTemplateSelectionDialog ------------------------------------------------------------------- class SFX2_DLLPUBLIC SfxTemplateSelectionDlg final : public SfxTemplateManagerDlg { public: SfxTemplateSelectionDlg(weld::Window* parent); virtual ~SfxTemplateSelectionDlg() override; virtual short run() override; OUString const& getTemplatePath() const { return msTemplatePath; }; bool IsStartWithTemplate() const { return mxCBXHideDlg->get_active(); }; private: DECL_DLLPRIVATE_LINK(OpenTemplateHdl, ThumbnailViewItem*, void); DECL_DLLPRIVATE_LINK(OkClickHdl, weld::Button&, void); DECL_DLLPRIVATE_LINK(TimeOut, Timer*, void); OUString msTemplatePath; Idle maIdle; }; #endif // INCLUDED_SFX2_INC_TEMPLATEDLG_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */