summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVert D <devoptmsoi@gmx.com>2021-04-29 10:29:00 -0500
committerHeiko Tietze <heiko.tietze@documentfoundation.org>2021-07-05 12:53:22 +0200
commit06d063a9de41a24922f15cd3aa47411b61d30c23 (patch)
tree9af8698e567ef62b161286c527e0a68612cbe0c9
parenttdf#140506: fix repeated table header switching (diff)
downloadcore-06d063a9de41a24922f15cd3aa47411b61d30c23.tar.gz
core-06d063a9de41a24922f15cd3aa47411b61d30c23.zip
tdf#138906 prevent built-in category deletion
*Remove category selection dialog for Delete Category. *Delete Category now deletes the current Category. *Import now imports to current category. *Remove Buttons, add items to menu. *Enable delete multi selection. *Change Dialog titles. *Remove searchview class. (I see no reason for it, it just copies code from localview and localview can handle search results on its own.) Change-Id: I5add4aa9fa68ac68c796a6b98fb54a5d0da93bd0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113712 Tested-by: Jenkins Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
-rw-r--r--include/sfx2/strings.hrc26
-rw-r--r--include/sfx2/templatedlg.hxx30
-rw-r--r--include/sfx2/templatedlglocalview.hxx6
-rw-r--r--include/sfx2/templatelocalview.hxx12
-rw-r--r--sfx2/Library_sfx.mk1
-rw-r--r--sfx2/inc/bitmaps.hlst17
-rw-r--r--sfx2/source/control/templatedlglocalview.cxx85
-rw-r--r--sfx2/source/control/templatelocalview.cxx47
-rw-r--r--sfx2/source/control/templatesearchview.cxx462
-rw-r--r--sfx2/source/doc/doctemplates.cxx8
-rw-r--r--sfx2/source/doc/doctemplateslocal.hxx1
-rw-r--r--sfx2/source/doc/templatedlg.cxx637
-rw-r--r--sfx2/source/inc/templatesearchview.hxx99
-rw-r--r--sfx2/uiconfig/ui/templatedlg.ui316
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>