Kaydet (Commit) e63b59c7 authored tarafından Rafael Dominguez's avatar Rafael Dominguez Kaydeden (comit) Miklos Vajna

Merge TemplateView into TemplateAbstractView class.

Refactor TemplateView class into TemplateAbstractView so we
only have one class that display template thumbnails and not
a separate for folders and another for files. This will let
us in the future be able to display file system hierarchies in
case of the remote repositories and simplify the view handing
logic.

(cherry picked from commit 448cc5e8)

Conflicts:
	sfx2/Library_sfx.mk
	sfx2/inc/sfx2/templateabstractview.hxx
	sfx2/inc/sfx2/templateview.hxx
	sfx2/inc/templatedlg.hxx
	sfx2/source/control/templateabstractview.cxx

Change-Id: Iafc246eeff4c50c12ac9ebec9fe95dcc84991e9e
Reviewed-on: https://gerrit.libreoffice.org/3088Reviewed-by: 's avatarMiklos Vajna <vmiklos@suse.cz>
Tested-by: 's avatarMiklos Vajna <vmiklos@suse.cz>
üst 14fb3c4c
...@@ -71,7 +71,7 @@ $(eval $(call gb_Library_use_libraries,sfx,\ ...@@ -71,7 +71,7 @@ $(eval $(call gb_Library_use_libraries,sfx,\
ucbhelper \ ucbhelper \
utl \ utl \
vcl \ vcl \
$(gb_UWINAPI) \ $(gb_UWINAPI) \
)) ))
$(eval $(call gb_Library_use_external,sfx,libxml2)) $(eval $(call gb_Library_use_external,sfx,libxml2))
...@@ -138,7 +138,6 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\ ...@@ -138,7 +138,6 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
sfx2/source/control/sorgitm \ sfx2/source/control/sorgitm \
sfx2/source/control/statcach \ sfx2/source/control/statcach \
sfx2/source/control/templateabstractview \ sfx2/source/control/templateabstractview \
sfx2/source/control/templateview \
sfx2/source/control/templateviewitem \ sfx2/source/control/templateviewitem \
sfx2/source/control/templatelocalview \ sfx2/source/control/templatelocalview \
sfx2/source/control/templatecontaineritem \ sfx2/source/control/templatecontaineritem \
...@@ -150,7 +149,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\ ...@@ -150,7 +149,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
sfx2/source/control/unoctitm \ sfx2/source/control/unoctitm \
sfx2/source/dialog/alienwarn \ sfx2/source/dialog/alienwarn \
sfx2/source/dialog/basedlgs \ sfx2/source/dialog/basedlgs \
sfx2/source/dialog/checkin \ sfx2/source/dialog/checkin \
sfx2/source/dialog/dinfdlg \ sfx2/source/dialog/dinfdlg \
sfx2/source/dialog/dinfedt \ sfx2/source/dialog/dinfedt \
sfx2/source/dialog/dockwin \ sfx2/source/dialog/dockwin \
...@@ -295,11 +294,11 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\ ...@@ -295,11 +294,11 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
)) ))
$(eval $(call gb_Library_use_system_win32_libs,sfx,\ $(eval $(call gb_Library_use_system_win32_libs,sfx,\
advapi32 \ advapi32 \
gdi32 \ gdi32 \
ole32 \ ole32 \
shell32 \ shell32 \
uuid \ uuid \
)) ))
endif endif
......
...@@ -120,7 +120,6 @@ $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templdlg.hxx,sfx2/templdlg.h ...@@ -120,7 +120,6 @@ $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templdlg.hxx,sfx2/templdlg.h
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatelocnames.hrc,sfx2/templatelocnames.hrc)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatelocnames.hrc,sfx2/templatelocnames.hrc))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templateabstractview.hxx,sfx2/templateabstractview.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templateabstractview.hxx,sfx2/templateabstractview.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templateinfodlg.hxx,sfx2/templateinfodlg.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templateinfodlg.hxx,sfx2/templateinfodlg.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templateview.hxx,sfx2/templateview.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatelocalview.hxx,sfx2/templatelocalview.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatelocalview.hxx,sfx2/templatelocalview.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatecontaineritem.hxx,sfx2/templatecontaineritem.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatecontaineritem.hxx,sfx2/templatecontaineritem.hxx))
$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templateremoteview.hxx,sfx2/templateremoteview.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templateremoteview.hxx,sfx2/templateremoteview.hxx))
......
...@@ -10,7 +10,10 @@ ...@@ -10,7 +10,10 @@
#ifndef __SFX2_TEMPLATEABSTRACTVIEW_HXX__ #ifndef __SFX2_TEMPLATEABSTRACTVIEW_HXX__
#define __SFX2_TEMPLATEABSTRACTVIEW_HXX__ #define __SFX2_TEMPLATEABSTRACTVIEW_HXX__
#include <sfx2/templateproperties.hxx>
#include <sfx2/thumbnailview.hxx> #include <sfx2/thumbnailview.hxx>
#include <vcl/button.hxx>
#include <vcl/fixed.hxx>
//template thumbnail item defines //template thumbnail item defines
#define TEMPLATE_ITEM_MAX_WIDTH 160 #define TEMPLATE_ITEM_MAX_WIDTH 160
...@@ -23,7 +26,6 @@ ...@@ -23,7 +26,6 @@
#define TEMPLATE_THUMBNAIL_MAX_HEIGHT TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT - 2*TEMPLATE_ITEM_PADDING #define TEMPLATE_THUMBNAIL_MAX_HEIGHT TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT - 2*TEMPLATE_ITEM_PADDING
#define TEMPLATE_THUMBNAIL_MAX_WIDTH TEMPLATE_ITEM_MAX_WIDTH - 2*TEMPLATE_ITEM_PADDING #define TEMPLATE_THUMBNAIL_MAX_WIDTH TEMPLATE_ITEM_MAX_WIDTH - 2*TEMPLATE_ITEM_PADDING
class TemplateView;
class SfxDocumentTemplates; class SfxDocumentTemplates;
enum FILTER_APPLICATION enum FILTER_APPLICATION
...@@ -80,63 +82,51 @@ public: ...@@ -80,63 +82,51 @@ public:
virtual ~TemplateAbstractView (); virtual ~TemplateAbstractView ();
// Fill view with template folders thumbnails // Fill view with new item list
virtual void Populate () { }; void insertItems (const std::vector<TemplateItemProperties> &rTemplates);
virtual void reload () { };
virtual void filterTemplatesByApp (const FILTER_APPLICATION &eApp);
void showOverlay (bool bVisible);
void setItemDimensions (long ItemWidth, long ThumbnailHeight, long DisplayHeight, int itemPadding);
sal_uInt16 getOverlayRegionId () const;
const OUString& getOverlayName () const; // Fill view with template folders thumbnails
virtual void Populate () { }
// Check if the overlay is visible or not. virtual void reload () { }
bool isOverlayVisible () const;
void deselectOverlayItems (); virtual void showRootRegion () = 0;
void deselectOverlayItem (const sal_uInt16 nItemId); virtual void showRegion (ThumbnailViewItem *pItem) = 0;
void sortOverlayItems (const boost::function<bool (const ThumbnailViewItem*, sal_uInt16 getCurRegionId () const;
const ThumbnailViewItem*) > &func);
virtual void filterTemplatesByKeyword (const OUString &rKeyword); const OUString& getCurRegionName () const;
void setOverlayItemStateHdl (const Link &aLink) { maOverlayItemStateHdl = aLink; } // Check if the root region is visible or not.
bool isNonRootRegionVisible () const;
void setOpenHdl (const Link &rLink); void setOpenRegionHdl(const Link &rLink);
void setOverlayCloseHdl (const Link &rLink); void setOpenTemplateHdl (const Link &rLink);
static BitmapEx scaleImg (const BitmapEx &rImg, long width, long height); static BitmapEx scaleImg (const BitmapEx &rImg, long width, long height);
static BitmapEx fetchThumbnail (const OUString &msURL, long width, long height); static BitmapEx getDefaultThumbnail( const rtl::OUString& rPath );
virtual void Resize(); static BitmapEx fetchThumbnail (const OUString &msURL, long width, long height);
protected: protected:
virtual void Paint( const Rectangle& rRect ); DECL_LINK(ShowRootRegionHdl, void*);
virtual void DrawItem (ThumbnailViewItem *pItem);
DECL_LINK(OverlayItemStateHdl, const ThumbnailViewItem*);
virtual void OnItemDblClicked(ThumbnailViewItem *pItem); virtual void OnItemDblClicked(ThumbnailViewItem *pItem);
protected: protected:
TemplateView *mpItemView; sal_uInt16 mnCurRegionId;
Link maOverlayItemStateHdl; OUString maCurRegionName;
Link maOpenHdl;
PushButton maAllButton;
FixedText maFTName;
bool mbFilteredResults; // Flag keep track if overlay has been filtered so folders can get filtered too afterwards Link maOpenRegionHdl;
FILTER_APPLICATION meFilterOption; Link maOpenTemplateHdl;
}; };
#endif // __SFX2_TEMPLATEABSTRACTVIEW_HXX__ #endif // __SFX2_TEMPLATEABSTRACTVIEW_HXX__
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include <set> #include <set>
#include <sfx2/templateabstractview.hxx> #include <sfx2/templateabstractview.hxx>
#include <sfx2/templateproperties.hxx>
class SfxDocumentTemplates; class SfxDocumentTemplates;
class TemplateContainerItem; class TemplateContainerItem;
...@@ -26,6 +25,8 @@ namespace com { ...@@ -26,6 +25,8 @@ namespace com {
class SFX2_DLLPUBLIC TemplateLocalView : public TemplateAbstractView class SFX2_DLLPUBLIC TemplateLocalView : public TemplateAbstractView
{ {
typedef bool (*selection_cmp_fn)(const ThumbnailViewItem*,const ThumbnailViewItem*);
public: public:
TemplateLocalView ( Window* pParent, const ResId& rResId, bool bDisableTransientChildren = false ); TemplateLocalView ( Window* pParent, const ResId& rResId, bool bDisableTransientChildren = false );
...@@ -37,6 +38,12 @@ public: ...@@ -37,6 +38,12 @@ public:
virtual void reload (); virtual void reload ();
virtual void showRootRegion ();
virtual void showRegion (ThumbnailViewItem *pItem);
sal_uInt16 getRegionId (size_t pos) const;
std::vector<OUString> getFolderNames (); std::vector<OUString> getFolderNames ();
std::vector<TemplateItemProperties> std::vector<TemplateItemProperties>
...@@ -51,7 +58,7 @@ public: ...@@ -51,7 +58,7 @@ public:
bool moveTemplate (const ThumbnailViewItem* pItem, const sal_uInt16 nSrcItem, bool moveTemplate (const ThumbnailViewItem* pItem, const sal_uInt16 nSrcItem,
const sal_uInt16 nTargetItem, bool bCopy); const sal_uInt16 nTargetItem, bool bCopy);
bool moveTemplates (std::set<const ThumbnailViewItem*> &rItems, const sal_uInt16 nTargetItem, bool bCopy); bool moveTemplates (const std::set<const ThumbnailViewItem*,selection_cmp_fn> &rItems, const sal_uInt16 nTargetItem, bool bCopy);
bool copyFrom (const sal_uInt16 nRegionItemId, const BitmapEx &rThumbnail, const OUString &rPath); bool copyFrom (const sal_uInt16 nRegionItemId, const BitmapEx &rThumbnail, const OUString &rPath);
...@@ -74,6 +81,7 @@ public: ...@@ -74,6 +81,7 @@ public:
private: private:
SfxDocumentTemplates *mpDocTemplates; SfxDocumentTemplates *mpDocTemplates;
std::vector<TemplateContainerItem* > maRegions;
}; };
#endif // TEMPLATEFOLDERVIEW_HXX #endif // TEMPLATEFOLDERVIEW_HXX
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
struct TemplateItemProperties struct TemplateItemProperties
{ {
bool aIsFolder;
sal_uInt16 nId; ///< Index for ThumbnailView sal_uInt16 nId; ///< Index for ThumbnailView
sal_uInt16 nDocId; ///< Index based on SfxTemplateDocument sal_uInt16 nDocId; ///< Index based on SfxTemplateDocument
sal_uInt16 nRegionId; sal_uInt16 nRegionId;
......
...@@ -25,6 +25,10 @@ public: ...@@ -25,6 +25,10 @@ public:
virtual ~TemplateRemoteView (); virtual ~TemplateRemoteView ();
virtual void showRootRegion ();
virtual void showRegion (ThumbnailViewItem *pItem);
bool loadRepository (TemplateRepository* pRepository, bool bRefresh); bool loadRepository (TemplateRepository* pRepository, bool bRefresh);
private: private:
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* Copyright 2012 LibreOffice contributors.
*
* 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 TEMPLATEVIEW_HXX
#define TEMPLATEVIEW_HXX
#include <sfx2/templateproperties.hxx>
#include <sfx2/thumbnailview.hxx>
#include <vcl/button.hxx>
#include <vcl/fixed.hxx>
class Edit;
class TemplateViewItem;
class TemplateView : public ThumbnailView
{
public:
TemplateView (Window *pParent);
virtual ~TemplateView ();
void setId (const sal_uInt16 nId) { mnId = nId; }
sal_uInt16 getId () const { return mnId; }
void setName (const OUString &rName);
const OUString& getName () const { return maName; }
void InsertItems (const std::vector<TemplateItemProperties> &rTemplates);
void setCloseHdl (const Link &rLink) { maAllButton.SetClickHdl(rLink); }
void setMasterView(TemplateAbstractView* pMasterView) { mpMasterView = pMasterView; }
virtual bool renameItem(ThumbnailViewItem* pItem, rtl::OUString sNewTitle);
// FIXME Kept only during the refactoring
void setOpenHdl (const Link &rLink) { maOpenHdl = rLink; }
virtual void OnItemDblClicked(ThumbnailViewItem *pItem) { maOpenHdl.Call(pItem); }
protected:
virtual void Resize ();
private:
TemplateAbstractView* mpMasterView;
Link maOpenHdl;
PushButton maAllButton;
FixedText maFTName;
sal_uInt16 mnId;
OUString maName;
};
#endif // TEMPLATEVIEW_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -183,6 +183,9 @@ public: ...@@ -183,6 +183,9 @@ public:
void Clear(); void Clear();
// Change current thumbnail item list with new one (invalidates all pointers to a thumbnail item)
void updateItems(const std::vector<ThumbnailViewItem *> &items);
size_t GetItemPos( sal_uInt16 nItemId ) const; size_t GetItemPos( sal_uInt16 nItemId ) const;
sal_uInt16 GetItemId( size_t nPos ) const; sal_uInt16 GetItemId( size_t nPos ) const;
......
...@@ -38,6 +38,8 @@ namespace com { ...@@ -38,6 +38,8 @@ namespace com {
class SfxTemplateManagerDlg : public ModelessDialog class SfxTemplateManagerDlg : public ModelessDialog
{ {
typedef bool (*selection_cmp_fn)(const ThumbnailViewItem*,const ThumbnailViewItem*);
public: public:
SfxTemplateManagerDlg (Window *parent = DIALOG_NO_PARENT); SfxTemplateManagerDlg (Window *parent = DIALOG_NO_PARENT);
...@@ -50,29 +52,23 @@ public: ...@@ -50,29 +52,23 @@ public:
DECL_LINK(ActivatePageHdl, void*); DECL_LINK(ActivatePageHdl, void*);
static BitmapEx getDefaultThumbnail( const rtl::OUString& rPath );
private: private:
virtual void MouseButtonDown( const MouseEvent& rMEvt );
virtual void Resize (); virtual void Resize ();
DECL_LINK(CloseOverlayHdl, void*);
DECL_LINK(TBXViewHdl, void*); DECL_LINK(TBXViewHdl, void*);
DECL_LINK(TBXActionHdl, void*); DECL_LINK(TBXActionHdl, void*);
DECL_LINK(TBXTemplateHdl, void*); DECL_LINK(TBXTemplateHdl, void*);
DECL_LINK(TBXDropdownHdl, ToolBox*); DECL_LINK(TBXDropdownHdl, ToolBox*);
DECL_LINK(TVFolderStateHdl, const ThumbnailViewItem*); DECL_LINK(TVItemStateHdl, const ThumbnailViewItem*);
DECL_LINK(TVTemplateStateHdl, const ThumbnailViewItem*);
DECL_LINK(MenuSelectHdl, Menu*); DECL_LINK(MenuSelectHdl, Menu*);
DECL_LINK(MoveMenuSelectHdl, Menu*); DECL_LINK(MoveMenuSelectHdl, Menu*);
DECL_LINK(RepositoryMenuSelectHdl, Menu*); DECL_LINK(RepositoryMenuSelectHdl, Menu*);
DECL_LINK(DefaultTemplateMenuSelectHdl, Menu*); DECL_LINK(DefaultTemplateMenuSelectHdl, Menu*);
DECL_LINK(OpenRegionHdl, void*);
DECL_LINK(OpenTemplateHdl, ThumbnailViewItem*); DECL_LINK(OpenTemplateHdl, ThumbnailViewItem*);
DECL_LINK(SearchUpdateHdl, void*); DECL_LINK(SearchUpdateHdl, void*);
...@@ -84,7 +80,13 @@ private: ...@@ -84,7 +80,13 @@ private:
void OnTemplateDelete (); void OnTemplateDelete ();
void OnTemplateAsDefault (); void OnTemplateAsDefault ();
void OnTemplateExport (); void OnTemplateExport ();
void OnTemplateState (const ThumbnailViewItem *pItem);
void OnFolderDelete (); void OnFolderDelete ();
void OnRegionState (const ThumbnailViewItem *pItem);
void OnRepositoryDelete (); void OnRepositoryDelete ();
void OnTemplateSaveAs (); void OnTemplateSaveAs ();
...@@ -141,8 +143,8 @@ private: ...@@ -141,8 +143,8 @@ private:
PopupMenu *mpRepositoryMenu; PopupMenu *mpRepositoryMenu;
PopupMenu *mpTemplateDefaultMenu; PopupMenu *mpTemplateDefaultMenu;
std::set<const ThumbnailViewItem*> maSelTemplates; std::set<const ThumbnailViewItem*,selection_cmp_fn> maSelTemplates;
std::set<const ThumbnailViewItem*> maSelFolders; std::set<const ThumbnailViewItem*,selection_cmp_fn> maSelFolders;
bool mbIsSaveMode; ///< Flag that indicates if we are in save mode or not. bool mbIsSaveMode; ///< Flag that indicates if we are in save mode or not.
com::sun::star::uno::Reference< com::sun::star::frame::XModel > m_xModel; com::sun::star::uno::Reference< com::sun::star::frame::XModel > m_xModel;
......
...@@ -8,10 +8,10 @@ ...@@ -8,10 +8,10 @@
*/ */
#include <sfx2/templateabstractview.hxx> #include <sfx2/templateabstractview.hxx>
#include <sfx2/templatecontaineritem.hxx>
#include <comphelper/processfactory.hxx> #include <comphelper/processfactory.hxx>
#include <sfx2/templateview.hxx> #include <sfx2/sfxresid.hxx>
#include <sfx2/templatecontaineritem.hxx>
#include <sfx2/templateviewitem.hxx> #include <sfx2/templateviewitem.hxx>
#include <tools/urlobj.hxx> #include <tools/urlobj.hxx>
#include <unotools/ucbstreamhelper.hxx> #include <unotools/ucbstreamhelper.hxx>
...@@ -23,6 +23,9 @@ ...@@ -23,6 +23,9 @@
#include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/lang/XSingleServiceFactory.hpp> #include <com/sun/star/lang/XSingleServiceFactory.hpp>
#include "../doc/doc.hrc"
#include "templateview.hrc"
bool ViewFilter_Application::isValid (const OUString &rPath) const bool ViewFilter_Application::isValid (const OUString &rPath) const
{ {
bool bRet = true; bool bRet = true;
...@@ -114,118 +117,85 @@ bool ViewFilter_Keyword::operator ()(const ThumbnailViewItem *pItem) ...@@ -114,118 +117,85 @@ bool ViewFilter_Keyword::operator ()(const ThumbnailViewItem *pItem)
TemplateAbstractView::TemplateAbstractView (Window *pParent, WinBits nWinStyle, bool bDisableTransientChildren) TemplateAbstractView::TemplateAbstractView (Window *pParent, WinBits nWinStyle, bool bDisableTransientChildren)
: ThumbnailView(pParent,nWinStyle,bDisableTransientChildren), : ThumbnailView(pParent,nWinStyle,bDisableTransientChildren),
mpItemView(new TemplateView(pParent)), mnCurRegionId(0),
mbFilteredResults(false), maAllButton(this, SfxResId(BTN_ALL_TEMPLATES)),
meFilterOption(FILTER_APP_WRITER) maFTName(this, SfxResId(FT_NAME))
{ {
mpItemView->setItemStateHdl(LINK(this,TemplateAbstractView,OverlayItemStateHdl)); maAllButton.Hide();
maAllButton.SetStyle(maAllButton.GetStyle() | WB_FLATBUTTON);
maAllButton.SetClickHdl(LINK(this,TemplateAbstractView,ShowRootRegionHdl));
maFTName.Hide();
} }
TemplateAbstractView::TemplateAbstractView(Window *pParent, const ResId &rResId, bool bDisableTransientChildren) TemplateAbstractView::TemplateAbstractView(Window *pParent, const ResId &rResId, bool bDisableTransientChildren)
: ThumbnailView(pParent,rResId,bDisableTransientChildren), : ThumbnailView(pParent,rResId,bDisableTransientChildren),
mpItemView(new TemplateView(pParent)), mnCurRegionId(0),
mbFilteredResults(false), maAllButton(this, SfxResId(BTN_ALL_TEMPLATES)),
meFilterOption(FILTER_APP_WRITER) maFTName(this, SfxResId(FT_NAME))
{ {
mpItemView->setItemStateHdl(LINK(this,TemplateAbstractView,OverlayItemStateHdl)); maAllButton.Hide();
maAllButton.SetStyle(maAllButton.GetStyle() | WB_FLATBUTTON);
maAllButton.SetClickHdl(LINK(this,TemplateAbstractView,ShowRootRegionHdl));
maFTName.Hide();
} }
TemplateAbstractView::~TemplateAbstractView () TemplateAbstractView::~TemplateAbstractView ()
{ {
delete mpItemView;
}
void TemplateAbstractView::setItemDimensions(long ItemWidth, long ThumbnailHeight, long DisplayHeight, int itemPadding)
{
ThumbnailView::setItemDimensions(ItemWidth,ThumbnailHeight,DisplayHeight,itemPadding);
mpItemView->setItemDimensions(ItemWidth,ThumbnailHeight,DisplayHeight,itemPadding);
}
sal_uInt16 TemplateAbstractView::getOverlayRegionId() const
{
return mpItemView->getId();
}
const OUString &TemplateAbstractView::getOverlayName() const
{
return mpItemView->getName();
} }
bool TemplateAbstractView::isOverlayVisible () const void TemplateAbstractView::insertItems(const std::vector<TemplateItemProperties> &rTemplates)
{ {
return mpItemView->IsVisible(); std::vector<ThumbnailViewItem*> aItems(rTemplates.size());
} for (size_t i = 0, n = rTemplates.size(); i < n; ++i )
{
//TODO: CHECK IF THE ITEM IS A FOLDER OR NOT
TemplateViewItem *pChild = new TemplateViewItem(*this);
const TemplateItemProperties *pCur = &rTemplates[i];
pChild->mnId = pCur->nId;
pChild->mnDocId = pCur->nDocId;
pChild->mnRegionId = pCur->nRegionId;
pChild->maTitle = pCur->aName;
pChild->setPath(pCur->aPath);
pChild->maPreview1 = pCur->aThumbnail;
if ( pCur->aThumbnail.IsEmpty() )
{
// Use the default thumbnail if we have nothing else
pChild->maPreview1 = TemplateAbstractView::getDefaultThumbnail(pCur->aPath);
}
void TemplateAbstractView::deselectOverlayItems() pChild->setSelectClickHdl(LINK(this,ThumbnailView,OnItemSelected));
{
mpItemView->deselectItems();
}
void TemplateAbstractView::deselectOverlayItem(const sal_uInt16 nItemId) aItems[i] = pChild;
{ }
mpItemView->deselectItem(nItemId);
}
void TemplateAbstractView::sortOverlayItems(const boost::function<bool (const ThumbnailViewItem*, updateItems(aItems);
const ThumbnailViewItem*) > &func)
{
mpItemView->sortItems(func);
} }
void TemplateAbstractView::filterTemplatesByApp (const FILTER_APPLICATION &eApp) sal_uInt16 TemplateAbstractView::getCurRegionId() const
{ {
meFilterOption = eApp; return mnCurRegionId;
if (mpItemView->IsVisible())
{
mbFilteredResults = true;
mpItemView->filterItems(ViewFilter_Application(eApp));
}
else
{
filterItems(ViewFilter_Application(eApp));
}
} }
void TemplateAbstractView::showOverlay (bool bVisible) const OUString &TemplateAbstractView::getCurRegionName() const
{ {
Show(!bVisible); return maCurRegionName;
mpItemView->Show(bVisible);
mpItemView->SetPosSizePixel(GetPosPixel(), GetSizePixel());
mpItemView->SetStyle(GetStyle());
mpItemView->GrabFocus();
// Clear items is the overlay is closed.
if (!bVisible)
{
// Check if the folder view needs to be filtered
if (mbFilteredResults)
{
filterItems(ViewFilter_Application(meFilterOption));
}
mpItemView->Clear();
}
} }
void TemplateAbstractView::filterTemplatesByKeyword(const OUString &rKeyword) bool TemplateAbstractView::isNonRootRegionVisible () const
{ {
if (mpItemView->IsVisible()) return mnCurRegionId;
mpItemView->filterItems(ViewFilter_Keyword(rKeyword));
} }
void TemplateAbstractView::setOpenHdl(const Link &rLink) void TemplateAbstractView::setOpenRegionHdl(const Link &rLink)
{ {
maOpenHdl = rLink; maOpenRegionHdl = rLink;
mpItemView->setOpenHdl(rLink);
} }
void TemplateAbstractView::setOverlayCloseHdl(const Link &rLink) void TemplateAbstractView::setOpenTemplateHdl(const Link &rLink)
{ {
mpItemView->setCloseHdl(rLink); maOpenTemplateHdl = rLink;
} }
BitmapEx TemplateAbstractView::scaleImg (const BitmapEx &rImg, long width, long height) BitmapEx TemplateAbstractView::scaleImg (const BitmapEx &rImg, long width, long height)
...@@ -263,6 +233,31 @@ BitmapEx TemplateAbstractView::scaleImg (const BitmapEx &rImg, long width, long ...@@ -263,6 +233,31 @@ BitmapEx TemplateAbstractView::scaleImg (const BitmapEx &rImg, long width, long
return aImg; return aImg;
} }
BitmapEx TemplateAbstractView::getDefaultThumbnail( const OUString& rPath )
{
INetURLObject aUrl(rPath);
OUString aExt = aUrl.getExtension();
BitmapEx aImg;
if ( aExt == "ott" || aExt == "stw" || aExt == "oth" || aExt == "dot" || aExt == "dotx" )
{
aImg = BitmapEx ( SfxResId( SFX_THUMBNAIL_TEXT ) );
}
else if ( aExt == "ots" || aExt == "stc" || aExt == "xlt" || aExt == "xltm" || aExt == "xltx" )
{
aImg = BitmapEx ( SfxResId( SFX_THUMBNAIL_SHEET ) );
}
else if ( aExt == "otp" || aExt == "sti" || aExt == "pot" || aExt == "potm" || aExt == "potx" )
{
aImg = BitmapEx ( SfxResId( SFX_THUMBNAIL_PRESENTATION ) );
}
else if ( aExt == "otg" || aExt == "std" )
{
aImg = BitmapEx ( SfxResId( SFX_THUMBNAIL_DRAWING ) );
}
return aImg;
}
BitmapEx TemplateAbstractView::fetchThumbnail (const OUString &msURL, long width, long height) BitmapEx TemplateAbstractView::fetchThumbnail (const OUString &msURL, long width, long height)
{ {
using namespace ::com::sun::star; using namespace ::com::sun::star;
...@@ -372,49 +367,29 @@ BitmapEx TemplateAbstractView::fetchThumbnail (const OUString &msURL, long width ...@@ -372,49 +367,29 @@ BitmapEx TemplateAbstractView::fetchThumbnail (const OUString &msURL, long width
return TemplateAbstractView::scaleImg(aThumbnail,width,height); return TemplateAbstractView::scaleImg(aThumbnail,width,height);
} }
void TemplateAbstractView::Resize() IMPL_LINK_NOARG(TemplateAbstractView, ShowRootRegionHdl)
{
mpItemView->SetSizePixel(GetSizePixel());
ThumbnailView::Resize();
}
void TemplateAbstractView::Paint(const Rectangle &rRect)
{
if (!mpItemView->IsVisible())
ThumbnailView::Paint(rRect);
}
void TemplateAbstractView::DrawItem(ThumbnailViewItem *pItem)
{
if (!mpItemView->IsVisible())
ThumbnailView::DrawItem(pItem);
}
IMPL_LINK(TemplateAbstractView, OverlayItemStateHdl, const ThumbnailViewItem*, pItem)
{ {
maOverlayItemStateHdl.Call((void*)pItem); showRootRegion();
return 0; return 0;
} }
void TemplateAbstractView::OnItemDblClicked (ThumbnailViewItem *pItem) void TemplateAbstractView::OnItemDblClicked (ThumbnailViewItem *pItem)
{ {
//Check if the item is a TemplateContainerItem (Folder) or a TemplateViewItem (File)
TemplateContainerItem* pContainerItem = dynamic_cast<TemplateContainerItem*>(pItem); TemplateContainerItem* pContainerItem = dynamic_cast<TemplateContainerItem*>(pItem);
if ( pContainerItem ) if ( pContainerItem )
{ {
// Fill templates // Fill templates
sal_uInt16 nRegionId = pContainerItem->mnId-1;
mpItemView->setId(nRegionId);
mpItemView->setName(pContainerItem->maTitle);
mpItemView->InsertItems(pContainerItem->maTemplates);
mpItemView->filterItems(ViewFilter_Application(meFilterOption));
showOverlay(true); mnCurRegionId = pContainerItem->mnId-1;
maCurRegionName = pContainerItem->maTitle;
maFTName.SetText(maCurRegionName);
showRegion(pItem);
} }
else else
{ {
maOpenHdl.Call(pItem); maOpenTemplateHdl.Call(pItem);
} }
} }
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include <comphelper/processfactory.hxx> #include <comphelper/processfactory.hxx>
#include <sfx2/doctempl.hxx> #include <sfx2/doctempl.hxx>
#include <sfx2/templatecontaineritem.hxx> #include <sfx2/templatecontaineritem.hxx>
#include <sfx2/templateview.hxx>
#include <sfx2/templateviewitem.hxx> #include <sfx2/templateviewitem.hxx>
#include <svl/inettype.hxx> #include <svl/inettype.hxx>
#include <tools/urlobj.hxx> #include <tools/urlobj.hxx>
...@@ -36,17 +35,25 @@ TemplateLocalView::TemplateLocalView ( Window* pParent, const ResId& rResId, boo ...@@ -36,17 +35,25 @@ TemplateLocalView::TemplateLocalView ( Window* pParent, const ResId& rResId, boo
: TemplateAbstractView(pParent,rResId,bDisableTransientChildren), : TemplateAbstractView(pParent,rResId,bDisableTransientChildren),
mpDocTemplates(new SfxDocumentTemplates) mpDocTemplates(new SfxDocumentTemplates)
{ {
mpItemView->SetColor(GetSettings().GetStyleSettings().GetFieldColor());
mpItemView->setMasterView(this);
} }
TemplateLocalView::~TemplateLocalView() TemplateLocalView::~TemplateLocalView()
{ {
for (size_t i = 0; i < maRegions.size(); ++i)
delete maRegions[i];
maRegions.clear();
delete mpDocTemplates; delete mpDocTemplates;
} }
void TemplateLocalView::Populate () void TemplateLocalView::Populate ()
{ {
for (size_t i = 0; i < maRegions.size(); ++i)
delete maRegions[i];
maRegions.clear();
sal_uInt16 nCount = mpDocTemplates->GetRegionCount(); sal_uInt16 nCount = mpDocTemplates->GetRegionCount();
for (sal_uInt16 i = 0; i < nCount; ++i) for (sal_uInt16 i = 0; i < nCount; ++i)
{ {
...@@ -65,6 +72,7 @@ void TemplateLocalView::Populate () ...@@ -65,6 +72,7 @@ void TemplateLocalView::Populate ()
OUString aURL = mpDocTemplates->GetPath(i,j); OUString aURL = mpDocTemplates->GetPath(i,j);
TemplateItemProperties aProperties; TemplateItemProperties aProperties;
aProperties.aIsFolder = false; // Flat hierarchy for the local filesystem (no nested folders)
aProperties.nId = j+1; aProperties.nId = j+1;
aProperties.nDocId = j; aProperties.nDocId = j;
aProperties.nRegionId = i; aProperties.nRegionId = i;
...@@ -79,46 +87,90 @@ void TemplateLocalView::Populate () ...@@ -79,46 +87,90 @@ void TemplateLocalView::Populate ()
lcl_updateThumbnails(pItem); lcl_updateThumbnails(pItem);
mItemList.push_back(pItem); maRegions.push_back(pItem);
} }
CalculateItemPositions();
if ( IsReallyVisible() && IsUpdateMode() )
Invalidate();
} }
void TemplateLocalView::reload () void TemplateLocalView::reload ()
{ {
mpDocTemplates->Update(); mpDocTemplates->Update();
Clear();
Populate(); Populate();
if (mpItemView->IsVisible()) // Check if we are currently browsing a region or root folder
if (mnCurRegionId)
{ {
sal_uInt16 nItemId = mpItemView->getId() + 1; sal_uInt16 nItemId = mnCurRegionId + 1;
for (size_t i = 0; i < mItemList.size(); ++i) for (size_t i = 0; i < maRegions.size(); ++i)
{ {
if (mItemList[i]->mnId == nItemId) if (maRegions[i]->mnId == nItemId)
{ {
mpItemView->Clear(); showRegion(maRegions[i]);
mpItemView->InsertItems(static_cast<TemplateContainerItem*>(mItemList[i])->maTemplates);
break; break;
} }
} }
} }
else
showRootRegion();
}
void TemplateLocalView::showRootRegion()
{
mnHeaderHeight = 0;
mnCurRegionId = 0;
maCurRegionName = OUString();
// Clone root region items so they dont get invalidated when we open another region
std::vector<ThumbnailViewItem*> items(maRegions.size());
for (int i = 0, n = maRegions.size(); i < n; ++i)
{
TemplateContainerItem *pCur = maRegions[i];
TemplateContainerItem *pItem = new TemplateContainerItem(*this);
pItem->mnId = pCur->mnId;
pItem->maTitle = pCur->maTitle;
pItem->maTemplates = pCur->maTemplates;
pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnItemSelected));
items[i] = pItem;
}
maAllButton.Show(false);
maFTName.Show(false);
updateItems(items);
maOpenRegionHdl.Call(NULL);
}
void TemplateLocalView::showRegion(ThumbnailViewItem *pItem)
{
mnHeaderHeight = maAllButton.GetSizePixel().getHeight() + maAllButton.GetPosPixel().Y() * 2;
mnCurRegionId = pItem->mnId-1;
maCurRegionName = pItem->maTitle;
maAllButton.Show(true);
maFTName.Show(true);
insertItems(reinterpret_cast<TemplateContainerItem*>(pItem)->maTemplates);
maOpenRegionHdl.Call(NULL);
}
sal_uInt16 TemplateLocalView::getRegionId(size_t pos) const
{
assert(pos < maRegions.size());
return maRegions[pos]->mnId;
} }
std::vector<OUString> TemplateLocalView::getFolderNames() std::vector<OUString> TemplateLocalView::getFolderNames()
{ {
size_t n = mItemList.size(); size_t n = maRegions.size();
std::vector<OUString> ret(n); std::vector<OUString> ret(n);
for (size_t i = 0; i < n; ++i) for (size_t i = 0; i < n; ++i)
ret[i] = mItemList[i]->maTitle; ret[i] = maRegions[i]->maTitle;
return ret; return ret;
} }
...@@ -128,9 +180,9 @@ TemplateLocalView::getFilteredItems(const boost::function<bool (const TemplateIt ...@@ -128,9 +180,9 @@ TemplateLocalView::getFilteredItems(const boost::function<bool (const TemplateIt
{ {
std::vector<TemplateItemProperties> aItems; std::vector<TemplateItemProperties> aItems;
for (size_t i = 0; i < mItemList.size(); ++i) for (size_t i = 0; i < maRegions.size(); ++i)
{ {
TemplateContainerItem *pFolderItem = static_cast<TemplateContainerItem*>(mItemList[i]); TemplateContainerItem *pFolderItem = static_cast<TemplateContainerItem*>(maRegions[i]);
for (size_t j = 0; j < pFolderItem->maTemplates.size(); ++j) for (size_t j = 0; j < pFolderItem->maTemplates.size(); ++j)
{ {
...@@ -151,17 +203,23 @@ sal_uInt16 TemplateLocalView::createRegion(const OUString &rName) ...@@ -151,17 +203,23 @@ sal_uInt16 TemplateLocalView::createRegion(const OUString &rName)
OUString aRegionName = rName; OUString aRegionName = rName;
// Insert to the region cache list and to the thumbnail item list
TemplateContainerItem* pItem = new TemplateContainerItem( *this ); TemplateContainerItem* pItem = new TemplateContainerItem( *this );
pItem->mnId = nRegionId+1; pItem->mnId = nRegionId+1;
pItem->maTitle = aRegionName; pItem->maTitle = aRegionName;
pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnItemSelected)); pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnItemSelected));
maRegions.push_back(pItem);
pItem = new TemplateContainerItem(*this);
pItem->mnId = nRegionId + 1;
pItem->maTitle = aRegionName;
pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnItemSelected));
mItemList.push_back(pItem); mItemList.push_back(pItem);
CalculateItemPositions(); CalculateItemPositions();
Invalidate();
if ( IsReallyVisible() && IsUpdateMode() )
Invalidate();
return pItem->mnId; return pItem->mnId;
} }
...@@ -175,6 +233,18 @@ bool TemplateLocalView::removeRegion(const sal_uInt16 nItemId) ...@@ -175,6 +233,18 @@ bool TemplateLocalView::removeRegion(const sal_uInt16 nItemId)
RemoveItem(nItemId); RemoveItem(nItemId);
// Remove from the region cache list
std::vector<TemplateContainerItem*>::iterator it;
for ( it = maRegions.begin(); it != maRegions.end(); ++it )
{
if ( (*it)->mnId == nItemId )
{
delete *it;
maRegions.erase(it);
break;
}
}
return true; return true;
} }
...@@ -182,11 +252,11 @@ bool TemplateLocalView::removeTemplate (const sal_uInt16 nItemId, const sal_uInt ...@@ -182,11 +252,11 @@ bool TemplateLocalView::removeTemplate (const sal_uInt16 nItemId, const sal_uInt
{ {
sal_uInt16 nRegionId = nSrcItemId - 1; sal_uInt16 nRegionId = nSrcItemId - 1;
for (size_t i = 0, n = mItemList.size(); i < n; ++i) for (size_t i = 0, n = maRegions.size(); i < n; ++i)
{ {
if (mItemList[i]->mnId == nSrcItemId) if (maRegions[i]->mnId == nSrcItemId)
{ {
TemplateContainerItem *pItem = static_cast<TemplateContainerItem*>(mItemList[i]); TemplateContainerItem *pItem = static_cast<TemplateContainerItem*>(maRegions[i]);
std::vector<TemplateItemProperties>::iterator pIter; std::vector<TemplateItemProperties>::iterator pIter;
for (pIter = pItem->maTemplates.begin(); pIter != pItem->maTemplates.end(); ++pIter) for (pIter = pItem->maTemplates.begin(); pIter != pItem->maTemplates.end(); ++pIter)
{ {
...@@ -197,7 +267,7 @@ bool TemplateLocalView::removeTemplate (const sal_uInt16 nItemId, const sal_uInt ...@@ -197,7 +267,7 @@ bool TemplateLocalView::removeTemplate (const sal_uInt16 nItemId, const sal_uInt
pIter = pItem->maTemplates.erase(pIter); pIter = pItem->maTemplates.erase(pIter);
mpItemView->RemoveItem(nItemId); RemoveItem(nItemId);
// Update Doc Idx for all templates that follow // Update Doc Idx for all templates that follow
for (; pIter != pItem->maTemplates.end(); ++pIter) for (; pIter != pItem->maTemplates.end(); ++pIter)
...@@ -227,12 +297,12 @@ bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_ ...@@ -227,12 +297,12 @@ bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_
TemplateContainerItem *pTarget = NULL; TemplateContainerItem *pTarget = NULL;
TemplateContainerItem *pSrc = NULL; TemplateContainerItem *pSrc = NULL;
for (size_t i = 0, n = mItemList.size(); i < n; ++i) for (size_t i = 0, n = maRegions.size(); i < n; ++i)
{ {
if (mItemList[i]->mnId == nTargetItem) if (maRegions[i]->mnId == nTargetItem)
pTarget = static_cast<TemplateContainerItem*>(mItemList[i]); pTarget = static_cast<TemplateContainerItem*>(maRegions[i]);
else if (mItemList[i]->mnId == nSrcItem) else if (maRegions[i]->mnId == nSrcItem)
pSrc = static_cast<TemplateContainerItem*>(mItemList[i]); pSrc = static_cast<TemplateContainerItem*>(maRegions[i]);
} }
if (pTarget && pSrc) if (pTarget && pSrc)
...@@ -267,7 +337,7 @@ bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_ ...@@ -267,7 +337,7 @@ bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_
if (!bCopy) if (!bCopy)
{ {
// remove template from overlay and from cached data // remove template from region cached data
std::vector<TemplateItemProperties>::iterator aIter; std::vector<TemplateItemProperties>::iterator aIter;
for (aIter = pSrc->maTemplates.begin(); aIter != pSrc->maTemplates.end(); ++aIter) for (aIter = pSrc->maTemplates.begin(); aIter != pSrc->maTemplates.end(); ++aIter)
...@@ -276,7 +346,7 @@ bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_ ...@@ -276,7 +346,7 @@ bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_
{ {
pSrc->maTemplates.erase(aIter); pSrc->maTemplates.erase(aIter);
mpItemView->RemoveItem(pViewItem->mnId); RemoveItem(pViewItem->mnId);
break; break;
} }
} }
...@@ -293,43 +363,39 @@ bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_ ...@@ -293,43 +363,39 @@ bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_
lcl_updateThumbnails(pTarget); lcl_updateThumbnails(pTarget);
CalculateItemPositions(); CalculateItemPositions();
Invalidate();
if (IsReallyVisible() && IsUpdateMode())
{
Invalidate();
mpItemView->Invalidate();
}
} }
return bRet; return bRet;
} }
bool TemplateLocalView::moveTemplates(std::set<const ThumbnailViewItem *> &rItems, bool TemplateLocalView::moveTemplates(const std::set<const ThumbnailViewItem*, selection_cmp_fn> &rItems,
const sal_uInt16 nTargetItem, bool bCopy) const sal_uInt16 nTargetItem, bool bCopy)
{ {
bool ret = true; bool ret = true;
bool refresh = false; bool refresh = false;
sal_uInt16 nSrcRegionId = mpItemView->getId(); sal_uInt16 nSrcRegionId = mnCurRegionId;
sal_uInt16 nSrcRegionItemId = nSrcRegionId + 1; sal_uInt16 nSrcRegionItemId = nSrcRegionId + 1;
TemplateContainerItem *pTarget = NULL; TemplateContainerItem *pTarget = NULL;
TemplateContainerItem *pSrc = NULL; TemplateContainerItem *pSrc = NULL;
for (size_t i = 0, n = mItemList.size(); i < n; ++i) for (size_t i = 0, n = maRegions.size(); i < n; ++i)
{ {
if (mItemList[i]->mnId == nTargetItem) if (maRegions[i]->mnId == nTargetItem)
pTarget = static_cast<TemplateContainerItem*>(mItemList[i]); pTarget = static_cast<TemplateContainerItem*>(maRegions[i]);
else if (mItemList[i]->mnId == nSrcRegionItemId) else if (maRegions[i]->mnId == nSrcRegionItemId)
pSrc = static_cast<TemplateContainerItem*>(mItemList[i]); pSrc = static_cast<TemplateContainerItem*>(maRegions[i]);
} }
if (pTarget && pSrc) if (pTarget && pSrc)
{ {
sal_uInt16 nTargetRegion = pTarget->mnId-1; sal_uInt16 nTargetRegion = pTarget->mnId-1;
sal_uInt16 nTargetIdx = mpDocTemplates->GetCount(nTargetRegion); // Next Idx sal_uInt16 nTargetIdx = mpDocTemplates->GetCount(nTargetRegion); // Next Idx
std::vector<sal_uInt16> aItemIds; // List of moved items ids (also prevents the invalidation of rItems iterators when we remove them as we go)
std::set<const ThumbnailViewItem*>::iterator aSelIter; std::set<const ThumbnailViewItem*,selection_cmp_fn>::iterator aSelIter;
for ( aSelIter = rItems.begin(); aSelIter != rItems.end(); ++aSelIter, ++nTargetIdx ) for ( aSelIter = rItems.begin(); aSelIter != rItems.end(); ++aSelIter, ++nTargetIdx )
{ {
const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(*aSelIter); const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(*aSelIter);
...@@ -361,7 +427,7 @@ bool TemplateLocalView::moveTemplates(std::set<const ThumbnailViewItem *> &rItem ...@@ -361,7 +427,7 @@ bool TemplateLocalView::moveTemplates(std::set<const ThumbnailViewItem *> &rItem
if (!bCopy) if (!bCopy)
{ {
// remove template from overlay and from cached data // remove template from region cached data
std::vector<TemplateItemProperties>::iterator pIter; std::vector<TemplateItemProperties>::iterator pIter;
for (pIter = pSrc->maTemplates.begin(); pIter != pSrc->maTemplates.end(); ++pIter) for (pIter = pSrc->maTemplates.begin(); pIter != pSrc->maTemplates.end(); ++pIter)
...@@ -369,8 +435,7 @@ bool TemplateLocalView::moveTemplates(std::set<const ThumbnailViewItem *> &rItem ...@@ -369,8 +435,7 @@ bool TemplateLocalView::moveTemplates(std::set<const ThumbnailViewItem *> &rItem
if (pIter->nId == pViewItem->mnId) if (pIter->nId == pViewItem->mnId)
{ {
pSrc->maTemplates.erase(pIter); pSrc->maTemplates.erase(pIter);
aItemIds.push_back(pViewItem->mnId);
mpItemView->RemoveItem(pViewItem->mnId);
break; break;
} }
} }
...@@ -378,20 +443,22 @@ bool TemplateLocalView::moveTemplates(std::set<const ThumbnailViewItem *> &rItem ...@@ -378,20 +443,22 @@ bool TemplateLocalView::moveTemplates(std::set<const ThumbnailViewItem *> &rItem
refresh = true; refresh = true;
} }
}
else
ret = false;
if (refresh) // Remove items from the current view
{ for (std::vector<sal_uInt16>::iterator it = aItemIds.begin(); it != aItemIds.end(); ++it)
lcl_updateThumbnails(pSrc); RemoveItem(*it);
lcl_updateThumbnails(pTarget);
CalculateItemPositions(); if (refresh)
{
lcl_updateThumbnails(pSrc);
lcl_updateThumbnails(pTarget);
Invalidate(); CalculateItemPositions();
mpItemView->Invalidate(); Invalidate();
}
} }
else
ret = false;
return ret; return ret;
} }
...@@ -401,15 +468,15 @@ bool TemplateLocalView::copyFrom(const sal_uInt16 nRegionItemId, const BitmapEx ...@@ -401,15 +468,15 @@ bool TemplateLocalView::copyFrom(const sal_uInt16 nRegionItemId, const BitmapEx
{ {
sal_uInt16 nRegionId = nRegionItemId - 1; sal_uInt16 nRegionId = nRegionItemId - 1;
for (size_t i = 0, n = mItemList.size(); i < n; ++i) for (size_t i = 0, n = maRegions.size(); i < n; ++i)
{ {
if (mItemList[i]->mnId == nRegionItemId) if (maRegions[i]->mnId == nRegionItemId)
{ {
sal_uInt16 nId = 0; sal_uInt16 nId = 0;
sal_uInt16 nDocId = 0; sal_uInt16 nDocId = 0;
TemplateContainerItem *pRegionItem = TemplateContainerItem *pRegionItem =
static_cast<TemplateContainerItem*>(mItemList[i]); static_cast<TemplateContainerItem*>(maRegions[i]);
if (!pRegionItem->maTemplates.empty()) if (!pRegionItem->maTemplates.empty())
{ {
...@@ -430,7 +497,7 @@ bool TemplateLocalView::copyFrom(const sal_uInt16 nRegionItemId, const BitmapEx ...@@ -430,7 +497,7 @@ bool TemplateLocalView::copyFrom(const sal_uInt16 nRegionItemId, const BitmapEx
aTemplate.aPath = mpDocTemplates->GetPath(nRegionId,nDocId); aTemplate.aPath = mpDocTemplates->GetPath(nRegionId,nDocId);
TemplateContainerItem *pItem = TemplateContainerItem *pItem =
static_cast<TemplateContainerItem*>(mItemList[i]); static_cast<TemplateContainerItem*>(maRegions[i]);
pItem->maTemplates.push_back(aTemplate); pItem->maTemplates.push_back(aTemplate);
...@@ -487,12 +554,12 @@ bool TemplateLocalView::exportTo(const sal_uInt16 nItemId, const sal_uInt16 nReg ...@@ -487,12 +554,12 @@ bool TemplateLocalView::exportTo(const sal_uInt16 nItemId, const sal_uInt16 nReg
{ {
sal_uInt16 nRegionId = nRegionItemId - 1; sal_uInt16 nRegionId = nRegionItemId - 1;
for (size_t i = 0, n = mItemList.size(); i < n; ++i) for (size_t i = 0, n = maRegions.size(); i < n; ++i)
{ {
if (mItemList[i]->mnId == nRegionItemId) if (maRegions[i]->mnId == nRegionItemId)
{ {
TemplateContainerItem *pRegItem = TemplateContainerItem *pRegItem =
static_cast<TemplateContainerItem*>(mItemList[i]); static_cast<TemplateContainerItem*>(maRegions[i]);
std::vector<TemplateItemProperties>::iterator aIter; std::vector<TemplateItemProperties>::iterator aIter;
for (aIter = pRegItem->maTemplates.begin(); aIter != pRegItem->maTemplates.end(); ++aIter) for (aIter = pRegItem->maTemplates.begin(); aIter != pRegItem->maTemplates.end(); ++aIter)
...@@ -519,11 +586,11 @@ bool TemplateLocalView::saveTemplateAs (sal_uInt16 nItemId, ...@@ -519,11 +586,11 @@ bool TemplateLocalView::saveTemplateAs (sal_uInt16 nItemId,
{ {
bool bRet = false; bool bRet = false;
for (size_t i = 0, n = mItemList.size(); i < n; ++i) for (size_t i = 0, n = maRegions.size(); i < n; ++i)
{ {
if (mItemList[i]->mnId == nItemId) if (maRegions[i]->mnId == nItemId)
{ {
bRet = saveTemplateAs((const TemplateContainerItem*)mItemList[i],rModel,rName); bRet = saveTemplateAs((const TemplateContainerItem*)maRegions[i],rModel,rName);
break; break;
} }
} }
...@@ -550,12 +617,12 @@ bool TemplateLocalView::saveTemplateAs(const TemplateContainerItem *pDstItem, ...@@ -550,12 +617,12 @@ bool TemplateLocalView::saveTemplateAs(const TemplateContainerItem *pDstItem,
bool TemplateLocalView::isTemplateNameUnique(const sal_uInt16 nRegionItemId, const OUString &rName) const bool TemplateLocalView::isTemplateNameUnique(const sal_uInt16 nRegionItemId, const OUString &rName) const
{ {
for (size_t i = 0, n = mItemList.size(); i < n; ++i) for (size_t i = 0, n = maRegions.size(); i < n; ++i)
{ {
if (mItemList[i]->mnId == nRegionItemId) if (maRegions[i]->mnId == nRegionItemId)
{ {
TemplateContainerItem *pRegItem = TemplateContainerItem *pRegItem =
static_cast<TemplateContainerItem*>(mItemList[i]); static_cast<TemplateContainerItem*>(maRegions[i]);
std::vector<TemplateItemProperties>::iterator aIter; std::vector<TemplateItemProperties>::iterator aIter;
for (aIter = pRegItem->maTemplates.begin(); aIter != pRegItem->maTemplates.end(); ++aIter) for (aIter = pRegItem->maTemplates.begin(); aIter != pRegItem->maTemplates.end(); ++aIter)
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include <comphelper/processfactory.hxx> #include <comphelper/processfactory.hxx>
#include <sfx2/templaterepository.hxx> #include <sfx2/templaterepository.hxx>
#include <sfx2/templateview.hxx>
#include <sfx2/templateviewitem.hxx> #include <sfx2/templateviewitem.hxx>
#include <svtools/imagemgr.hxx> #include <svtools/imagemgr.hxx>
#include <tools/urlobj.hxx> #include <tools/urlobj.hxx>
...@@ -47,8 +46,6 @@ enum ...@@ -47,8 +46,6 @@ enum
TemplateRemoteView::TemplateRemoteView (Window *pParent, WinBits nWinStyle, bool bDisableTransientChildren) TemplateRemoteView::TemplateRemoteView (Window *pParent, WinBits nWinStyle, bool bDisableTransientChildren)
: TemplateAbstractView(pParent,nWinStyle,bDisableTransientChildren) : TemplateAbstractView(pParent,nWinStyle,bDisableTransientChildren)
{ {
mpItemView->SetColor(Color(COL_WHITE));
Reference< XComponentContext > xContext = comphelper::getProcessComponentContext(); Reference< XComponentContext > xContext = comphelper::getProcessComponentContext();
Reference< XInteractionHandler > xGlobalInteractionHandler( Reference< XInteractionHandler > xGlobalInteractionHandler(
InteractionHandler::createWithParent(xContext, 0), UNO_QUERY_THROW ); InteractionHandler::createWithParent(xContext, 0), UNO_QUERY_THROW );
...@@ -60,6 +57,16 @@ TemplateRemoteView::~TemplateRemoteView () ...@@ -60,6 +57,16 @@ TemplateRemoteView::~TemplateRemoteView ()
{ {
} }
void TemplateRemoteView::showRootRegion()
{
//TODO:
}
void TemplateRemoteView::showRegion(ThumbnailViewItem */*pItem*/)
{
//TODO:
}
bool TemplateRemoteView::loadRepository (TemplateRepository* pItem, bool bRefresh) bool TemplateRemoteView::loadRepository (TemplateRepository* pItem, bool bRefresh)
{ {
if (!pItem) if (!pItem)
...@@ -67,13 +74,13 @@ bool TemplateRemoteView::loadRepository (TemplateRepository* pItem, bool bRefres ...@@ -67,13 +74,13 @@ bool TemplateRemoteView::loadRepository (TemplateRepository* pItem, bool bRefres
if (!pItem->getTemplates().empty() && !bRefresh) if (!pItem->getTemplates().empty() && !bRefresh)
{ {
mpItemView->InsertItems(pItem->getTemplates()); insertItems(pItem->getTemplates());
return true; return true;
} }
mpItemView->Clear(); mnCurRegionId = pItem->mnId;
mpItemView->setId(pItem->mnId); maCurRegionName = pItem->maTitle;
mpItemView->setName(pItem->maTitle); maFTName.SetText(maCurRegionName);
OUString aURL = pItem->getURL(); OUString aURL = pItem->getURL();
...@@ -167,7 +174,7 @@ bool TemplateRemoteView::loadRepository (TemplateRepository* pItem, bool bRefres ...@@ -167,7 +174,7 @@ bool TemplateRemoteView::loadRepository (TemplateRepository* pItem, bool bRefres
} }
} }
mpItemView->InsertItems(aItems); insertItems(aItems);
} }
} }
catch( ucb::CommandAbortedException& ) catch( ucb::CommandAbortedException& )
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* Copyright 2012 LibreOffice contributors.
*
* 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 "templatedlg.hxx"
#include <sfx2/templateview.hxx>
#include <sfx2/templateabstractview.hxx>
#include <basegfx/matrix/b2dhommatrixtools.hxx>
#include <basegfx/point/b2dpoint.hxx>
#include <basegfx/range/b2drange.hxx>
#include <basegfx/vector/b2dvector.hxx>
#include <drawinglayer/attribute/fillbitmapattribute.hxx>
#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx>
#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
#include <drawinglayer/primitive2d/textprimitive2d.hxx>
#include <drawinglayer/processor2d/baseprocessor2d.hxx>
#include <sfx2/sfxresid.hxx>
#include <sfx2/templateviewitem.hxx>
#include <vcl/edit.hxx>
#include "templateview.hrc"
#define EDIT_HEIGHT 30
using namespace basegfx;
using namespace basegfx::tools;
using namespace drawinglayer::attribute;
using namespace drawinglayer::primitive2d;
TemplateView::TemplateView (Window *pParent)
: ThumbnailView(pParent,WB_VSCROLL | WB_TABSTOP),
mpMasterView(NULL),
maAllButton(this, SfxResId(BTN_ALL_TEMPLATES)),
maFTName(this, SfxResId(FT_NAME)),
mnId(0)
{
mnHeaderHeight = maAllButton.GetSizePixel().getHeight() + maAllButton.GetPosPixel().Y() * 2;
maAllButton.SetStyle(maAllButton.GetStyle() | WB_FLATBUTTON);
}
TemplateView::~TemplateView ()
{
}
void TemplateView::setName (const OUString &rName)
{
maName = rName;
maFTName.SetText(maName);
}
void TemplateView::InsertItems (const std::vector<TemplateItemProperties> &rTemplates)
{
for (size_t i = 0, n = rTemplates.size(); i < n; ++i )
{
TemplateViewItem *pItem = new TemplateViewItem(*this);
const TemplateItemProperties *pCur = &rTemplates[i];
pItem->mnId = pCur->nId;
pItem->mnDocId = pCur->nDocId;
pItem->mnRegionId = pCur->nRegionId;
pItem->maTitle = pCur->aName;
pItem->setPath(pCur->aPath);
pItem->maPreview1 = pCur->aThumbnail;
if ( pCur->aThumbnail.IsEmpty() )
{
// Use the default thumbnail if we have nothing else
pItem->maPreview1 = SfxTemplateManagerDlg::getDefaultThumbnail( pItem->getPath() );
}
pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnItemSelected));
mItemList.push_back(pItem);
}
CalculateItemPositions();
Invalidate();
}
void TemplateView::Resize()
{
Size aWinSize = GetOutputSize();
// Set the buttons panel and buttons size
Size aNameSize = maFTName.GetSizePixel();
aNameSize.setWidth( aWinSize.getWidth() - maFTName.GetPosPixel().X());
maFTName.SetSizePixel(aNameSize);
ThumbnailView::Resize();
}
bool TemplateView::renameItem(ThumbnailViewItem* pItem, rtl::OUString sNewTitle)
{
if (mpMasterView)
return mpMasterView->renameItem(pItem, sNewTitle);
return false;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -257,9 +257,6 @@ void ThumbnailView::CalculateItemPositions () ...@@ -257,9 +257,6 @@ void ThumbnailView::CalculateItemPositions ()
if ( !mnLines ) if ( !mnLines )
mnLines = 1; mnLines = 1;
// check if scroll is needed
mbScroll = mnLines > mnVisLines;
if ( mnLines <= mnVisLines ) if ( mnLines <= mnVisLines )
mnFirstLine = 0; mnFirstLine = 0;
else else
...@@ -373,7 +370,11 @@ void ThumbnailView::CalculateItemPositions () ...@@ -373,7 +370,11 @@ void ThumbnailView::CalculateItemPositions ()
// arrange ScrollBar, set values and show it // arrange ScrollBar, set values and show it
if ( mpScrBar ) if ( mpScrBar )
{ {
long nLines = (nCurCount+mnCols-1)/mnCols; mnLines = (nCurCount+mnCols-1)/mnCols;
// check if scroll is needed
mbScroll = mnLines > mnVisLines;
Point aPos( aWinSize.Width() - nScrBarWidth - mnScrBarOffset, mnHeaderHeight ); Point aPos( aWinSize.Width() - nScrBarWidth - mnScrBarOffset, mnHeaderHeight );
Size aSize( nScrBarWidth - mnScrBarOffset, aWinSize.Height() - mnHeaderHeight ); Size aSize( nScrBarWidth - mnScrBarOffset, aWinSize.Height() - mnHeaderHeight );
...@@ -386,7 +387,7 @@ void ThumbnailView::CalculateItemPositions () ...@@ -386,7 +387,7 @@ void ThumbnailView::CalculateItemPositions ()
if ( nPageSize < 1 ) if ( nPageSize < 1 )
nPageSize = 1; nPageSize = 1;
mpScrBar->SetPageSize( nPageSize ); mpScrBar->SetPageSize( nPageSize );
mpScrBar->Show( nLines > mnVisLines ); mpScrBar->Show( mbScroll );
} }
// delete ScrollBar // delete ScrollBar
...@@ -599,12 +600,13 @@ void ThumbnailView::MouseButtonDown( const MouseEvent& rMEvt ) ...@@ -599,12 +600,13 @@ void ThumbnailView::MouseButtonDown( const MouseEvent& rMEvt )
if ( rMEvt.GetClicks() == 1 ) if ( rMEvt.GetClicks() == 1 )
{ {
if (pItem->isSelected() && rMEvt.IsMod1()) if (pItem->isSelected() && rMEvt.IsMod1())
DeselectItem( pItem->mnId ); pItem->setSelection(false);
else else
{ {
if (!pItem->isSelected() && !rMEvt.IsMod1()) if (!pItem->isSelected() && !rMEvt.IsMod1())
deselectItems( ); deselectItems( );
SelectItem( pItem->mnId );
pItem->setSelection(true);
bool bClickOnTitle = pItem->getTextArea().IsInside(rMEvt.GetPosPixel()); bool bClickOnTitle = pItem->getTextArea().IsInside(rMEvt.GetPosPixel());
pItem->setEditTitle(bClickOnTitle); pItem->setEditTitle(bClickOnTitle);
...@@ -806,6 +808,13 @@ void ThumbnailView::RemoveItem( sal_uInt16 nItemId ) ...@@ -806,6 +808,13 @@ void ThumbnailView::RemoveItem( sal_uInt16 nItemId )
if ( nPos < mItemList.size() ) { if ( nPos < mItemList.size() ) {
ValueItemList::iterator it = mItemList.begin(); ValueItemList::iterator it = mItemList.begin();
::std::advance( it, nPos ); ::std::advance( it, nPos );
if ((*it)->isSelected())
{
(*it)->setSelection(false);
maItemStateHdl.Call(*it);
}
delete *it; delete *it;
mItemList.erase( it ); mItemList.erase( it );
} }
...@@ -836,6 +845,21 @@ void ThumbnailView::Clear() ...@@ -836,6 +845,21 @@ void ThumbnailView::Clear()
Invalidate(); Invalidate();
} }
void ThumbnailView::updateItems (const std::vector<ThumbnailViewItem*> &items)
{
ImplDeleteItems();
// reset variables
mnFirstLine = 0;
mnHighItemId = 0;
mItemList = items;
CalculateItemPositions();
Invalidate();
}
size_t ThumbnailView::GetItemPos( sal_uInt16 nItemId ) const size_t ThumbnailView::GetItemPos( sal_uInt16 nItemId ) const
{ {
for ( size_t i = 0, n = mItemList.size(); i < n; ++i ) { for ( size_t i = 0, n = mItemList.size(); i < n; ++i ) {
......
...@@ -99,6 +99,18 @@ private: ...@@ -99,6 +99,18 @@ private:
OUString maKeyword; OUString maKeyword;
}; };
/***
*
* Order items in ascending order (useful for the selection sets and move/copy operations since the associated ids
* change when processed by the SfxDocumentTemplates class so we want to process to ones with higher id first)
*
***/
static bool cmpSelectionItems (const ThumbnailViewItem *pItem1, const ThumbnailViewItem *pItem2)
{
return pItem1->mnId > pItem2->mnId;
}
class TemplateManagerPage : public TabPage class TemplateManagerPage : public TabPage
{ {
private: private:
...@@ -120,6 +132,8 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) ...@@ -120,6 +132,8 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
mpSearchView(new TemplateSearchView(&maTabPage)), mpSearchView(new TemplateSearchView(&maTabPage)),
maView(new TemplateLocalView(&maTabPage,SfxResId(TEMPLATE_VIEW))), maView(new TemplateLocalView(&maTabPage,SfxResId(TEMPLATE_VIEW))),
mpOnlineView(new TemplateRemoteView(&maTabPage, WB_VSCROLL,false)), mpOnlineView(new TemplateRemoteView(&maTabPage, WB_VSCROLL,false)),
maSelTemplates(cmpSelectionItems),
maSelFolders(cmpSelectionItems),
mbIsSaveMode(false), mbIsSaveMode(false),
mxDesktop(comphelper::getProcessServiceFactory()->createInstance( "com.sun.star.frame.Desktop" ),uno::UNO_QUERY ), mxDesktop(comphelper::getProcessServiceFactory()->createInstance( "com.sun.star.frame.Desktop" ),uno::UNO_QUERY ),
mbIsSynced(false), mbIsSynced(false),
...@@ -170,10 +184,9 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) ...@@ -170,10 +184,9 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
TEMPLATE_ITEM_MAX_HEIGHT-TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT, TEMPLATE_ITEM_MAX_HEIGHT-TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT,
TEMPLATE_ITEM_PADDING); TEMPLATE_ITEM_PADDING);
maView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVFolderStateHdl)); maView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVItemStateHdl));
maView->setOverlayItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl)); maView->setOpenRegionHdl(LINK(this,SfxTemplateManagerDlg,OpenRegionHdl));
maView->setOpenHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl)); maView->setOpenTemplateHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl));
maView->setOverlayCloseHdl(LINK(this,SfxTemplateManagerDlg,CloseOverlayHdl));
// Set online view position and dimensions // Set online view position and dimensions
mpOnlineView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH); mpOnlineView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH);
...@@ -182,9 +195,9 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) ...@@ -182,9 +195,9 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
TEMPLATE_ITEM_MAX_HEIGHT-TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT, TEMPLATE_ITEM_MAX_HEIGHT-TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT,
TEMPLATE_ITEM_PADDING); TEMPLATE_ITEM_PADDING);
mpOnlineView->setOverlayItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl)); mpOnlineView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVItemStateHdl));
mpOnlineView->setOpenHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl)); mpOnlineView->setOpenRegionHdl(LINK(this,SfxTemplateManagerDlg,OpenRegionHdl));
mpOnlineView->setOverlayCloseHdl(LINK(this,SfxTemplateManagerDlg,CloseOverlayHdl)); mpOnlineView->setOpenTemplateHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl));
mpSearchView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH); mpSearchView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH);
...@@ -192,7 +205,7 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) ...@@ -192,7 +205,7 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
TEMPLATE_ITEM_MAX_HEIGHT-TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT, TEMPLATE_ITEM_MAX_HEIGHT-TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT,
TEMPLATE_ITEM_PADDING); TEMPLATE_ITEM_PADDING);
mpSearchView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl)); mpSearchView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVItemStateHdl));
maTabControl.SetActivatePageHdl(LINK(this,SfxTemplateManagerDlg,ActivatePageHdl)); maTabControl.SetActivatePageHdl(LINK(this,SfxTemplateManagerDlg,ActivatePageHdl));
...@@ -214,9 +227,10 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent) ...@@ -214,9 +227,10 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
createDefaultTemplateMenu(); createDefaultTemplateMenu();
maView->Populate(); maView->Populate();
maView->showRootRegion();
maView->Show(); maView->Show();
mpCurView->filterTemplatesByApp(FILTER_APP_WRITER); mpCurView->filterItems(ViewFilter_Application(FILTER_APP_WRITER));
FreeResource(); FreeResource();
} }
...@@ -228,6 +242,17 @@ SfxTemplateManagerDlg::~SfxTemplateManagerDlg () ...@@ -228,6 +242,17 @@ SfxTemplateManagerDlg::~SfxTemplateManagerDlg ()
for (size_t i = 0, n = maRepositories.size(); i < n; ++i) for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
delete maRepositories[i]; delete maRepositories[i];
// Ignore view events since we are cleaning the object
maView->setItemStateHdl(Link());
maView->setOpenRegionHdl(Link());
maView->setOpenTemplateHdl(Link());
mpOnlineView->setItemStateHdl(Link());
mpOnlineView->setOpenRegionHdl(Link());
mpOnlineView->setOpenTemplateHdl(Link());
mpSearchView->setItemStateHdl(Link());
delete mpSearchEdit; delete mpSearchEdit;
delete mpViewBar; delete mpViewBar;
delete mpActionBar; delete mpActionBar;
...@@ -244,7 +269,7 @@ void SfxTemplateManagerDlg::setSaveMode(bool bMode) ...@@ -244,7 +269,7 @@ void SfxTemplateManagerDlg::setSaveMode(bool bMode)
{ {
mbIsSaveMode = bMode; mbIsSaveMode = bMode;
maTabControl.Clear(); maTabControl.Clear();
mpCurView->filterTemplatesByApp(FILTER_APP_NONE); mpCurView->filterItems(ViewFilter_Application(FILTER_APP_NONE));
if (bMode) if (bMode)
{ {
...@@ -283,22 +308,10 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg,ActivatePageHdl) ...@@ -283,22 +308,10 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg,ActivatePageHdl)
eFilter = FILTER_APP_DRAW; eFilter = FILTER_APP_DRAW;
break; break;
} }
mpCurView->filterTemplatesByApp(eFilter); mpCurView->filterItems(ViewFilter_Application(eFilter));
return 0; return 0;
} }
void SfxTemplateManagerDlg::MouseButtonDown( const MouseEvent& rMEvt )
{
if (!maView->GetActiveClipRegion().IsInside(rMEvt.GetPosPixel()) && maView->isOverlayVisible())
{
maSelTemplates.clear();
mpTemplateBar->Hide();
mpViewBar->Show();
maView->showOverlay(false);
}
}
void SfxTemplateManagerDlg::Resize() void SfxTemplateManagerDlg::Resize()
{ {
Size aWinSize = GetSizePixel(); Size aWinSize = GetSizePixel();
...@@ -353,21 +366,6 @@ void SfxTemplateManagerDlg::Resize() ...@@ -353,21 +366,6 @@ void SfxTemplateManagerDlg::Resize()
ModelessDialog::Resize(); ModelessDialog::Resize();
} }
IMPL_LINK_NOARG(SfxTemplateManagerDlg, CloseOverlayHdl)
{
maSelTemplates.clear();
mpTemplateBar->Hide();
mpViewBar->Show();
mpActionBar->Show();
if (mpCurView == maView)
mpCurView->showOverlay(false);
else
switchMainView(true);
return 0;
}
IMPL_LINK_NOARG(SfxTemplateManagerDlg,TBXViewHdl) IMPL_LINK_NOARG(SfxTemplateManagerDlg,TBXViewHdl)
{ {
switch(mpViewBar->GetCurItemId()) switch(mpViewBar->GetCurItemId())
...@@ -493,79 +491,14 @@ IMPL_LINK(SfxTemplateManagerDlg, TBXDropdownHdl, ToolBox*, pBox) ...@@ -493,79 +491,14 @@ IMPL_LINK(SfxTemplateManagerDlg, TBXDropdownHdl, ToolBox*, pBox)
return 0; return 0;
} }
IMPL_LINK(SfxTemplateManagerDlg, TVFolderStateHdl, const ThumbnailViewItem*, pItem) IMPL_LINK(SfxTemplateManagerDlg, TVItemStateHdl, const ThumbnailViewItem*, pItem)
{
if (pItem->isSelected())
{
if (maSelFolders.empty() && !mbIsSaveMode)
{
mpViewBar->ShowItem(TBI_TEMPLATE_IMPORT);
mpViewBar->ShowItem(TBI_TEMPLATE_FOLDER_DEL);
}
maSelFolders.insert(pItem);
}
else
{
maSelFolders.erase(pItem);
if (maSelFolders.empty() && !mbIsSaveMode)
{
mpViewBar->HideItem(TBI_TEMPLATE_IMPORT);
mpViewBar->HideItem(TBI_TEMPLATE_FOLDER_DEL);
}
}
return 0;
}
IMPL_LINK(SfxTemplateManagerDlg, TVTemplateStateHdl, const ThumbnailViewItem*, pItem)
{ {
bool bInSelection = maSelTemplates.find(pItem) != maSelTemplates.end(); const TemplateContainerItem *pCntItem = dynamic_cast<const TemplateContainerItem*>(pItem);
if (pItem->isSelected())
{
if (!mbIsSaveMode)
{
if (maSelTemplates.empty())
{
mpViewBar->Show(false);
mpActionBar->Show(false);
mpTemplateBar->Show();
}
else if (maSelTemplates.size() != 1 || !bInSelection)
{
mpTemplateBar->HideItem(TBI_TEMPLATE_EDIT);
mpTemplateBar->HideItem(TBI_TEMPLATE_PROPERTIES);
mpTemplateBar->HideItem(TBI_TEMPLATE_DEFAULT);
}
}
if (!bInSelection) if (pCntItem)
maSelTemplates.insert(pItem); OnRegionState(pItem);
}
else else
{ OnTemplateState(pItem);
if (bInSelection)
{
maSelTemplates.erase(pItem);
if (!mbIsSaveMode)
{
if (maSelTemplates.empty())
{
mpTemplateBar->Show(false);
mpViewBar->Show();
mpActionBar->Show();
}
else if (maSelTemplates.size() == 1)
{
mpTemplateBar->ShowItem(TBI_TEMPLATE_EDIT);
mpTemplateBar->ShowItem(TBI_TEMPLATE_PROPERTIES);
mpTemplateBar->ShowItem(TBI_TEMPLATE_DEFAULT);
}
}
}
}
return 0; return 0;
} }
...@@ -577,10 +510,7 @@ IMPL_LINK(SfxTemplateManagerDlg, MenuSelectHdl, Menu*, pMenu) ...@@ -577,10 +510,7 @@ IMPL_LINK(SfxTemplateManagerDlg, MenuSelectHdl, Menu*, pMenu)
switch(nMenuId) switch(nMenuId)
{ {
case MNI_ACTION_SORT_NAME: case MNI_ACTION_SORT_NAME:
if (maView->isOverlayVisible()) maView->sortItems(SortView_Name());
maView->sortOverlayItems(SortView_Name());
else
maView->sortItems(SortView_Name());
break; break;
case MNI_ACTION_REFRESH: case MNI_ACTION_REFRESH:
mpCurView->reload(); mpCurView->reload();
...@@ -659,10 +589,7 @@ IMPL_LINK(SfxTemplateManagerDlg, RepositoryMenuSelectHdl, Menu*, pMenu) ...@@ -659,10 +589,7 @@ IMPL_LINK(SfxTemplateManagerDlg, RepositoryMenuSelectHdl, Menu*, pMenu)
} }
if (mpOnlineView->loadRepository(pRepository,false)) if (mpOnlineView->loadRepository(pRepository,false))
{
switchMainView(false); switchMainView(false);
mpOnlineView->showOverlay(true);
}
} }
return 0; return 0;
...@@ -680,6 +607,18 @@ IMPL_LINK(SfxTemplateManagerDlg, DefaultTemplateMenuSelectHdl, Menu*, pMenu) ...@@ -680,6 +607,18 @@ IMPL_LINK(SfxTemplateManagerDlg, DefaultTemplateMenuSelectHdl, Menu*, pMenu)
return 0; return 0;
} }
IMPL_LINK_NOARG(SfxTemplateManagerDlg, OpenRegionHdl)
{
maSelFolders.clear();
maSelTemplates.clear();
mpTemplateBar->Hide();
mpViewBar->Show();
mpActionBar->Show();
return 0;
}
IMPL_LINK(SfxTemplateManagerDlg, OpenTemplateHdl, ThumbnailViewItem*, pItem) IMPL_LINK(SfxTemplateManagerDlg, OpenTemplateHdl, ThumbnailViewItem*, pItem)
{ {
if (!mbIsSaveMode) if (!mbIsSaveMode)
...@@ -711,7 +650,7 @@ IMPL_LINK(SfxTemplateManagerDlg, OpenTemplateHdl, ThumbnailViewItem*, pItem) ...@@ -711,7 +650,7 @@ IMPL_LINK(SfxTemplateManagerDlg, OpenTemplateHdl, ThumbnailViewItem*, pItem)
IMPL_LINK_NOARG(SfxTemplateManagerDlg, SearchUpdateHdl) IMPL_LINK_NOARG(SfxTemplateManagerDlg, SearchUpdateHdl)
{ {
// if the search view is hidden, hide the folder view and display search one // if the search view is hidden, hide the folder view and display search one
if (!mpCurView->isOverlayVisible() && !mpSearchView->IsVisible()) if (!mpCurView->isNonRootRegionVisible() && !mpSearchView->IsVisible())
{ {
mpSearchView->Clear(); mpSearchView->Clear();
mpSearchView->Show(); mpSearchView->Show();
...@@ -722,9 +661,9 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, SearchUpdateHdl) ...@@ -722,9 +661,9 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, SearchUpdateHdl)
if (!aKeyword.isEmpty()) if (!aKeyword.isEmpty())
{ {
if (mpCurView->isOverlayVisible()) if (mpCurView->isNonRootRegionVisible())
{ {
mpCurView->filterTemplatesByKeyword(aKeyword); mpCurView->filterItems(ViewFilter_Keyword(aKeyword));
} }
else else
{ {
...@@ -751,9 +690,9 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, SearchUpdateHdl) ...@@ -751,9 +690,9 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, SearchUpdateHdl)
} }
else else
{ {
if (mpCurView->isOverlayVisible()) if (mpCurView->isNonRootRegionVisible())
{ {
mpCurView->filterTemplatesByApp(FILTER_APP_NONE); mpCurView->filterItems(ViewFilter_Application(FILTER_APP_NONE));
} }
else else
{ {
...@@ -765,6 +704,80 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, SearchUpdateHdl) ...@@ -765,6 +704,80 @@ IMPL_LINK_NOARG(SfxTemplateManagerDlg, SearchUpdateHdl)
return 0; return 0;
} }
void SfxTemplateManagerDlg::OnRegionState (const ThumbnailViewItem *pItem)
{
if (pItem->isSelected())
{
if (maSelFolders.empty() && !mbIsSaveMode)
{
mpViewBar->ShowItem(TBI_TEMPLATE_IMPORT);
mpViewBar->ShowItem(TBI_TEMPLATE_FOLDER_DEL);
}
maSelFolders.insert(pItem);
}
else
{
maSelFolders.erase(pItem);
if (maSelFolders.empty() && !mbIsSaveMode)
{
mpViewBar->HideItem(TBI_TEMPLATE_IMPORT);
mpViewBar->HideItem(TBI_TEMPLATE_FOLDER_DEL);
}
}
}
void SfxTemplateManagerDlg::OnTemplateState (const ThumbnailViewItem *pItem)
{
bool bInSelection = maSelTemplates.find(pItem) != maSelTemplates.end();
if (pItem->isSelected())
{
if (!mbIsSaveMode)
{
if (maSelTemplates.empty())
{
mpViewBar->Show(false);
mpActionBar->Show(false);
mpTemplateBar->Show();
}
else if (maSelTemplates.size() != 1 || !bInSelection)
{
mpTemplateBar->HideItem(TBI_TEMPLATE_EDIT);
mpTemplateBar->HideItem(TBI_TEMPLATE_PROPERTIES);
mpTemplateBar->HideItem(TBI_TEMPLATE_DEFAULT);
}
}
if (!bInSelection)
maSelTemplates.insert(pItem);
}
else
{
if (bInSelection)
{
maSelTemplates.erase(pItem);
if (!mbIsSaveMode)
{
if (maSelTemplates.empty())
{
mpTemplateBar->Show(false);
mpViewBar->Show();
mpActionBar->Show();
}
else if (maSelTemplates.size() == 1)
{
mpTemplateBar->ShowItem(TBI_TEMPLATE_EDIT);
mpTemplateBar->ShowItem(TBI_TEMPLATE_PROPERTIES);
mpTemplateBar->ShowItem(TBI_TEMPLATE_DEFAULT);
}
}
}
}
}
void SfxTemplateManagerDlg::OnTemplateImport () void SfxTemplateManagerDlg::OnTemplateImport ()
{ {
sal_Int16 nDialogType = sal_Int16 nDialogType =
...@@ -905,10 +918,10 @@ void SfxTemplateManagerDlg::OnTemplateExport() ...@@ -905,10 +918,10 @@ void SfxTemplateManagerDlg::OnTemplateExport()
} }
else else
{ {
// export templates from the current open overlay // export templates from the current view
sal_uInt16 i = 1; sal_uInt16 i = 1;
sal_uInt16 nRegionItemId = maView->getOverlayRegionId() + 1; sal_uInt16 nRegionItemId = maView->getCurRegionId() + 1;
std::set<const ThumbnailViewItem*>::const_iterator pIter = maSelTemplates.begin(); std::set<const ThumbnailViewItem*>::const_iterator pIter = maSelTemplates.begin();
for (pIter = maSelTemplates.begin(); pIter != maSelTemplates.end(); ++pIter, ++i) for (pIter = maSelTemplates.begin(); pIter != maSelTemplates.end(); ++pIter, ++i)
...@@ -933,7 +946,7 @@ void SfxTemplateManagerDlg::OnTemplateExport() ...@@ -933,7 +946,7 @@ void SfxTemplateManagerDlg::OnTemplateExport()
} }
} }
maView->deselectOverlayItems(); maView->deselectItems();
} }
if (!aTemplateList.isEmpty()) if (!aTemplateList.isEmpty())
...@@ -982,8 +995,8 @@ void SfxTemplateManagerDlg::OnTemplateSearch () ...@@ -982,8 +995,8 @@ void SfxTemplateManagerDlg::OnTemplateSearch ()
mpSearchEdit->GrabFocus(); mpSearchEdit->GrabFocus();
// display all templates if we hide the search bar // display all templates if we hide the search bar
if (bVisible && mpCurView->isOverlayVisible()) if (bVisible && mpCurView->isNonRootRegionVisible())
mpCurView->filterTemplatesByApp(FILTER_APP_NONE); mpCurView->filterItems(ViewFilter_Application(FILTER_APP_NONE));
} }
void SfxTemplateManagerDlg::OnTemplateEdit () void SfxTemplateManagerDlg::OnTemplateEdit ()
...@@ -1068,7 +1081,7 @@ void SfxTemplateManagerDlg::OnTemplateDelete () ...@@ -1068,7 +1081,7 @@ void SfxTemplateManagerDlg::OnTemplateDelete ()
std::set<const ThumbnailViewItem*>::const_iterator pIter; std::set<const ThumbnailViewItem*>::const_iterator pIter;
for (pIter = maSelTemplates.begin(); pIter != maSelTemplates.end();) for (pIter = maSelTemplates.begin(); pIter != maSelTemplates.end();)
{ {
if (maView->removeTemplate((*pIter)->mnId,maView->getOverlayRegionId()+1)) if (maView->removeTemplate((*pIter)->mnId,maView->getCurRegionId()+1))
maSelTemplates.erase(pIter++); maSelTemplates.erase(pIter++);
else else
{ {
...@@ -1153,9 +1166,9 @@ void SfxTemplateManagerDlg::OnFolderDelete() ...@@ -1153,9 +1166,9 @@ void SfxTemplateManagerDlg::OnFolderDelete()
void SfxTemplateManagerDlg::OnRepositoryDelete() void SfxTemplateManagerDlg::OnRepositoryDelete()
{ {
if(deleteRepository(mpOnlineView->getOverlayRegionId())) if(deleteRepository(mpOnlineView->getCurRegionId()))
{ {
// close overlay and switch to local view // switch to local view
switchMainView(true); switchMainView(true);
createRepositoryMenu(); createRepositoryMenu();
...@@ -1166,7 +1179,7 @@ void SfxTemplateManagerDlg::OnTemplateSaveAs() ...@@ -1166,7 +1179,7 @@ void SfxTemplateManagerDlg::OnTemplateSaveAs()
{ {
assert(m_xModel.is()); assert(m_xModel.is());
if (!maView->isOverlayVisible() && maSelFolders.empty()) if (!maView->isNonRootRegionVisible() && maSelFolders.empty())
{ {
ErrorBox(this, WB_OK,SfxResId(STR_MSG_ERROR_SELECT_FOLDER).toString()).Execute(); ErrorBox(this, WB_OK,SfxResId(STR_MSG_ERROR_SELECT_FOLDER).toString()).Execute();
return; return;
...@@ -1184,21 +1197,21 @@ void SfxTemplateManagerDlg::OnTemplateSaveAs() ...@@ -1184,21 +1197,21 @@ void SfxTemplateManagerDlg::OnTemplateSaveAs()
OUString aQMsg(SfxResId(STR_QMSG_TEMPLATE_OVERWRITE).toString()); OUString aQMsg(SfxResId(STR_QMSG_TEMPLATE_OVERWRITE).toString());
QueryBox aQueryDlg(this,WB_YES_NO | WB_DEF_YES, OUString()); QueryBox aQueryDlg(this,WB_YES_NO | WB_DEF_YES, OUString());
if (maView->isOverlayVisible()) if (maView->isNonRootRegionVisible())
{ {
sal_uInt16 nRegionItemId = maView->getOverlayRegionId()+1; sal_uInt16 nRegionItemId = maView->getCurRegionId()+1;
if (!maView->isTemplateNameUnique(nRegionItemId,aName)) if (!maView->isTemplateNameUnique(nRegionItemId,aName))
{ {
aQMsg = aQMsg.replaceFirst("$1",aName); aQMsg = aQMsg.replaceFirst("$1",aName);
aQueryDlg.SetMessText(aQMsg.replaceFirst("$2",maView->getOverlayName())); aQueryDlg.SetMessText(aQMsg.replaceFirst("$2",maView->getCurRegionName()));
if (aQueryDlg.Execute() == RET_NO) if (aQueryDlg.Execute() == RET_NO)
return; return;
} }
if (!maView->saveTemplateAs(nRegionItemId,m_xModel,aName)) if (!maView->saveTemplateAs(nRegionItemId,m_xModel,aName))
aFolderList = maView->getOverlayName(); aFolderList = maView->getCurRegionName();
} }
else else
{ {
...@@ -1323,7 +1336,7 @@ void SfxTemplateManagerDlg::localMoveTo(sal_uInt16 nMenuId) ...@@ -1323,7 +1336,7 @@ void SfxTemplateManagerDlg::localMoveTo(sal_uInt16 nMenuId)
} }
else else
{ {
nItemId = maView->GetItemId(nMenuId-MNI_MOVE_FOLDER_BASE); nItemId = maView->getRegionId(nMenuId-MNI_MOVE_FOLDER_BASE);
} }
if (nItemId) if (nItemId)
...@@ -1372,7 +1385,7 @@ void SfxTemplateManagerDlg::remoteMoveTo(const sal_uInt16 nMenuId) ...@@ -1372,7 +1385,7 @@ void SfxTemplateManagerDlg::remoteMoveTo(const sal_uInt16 nMenuId)
} }
else else
{ {
nItemId = maView->GetItemId(nMenuId-MNI_MOVE_FOLDER_BASE); nItemId = maView->getRegionId(nMenuId-MNI_MOVE_FOLDER_BASE);
} }
if (nItemId) if (nItemId)
...@@ -1399,7 +1412,7 @@ void SfxTemplateManagerDlg::remoteMoveTo(const sal_uInt16 nMenuId) ...@@ -1399,7 +1412,7 @@ void SfxTemplateManagerDlg::remoteMoveTo(const sal_uInt16 nMenuId)
if (!aTemplateList.isEmpty()) if (!aTemplateList.isEmpty())
{ {
OUString aMsg(SfxResId(STR_MSG_ERROR_REMOTE_MOVE).toString()); OUString aMsg(SfxResId(STR_MSG_ERROR_REMOTE_MOVE).toString());
aMsg = aMsg.replaceFirst("$1",mpOnlineView->getOverlayName()); aMsg = aMsg.replaceFirst("$1",mpOnlineView->getCurRegionName());
aMsg = aMsg.replaceFirst("$2",maView->GetItemText(nItemId)); aMsg = aMsg.replaceFirst("$2",maView->GetItemText(nItemId));
ErrorBox(this,WB_OK,aMsg.replaceFirst("$1",aTemplateList)).Execute(); ErrorBox(this,WB_OK,aMsg.replaceFirst("$1",aTemplateList)).Execute();
} }
...@@ -1426,7 +1439,7 @@ void SfxTemplateManagerDlg::localSearchMoveTo(sal_uInt16 nMenuId) ...@@ -1426,7 +1439,7 @@ void SfxTemplateManagerDlg::localSearchMoveTo(sal_uInt16 nMenuId)
} }
else else
{ {
nItemId = maView->GetItemId(nMenuId-MNI_MOVE_FOLDER_BASE); nItemId = maView->getRegionId(nMenuId-MNI_MOVE_FOLDER_BASE);
} }
if (nItemId) if (nItemId)
...@@ -1552,31 +1565,6 @@ void SfxTemplateManagerDlg::syncRepositories() const ...@@ -1552,31 +1565,6 @@ void SfxTemplateManagerDlg::syncRepositories() const
} }
} }
BitmapEx SfxTemplateManagerDlg::getDefaultThumbnail( const OUString& rPath )
{
INetURLObject aUrl(rPath);
OUString aExt = aUrl.getExtension();
BitmapEx aImg;
if ( aExt == "ott" || aExt == "stw" || aExt == "oth" || aExt == "dot" || aExt == "dotx" )
{
aImg = BitmapEx ( SfxResId( SFX_THUMBNAIL_TEXT ) );
}
else if ( aExt == "ots" || aExt == "stc" || aExt == "xlt" || aExt == "xltm" || aExt == "xltx" )
{
aImg = BitmapEx ( SfxResId( SFX_THUMBNAIL_SHEET ) );
}
else if ( aExt == "otp" || aExt == "sti" || aExt == "pot" || aExt == "potm" || aExt == "potx" )
{
aImg = BitmapEx ( SfxResId( SFX_THUMBNAIL_PRESENTATION ) );
}
else if ( aExt == "otg" || aExt == "std" )
{
aImg = BitmapEx ( SfxResId( SFX_THUMBNAIL_DRAWING ) );
}
return aImg;
}
static bool lcl_getServiceName ( const OUString &rFileURL, OUString &rName ) static bool lcl_getServiceName ( const OUString &rFileURL, OUString &rName )
{ {
bool bRet = false; bool bRet = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment