diff options
-rw-r--r-- | include/sfx2/strings.hrc | 26 | ||||
-rw-r--r-- | include/sfx2/templatedlg.hxx | 30 | ||||
-rw-r--r-- | include/sfx2/templatedlglocalview.hxx | 6 | ||||
-rw-r--r-- | include/sfx2/templatelocalview.hxx | 12 | ||||
-rw-r--r-- | sfx2/Library_sfx.mk | 1 | ||||
-rw-r--r-- | sfx2/inc/bitmaps.hlst | 17 | ||||
-rw-r--r-- | sfx2/source/control/templatedlglocalview.cxx | 85 | ||||
-rw-r--r-- | sfx2/source/control/templatelocalview.cxx | 47 | ||||
-rw-r--r-- | sfx2/source/control/templatesearchview.cxx | 462 | ||||
-rw-r--r-- | sfx2/source/doc/doctemplates.cxx | 8 | ||||
-rw-r--r-- | sfx2/source/doc/doctemplateslocal.hxx | 1 | ||||
-rw-r--r-- | sfx2/source/doc/templatedlg.cxx | 637 | ||||
-rw-r--r-- | sfx2/source/inc/templatesearchview.hxx | 99 | ||||
-rw-r--r-- | sfx2/uiconfig/ui/templatedlg.ui | 316 |
14 files changed, 465 insertions, 1282 deletions
diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc index 0967a31c1109..676ff541059b 100644 --- a/include/sfx2/strings.hrc +++ b/include/sfx2/strings.hrc @@ -27,13 +27,15 @@ #define STR_SAVEASDOC NC_("STR_SAVEASDOC", "Save ~As...") #define STR_SAVEACOPY NC_("STR_SAVEACOPY", "Save a Copy...") #define STR_CLOSEDOC NC_("STR_CLOSEDOC", "~Close") -#define STR_OPEN NC_("STR_OPEN", "Open") -#define STR_EDIT_TEMPLATE NC_("STR_EDIT_TEMPLATE", "Edit") -#define STR_DEFAULT_TEMPLATE NC_("STR_DEFAULT_TEMPLATE", "Set as Default") -#define STR_RESET_DEFAULT NC_("STR_RESET_DEFAULT", "Reset Default") -#define STR_DELETE NC_("STR_DELETE", "Delete") -#define STR_SFX_RENAME NC_("STR_SFX_RENAME", "Rename") -#define STR_CATEGORY_RENAME NC_("STR_CATEGORY_RENAME", "Rename Category") +#define STR_OPEN NC_("STR_OPEN", "~Open") +#define STR_EDIT_TEMPLATE NC_("STR_EDIT_TEMPLATE", "~Edit") +#define STR_DEFAULT_TEMPLATE NC_("STR_DEFAULT_TEMPLATE", "Set as De~fault") +#define STR_RESET_DEFAULT NC_("STR_RESET_DEFAULT", "Reset De~fault") +#define STR_DELETE_TEMPLATE NC_("STR_DELETE_TEMPLATE", "~Delete") +#define STR_SFX_RENAME NC_("STR_SFX_RENAME", "~Rename") +#define STR_MOVE NC_("STR_ACTION_MOVE","~Move") +#define STR_EXPORT NC_("STR_ACTION_EXPORT","E~xport") +#define STR_CATEGORY_RENAME NC_("STR_CATEGORY_RENAME", "Ren~ame Category") #define STR_RENAME_TEMPLATE NC_("STR_RENAME_TEMPLATE", "Enter new template name:") #define STR_TEMPLATE_TOOLTIP NC_("STR_TEMPLATE_TOOLTIP", "Title: $1\nCategory: $2") #define STR_TEMPLATE_SELECTION NC_("STR_TEMPLATE_SELECTION", "Select a Template") @@ -351,6 +353,16 @@ #define STR_RECENT NC_("STR_RECENT", "Recently used") #define STR_NORECENT NC_("STR_NORECENT", "No recent characters") +#define STR_ACTION_RESET_ALL_DEAULT_TEMPLATES NC_("STR_ACTION_RESET_ALL_DEAULT_TEMPLATES","Reset All De~fault Templates") +#define STR_ACTION_RESET_WRITER_TEMPLATE NC_("STR_ACTION_RESET_WRITER_TEMPLATE","Reset De~fault Text Document") +#define STR_ACTION_RESET_CALC_TEMPLATE NC_("STR_ACTION_RESET_CALC_TEMPLATE","Reset De~fault Spreadsheet") +#define STR_ACTION_RESET_IMPRESS_TEMPLATE NC_("STR_ACTION_RESET_IMPRESS_TEMPLATE","Reset De~fault Presentation") +#define STR_ACTION_RESET_DRAW_TEMPLATE NC_("STR_ACTION_RESET_DRAW_TEMPLATE","Reset De~fault Drawing") +#define STR_ACTION_IMPORT NC_("STR_ACTION_IMPORT","~Import") +#define STR_ACTION_EXTENSIONS NC_("STR_ACTION_EXTENSIONS","E~xtensions") +#define STR_WINDOW_TITLE_RENAME_TEMPLATE NC_("STR_WINDOW_TITLE_RENAME_TEMPLATE","Rename") +#define STR_WINDOW_TITLE_RENAME_CATEGORY NC_("STR_WINDOW_TITLE_RENAME_CATEGORY","Rename Category") +#define STR_WINDOW_TITLE_RENAME_NEW_CATEGORY NC_("STR_WINDOW_TITLE_RENAME_NEW_CATEGORY","New Category") #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/sfx2/templatedlg.hxx b/include/sfx2/templatedlg.hxx index 89d0b6d3d61e..40af96278d47 100644 --- a/include/sfx2/templatedlg.hxx +++ b/include/sfx2/templatedlg.hxx @@ -22,7 +22,6 @@ #include <sfx2/templatedlglocalview.hxx> -class TemplateSearchView; class ThumbnailViewItem; namespace com @@ -61,10 +60,9 @@ protected: DECL_LINK(SelectRegionHdl, weld::ComboBox&, void); DECL_LINK(OkClickHdl, weld::Button&, void); - DECL_LINK(MoveClickHdl, weld::Button&, void); - DECL_LINK(ExportClickHdl, weld::Button&, void); - DECL_LINK(ImportClickHdl, weld::Button&, void); - DECL_STATIC_LINK(SfxTemplateManagerDlg, LinkClickHdl, weld::Button&, void); + void ImportActionHdl(); + void ExportActionHdl(); + static void ExtensionsActionHdl(); DECL_LINK(TVItemStateHdl, const ThumbnailViewItem*, void); @@ -75,10 +73,13 @@ protected: DECL_LINK(CreateContextMenuHdl, ThumbnailViewItem*, void); DECL_LINK(OpenTemplateHdl, ThumbnailViewItem*, void); DECL_LINK(EditTemplateHdl, ThumbnailViewItem*, void); - DECL_LINK(DeleteTemplateHdl, ThumbnailViewItem*, void); + DECL_LINK(DeleteTemplateHdl, void*, void); DECL_LINK(DefaultTemplateHdl, ThumbnailViewItem*, void); + DECL_LINK(MoveTemplateHdl, void*, void); + DECL_LINK(ExportTemplateHdl, void*, void); void SearchUpdate(); + void FilterSearch(); DECL_LINK(SearchUpdateHdl, weld::Entry&, void); DECL_LINK(GetFocusHdl, weld::Widget&, void); @@ -89,7 +90,6 @@ protected: DECL_LINK(ListViewHdl, weld::Toggleable&, void); DECL_LINK(ThumbnailViewHdl, weld::Toggleable&, void); DECL_LINK(FocusRectLocalHdl, weld::Widget&, tools::Rectangle); - DECL_LINK(FocusRectSearchHdl, weld::Widget&, tools::Rectangle); void OnTemplateImportCategory(std::u16string_view sCategory); // static void OnTemplateLink (); @@ -102,7 +102,7 @@ protected: void OnCategoryRename(); void OnCategoryDelete(); - void createDefaultTemplateMenu(); + void updateMenuItems(); /** * @@ -112,14 +112,6 @@ protected: void localMoveTo(sal_uInt16 nMenuId); - /** - * - * Move search result templates stored in the filesystem to another folder. - * - **/ - - void localSearchMoveTo(sal_uInt16 nMenuId); - /// Return filter according to the currently selected application filter. FILTER_APPLICATION getCurrentApplicationFilter() const; @@ -135,16 +127,10 @@ protected: std::unique_ptr<weld::ComboBox> mxCBFolder; std::unique_ptr<weld::Button> mxOKButton; - std::unique_ptr<weld::Button> mxMoveButton; - std::unique_ptr<weld::Button> mxExportButton; - std::unique_ptr<weld::Button> mxImportButton; - std::unique_ptr<weld::Button> mxMoreTemplatesButton; std::unique_ptr<weld::CheckButton> mxCBXHideDlg; std::unique_ptr<weld::MenuButton> mxActionBar; - std::unique_ptr<TemplateSearchView> mxSearchView; std::unique_ptr<TemplateDlgLocalView> mxLocalView; std::unique_ptr<weld::Menu> mxTemplateDefaultMenu; - std::unique_ptr<weld::CustomWeld> mxSearchViewWeld; std::unique_ptr<weld::CustomWeld> mxLocalViewWeld; std::unique_ptr<weld::Toggleable> mxListViewButton; std::unique_ptr<weld::Toggleable> mxThumbnailViewButton; diff --git a/include/sfx2/templatedlglocalview.hxx b/include/sfx2/templatedlglocalview.hxx index 409a1acaa578..65b77ead1c9a 100644 --- a/include/sfx2/templatedlglocalview.hxx +++ b/include/sfx2/templatedlglocalview.hxx @@ -30,7 +30,8 @@ public: virtual bool KeyInput(const KeyEvent& rKEvt) override; - void createContextMenu(const bool bIsDefault, const bool bIsBuiltIn); + void createContextMenu(const bool bIsDefault, const bool bIsBuiltIn, const bool bIsSingleSel, + const OUString& rDefaultImg); virtual void Show() override; @@ -45,6 +46,9 @@ public: void MakeItemVisible(sal_uInt16 nId) { ThumbnailView::MakeItemVisible(nId); } + void insertItems(const std::vector<TemplateItemProperties>& rTemplates, bool isRegionSelected, + bool bShowCategoryInTooltip); + private: void ContextMenuSelectHdl(std::string_view rIdent); diff --git a/include/sfx2/templatelocalview.hxx b/include/sfx2/templatelocalview.hxx index a37d72d1cf50..5ee5b60ed30a 100644 --- a/include/sfx2/templatelocalview.hxx +++ b/include/sfx2/templatelocalview.hxx @@ -137,14 +137,20 @@ public: void setEditTemplateHdl(const Link<ThumbnailViewItem*,void> &rLink); - void setDeleteTemplateHdl(const Link<ThumbnailViewItem*,void> &rLink); + void setDeleteTemplateHdl(const Link<void*,void> &rLink); void setDefaultTemplateHdl(const Link<ThumbnailViewItem*,void> &rLink); + void setMoveTemplateHdl(const Link<void*,void> &rLink); + + void setExportTemplateHdl(const Link<void*,void> &rLink); + void updateThumbnailDimensions(tools::Long itemMaxSize); void RemoveDefaultTemplateIcon( std::u16string_view rPath); + bool IsBuiltInRegion(const OUString& rRegionName); + static BitmapEx scaleImg (const BitmapEx &rImg, tools::Long width, tools::Long height); static BitmapEx getDefaultThumbnail( const OUString& rPath ); @@ -171,8 +177,10 @@ protected: Link<ThumbnailViewItem*,void> maCreateContextMenuHdl; Link<ThumbnailViewItem*,void> maOpenTemplateHdl; Link<ThumbnailViewItem*,void> maEditTemplateHdl; - Link<ThumbnailViewItem*,void> maDeleteTemplateHdl; + Link<void*,void> maDeleteTemplateHdl; Link<ThumbnailViewItem*,void> maDefaultTemplateHdl; + Link<void*,void> maMoveTemplateHdl; + Link<void*,void> maExportTemplateHdl; std::unique_ptr<SfxDocumentTemplates> mpDocTemplates; std::vector<std::unique_ptr<TemplateContainerItem> > maRegions; diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk index 0120cee75b4e..fff97d011a02 100644 --- a/sfx2/Library_sfx.mk +++ b/sfx2/Library_sfx.mk @@ -156,7 +156,6 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\ sfx2/source/control/templateviewitem \ sfx2/source/control/templatelocalview \ sfx2/source/control/templatecontaineritem \ - sfx2/source/control/templatesearchview \ sfx2/source/control/templatedlglocalview \ sfx2/source/control/listview \ sfx2/source/control/thumbnailviewitem \ diff --git a/sfx2/inc/bitmaps.hlst b/sfx2/inc/bitmaps.hlst index 3c236ff50d64..9d385c9765b3 100644 --- a/sfx2/inc/bitmaps.hlst +++ b/sfx2/inc/bitmaps.hlst @@ -91,7 +91,24 @@ #define SFX_BMP_CLOSE_DOC "sfx2/res/closedoc.png" #define SIDEBAR_CLOSE_INDICATOR "cmd/lc_decrementlevel.png" +#define BMP_ACTION_DEFAULT_WRITER "res/odt_16_8.png" +#define BMP_ACTION_DEFAULT_CALC "res/ods_16_8.png" +#define BMP_ACTION_DEFAULT_IMPRESS "res/odp_16_8.png" +#define BMP_ACTION_DEFAULT_DRAW "res/odg_16_8.png" +#define BMP_ACTION_MOVE "cmd/sc_move.png" +#define BMP_ACTION_IMPORT "cmd/sc_dataimport.png" +#define BMP_ACTION_EXPORT "cmd/sc_exportto.png" +#define BMP_ACTION_EXTENSIONS "cmd/sc_additionsdialog.png" +#define BMP_ACTION_DELETE_CATEGORY "cmd/sc_delete.png" +#define BMP_ACTION_NEW_CATEGORY "cmd/sc_add.png" +#define BMP_ACTION_RENAME "cmd/sc_editdoc.png" +#define BMP_MENU_OPEN "cmd/sc_opentemplate.png" +#define BMP_MENU_EDIT "cmd/sc_opentemplate.png" +#define BMP_MENU_MOVE "cmd/sc_move.png" +#define BMP_MENU_RENAME "cmd/sc_editdoc.png" +#define BMP_MENU_DELETE "cmd/sc_delete.png" +#define BMP_MENU_EXPORT "cmd/sc_exportto.png" #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sfx2/source/control/templatedlglocalview.cxx b/sfx2/source/control/templatedlglocalview.cxx index f916e57c8d7d..704468681fb8 100644 --- a/sfx2/source/control/templatedlglocalview.cxx +++ b/sfx2/source/control/templatedlglocalview.cxx @@ -19,6 +19,7 @@ #include <vcl/svapp.hxx> #include <vcl/event.hxx> #include <sfx2/doctempl.hxx> +#include <bitmaps.hlst> TemplateDlgLocalView::TemplateDlgLocalView(std::unique_ptr<weld::ScrolledWindow> xWindow, std::unique_ptr<weld::Menu> xMenu, @@ -39,7 +40,6 @@ void TemplateDlgLocalView::showAllTemplates() mnCurRegionId = 0; insertItems(maAllTemplates, false, true); - insertFilteredItems(); maOpenRegionHdl.Call(nullptr); } @@ -48,8 +48,7 @@ void TemplateDlgLocalView::showRegion(TemplateContainerItem const* pItem) { mnCurRegionId = pItem->mnRegionId + 1; - insertItems(pItem->maTemplates); - insertFilteredItems(); + insertItems(pItem->maTemplates, true, false); maOpenRegionHdl.Call(nullptr); } @@ -95,31 +94,39 @@ void TemplateDlgLocalView::reload() ListView::unselect_all(); } -void TemplateDlgLocalView::createContextMenu(const bool bIsDefault, const bool bIsBuiltIn) +void TemplateDlgLocalView::createContextMenu(const bool bIsDefault, const bool bIsBuiltIn, + const bool bIsSingleSel, const OUString& rDefaultImg) { mxContextMenu->clear(); - mxContextMenu->append("open", SfxResId(STR_OPEN)); - mxContextMenu->append("edit", SfxResId(STR_EDIT_TEMPLATE)); + mxContextMenu->append("open", SfxResId(STR_OPEN), BMP_MENU_OPEN); + mxContextMenu->append("edit", SfxResId(STR_EDIT_TEMPLATE), BMP_MENU_EDIT); if (!bIsDefault) - mxContextMenu->append("default", SfxResId(STR_DEFAULT_TEMPLATE)); + mxContextMenu->append("default", SfxResId(STR_DEFAULT_TEMPLATE), rDefaultImg); else - mxContextMenu->append("default", SfxResId(STR_RESET_DEFAULT)); + mxContextMenu->append("default", SfxResId(STR_RESET_DEFAULT), rDefaultImg); - mxContextMenu->append_separator("separator"); - mxContextMenu->append("rename", SfxResId(STR_SFX_RENAME)); - mxContextMenu->append("delete", SfxResId(STR_DELETE)); + mxContextMenu->append_separator("separator1"); + mxContextMenu->append("rename", SfxResId(STR_SFX_RENAME), BMP_MENU_RENAME); + mxContextMenu->append("delete", SfxResId(STR_DELETE_TEMPLATE), BMP_MENU_DELETE); + mxContextMenu->append_separator("separator2"); + mxContextMenu->append("move", SfxResId(STR_MOVE), BMP_MENU_MOVE); + mxContextMenu->append("export", SfxResId(STR_EXPORT), BMP_MENU_EXPORT); + + if (!bIsSingleSel) + { + mxContextMenu->set_sensitive("open", false); + mxContextMenu->set_sensitive("edit", false); + mxContextMenu->set_sensitive("default", false); + mxContextMenu->set_sensitive("rename", false); + } if (bIsBuiltIn) { mxContextMenu->set_sensitive("rename", false); - mxContextMenu->set_sensitive("edit", false); mxContextMenu->set_sensitive("delete", false); } if (mViewMode == TemplateViewMode::eThumbnailView) { - deselectItems(); - maSelectedItem->setSelection(true); - maItemStateHdl.Call(maSelectedItem); ContextMenuSelectHdl(mxContextMenu->popup_at_rect( GetDrawingArea(), tools::Rectangle(maPosition, Size(1, 1)))); Invalidate(); @@ -138,6 +145,7 @@ void TemplateDlgLocalView::ContextMenuSelectHdl(std::string_view rIdent) else if (rIdent == "rename") { InputDialog aTitleEditDlg(GetDrawingArea(), SfxResId(STR_RENAME_TEMPLATE)); + aTitleEditDlg.set_title(SfxResId(STR_WINDOW_TITLE_RENAME_TEMPLATE)); OUString sOldTitle = maSelectedItem->getTitle(); aTitleEditDlg.SetEntryText(sOldTitle); aTitleEditDlg.HideHelpBtn(); @@ -186,6 +194,14 @@ void TemplateDlgLocalView::ContextMenuSelectHdl(std::string_view rIdent) maDefaultTemplateHdl.Call(maSelectedItem); ListView::refreshDefaultColumn(); } + else if (rIdent == "move") + { + maMoveTemplateHdl.Call(maSelectedItem); + } + else if (rIdent == "export") + { + maExportTemplateHdl.Call(maSelectedItem); + } } void TemplateDlgLocalView::insertFilteredItems() @@ -204,6 +220,14 @@ void TemplateDlgLocalView::insertFilteredItems() ListView::sort(); } +void TemplateDlgLocalView::insertItems(const std::vector<TemplateItemProperties>& rTemplates, + bool isRegionSelected = true, + bool bShowCategoryInTooltip = false) +{ + TemplateLocalView::insertItems(rTemplates, isRegionSelected, bShowCategoryInTooltip); + insertFilteredItems(); +} + void TemplateDlgLocalView::setTemplateViewMode(TemplateViewMode eMode) { mViewMode = eMode; } void TemplateDlgLocalView::Show() @@ -313,10 +337,6 @@ IMPL_LINK(TemplateDlgLocalView, PopupMenuHdl, const CommandEvent&, rCEvt, bool) { if (ListView::get_selected_rows().empty()) return true; - int nIndex = ListView::get_cursor_index(); - ListView::unselect_all(); - ListView::select(nIndex); - ListView::set_cursor(nIndex); Point aPosition(rCEvt.GetMousePosPixel()); maPosition = aPosition; updateSelection(); @@ -328,10 +348,6 @@ IMPL_LINK(TemplateDlgLocalView, PopupMenuHdl, const CommandEvent&, rCEvt, bool) { if (ListView::get_selected_rows().empty()) return true; - int nIndex = ListView::get_cursor_index(); - ListView::unselect_all(); - ListView::select(nIndex); - ListView::set_cursor(nIndex); maPosition = Point(0, 0); updateSelection(); if (maSelectedItem) @@ -372,16 +388,7 @@ bool TemplateDlgLocalView::KeyInput(const KeyEvent& rKEvt) if (xQueryDlg->run() != RET_YES) return true; - //copy to avoid changing filtered item list during deletion - ThumbnailValueItemList mFilteredItemListCopy = mFilteredItemList; - - for (ThumbnailViewItem* pItem : mFilteredItemListCopy) - { - if (pItem->isSelected()) - { - maDeleteTemplateHdl.Call(pItem); - } - } + maDeleteTemplateHdl.Call(maSelectedItem); reload(); } @@ -401,17 +408,7 @@ IMPL_LINK(TemplateDlgLocalView, KeyPressHdl, const KeyEvent&, rKEvt, bool) if (xQueryDlg->run() != RET_YES) return true; - //copy to avoid changing filtered item list during deletion - ThumbnailValueItemList mFilteredItemListCopy = mFilteredItemList; - - for (ThumbnailViewItem* pItem : mFilteredItemListCopy) - { - if (pItem->isSelected()) - { - maDeleteTemplateHdl.Call(pItem); - } - } - + maDeleteTemplateHdl.Call(maSelectedItem); reload(); } return false; diff --git a/sfx2/source/control/templatelocalview.cxx b/sfx2/source/control/templatelocalview.cxx index a933a00285dd..c1916a44656a 100644 --- a/sfx2/source/control/templatelocalview.cxx +++ b/sfx2/source/control/templatelocalview.cxx @@ -30,6 +30,7 @@ #include <com/sun/star/util/thePathSettings.hpp> #include <unotools/ucbhelper.hxx> #include <sfxurlrelocator.hxx> +#include <../doc/doctemplateslocal.hxx> using namespace ::com::sun::star; @@ -760,7 +761,6 @@ bool TemplateLocalView::Command(const CommandEvent& rCEvt) if (rCEvt.IsMouseEvent()) { - deselectItems(); size_t nPos = ImplGetItem(rCEvt.GetMousePosPixel()); Point aPosition(rCEvt.GetMousePosPixel()); maPosition = aPosition; @@ -769,6 +769,12 @@ bool TemplateLocalView::Command(const CommandEvent& rCEvt) if(pViewItem) { + if(!pItem->isSelected()) + { + deselectItems(); + pItem->setSelection(true); + maItemStateHdl.Call(pItem); + } maSelectedItem = dynamic_cast<TemplateViewItem*>(pItem); maCreateContextMenuHdl.Call(pItem); } @@ -777,12 +783,8 @@ bool TemplateLocalView::Command(const CommandEvent& rCEvt) { for (ThumbnailViewItem* pItem : mFilteredItemList) { - //create context menu for the first selected item if (pItem->isSelected()) { - deselectItems(); - pItem->setSelection(true); - maItemStateHdl.Call(pItem); tools::Rectangle aRect = pItem->getDrawArea(); maPosition = aRect.Center(); maSelectedItem = dynamic_cast<TemplateViewItem*>(pItem); @@ -856,7 +858,7 @@ void TemplateLocalView::setEditTemplateHdl(const Link<ThumbnailViewItem*,void> & maEditTemplateHdl = rLink; } -void TemplateLocalView::setDeleteTemplateHdl(const Link<ThumbnailViewItem*,void> &rLink) +void TemplateLocalView::setDeleteTemplateHdl(const Link<void*,void> &rLink) { maDeleteTemplateHdl = rLink; } @@ -866,6 +868,16 @@ void TemplateLocalView::setDefaultTemplateHdl(const Link<ThumbnailViewItem*,void maDefaultTemplateHdl = rLink; } +void TemplateLocalView::setMoveTemplateHdl(const Link<void*,void> &rLink) +{ + maMoveTemplateHdl = rLink; +} + +void TemplateLocalView::setExportTemplateHdl(const Link<void*,void> &rLink) +{ + maExportTemplateHdl = rLink; +} + BitmapEx TemplateLocalView::scaleImg (const BitmapEx &rImg, tools::Long width, tools::Long height) { BitmapEx aImg = rImg; @@ -961,4 +973,27 @@ bool TemplateLocalView::IsInternalTemplate(const OUString& rPath) return false; } +bool TemplateLocalView::IsBuiltInRegion(const OUString& rRegionName) +{ + bool isBuiltInCategory = false; + auto aGroupNames = DocTemplLocaleHelper::GetBuiltInGroupNames(); + isBuiltInCategory = std::find(aGroupNames.begin(), aGroupNames.end(), + rRegionName) != aGroupNames.end(); + if(isBuiltInCategory) + return true; + //check if it contains any internal template + for(const auto& rItem : maRegions) + { + if(rItem->maTitle == rRegionName) + { + for(const auto& rTemplateItem : rItem->maTemplates) + { + if(IsInternalTemplate(rTemplateItem.aPath)) + return true; + } + break; + } + } + return false; +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/source/control/templatesearchview.cxx b/sfx2/source/control/templatesearchview.cxx deleted file mode 100644 index 009dbb9f4c15..000000000000 --- a/sfx2/source/control/templatesearchview.cxx +++ /dev/null @@ -1,462 +0,0 @@ -/* -*- 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/. - */ - -#include <templatesearchview.hxx> -#include <templatesearchviewitem.hxx> -#include <sfx2/templatelocalview.hxx> -#include <sfx2/sfxresid.hxx> -#include <tools/urlobj.hxx> -#include <vcl/svapp.hxx> -#include <vcl/weld.hxx> -#include <vcl/commandevent.hxx> -#include <vcl/event.hxx> - -#include <sfx2/strings.hrc> -#include <bitmaps.hlst> - -#define MNI_OPEN "open" -#define MNI_EDIT "edit" -#define MNI_DEFAULT_TEMPLATE "default" -#define MNI_DELETE "delete" - -TemplateSearchView::TemplateSearchView(std::unique_ptr<weld::ScrolledWindow> xWindow, - std::unique_ptr<weld::Menu> xMenu, - std::unique_ptr<weld::TreeView> xTreeView) - : ThumbnailView(std::move(xWindow), std::move(xMenu)) - , ListView(std::move(xTreeView)) - , maSelectedItem(nullptr) - , maPosition(0,0) - , mViewMode(TemplateViewMode::eThumbnailView) -{ - mxTreeView->connect_row_activated(LINK(this, TemplateSearchView, RowActivatedHdl)); - mxTreeView->connect_column_clicked(LINK(this, ListView, ColumnClickedHdl)); - mxTreeView->connect_changed(LINK(this, TemplateSearchView, ListViewChangedHdl)); - mxTreeView->connect_popup_menu(LINK(this, TemplateSearchView, PopupMenuHdl)); - mxTreeView->connect_key_press(LINK(this, TemplateSearchView, KeyPressHdl)); -} - -bool TemplateSearchView::MouseButtonDown( const MouseEvent& rMEvt ) -{ - GrabFocus(); - return ThumbnailView::MouseButtonDown(rMEvt); -} - -bool TemplateSearchView::KeyInput( const KeyEvent& rKEvt ) -{ - vcl::KeyCode aKeyCode = rKEvt.GetKeyCode(); - - if(aKeyCode == ( KEY_MOD1 | KEY_A ) ) - { - for (ThumbnailViewItem* pItem : mFilteredItemList) - { - if (!pItem->isSelected()) - { - pItem->setSelection(true); - maItemStateHdl.Call(pItem); - } - } - - if (IsReallyVisible() && IsUpdateMode()) - Invalidate(); - return true; - } - else if( aKeyCode == KEY_DELETE && !mFilteredItemList.empty()) - { - std::unique_ptr<weld::MessageDialog> xQueryDlg(Application::CreateMessageDialog(GetDrawingArea(), VclMessageType::Question, VclButtonsType::YesNo, - SfxResId(STR_QMSG_SEL_TEMPLATE_DELETE))); - if (xQueryDlg->run() != RET_YES) - return true; - - //copy to avoid changing filtered item list during deletion - ThumbnailValueItemList mFilteredItemListCopy = mFilteredItemList; - - for (ThumbnailViewItem* pItem : mFilteredItemListCopy) - { - if (pItem->isSelected()) - { - maDeleteTemplateHdl.Call(pItem); - ListView::remove(OUString::number(pItem->mnId)); - ThumbnailView::RemoveItem(pItem->mnId); - CalculateItemPositions(); - } - } - } - - return ThumbnailView::KeyInput(rKEvt); -} - -bool TemplateSearchView::Command(const CommandEvent& rCEvt) -{ - if (rCEvt.GetCommand() != CommandEventId::ContextMenu) - return CustomWidgetController::Command(rCEvt); - - if (rCEvt.IsMouseEvent()) - { - deselectItems(); - size_t nPos = ImplGetItem(rCEvt.GetMousePosPixel()); - Point aPosition(rCEvt.GetMousePosPixel()); - maPosition = aPosition; - ThumbnailViewItem* pItem = ImplGetItem(nPos); - const TemplateViewItem *pViewItem = dynamic_cast<const TemplateViewItem*>(pItem); - - if(pViewItem) - { - maSelectedItem = dynamic_cast<TemplateViewItem*>(pItem); - maCreateContextMenuHdl.Call(pItem); - } - } - else - { - for (ThumbnailViewItem* pItem : mFilteredItemList) - { - //create context menu for the first selected item - if (pItem->isSelected()) - { - deselectItems(); - pItem->setSelection(true); - maItemStateHdl.Call(pItem); - tools::Rectangle aRect = pItem->getDrawArea(); - maPosition = aRect.Center(); - maSelectedItem = dynamic_cast<TemplateViewItem*>(pItem); - maCreateContextMenuHdl.Call(pItem); - break; - } - } - } - return true; -} - -void TemplateSearchView::createContextMenu(const bool bIsDefault, const bool bIsBuiltIn) -{ - mxContextMenu->clear(); - mxContextMenu->append(MNI_OPEN,SfxResId(STR_OPEN)); - mxContextMenu->append(MNI_EDIT,SfxResId(STR_EDIT_TEMPLATE)); - - if (!bIsDefault) - mxContextMenu->append(MNI_DEFAULT_TEMPLATE,SfxResId(STR_DEFAULT_TEMPLATE)); - else - mxContextMenu->append(MNI_DEFAULT_TEMPLATE,SfxResId(STR_RESET_DEFAULT)); - - mxContextMenu->append_separator("separator"); - mxContextMenu->append(MNI_DELETE,SfxResId(STR_DELETE)); - if(bIsBuiltIn) - { - mxContextMenu->set_sensitive(MNI_EDIT, false); - mxContextMenu->set_sensitive(MNI_DELETE, false); - } - if(mViewMode == TemplateViewMode::eThumbnailView) - { - maSelectedItem->setSelection(true); - maItemStateHdl.Call(maSelectedItem); - ContextMenuSelectHdl(mxContextMenu->popup_at_rect(GetDrawingArea(), tools::Rectangle(maPosition, Size(1,1)))); - Invalidate(); - } - else if(mViewMode == TemplateViewMode::eListView) - ContextMenuSelectHdl(mxContextMenu->popup_at_rect(mxTreeView.get(), tools::Rectangle(maPosition, Size(1,1)))); -} - -void TemplateSearchView::ContextMenuSelectHdl(std::string_view rIdent) -{ - if (rIdent == MNI_OPEN) - maOpenTemplateHdl.Call(maSelectedItem); - else if (rIdent == MNI_EDIT) - maEditTemplateHdl.Call(maSelectedItem); - else if (rIdent == MNI_DELETE) - { - std::unique_ptr<weld::MessageDialog> xQueryDlg(Application::CreateMessageDialog(GetDrawingArea(), VclMessageType::Question, VclButtonsType::YesNo, - SfxResId(STR_QMSG_SEL_TEMPLATE_DELETE))); - if (xQueryDlg->run() != RET_YES) - return; - - maDeleteTemplateHdl.Call(maSelectedItem); - ListView::remove(OUString::number(maSelectedItem->mnId)); - ThumbnailView::RemoveItem(maSelectedItem->mnId); - - CalculateItemPositions(); - } - else if (rIdent == MNI_DEFAULT_TEMPLATE) - { - maDefaultTemplateHdl.Call(maSelectedItem); - ListView::refreshDefaultColumn(); - } -} - -void TemplateSearchView::setCreateContextMenuHdl(const Link<ThumbnailViewItem*,void> &rLink) -{ - maCreateContextMenuHdl = rLink; -} - -void TemplateSearchView::setOpenTemplateHdl(const Link<ThumbnailViewItem*, void> &rLink) -{ - maOpenTemplateHdl = rLink; -} - -void TemplateSearchView::setEditTemplateHdl(const Link<ThumbnailViewItem*,void> &rLink) -{ - maEditTemplateHdl = rLink; -} - -void TemplateSearchView::setDeleteTemplateHdl(const Link<ThumbnailViewItem*,void> &rLink) -{ - maDeleteTemplateHdl = rLink; -} - -void TemplateSearchView::setDefaultTemplateHdl(const Link<ThumbnailViewItem*,void> &rLink) -{ - maDefaultTemplateHdl = rLink; -} - -void TemplateSearchView::OnItemDblClicked (ThumbnailViewItem *pItem) -{ - maOpenTemplateHdl.Call(pItem); -} - -void TemplateSearchView::AppendItem(sal_uInt16 nAssocItemId, sal_uInt16 nRegionId, sal_uInt16 nIdx, - const OUString &rTitle, const OUString &rSubtitle, - const OUString &rPath, - const BitmapEx &rImage) -{ - std::unique_ptr<TemplateSearchViewItem> pItem(new TemplateSearchViewItem(*this, getNextItemId())); - pItem->mnAssocId = nAssocItemId; - pItem->mnDocId = nIdx; - pItem->mnRegionId = nRegionId; - - if(!rImage.IsEmpty()) - pItem->maPreview1 = rImage; - else - pItem->maPreview1 = getDefaultThumbnail(rPath); - - pItem->maTitle = rTitle; - pItem->setHelpText(rSubtitle); - pItem->setPath(rPath); - - if (TemplateLocalView::IsDefaultTemplate(rPath)) - pItem->showDefaultIcon(true); - - bool isDefault = pItem->IsDefaultTemplate(); - OUString sId = OUString::number(pItem->mnId); - ListView::AppendItem(sId, rTitle, rSubtitle, rPath, isDefault); - ThumbnailView::AppendItem(std::move(pItem)); - - CalculateItemPositions(); -} - -void TemplateSearchView::Clear() -{ - ThumbnailView::Clear(); - ListView::clearListView(); -} - -void TemplateSearchView::setTemplateViewMode ( TemplateViewMode eMode ) -{ - mViewMode = eMode; -} - -void TemplateSearchView::Show() -{ - if ( mViewMode == TemplateViewMode::eListView) - { - ThumbnailView::Hide(); - ListView::ShowListView(); - } - else - { - ThumbnailView::Show(); - ListView::HideListView(); - } - syncCursor(); -} - -void TemplateSearchView::Hide() -{ - ThumbnailView::Hide(); - ListView::HideListView(); -} - -bool TemplateSearchView::IsVisible() const -{ - return ThumbnailView::IsVisible() || ListView::IsListViewVisible(); -} - -void TemplateSearchView::syncCursor() -{ - if ( mViewMode == TemplateViewMode::eListView) - { - ListView::unselect_all(); - int nIndex = -1; - - for(auto it = mFilteredItemList.cbegin(); it != mFilteredItemList.cend() ; ++it ) - { - if((*it)->mbSelected) - { - nIndex = -1; - nIndex = ListView::get_index((*it)->mnId); - if(nIndex >= 0) - { - ListView::set_cursor(nIndex); - ListView::select(nIndex); - break; - } - } - } - updateSelection(); - } - else - { - ThumbnailView::deselectItems(); - std::vector<int> aSelRows = ListView::get_selected_rows(); - if(aSelRows.empty()) - return; - sal_uInt16 nCursorId = ListView::get_cursor_nId(); - ThumbnailView::SelectItem(nCursorId); - MakeItemVisible(nCursorId); - - for(auto it = mFilteredItemList.begin(); it != mFilteredItemList.end() ; ++it ) - { - if((*it)->mnId == nCursorId) - { - mpStartSelRange = it; - break; - } - } - - size_t nPos = GetItemPos(nCursorId); - ThumbnailViewItem* pItem = ImplGetItem(nPos); - const TemplateViewItem *pViewItem = dynamic_cast<const TemplateViewItem*>(pItem); - if(pViewItem) - maSelectedItem = dynamic_cast<TemplateViewItem*>(pItem); - } -} - -void TemplateSearchView::updateSelection() -{ - ThumbnailView::deselectItems(); - for(auto nIndex : ListView::get_selected_rows()) - { - ThumbnailView::SelectItem(ListView::get_nId(nIndex) ); - } - - sal_uInt16 nCursorId = ListView::get_cursor_nId(); - size_t nPos = GetItemPos(nCursorId); - ThumbnailViewItem* pItem = ImplGetItem(nPos); - const TemplateViewItem *pViewItem = dynamic_cast<const TemplateViewItem*>(pItem); - if(pViewItem) - maSelectedItem = dynamic_cast<TemplateViewItem*>(pItem); - return; -} - -IMPL_LINK_NOARG(TemplateSearchView, RowActivatedHdl, weld::TreeView&, bool) -{ - maOpenTemplateHdl.Call(maSelectedItem); - return true; -} - -IMPL_LINK(TemplateSearchView, PopupMenuHdl, const CommandEvent&, rCEvt, bool) -{ - if (rCEvt.GetCommand() != CommandEventId::ContextMenu) - return false; - - if (rCEvt.IsMouseEvent()) - { - if(ListView::get_selected_rows().empty()) - return true; - int nIndex = ListView::get_cursor_index(); - ListView::unselect_all(); - ListView::select(nIndex); - ListView::set_cursor(nIndex); - Point aPosition (rCEvt.GetMousePosPixel()); - maPosition = aPosition; - updateSelection(); - if(maSelectedItem) - maCreateContextMenuHdl.Call(maSelectedItem); - return true; - } - else - { - if(ListView::get_selected_rows().empty()) - return true; - int nIndex = ListView::get_cursor_index(); - ListView::unselect_all(); - ListView::select(nIndex) ; - ListView::set_cursor(nIndex) ; - maPosition = Point(0,0); - updateSelection(); - if(maSelectedItem) - maCreateContextMenuHdl.Call(maSelectedItem); - return true; - } -} - -IMPL_LINK_NOARG(TemplateSearchView, ListViewChangedHdl, weld::TreeView&, void) -{ - updateSelection(); -} - -BitmapEx TemplateSearchView::getDefaultThumbnail( const OUString& rPath ) -{ - BitmapEx aImg; - INetURLObject aUrl(rPath); - OUString aExt = aUrl.getExtension(); - - if ( ViewFilter_Application::isFilteredExtension( FILTER_APPLICATION::WRITER, aExt) ) - aImg = BitmapEx(SFX_THUMBNAIL_TEXT); - else if ( ViewFilter_Application::isFilteredExtension( FILTER_APPLICATION::CALC, aExt) ) - aImg = BitmapEx(SFX_THUMBNAIL_SHEET); - else if ( ViewFilter_Application::isFilteredExtension( FILTER_APPLICATION::IMPRESS, aExt) ) - aImg = BitmapEx(SFX_THUMBNAIL_PRESENTATION); - else if ( ViewFilter_Application::isFilteredExtension( FILTER_APPLICATION::DRAW, aExt) ) - aImg = BitmapEx(SFX_THUMBNAIL_DRAWING); - - return aImg; -} - -void TemplateSearchView::RemoveDefaultTemplateIcon(std::u16string_view rPath) -{ - for (const std::unique_ptr<ThumbnailViewItem>& pItem : mItemList) - { - TemplateViewItem* pViewItem = dynamic_cast<TemplateViewItem*>(pItem.get()); - if (pViewItem && pViewItem->getPath().match(rPath)) - { - pViewItem->showDefaultIcon(false); - Invalidate(); - return; - } - } -} - -IMPL_LINK(TemplateSearchView, KeyPressHdl, const KeyEvent&, rKEvt, bool) -{ - vcl::KeyCode aKeyCode = rKEvt.GetKeyCode(); - - if( aKeyCode == KEY_DELETE && !mFilteredItemList.empty() && !ListView::get_selected_rows().empty()) - { - std::unique_ptr<weld::MessageDialog> xQueryDlg(Application::CreateMessageDialog(mxTreeView.get(), VclMessageType::Question, VclButtonsType::YesNo, - SfxResId(STR_QMSG_SEL_TEMPLATE_DELETE))); - if (xQueryDlg->run() != RET_YES) - return true; - - //copy to avoid changing filtered item list during deletion - ThumbnailValueItemList mFilteredItemListCopy = mFilteredItemList; - - for (ThumbnailViewItem* pItem : mFilteredItemListCopy) - { - if (pItem->isSelected()) - { - maDeleteTemplateHdl.Call(pItem); - ListView::remove(OUString::number(pItem->mnId)); - ThumbnailView::RemoveItem(pItem->mnId); - - CalculateItemPositions(); - } - } - } - - return false; -} -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/source/doc/doctemplates.cxx b/sfx2/source/doc/doctemplates.cxx index 2cfc845204e6..b1273c0b53c6 100644 --- a/sfx2/source/doc/doctemplates.cxx +++ b/sfx2/source/doc/doctemplates.cxx @@ -2737,4 +2737,12 @@ OUString DocTemplLocaleHelper::GetStandardGroupString() return SfxResId(TEMPLATE_LONG_NAMES_ARY[0]); } +std::vector<OUString> DocTemplLocaleHelper::GetBuiltInGroupNames() +{ + std::vector<OUString> aGroups; + for(auto aGroupName : TEMPLATE_LONG_NAMES_ARY) + aGroups.push_back(SfxResId(aGroupName)); + return aGroups; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/source/doc/doctemplateslocal.hxx b/sfx2/source/doc/doctemplateslocal.hxx index 1da7110b66ba..466c847db1b5 100644 --- a/sfx2/source/doc/doctemplateslocal.hxx +++ b/sfx2/source/doc/doctemplateslocal.hxx @@ -60,6 +60,7 @@ public: const css::uno::Reference< css::uno::XComponentContext >& xContext ); static OUString GetStandardGroupString(); + static std::vector<OUString> GetBuiltInGroupNames(); // XDocumentHandler virtual void SAL_CALL startDocument() override; diff --git a/sfx2/source/doc/templatedlg.cxx b/sfx2/source/doc/templatedlg.cxx index 1a7129386329..34011c454f3a 100644 --- a/sfx2/source/doc/templatedlg.cxx +++ b/sfx2/source/doc/templatedlg.cxx @@ -11,8 +11,6 @@ #include <sfx2/inputdlg.hxx> #include <sfx2/module.hxx> -#include <templatesearchview.hxx> -#include <templatesearchviewitem.hxx> #include <comphelper/processfactory.hxx> #include <comphelper/string.hxx> @@ -54,6 +52,7 @@ #include <comphelper/dispatchcommand.hxx> #include <sfx2/strings.hrc> +#include <bitmaps.hlst> constexpr OUStringLiteral TM_SETTING_MANAGER = u"TemplateManager"; constexpr OUStringLiteral TM_SETTING_LASTFOLDER = u"LastFolder"; @@ -65,6 +64,15 @@ constexpr OUStringLiteral TM_SETTING_VIEWMODE = u"ViewMode"; #define MNI_ACTION_DELETE_FOLDER "delete" #define MNI_ACTION_REFRESH "refresh" #define MNI_ACTION_DEFAULT "default" +#define MNI_ACTION_DEFAULT_WRITER "default writer" +#define MNI_ACTION_DEFAULT_CALC "default calc" +#define MNI_ACTION_DEFAULT_IMPRESS "default impress" +#define MNI_ACTION_DEFAULT_DRAW "default draw" +#define MNI_ACTION_MOVE "move template" +#define MNI_ACTION_IMPORT "import template" +#define MNI_ACTION_EXPORT "export template" +#define MNI_ACTION_EXTENSIONS "extensions" +#define MNI_ALL_APPLICATIONS 0 #define MNI_WRITER 1 #define MNI_CALC 2 #define MNI_IMPRESS 3 @@ -156,31 +164,31 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg(weld::Window *pParent) , mxCBApp(m_xBuilder->weld_combo_box("filter_application")) , mxCBFolder(m_xBuilder->weld_combo_box("filter_folder")) , mxOKButton(m_xBuilder->weld_button("ok")) - , mxMoveButton(m_xBuilder->weld_button("move_btn")) - , mxExportButton(m_xBuilder->weld_button("export_btn")) - , mxImportButton(m_xBuilder->weld_button("import_btn")) - , mxMoreTemplatesButton(m_xBuilder->weld_button("btnMoreTemplates")) , mxCBXHideDlg(m_xBuilder->weld_check_button("hidedialogcb")) , mxActionBar(m_xBuilder->weld_menu_button("action_menu")) - , mxSearchView(new TemplateSearchView(m_xBuilder->weld_scrolled_window("scrollsearch", true), - m_xBuilder->weld_menu("contextmenu1"), - m_xBuilder->weld_tree_view("treesearch_list"))) , mxLocalView(new TemplateDlgLocalView(m_xBuilder->weld_scrolled_window("scrolllocal", true), - m_xBuilder->weld_menu("contextmenu2"), + m_xBuilder->weld_menu("contextmenu"), m_xBuilder->weld_tree_view("tree_list"))) - , mxTemplateDefaultMenu(m_xBuilder->weld_menu("submenu")) - , mxSearchViewWeld(new weld::CustomWeld(*m_xBuilder, "search_view", *mxSearchView)) , mxLocalViewWeld(new weld::CustomWeld(*m_xBuilder, "template_view", *mxLocalView)) , mxListViewButton(m_xBuilder->weld_toggle_button("list_view_btn")) , mxThumbnailViewButton(m_xBuilder->weld_toggle_button("thumbnail_view_btn")) , mViewMode(TemplateViewMode::eThumbnailView) { // Create popup menus - mxActionBar->insert_item(0, MNI_ACTION_NEW_FOLDER, SfxResId(STR_CATEGORY_NEW), nullptr, nullptr, TRISTATE_INDET); - mxActionBar->insert_item(1, MNI_ACTION_RENAME_FOLDER, SfxResId(STR_CATEGORY_RENAME), nullptr, nullptr, TRISTATE_INDET); - mxActionBar->insert_item(2, MNI_ACTION_DELETE_FOLDER, SfxResId(STR_CATEGORY_DELETE), nullptr, nullptr, TRISTATE_INDET); - mxActionBar->insert_separator(3, "separator"); - mxActionBar->insert_item(4, MNI_ACTION_REFRESH, SfxResId(STR_ACTION_REFRESH), nullptr, nullptr, TRISTATE_INDET); + mxActionBar->append_item(MNI_ACTION_NEW_FOLDER, SfxResId(STR_CATEGORY_NEW), BMP_ACTION_NEW_CATEGORY); + mxActionBar->append_item(MNI_ACTION_RENAME_FOLDER, SfxResId(STR_CATEGORY_RENAME), BMP_ACTION_RENAME); + mxActionBar->append_item(MNI_ACTION_DELETE_FOLDER, SfxResId(STR_CATEGORY_DELETE), BMP_ACTION_DELETE_CATEGORY); + mxActionBar->append_separator("separator"); + mxActionBar->append_item(MNI_ACTION_REFRESH, SfxResId(STR_ACTION_REFRESH), BMP_ACTION_REFRESH); + mxActionBar->append_item(MNI_ACTION_DEFAULT, SfxResId(STR_ACTION_RESET_ALL_DEAULT_TEMPLATES)); + mxActionBar->append_item(MNI_ACTION_DEFAULT_WRITER, SfxResId(STR_ACTION_RESET_WRITER_TEMPLATE), BMP_ACTION_DEFAULT_WRITER); + mxActionBar->append_item(MNI_ACTION_DEFAULT_CALC, SfxResId(STR_ACTION_RESET_CALC_TEMPLATE), BMP_ACTION_DEFAULT_CALC); + mxActionBar->append_item(MNI_ACTION_DEFAULT_IMPRESS, SfxResId(STR_ACTION_RESET_IMPRESS_TEMPLATE), BMP_ACTION_DEFAULT_IMPRESS); + mxActionBar->append_item(MNI_ACTION_DEFAULT_DRAW, SfxResId(STR_ACTION_RESET_DRAW_TEMPLATE), BMP_ACTION_DEFAULT_DRAW); + mxActionBar->append_separator("separator2"); + mxActionBar->append_item(MNI_ACTION_IMPORT, SfxResId(STR_ACTION_IMPORT), BMP_ACTION_IMPORT); + mxActionBar->append_item(MNI_ACTION_EXTENSIONS, SfxResId(STR_ACTION_EXTENSIONS), BMP_ACTION_EXTENSIONS); + mxActionBar->connect_selected(LINK(this,SfxTemplateManagerDlg,MenuSelectHdl)); mxLocalView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH); @@ -195,32 +203,17 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg(weld::Window *pParent) mxLocalView->setEditTemplateHdl(LINK(this,SfxTemplateManagerDlg, EditTemplateHdl)); mxLocalView->setDeleteTemplateHdl(LINK(this,SfxTemplateManagerDlg, DeleteTemplateHdl)); mxLocalView->setDefaultTemplateHdl(LINK(this,SfxTemplateManagerDlg, DefaultTemplateHdl)); - - mxSearchView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH); - - mxSearchView->setItemDimensions(TEMPLATE_ITEM_MAX_WIDTH,TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT, - TEMPLATE_ITEM_MAX_HEIGHT_SUB-TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT, - TEMPLATE_ITEM_PADDING); - - mxSearchView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVItemStateHdl)); - mxSearchView->setCreateContextMenuHdl(LINK(this,SfxTemplateManagerDlg, CreateContextMenuHdl)); - mxSearchView->setOpenTemplateHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl)); - mxSearchView->setEditTemplateHdl(LINK(this,SfxTemplateManagerDlg, EditTemplateHdl)); - mxSearchView->setDeleteTemplateHdl(LINK(this,SfxTemplateManagerDlg, DeleteTemplateHdl)); - mxSearchView->setDefaultTemplateHdl(LINK(this,SfxTemplateManagerDlg, DefaultTemplateHdl)); + mxLocalView->setMoveTemplateHdl(LINK(this,SfxTemplateManagerDlg, MoveTemplateHdl)); + mxLocalView->setExportTemplateHdl(LINK(this,SfxTemplateManagerDlg, ExportTemplateHdl)); mxLocalView->ShowTooltips(true); - mxSearchView->ShowTooltips(true); mxOKButton->connect_clicked(LINK(this, SfxTemplateManagerDlg, OkClickHdl)); - mxMoveButton->connect_clicked(LINK(this, SfxTemplateManagerDlg, MoveClickHdl)); - mxExportButton->connect_clicked(LINK(this, SfxTemplateManagerDlg, ExportClickHdl)); - mxImportButton->connect_clicked(LINK(this, SfxTemplateManagerDlg, ImportClickHdl)); // FIXME: rather than disabling make dispatchCommand(".uno:AdditionsDialog") work in start center if ( !SfxModule::GetActiveModule() ) - mxMoreTemplatesButton->set_sensitive(false); + mxActionBar->set_item_sensitive(MNI_ACTION_EXTENSIONS, false); else - mxMoreTemplatesButton->connect_clicked(LINK(this, SfxTemplateManagerDlg, LinkClickHdl)); + mxActionBar->set_item_sensitive(MNI_ACTION_EXTENSIONS, true); mxListViewButton->connect_toggled(LINK(this, SfxTemplateManagerDlg, ListViewHdl)); mxThumbnailViewButton->connect_toggled(LINK(this, SfxTemplateManagerDlg, ThumbnailViewHdl)); @@ -231,16 +224,18 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg(weld::Window *pParent) mxActionBar->show(); - createDefaultTemplateMenu(); - mxLocalView->Populate(); mxLocalView->filterItems(ViewFilter_Application(FILTER_APPLICATION::NONE)); mxCBApp->set_active(0); fillFolderComboBox(); - mxExportButton->set_sensitive(false); - mxMoveButton->set_sensitive(false); + mxActionBar->set_item_visible(MNI_ACTION_EXTENSIONS, true); + mxActionBar->set_item_visible(MNI_ACTION_EXPORT, true); + mxActionBar->set_item_visible(MNI_ACTION_MOVE, true); + mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, true); + mxActionBar->set_item_visible(MNI_ACTION_DELETE_FOLDER, true); + mxOKButton->set_label(SfxResId(STR_OPEN)); mxCBApp->connect_changed(LINK(this, SfxTemplateManagerDlg, SelectApplicationHdl)); @@ -253,7 +248,6 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg(weld::Window *pParent) m_aUpdateDataTimer.SetTimeout(EDIT_UPDATEDATA_TIMEOUT); mxLocalView->connect_focus_rect(LINK(this, SfxTemplateManagerDlg, FocusRectLocalHdl)); - mxSearchView->connect_focus_rect(LINK(this, SfxTemplateManagerDlg, FocusRectSearchHdl)); bMakeSelItemVisible = false; } @@ -265,8 +259,6 @@ SfxTemplateManagerDlg::~SfxTemplateManagerDlg() mxLocalView->setItemStateHdl(Link<const ThumbnailViewItem*,void>()); mxLocalView->setOpenRegionHdl(Link<void*,void>()); mxLocalView->setOpenTemplateHdl(Link<ThumbnailViewItem*, void>()); - mxSearchView->setItemStateHdl(Link<const ThumbnailViewItem*,void>()); - mxSearchView->setOpenTemplateHdl(Link<ThumbnailViewItem*, void>()); } short SfxTemplateManagerDlg::run() @@ -274,6 +266,7 @@ short SfxTemplateManagerDlg::run() //use application specific settings if there's no previous setting getApplicationSpecificSettings(); readSettings(); + updateMenuItems(); return weld::GenericDialogController::run(); } @@ -302,28 +295,22 @@ void SfxTemplateManagerDlg::setDocumentModel(const uno::Reference<frame::XModel> void SfxTemplateManagerDlg::setTemplateViewMode(TemplateViewMode eViewMode) { - mViewMode = eViewMode; - mxLocalView->setTemplateViewMode(eViewMode); - mxSearchView->setTemplateViewMode(eViewMode); - if ( mViewMode == TemplateViewMode::eListView) - { - mxThumbnailViewButton->set_active(false); - mxListViewButton->set_active(true); - } - else - { - mxThumbnailViewButton->set_active(true); - mxListViewButton->set_active(false); - } - - if (! mxSearchFilter->get_text().isEmpty()) + if(eViewMode == TemplateViewMode::eThumbnailView && mViewMode != TemplateViewMode::eThumbnailView) { - mxSearchView->Show(); - mxLocalView->Hide(); + mxThumbnailViewButton->set_state(TRISTATE_TRUE); + mxListViewButton->set_state(TRISTATE_FALSE); + mxLocalView->ThumbnailView::GrabFocus(); + mViewMode = eViewMode; + mxLocalView->setTemplateViewMode(eViewMode); + mxLocalView->Show(); } - else + if(eViewMode == TemplateViewMode::eListView && mViewMode != TemplateViewMode::eListView) { - mxSearchView->Hide(); + mxListViewButton->set_state(TRISTATE_TRUE); + mxThumbnailViewButton->set_state(TRISTATE_FALSE); + mxLocalView->ListView::grab_focus(); + mViewMode = eViewMode; + mxLocalView->setTemplateViewMode(eViewMode); mxLocalView->Show(); } } @@ -357,7 +344,8 @@ void SfxTemplateManagerDlg::fillFolderComboBox() for (size_t i = 0, n = aFolderNames.size(); i < n; ++i) mxCBFolder->append_text(aFolderNames[i]); mxCBFolder->set_active(0); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DELETE_FOLDER, false); } void SfxTemplateManagerDlg::getApplicationSpecificSettings() @@ -366,7 +354,8 @@ void SfxTemplateManagerDlg::getApplicationSpecificSettings() { mxCBApp->set_active(0); mxCBFolder->set_active(0); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DELETE_FOLDER, false); mxLocalView->filterItems(ViewFilter_Application(getCurrentApplicationFilter())); mxLocalView->showAllTemplates(); return; @@ -397,7 +386,8 @@ void SfxTemplateManagerDlg::getApplicationSpecificSettings() mxLocalView->filterItems(ViewFilter_Application(getCurrentApplicationFilter())); mxCBFolder->set_active(0); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DELETE_FOLDER, false); mxLocalView->showAllTemplates(); } @@ -444,14 +434,17 @@ void SfxTemplateManagerDlg::readSettings () { //show all categories mxCBFolder->set_active(0); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DELETE_FOLDER, false); mxLocalView->showAllTemplates(); } else { mxCBFolder->set_active_text(aLastFolder); mxLocalView->showRegion(aLastFolder); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, true); + bool bIsBuiltInRegion = mxLocalView->IsBuiltInRegion(aLastFolder); + mxActionBar->set_item_sensitive(MNI_ACTION_RENAME_FOLDER, !bIsBuiltInRegion); + mxActionBar->set_item_sensitive(MNI_ACTION_DELETE_FOLDER, !bIsBuiltInRegion); } if(nViewMode == static_cast<sal_Int16>(TemplateViewMode::eListView) || @@ -489,15 +482,9 @@ void SfxTemplateManagerDlg::writeSettings () IMPL_LINK_NOARG(SfxTemplateManagerDlg, SelectApplicationHdl, weld::ComboBox&, void) { - if (mxLocalView->IsVisible()) - { - mxLocalView->filterItems(ViewFilter_Application(getCurrentApplicationFilter())); - mxLocalView->showAllTemplates(); - mxCBFolder->set_active(0); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, false); - } - if (mxSearchView->IsVisible()) - SearchUpdate(); + mxLocalView->filterItems(ViewFilter_Application(getCurrentApplicationFilter())); + SelectRegionHdl(*mxCBFolder); + updateMenuItems(); } IMPL_LINK_NOARG(SfxTemplateManagerDlg, SelectRegionHdl, weld::ComboBox&, void) @@ -507,15 +494,17 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, SelectRegionHdl, weld::ComboBox&, void) if(mxCBFolder->get_active() == 0) { mxLocalView->showAllTemplates(); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DELETE_FOLDER, false); } else { mxLocalView->showRegion(sSelectedRegion); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, true); + bool bIsBuiltInRegion = mxLocalView->IsBuiltInRegion(sSelectedRegion); + mxActionBar->set_item_sensitive(MNI_ACTION_RENAME_FOLDER, !bIsBuiltInRegion); + mxActionBar->set_item_sensitive(MNI_ACTION_DELETE_FOLDER, !bIsBuiltInRegion); } - if (mxSearchView->IsVisible()) - SearchUpdate(); + FilterSearch(); } IMPL_LINK(SfxTemplateManagerDlg, TVItemStateHdl, const ThumbnailViewItem*, pItem, void) @@ -537,32 +526,49 @@ IMPL_LINK(SfxTemplateManagerDlg, MenuSelectHdl, const OString&, rIdent, void) else if (rIdent == MNI_ACTION_REFRESH) { mxLocalView->reload(); - if(mxSearchView->IsVisible()) - SearchUpdateHdl(*mxSearchFilter); + FilterSearch(); } - else if (rIdent != MNI_ACTION_DEFAULT) + else if (rIdent == MNI_ACTION_DEFAULT) + { + DefaultTemplateMenuSelectHdl(MNI_ACTION_DEFAULT_WRITER); + DefaultTemplateMenuSelectHdl(MNI_ACTION_DEFAULT_CALC); + DefaultTemplateMenuSelectHdl(MNI_ACTION_DEFAULT_IMPRESS); + DefaultTemplateMenuSelectHdl(MNI_ACTION_DEFAULT_DRAW); + } + else if(rIdent == MNI_ACTION_DEFAULT_WRITER || rIdent == MNI_ACTION_DEFAULT_CALC || + rIdent == MNI_ACTION_DEFAULT_IMPRESS || rIdent == MNI_ACTION_DEFAULT_DRAW ) DefaultTemplateMenuSelectHdl(rIdent); + else if(rIdent == MNI_ACTION_IMPORT) + ImportActionHdl(); + else if(rIdent == MNI_ACTION_EXTENSIONS) + ExtensionsActionHdl(); } void SfxTemplateManagerDlg::DefaultTemplateMenuSelectHdl(std::string_view rIdent) { - OUString aServiceName = SfxObjectShell::GetServiceNameFromFactory(OUString::fromUtf8(rIdent)); + SvtModuleOptions aModOpt; + OUString aFactoryURL; + if (rIdent == MNI_ACTION_DEFAULT_WRITER) + aFactoryURL = aModOpt.GetFactoryEmptyDocumentURL( SvtModuleOptions::EFactory::WRITER); + else if (rIdent == MNI_ACTION_DEFAULT_CALC) + aFactoryURL = aModOpt.GetFactoryEmptyDocumentURL( SvtModuleOptions::EFactory::CALC); + else if (rIdent == MNI_ACTION_DEFAULT_IMPRESS) + aFactoryURL = aModOpt.GetFactoryEmptyDocumentURL( SvtModuleOptions::EFactory::IMPRESS); + else if (rIdent == MNI_ACTION_DEFAULT_DRAW) + aFactoryURL = aModOpt.GetFactoryEmptyDocumentURL( SvtModuleOptions::EFactory::DRAW); + else + return; + OUString aServiceName = SfxObjectShell::GetServiceNameFromFactory(aFactoryURL); OUString sPrevDefault = SfxObjectFactory::GetStandardTemplate( aServiceName ); if(!sPrevDefault.isEmpty()) { - if(mxSearchView->IsVisible()) - mxSearchView->RemoveDefaultTemplateIcon(sPrevDefault); - else - mxLocalView->RemoveDefaultTemplateIcon(sPrevDefault); + mxLocalView->RemoveDefaultTemplateIcon(sPrevDefault); } SfxObjectFactory::SetStandardTemplate( aServiceName, OUString() ); - if (mxSearchView->IsVisible()) - mxSearchView->refreshDefaultColumn(); - else - mxLocalView->refreshDefaultColumn(); - createDefaultTemplateMenu(); + mxLocalView->refreshDefaultColumn(); + updateMenuItems(); } IMPL_LINK_NOARG(SfxTemplateManagerDlg, OkClickHdl, weld::Button&, void) @@ -571,7 +577,7 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, OkClickHdl, weld::Button&, void) m_xDialog->response(RET_OK); } -IMPL_LINK_NOARG(SfxTemplateManagerDlg, MoveClickHdl, weld::Button&, void) +IMPL_LINK_NOARG(SfxTemplateManagerDlg, MoveTemplateHdl, void*, void) { // modal dialog to select templates category SfxTemplateCategoryDialog aDlg(m_xDialog.get()); @@ -594,67 +600,72 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, MoveClickHdl, weld::Button&, void) } else nItemId = mxLocalView->getRegionId(sCategory); - } - if(nItemId) - { - if (mxSearchView->IsVisible()) - localSearchMoveTo(nItemId); - else + if(nItemId) + { localMoveTo(nItemId); - } + } - mxLocalView->reload(); - if (mxSearchView->IsVisible()) - SearchUpdate(); + mxLocalView->reload(); + FilterSearch(); + } } - -IMPL_LINK_NOARG(SfxTemplateManagerDlg, ExportClickHdl, weld::Button&, void) +IMPL_LINK_NOARG(SfxTemplateManagerDlg, ExportTemplateHdl, void*, void) { OnTemplateExport(); } -IMPL_LINK_NOARG(SfxTemplateManagerDlg, ImportClickHdl, weld::Button&, void) +void SfxTemplateManagerDlg::ImportActionHdl() { - //Modal Dialog to select Category - SfxTemplateCategoryDialog aDlg(m_xDialog.get()); - aDlg.SetCategoryLBEntries(mxLocalView->getFolderNames()); - - if (aDlg.run() == RET_OK) + if(mxCBFolder->get_active() == 0) { - const OUString& sCategory = aDlg.GetSelectedCategory(); - bool bIsNewCategory = aDlg.IsNewCategoryCreated(); - if(bIsNewCategory) + //Modal Dialog to select Category + SfxTemplateCategoryDialog aDlg(m_xDialog.get()); + aDlg.SetCategoryLBEntries(mxLocalView->getFolderNames()); + + if (aDlg.run() == RET_OK) { - if(mxLocalView->createRegion(sCategory)) + const OUString& sCategory = aDlg.GetSelectedCategory(); + bool bIsNewCategory = aDlg.IsNewCategoryCreated(); + if(bIsNewCategory) { - mxCBFolder->append_text(sCategory); - OnTemplateImportCategory(sCategory); + if(mxLocalView->createRegion(sCategory)) + { + mxCBFolder->append_text(sCategory); + OnTemplateImportCategory(sCategory); + } + else + { + OUString aMsg( SfxResId(STR_CREATE_ERROR) ); + std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(), + VclMessageType::Warning, VclButtonsType::Ok, + aMsg.replaceFirst("$1", sCategory))); + xBox->run(); + return; + } } else - { - OUString aMsg( SfxResId(STR_CREATE_ERROR) ); - std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(), - VclMessageType::Warning, VclButtonsType::Ok, - aMsg.replaceFirst("$1", sCategory))); - xBox->run(); - return; - } + OnTemplateImportCategory(sCategory); + + mxLocalView->reload(); + mxLocalView->showAllTemplates(); + FilterSearch(); + mxCBApp->set_active(0); + mxCBFolder->set_active(0); + mxActionBar->set_item_sensitive(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DELETE_FOLDER, false); } - else - OnTemplateImportCategory(sCategory); } - - mxLocalView->reload(); - mxLocalView->showAllTemplates(); - if (mxSearchView->IsVisible()) - SearchUpdate(); - mxCBApp->set_active(0); - mxCBFolder->set_active(0); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, false); + else + { + const auto sCategory = mxCBFolder->get_active_text(); + OnTemplateImportCategory(sCategory); + mxLocalView->reload(); + FilterSearch(); + } } -IMPL_STATIC_LINK_NOARG(SfxTemplateManagerDlg, LinkClickHdl, weld::Button&, void) +void SfxTemplateManagerDlg::ExtensionsActionHdl() { uno::Sequence<beans::PropertyValue> aArgs(1); aArgs[0].Name = "AdditionsTag"; @@ -672,13 +683,41 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, OpenRegionHdl, void*, void) IMPL_LINK(SfxTemplateManagerDlg, CreateContextMenuHdl, ThumbnailViewItem*, pItem, void) { const TemplateViewItem *pViewItem = dynamic_cast<TemplateViewItem*>(pItem); + bool bIsDefault = false; + bool bIsInternal = false; + std::vector<const TemplateViewItem*> aSelTemplates; + for(const auto& aSelTmpl : maSelTemplates) + { + const TemplateViewItem *aItem = dynamic_cast<const TemplateViewItem*>(aSelTmpl); + aSelTemplates.push_back(aItem); + } + + for(const auto& aSelTmpl : aSelTemplates) + { + if(aSelTmpl->IsDefaultTemplate()) + bIsDefault = true; + if(TemplateLocalView::IsInternalTemplate(aSelTmpl->getPath())) + { + bIsInternal = true; + if(bIsDefault) + break; + } + } if (pViewItem) { - if (mxSearchView->IsVisible()) - mxSearchView->createContextMenu(pViewItem->IsDefaultTemplate(), TemplateLocalView::IsInternalTemplate(pViewItem->getPath())); - else - mxLocalView->createContextMenu(pViewItem->IsDefaultTemplate(), TemplateLocalView::IsInternalTemplate(pViewItem->getPath())); + bool bIsSingleSel = maSelTemplates.size() == 1; + OUString aDefaultImg; + INetURLObject aUrl(pViewItem->getPath()); + if (ViewFilter_Application::isFilteredExtension(FILTER_APPLICATION::WRITER, aUrl.getExtension())) + aDefaultImg = BMP_ACTION_DEFAULT_WRITER; + else if (ViewFilter_Application::isFilteredExtension(FILTER_APPLICATION::CALC, aUrl.getExtension())) + aDefaultImg = BMP_ACTION_DEFAULT_CALC; + else if (ViewFilter_Application::isFilteredExtension(FILTER_APPLICATION::IMPRESS, aUrl.getExtension())) + aDefaultImg = BMP_ACTION_DEFAULT_IMPRESS; + else if (ViewFilter_Application::isFilteredExtension(FILTER_APPLICATION::DRAW, aUrl.getExtension())) + aDefaultImg = BMP_ACTION_DEFAULT_DRAW; + mxLocalView->createContextMenu(bIsDefault, bIsInternal, bIsSingleSel, aDefaultImg); } } @@ -734,26 +773,19 @@ IMPL_LINK(SfxTemplateManagerDlg, EditTemplateHdl, ThumbnailViewItem*, pItem, voi m_xDialog->response(RET_OK); } -IMPL_LINK(SfxTemplateManagerDlg, DeleteTemplateHdl, ThumbnailViewItem*, pItem, void) +IMPL_LINK_NOARG(SfxTemplateManagerDlg, DeleteTemplateHdl, void*, void) { + std::set<const ThumbnailViewItem*,selection_cmp_fn> aSelTemplates = maSelTemplates; OUString aDeletedTemplate; - if(mxSearchView->IsVisible()) - { - TemplateSearchViewItem *pSrchItem = static_cast<TemplateSearchViewItem*>(pItem); - if (!mxLocalView->removeTemplate(pSrchItem->mnAssocId, pSrchItem->mnRegionId)) - { - aDeletedTemplate = pSrchItem->maTitle; - } - } - else + for (auto const& pItem : aSelTemplates) { - TemplateViewItem *pViewItem = static_cast<TemplateViewItem*>(pItem); + const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(pItem); sal_uInt16 nRegionItemId = mxLocalView->getRegionId(pViewItem->mnRegionId); if (!mxLocalView->removeTemplate(pViewItem->mnDocId + 1, nRegionItemId))//mnId w.r.t. region is mnDocId + 1; { - aDeletedTemplate = pItem->maTitle; + aDeletedTemplate += pItem->maTitle+"\n"; } } @@ -779,10 +811,7 @@ IMPL_LINK(SfxTemplateManagerDlg, DefaultTemplateHdl, ThumbnailViewItem*, pItem, OUString sPrevDefault = SfxObjectFactory::GetStandardTemplate( aServiceName ); if(!sPrevDefault.isEmpty()) { - if(mxSearchView->IsVisible()) - mxSearchView->RemoveDefaultTemplateIcon(sPrevDefault); - else - mxLocalView->RemoveDefaultTemplateIcon(sPrevDefault); + mxLocalView->RemoveDefaultTemplateIcon(sPrevDefault); } SfxObjectFactory::SetStandardTemplate(aServiceName,pViewItem->getPath()); pViewItem->showDefaultIcon(true); @@ -797,7 +826,7 @@ IMPL_LINK(SfxTemplateManagerDlg, DefaultTemplateHdl, ThumbnailViewItem*, pItem, } } - createDefaultTemplateMenu(); + updateMenuItems(); } IMPL_LINK_NOARG(SfxTemplateManagerDlg, SearchUpdateHdl, weld::Entry&, void) @@ -822,22 +851,12 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, LoseFocusHdl, weld::Widget&, void) IMPL_LINK_NOARG ( SfxTemplateManagerDlg, ListViewHdl, weld::Toggleable&, void ) { setTemplateViewMode(TemplateViewMode::eListView); - - if (mxSearchFilter->get_text().isEmpty()) - mxLocalView->ListView::grab_focus(); - else - mxSearchView->ListView::grab_focus(); } IMPL_LINK_NOARG ( SfxTemplateManagerDlg, ThumbnailViewHdl, weld::Toggleable&, void ) { setTemplateViewMode(TemplateViewMode::eThumbnailView); bMakeSelItemVisible = true; - - if (mxSearchFilter->get_text().isEmpty()) - mxLocalView->ThumbnailView::GrabFocus(); - else - mxSearchView->ThumbnailView::GrabFocus(); } IMPL_LINK_NOARG(SfxTemplateManagerDlg, FocusRectLocalHdl, weld::Widget&, tools::Rectangle) @@ -847,68 +866,43 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, FocusRectLocalHdl, weld::Widget&, tools:: bMakeSelItemVisible = false; return tools::Rectangle(); } - -IMPL_LINK_NOARG(SfxTemplateManagerDlg, FocusRectSearchHdl, weld::Widget&, tools::Rectangle) +void SfxTemplateManagerDlg::FilterSearch() { - if(bMakeSelItemVisible && !maSelTemplates.empty()) - mxSearchView->MakeItemVisible((*maSelTemplates.begin())->mnId); - bMakeSelItemVisible = false; - return tools::Rectangle(); + OUString aKeyword = mxSearchFilter->get_text(); + if (!aKeyword.isEmpty()) + { + mxLocalView->Clear(); + std::vector<TemplateItemProperties> aItems = + mxLocalView->getFilteredItems(SearchView_Keyword(aKeyword, getCurrentApplicationFilter())); + mxLocalView->insertItems(aItems, mxCBFolder->get_active()==0, true); + mxLocalView->Invalidate(); + } } - void SfxTemplateManagerDlg::SearchUpdate() { OUString aKeyword = mxSearchFilter->get_text(); - if (!aKeyword.isEmpty()) { - mxSearchView->Clear(); - - // if the search view is hidden, hide the folder view and display search one - if (!mxSearchView->IsVisible()) - { - mxLocalView->deselectItems(); - mxSearchView->Show(); - mxLocalView->Hide(); - } - + mxLocalView->Clear(); std::vector<TemplateItemProperties> aItems = mxLocalView->getFilteredItems(SearchView_Keyword(aKeyword, getCurrentApplicationFilter())); - - for (const TemplateItemProperties& rItem : aItems) - { - OUString aFolderName = mxLocalView->getRegionName(rItem.nRegionId); - - mxSearchView->AppendItem(rItem.nId,mxLocalView->getRegionId(rItem.nRegionId), - rItem.nDocId, - rItem.aName, - aFolderName, - rItem.aPath, - rItem.aThumbnail); - } - mxSearchView->sort(); - mxSearchView->Invalidate(); + mxLocalView->insertItems(aItems, mxCBFolder->get_active()==0, true); + mxLocalView->Invalidate(); } else { - mxSearchView->deselectItems(); - mxSearchView->Hide(); - mxLocalView->Show(); + mxLocalView->deselectItems(); mxLocalView->filterItems(ViewFilter_Application(getCurrentApplicationFilter())); mxLocalView->reload(); - if(mxSearchView->IsVisible()) - SearchUpdate(); OUString sLastFolder = mxCBFolder->get_active_text(); mxLocalView->showRegion(sLastFolder); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, true); + mxActionBar->set_item_sensitive(MNI_ACTION_RENAME_FOLDER, true); } } IMPL_LINK_NOARG(SfxTemplateManagerDlg, GetFocusHdl, weld::Widget&, void) { mxLocalView->deselectItems(); - mxSearchView->deselectItems(); - maSelTemplates.clear(); } @@ -949,13 +943,13 @@ void SfxTemplateManagerDlg::OnTemplateState (const ThumbnailViewItem *pItem) if(maSelTemplates.empty()) { - mxMoveButton->set_sensitive(false); - mxExportButton->set_sensitive(false); + mxActionBar->set_item_sensitive(MNI_ACTION_MOVE, false); + mxActionBar->set_item_sensitive(MNI_ACTION_EXPORT, false); } else { - mxMoveButton->set_sensitive(true); - mxExportButton->set_sensitive(true); + mxActionBar->set_item_sensitive(MNI_ACTION_MOVE, true); + mxActionBar->set_item_sensitive(MNI_ACTION_EXPORT, true); } } @@ -1067,66 +1061,33 @@ void SfxTemplateManagerDlg::OnTemplateExport() INetURLObject aPathObj(xFolderPicker->getDirectory()); aPathObj.setFinalSlash(); - if (mxSearchView->IsVisible()) - { - sal_uInt16 i = 1; - - for (auto const& selTemplate : maSelTemplates) - { - const TemplateSearchViewItem *pItem = static_cast<const TemplateSearchViewItem*>(selTemplate); - - INetURLObject aItemPath(pItem->getPath()); - - if ( 1 == i ) - aPathObj.Append(aItemPath.getName()); - else - aPathObj.setName(aItemPath.getName()); - - OUString aPath = aPathObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ); + // export templates from the current view - if (!mxLocalView->exportTo(pItem->mnAssocId,pItem->mnRegionId,aPath)) - { - if (aTemplateList.isEmpty()) - aTemplateList = pItem->maTitle; - else - aTemplateList += "\n" + pItem->maTitle; - } - ++i; - } - - mxSearchView->deselectItems(); - } - else + sal_uInt16 i = 1; + auto aSelTemplates = maSelTemplates; + for (auto const& selTemplate : aSelTemplates) { - // export templates from the current view + const TemplateViewItem *pItem = static_cast<const TemplateViewItem*>(selTemplate); - sal_uInt16 i = 1; + INetURLObject aItemPath(pItem->getPath()); - for (auto const& selTemplate : maSelTemplates) - { - const TemplateViewItem *pItem = static_cast<const TemplateViewItem*>(selTemplate); + if ( 1 == i ) + aPathObj.Append(aItemPath.getName()); + else + aPathObj.setName(aItemPath.getName()); - INetURLObject aItemPath(pItem->getPath()); + OUString aPath = aPathObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ); - if ( 1 == i ) - aPathObj.Append(aItemPath.getName()); + if (!mxLocalView->exportTo(pItem->mnDocId + 1, //mnId w.r.t. region = mDocId + 1 + mxLocalView->getRegionId(pItem->mnRegionId), //pItem->mnRegionId does not store actual region Id + aPath)) + { + if (aTemplateList.isEmpty()) + aTemplateList = pItem->maTitle; else - aPathObj.setName(aItemPath.getName()); - - OUString aPath = aPathObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ); - - if (!mxLocalView->exportTo(pItem->mnDocId + 1, //mnId w.r.t. region = mDocId + 1 - mxLocalView->getRegionId(pItem->mnRegionId), //pItem->mnRegionId does not store actual region Id - aPath)) - { - if (aTemplateList.isEmpty()) - aTemplateList = pItem->maTitle; - else - aTemplateList += "\n" + pItem->maTitle; - } - ++i; + aTemplateList += "\n" + pItem->maTitle; } - + ++i; mxLocalView->deselectItems(); } @@ -1158,7 +1119,7 @@ void SfxTemplateManagerDlg::OnTemplateOpen () void SfxTemplateManagerDlg::OnCategoryNew() { InputDialog dlg(m_xDialog.get(), SfxResId(STR_INPUT_NEW)); - + dlg.set_title(SfxResId(STR_WINDOW_TITLE_RENAME_NEW_CATEGORY)); int ret = dlg.run(); if (!ret) @@ -1182,7 +1143,7 @@ void SfxTemplateManagerDlg::OnCategoryRename() { OUString sCategory = mxCBFolder->get_active_text(); InputDialog dlg(m_xDialog.get(), SfxResId(STR_INPUT_NEW)); - + dlg.set_title(SfxResId(STR_WINDOW_TITLE_RENAME_CATEGORY)); dlg.SetEntryText(sCategory); int ret = dlg.run(); @@ -1213,63 +1174,82 @@ void SfxTemplateManagerDlg::OnCategoryRename() void SfxTemplateManagerDlg::OnCategoryDelete() { - SfxTemplateCategoryDialog aDlg(m_xDialog.get()); - aDlg.SetCategoryLBEntries(mxLocalView->getFolderNames()); - aDlg.HideNewCategoryOption(); - aDlg.set_title(MnemonicGenerator::EraseAllMnemonicChars(SfxResId(STR_CATEGORY_DELETE))); - aDlg.SetSelectLabelText(SfxResId(STR_CATEGORY_SELECT)); - - if (aDlg.run() == RET_OK) - { - const OUString& sCategory = aDlg.GetSelectedCategory(); - std::unique_ptr<weld::MessageDialog> popupDlg(Application::CreateMessageDialog(m_xDialog.get(), - VclMessageType::Question, VclButtonsType::YesNo, - SfxResId(STR_QMSG_SEL_FOLDER_DELETE))); - if (popupDlg->run() != RET_YES) - return; + const auto sCategory = mxCBFolder->get_active_text(); + std::unique_ptr<weld::MessageDialog> popupDlg(Application::CreateMessageDialog(m_xDialog.get(), + VclMessageType::Question, VclButtonsType::YesNo, + SfxResId(STR_QMSG_SEL_FOLDER_DELETE).replaceFirst("$1",sCategory))); + if (popupDlg->run() != RET_YES) + return; - sal_Int16 nItemId = mxLocalView->getRegionId(sCategory); + sal_Int16 nItemId = mxLocalView->getRegionId(sCategory); - if (!mxLocalView->removeRegion(nItemId)) - { - OUString sMsg( SfxResId(STR_MSG_ERROR_DELETE_FOLDER) ); - std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(), - VclMessageType::Warning, VclButtonsType::Ok, - sMsg.replaceFirst("$1",sCategory))); - xBox->run(); - } - else - { - mxCBFolder->remove_text(sCategory); - } + if (!mxLocalView->removeRegion(nItemId)) + { + OUString sMsg( SfxResId(STR_MSG_ERROR_DELETE_FOLDER) ); + std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(), + VclMessageType::Warning, VclButtonsType::Ok, + sMsg.replaceFirst("$1",sCategory))); + xBox->run(); + } + else + { + mxCBFolder->remove_text(sCategory); } mxLocalView->reload(); mxLocalView->showAllTemplates(); mxCBApp->set_active(0); mxCBFolder->set_active(0); - mxActionBar->set_item_visible(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_RENAME_FOLDER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DELETE_FOLDER, false); + updateMenuItems(); } -void SfxTemplateManagerDlg::createDefaultTemplateMenu () +void SfxTemplateManagerDlg::updateMenuItems () { - std::vector<OUString> aList = lcl_getAllFactoryURLs(); - - if (!aList.empty()) - { - mxTemplateDefaultMenu->clear(); - for (auto const& elem : aList) - { - INetURLObject aObj(elem); - OUString aTitle = SvFileInformationManager::GetDescription(aObj); - mxTemplateDefaultMenu->append(elem, aTitle, SvFileInformationManager::GetImageId(aObj)); - } + mxActionBar->set_item_visible(MNI_ACTION_DEFAULT, false); + mxActionBar->set_item_visible(MNI_ACTION_DEFAULT_WRITER, false); + mxActionBar->set_item_visible(MNI_ACTION_DEFAULT_CALC, false); + mxActionBar->set_item_visible(MNI_ACTION_DEFAULT_IMPRESS, false); + mxActionBar->set_item_visible(MNI_ACTION_DEFAULT_DRAW, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DEFAULT, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DEFAULT_WRITER, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DEFAULT_CALC, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DEFAULT_IMPRESS, false); + mxActionBar->set_item_sensitive(MNI_ACTION_DEFAULT_DRAW, false); + SvtModuleOptions aModOpt; + if( mxCBApp->get_active() == MNI_WRITER) + { + mxActionBar->set_item_visible(MNI_ACTION_DEFAULT_WRITER, true); + if(!aModOpt.GetFactoryStandardTemplate( SvtModuleOptions::EFactory::WRITER).isEmpty()) + mxActionBar->set_item_sensitive(MNI_ACTION_DEFAULT_WRITER, true); + } + else if( mxCBApp->get_active() == MNI_CALC ) + { + mxActionBar->set_item_visible(MNI_ACTION_DEFAULT_CALC, true); + if(!aModOpt.GetFactoryStandardTemplate( SvtModuleOptions::EFactory::CALC).isEmpty()) + mxActionBar->set_item_sensitive(MNI_ACTION_DEFAULT_CALC, true); + } + else if(mxCBApp->get_active() == MNI_IMPRESS) + { + mxActionBar->set_item_visible(MNI_ACTION_DEFAULT_IMPRESS, true); + if(!aModOpt.GetFactoryStandardTemplate( SvtModuleOptions::EFactory::IMPRESS).isEmpty()) + mxActionBar->set_item_sensitive(MNI_ACTION_DEFAULT_IMPRESS, true); + } + else if(mxCBApp->get_active() == MNI_DRAW) + { + mxActionBar->set_item_visible(MNI_ACTION_DEFAULT_DRAW, true); + if(!aModOpt.GetFactoryStandardTemplate( SvtModuleOptions::EFactory::DRAW).isEmpty()) + mxActionBar->set_item_sensitive(MNI_ACTION_DEFAULT_DRAW, true); + } + else if(mxCBApp->get_active() == MNI_ALL_APPLICATIONS) + { mxActionBar->set_item_visible(MNI_ACTION_DEFAULT, true); + if(!lcl_getAllFactoryURLs().empty()) + mxActionBar->set_item_sensitive(MNI_ACTION_DEFAULT, true); } - else - mxActionBar->set_item_visible(MNI_ACTION_DEFAULT, false); } void SfxTemplateManagerDlg::localMoveTo(sal_uInt16 nItemId) @@ -1282,38 +1262,6 @@ void SfxTemplateManagerDlg::localMoveTo(sal_uInt16 nItemId) } } -void SfxTemplateManagerDlg::localSearchMoveTo(sal_uInt16 nItemId) -{ - if (nItemId) - { - // Move templates to desired folder if for some reason move fails - // try copying them. - std::set<const ThumbnailViewItem*,selection_cmp_fn> aSelTemplates = maSelTemplates; //Copy to avoid invalidating an iterator - - for (auto const& selTemplate : aSelTemplates) - { - const TemplateSearchViewItem *pItem = - static_cast<const TemplateSearchViewItem*>(selTemplate); - - if(!mxLocalView->moveTemplate(pItem,pItem->mnRegionId,nItemId)) - { - OUString sDst = mxLocalView->getRegionItemName(nItemId); - OUString sMsg(SfxResId(STR_MSG_ERROR_LOCAL_MOVE)); - sMsg = sMsg.replaceFirst("$1",sDst); - std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(), - VclMessageType::Warning, VclButtonsType::Ok, - sMsg.replaceFirst( "$2",pItem->maTitle))); - xBox->run(); - } - } - } - - // Deselect all items and update search results - mxSearchView->deselectItems(); - - SearchUpdateHdl(*mxSearchFilter); -} - static bool lcl_getServiceName ( const OUString &rFileURL, OUString &rName ) { bool bRet = false; @@ -1451,18 +1399,13 @@ SfxTemplateSelectionDlg::SfxTemplateSelectionDlg(weld::Window* pParent) } mxCBApp->set_sensitive(false); - mxActionBar->hide(); - mxMoveButton->hide(); - mxExportButton->hide(); + mxActionBar->show(); mxCBXHideDlg->show(); mxCBXHideDlg->set_active(true); mxLocalView->setOpenTemplateHdl(LINK(this,SfxTemplateSelectionDlg, OpenTemplateHdl)); - mxSearchView->setOpenTemplateHdl(LINK(this,SfxTemplateSelectionDlg, OpenTemplateHdl)); - - mxSearchView->SetMultiSelectionEnabled(false); - mxOKButton->connect_clicked(LINK(this, SfxTemplateSelectionDlg, OkClickHdl)); + updateMenuItems(); } SfxTemplateSelectionDlg::~SfxTemplateSelectionDlg() diff --git a/sfx2/source/inc/templatesearchview.hxx b/sfx2/source/inc/templatesearchview.hxx deleted file mode 100644 index c18e5af2797d..000000000000 --- a/sfx2/source/inc/templatesearchview.hxx +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- 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_TEMPLATESEARCHVIEW_HXX -#define INCLUDED_SFX2_SOURCE_INC_TEMPLATESEARCHVIEW_HXX - -#include <sfx2/thumbnailview.hxx> -#include <sfx2/listview.hxx> - -class TemplateViewItem; -class PopupMenu; -class Menu; - -class TemplateSearchView final : public ThumbnailView, public ListView -{ -public: - - TemplateSearchView(std::unique_ptr<weld::ScrolledWindow> xWindow, - std::unique_ptr<weld::Menu> xMenu, - std::unique_ptr<weld::TreeView> xTreeView); - - void setOpenTemplateHdl (const Link<ThumbnailViewItem*, void> &rLink); - - void ContextMenuSelectHdl(std::string_view rIdent); - - void setCreateContextMenuHdl(const Link<ThumbnailViewItem*,void> &rLink); - - void setEditTemplateHdl(const Link<ThumbnailViewItem*,void> &rLink); - - void setDeleteTemplateHdl(const Link<ThumbnailViewItem*,void> &rLink); - - void setDefaultTemplateHdl(const Link<ThumbnailViewItem*,void> &rLink); - - void createContextMenu(const bool bIsDefault, const bool bIsBuiltIn); - - void AppendItem(sal_uInt16 nAssocItemId, sal_uInt16 nRegionId, sal_uInt16 nIdx, - const OUString &rTitle, const OUString &rSubtitle, - const OUString &rPath, const BitmapEx &rImage ); - - void setTemplateViewMode ( TemplateViewMode eMode ); - - void Show() override; - - void Hide() override; - - void Clear() override; - - bool IsVisible() const; - - void syncCursor(); - - void updateSelection(); - - void connect_focus_rect(const Link<weld::Widget&, tools::Rectangle>& rLink) { GetDrawingArea()->connect_focus_rect(rLink);} - - void MakeItemVisible( sal_uInt16 nId ) { ThumbnailView::MakeItemVisible(nId);} - - DECL_LINK(RowActivatedHdl, weld::TreeView&, bool); - - DECL_LINK(ListViewChangedHdl, weld::TreeView&, void); - - DECL_LINK(PopupMenuHdl, const CommandEvent&, bool); - - static BitmapEx getDefaultThumbnail( const OUString& rPath ); - - void RemoveDefaultTemplateIcon(std::u16string_view rPath); - -private: - virtual void OnItemDblClicked(ThumbnailViewItem *pItem) override; - - virtual bool MouseButtonDown( const MouseEvent& rMEvt ) override; - - virtual bool Command(const CommandEvent& rPos) override; - - virtual bool KeyInput( const KeyEvent& rKEvt ) override; - - DECL_LINK(KeyPressHdl, const KeyEvent&, bool); - - TemplateViewItem *maSelectedItem; - - Point maPosition; - - Link<ThumbnailViewItem*, void> maOpenTemplateHdl; - Link<ThumbnailViewItem*, void> maCreateContextMenuHdl; - Link<ThumbnailViewItem*,void> maEditTemplateHdl; - Link<ThumbnailViewItem*,void> maDeleteTemplateHdl; - Link<ThumbnailViewItem*,void> maDefaultTemplateHdl; - TemplateViewMode mViewMode; -}; - -#endif // INCLUDED_SFX2_SOURCE_INC_TEMPLATESEARCHVIEW_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/uiconfig/ui/templatedlg.ui b/sfx2/uiconfig/ui/templatedlg.ui index c0ccc4812fd5..51846213a9eb 100644 --- a/sfx2/uiconfig/ui/templatedlg.ui +++ b/sfx2/uiconfig/ui/templatedlg.ui @@ -2,39 +2,10 @@ <!-- Generated with glade 3.38.2 --> <interface domain="sfx"> <requires lib="gtk+" version="3.20"/> - <object class="GtkMenu" id="contextmenu1"> + <object class="GtkMenu" id="contextmenu"> <property name="visible">True</property> <property name="can-focus">False</property> </object> - <object class="GtkMenu" id="contextmenu2"> - <property name="visible">True</property> - <property name="can-focus">False</property> - </object> - <object class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">sfx2/res/actiontemplates020.png</property> - </object> - <object class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">sfx2/res/actiontemplates017.png</property> - </object> - <object class="GtkImage" id="image4"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">sfx2/res/actionview010.png</property> - </object> - <object class="GtkImage" id="image5"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">cmd/lc_additionsdialog.png</property> - </object> - <object class="GtkImage" id="image7"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">open-menu-symbolic</property> - </object> <object class="GtkImage" id="image8"> <property name="visible">True</property> <property name="can-focus">False</property> @@ -48,20 +19,6 @@ <object class="GtkMenu" id="menu1"> <property name="visible">True</property> <property name="can-focus">False</property> - <child> - <object class="GtkMenuItem" id="default"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes" context="colsmenu|insert">Reset Default Template</property> - <property name="use-underline">True</property> - <child type="submenu"> - <object class="GtkMenu" id="submenu"> - <property name="visible">True</property> - <property name="can-focus">False</property> - </object> - </child> - </object> - </child> </object> <object class="GtkTreeStore" id="tree_store"> <columns> @@ -206,14 +163,24 @@ <property name="visible">True</property> <property name="can-focus">False</property> <child> - <object class="GtkToggleButton" id="thumbnail_view_btn"> + <object class="GtkMenuButton" id="action_menu"> + <property name="label" translatable="yes" context="templatedlg|action_menu|label">_Manage</property> <property name="visible">True</property> <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="tooltip-text" translatable="yes" context="templatedlg|thumbnail_view_btn|tooltip_text">Thumbnail View</property> - <property name="image">image8</property> - <property name="relief">none</property> + <property name="receives-default">False</property> + <property name="use-underline">True</property> <property name="always-show-image">True</property> + <property name="draw-indicator">True</property> + <property name="popup">menu1</property> + <property name="use-popover">False</property> + <child> + <placeholder/> + </child> + <child internal-child="accessible"> + <object class="AtkObject" id="action_menu-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="templatedlg|extended_tip|action_menu">Provides commands to create, rename and delete categories, reset default templates, and refresh the template manager.</property> + </object> + </child> </object> <packing> <property name="expand">False</property> @@ -221,22 +188,6 @@ <property name="position">0</property> </packing> </child> - <child> - <object class="GtkToggleButton" id="list_view_btn"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="tooltip-text" translatable="yes" context="templatedlg|list_view_btn|tooltip_text">List View</property> - <property name="image">image9</property> - <property name="relief">none</property> - <property name="always-show-image">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> </object> <packing> <property name="expand">False</property> @@ -369,37 +320,6 @@ </packing> </child> <child> - <object class="GtkScrolledWindow" id="scrollsearch"> - <property name="can-focus">True</property> - <property name="no-show-all">True</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="shadow-type">in</property> - <child> - <object class="GtkViewport"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <child> - <object class="GtkDrawingArea" id="search_view"> - <property name="can-focus">True</property> - <property name="events">GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK</property> - <property name="no-show-all">True</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> <object class="GtkScrolledWindow"> <property name="can-focus">True</property> <property name="no-show-all">True</property> @@ -516,127 +436,7 @@ <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow"> - <property name="can-focus">True</property> - <property name="no-show-all">True</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="shadow-type">in</property> - <child> - <object class="GtkTreeView" id="treesearch_list"> - <property name="can-focus">True</property> - <property name="no-show-all">True</property> - <property name="has-tooltip">True</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="model">tree_store</property> - <property name="enable-search">False</property> - <property name="search-column">0</property> - <property name="show-expanders">False</property> - <child internal-child="selection"> - <object class="GtkTreeSelection"> - <property name="mode">multiple</property> - </object> - </child> - <child> - <object class="GtkTreeViewColumn"> - <child> - <object class="GtkCellRendererPixbuf" id="cellrenderer7"/> - <attributes> - <attribute name="pixbuf">0</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="treeviewcolumn6"> - <property name="resizable">True</property> - <property name="spacing">6</property> - <property name="title" translatable="yes" context="templatedlg|treeviewcolumn1">Name</property> - <property name="expand">True</property> - <property name="clickable">True</property> - <child> - <object class="GtkCellRendererText" id="cellrenderer8"> - <property name="ypad">3</property> - </object> - <attributes> - <attribute name="text">1</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="treeviewcolumn7"> - <property name="resizable">True</property> - <property name="spacing">6</property> - <property name="title" translatable="yes" context="templatedlg|treeviewcolumn2">Category</property> - <property name="clickable">True</property> - <child> - <object class="GtkCellRendererText" id="cellrenderer9"> - <property name="ypad">3</property> - </object> - <attributes> - <attribute name="text">2</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="treeviewcolumn8"> - <property name="resizable">True</property> - <property name="title" translatable="yes" context="templatedlg|treeviewcolumn3">Application</property> - <property name="clickable">True</property> - <child> - <object class="GtkCellRendererText" id="cellrenderer10"> - <property name="ypad">3</property> - </object> - <attributes> - <attribute name="text">3</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="treeviewcolumn9"> - <property name="resizable">True</property> - <property name="title" translatable="yes" context="templatedlg|treeviewcolumn4">Modified</property> - <property name="clickable">True</property> - <child> - <object class="GtkCellRendererText" id="cellrenderer11"> - <property name="ypad">3</property> - </object> - <attributes> - <attribute name="text">4</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="treeviewcolumn10"> - <property name="resizable">True</property> - <property name="title" translatable="yes" context="templatedlg|treeviewcolumn5">Size</property> - <property name="clickable">True</property> - <child> - <object class="GtkCellRendererText" id="cellrenderer12"> - <property name="ypad">3</property> - </object> - <attributes> - <attribute name="text">5</attribute> - </attributes> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">3</property> + <property name="position">1</property> </packing> </child> </object> @@ -659,103 +459,37 @@ <property name="visible">True</property> <property name="can-focus">False</property> <child> - <object class="GtkMenuButton" id="action_menu"> - <property name="can-focus">True</property> - <property name="receives-default">False</property> - <property name="tooltip-text" translatable="yes" context="templatedlg|action_menu|tooltip_text">Tools</property> - <property name="image">image7</property> - <property name="relief">none</property> - <property name="always-show-image">True</property> - <property name="popup">menu1</property> - <property name="use-popover">False</property> - <child internal-child="accessible"> - <object class="AtkObject" id="action_menu-atkobject"> - <property name="AtkObject::accessible-description" translatable="yes" context="templatedlg|extended_tip|action_menu">Provides commands to create, rename and delete categories, reset default templates, and refresh the template manager.</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="btnMoreTemplates"> - <property name="label" translatable="yes" context="templatedlg|extensions_btn">_Extensions</property> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="tooltip-text" translatable="yes" context="templatedlg|online_link|tooltip_text">Add more templates via extension</property> - <property name="image">image5</property> - <property name="relief">none</property> - <property name="use-underline">True</property> - <property name="always-show-image">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack-type">end</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="import_btn"> - <property name="label" translatable="yes" context="templatedlg|import_btn">Import</property> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="tooltip-text" translatable="yes" context="templatedlg|import_btn|tooltip_text">Import Templates</property> - <property name="image">image4</property> - <property name="relief">none</property> - <property name="always-show-image">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack-type">end</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkButton" id="export_btn"> - <property name="label" translatable="yes" context="templatedlg|export_btn">Export</property> + <object class="GtkToggleButton" id="thumbnail_view_btn"> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">True</property> - <property name="tooltip-text" translatable="yes" context="templatedlg|export_btn|tooltip_text">Export Templates</property> - <property name="image">image1</property> + <property name="tooltip-text" translatable="yes" context="templatedlg|thumbnail_view_btn|tooltip_text">Thumbnail View</property> + <property name="image">image8</property> <property name="relief">none</property> <property name="always-show-image">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="pack-type">end</property> - <property name="position">3</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkButton" id="move_btn"> - <property name="label" translatable="yes" context="templatedlg|move_btn">Move</property> + <object class="GtkToggleButton" id="list_view_btn"> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">True</property> - <property name="tooltip-text" translatable="yes" context="templatedlg|move_btn|tooltip_text">Move Templates</property> - <property name="image">image3</property> + <property name="tooltip-text" translatable="yes" context="templatedlg|list_view_btn|tooltip_text">List View</property> + <property name="image">image9</property> <property name="relief">none</property> <property name="always-show-image">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="pack-type">end</property> - <property name="position">4</property> + <property name="position">1</property> </packing> </child> - <child> - <placeholder/> - </child> </object> <packing> <property name="expand">False</property> |