summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorCédric Bosdonnat <cedric.bosdonnat@free.fr>2012-12-17 21:51:04 +0100
committerCédric Bosdonnat <cedric.bosdonnat@free.fr>2012-12-18 09:30:15 +0100
commit3016b60bcb938eb2d4a5e5d7f9f4c0f5c136522e (patch)
treeb665335c83f53599f874071aaedb186f9e3d2d65 /sfx2
parent58fdb89bc384019e4eaf181a956fe4ca7ed5dd07 (diff)
Template Manager: moved repositories storage to dialog
Change-Id: If049e05b7cec060cbdbc5a366a4019f088325e1f
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/Library_sfx.mk1
-rw-r--r--sfx2/inc/sfx2/templateabstractview.hxx4
-rw-r--r--sfx2/inc/sfx2/templateremoteview.hxx17
-rw-r--r--sfx2/inc/sfx2/templateremoteviewitem.hxx12
-rw-r--r--sfx2/inc/templatedlg.hxx15
-rw-r--r--sfx2/source/control/templateremoteview.cxx112
-rw-r--r--sfx2/source/control/templateremoteviewitem.cxx21
-rw-r--r--sfx2/source/doc/templatedlg.cxx117
8 files changed, 139 insertions, 160 deletions
diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk
index 58c4e81d1d88..6496e3843a64 100644
--- a/sfx2/Library_sfx.mk
+++ b/sfx2/Library_sfx.mk
@@ -143,7 +143,6 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
sfx2/source/control/templatelocalview \
sfx2/source/control/templatelocalviewitem \
sfx2/source/control/templateremoteview \
- sfx2/source/control/templateremoteviewitem \
sfx2/source/control/templatesearchview \
sfx2/source/control/thumbnailviewitem \
sfx2/source/control/thumbnailviewacc \
diff --git a/sfx2/inc/sfx2/templateabstractview.hxx b/sfx2/inc/sfx2/templateabstractview.hxx
index a86ced08b63a..a0cb1e070146 100644
--- a/sfx2/inc/sfx2/templateabstractview.hxx
+++ b/sfx2/inc/sfx2/templateabstractview.hxx
@@ -81,9 +81,9 @@ public:
virtual ~TemplateAbstractView ();
// Fill view with template folders thumbnails
- virtual void Populate () = 0;
+ virtual void Populate () { };
- virtual void reload () = 0;
+ virtual void reload () { };
virtual void filterTemplatesByApp (const FILTER_APPLICATION &eApp) = 0;
diff --git a/sfx2/inc/sfx2/templateremoteview.hxx b/sfx2/inc/sfx2/templateremoteview.hxx
index 1d7e49d15002..e8076f641a00 100644
--- a/sfx2/inc/sfx2/templateremoteview.hxx
+++ b/sfx2/inc/sfx2/templateremoteview.hxx
@@ -25,29 +25,14 @@ public:
virtual ~TemplateRemoteView ();
- // Load repositories from user settings.
- virtual void Populate ();
-
- virtual void reload ();
-
virtual void filterTemplatesByApp (const FILTER_APPLICATION &eApp);
virtual void showOverlay (bool bVisible);
- bool loadRepository (const sal_uInt16 nRepositoryId, bool bRefresh);
-
- const std::vector<TemplateRemoteViewItem*>& getRepositories () const { return maRepositories; }
-
- bool insertRepository (const OUString &rName, const OUString &rURL);
-
- bool deleteRepository (const sal_uInt16 nRepositoryId);
-
- void syncRepositories () const;
+ bool loadRepository (TemplateRemoteViewItem* pRepository, bool bRefresh);
private:
- bool mbIsSynced;
- std::vector<TemplateRemoteViewItem*> maRepositories;
com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > m_xCmdEnv;
};
diff --git a/sfx2/inc/sfx2/templateremoteviewitem.hxx b/sfx2/inc/sfx2/templateremoteviewitem.hxx
index 63f2c7d8ce20..83d47bc1f9de 100644
--- a/sfx2/inc/sfx2/templateremoteviewitem.hxx
+++ b/sfx2/inc/sfx2/templateremoteviewitem.hxx
@@ -10,16 +10,15 @@
#ifndef __SFX2_TEMPLATEREMOTEVIEWITEM_HXX__
#define __SFX2_TEMPLATEREMOTEVIEWITEM_HXX__
-#include <sfx2/thumbnailviewitem.hxx>
#include <sfx2/templateproperties.hxx>
-class TemplateRemoteViewItem : public ThumbnailViewItem
+class TemplateRemoteViewItem
{
public:
- TemplateRemoteViewItem (ThumbnailView &rView);
+ TemplateRemoteViewItem () : mnId(0) { };
- virtual ~TemplateRemoteViewItem ();
+ virtual ~TemplateRemoteViewItem () { };
void setURL (const rtl::OUString &rURL) { maUrl = rURL; }
@@ -31,6 +30,11 @@ public:
const std::vector<TemplateItemProperties>& getTemplates () const { return maTemplates; }
+public:
+
+ sal_uInt16 mnId;
+ rtl::OUString maTitle;
+
private:
rtl::OUString maUrl;
diff --git a/sfx2/inc/templatedlg.hxx b/sfx2/inc/templatedlg.hxx
index 3f7ba138d6f1..73c420a88706 100644
--- a/sfx2/inc/templatedlg.hxx
+++ b/sfx2/inc/templatedlg.hxx
@@ -22,6 +22,7 @@ class SfxTemplateInfoDlg;
class TemplateAbstractView;
class TemplateLocalView;
class TemplateRemoteView;
+class TemplateRemoteViewItem;
class TemplateSearchView;
class ThumbnailView;
class ThumbnailViewItem;
@@ -109,6 +110,17 @@ private:
void localSearchMoveTo (sal_uInt16 nMenuId);
+ // Remote repositories handling methods
+ void loadRepositories ();
+
+ const std::vector<TemplateRemoteViewItem*>& getRepositories () const { return maRepositories; }
+
+ bool insertRepository (const OUString &rName, const OUString &rURL);
+
+ bool deleteRepository (const sal_uInt16 nRepositoryId);
+
+ void syncRepositories () const;
+
private:
TabControl maTabControl;
@@ -132,6 +144,9 @@ private:
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::XComponentLoader > mxDesktop;
+
+ bool mbIsSynced; ///< Tells whether maRepositories is synchronized with the user config
+ std::vector<TemplateRemoteViewItem*> maRepositories; ///< Stores the remote repositories for templates
};
#endif // TEMPLATEDLG_HXX
diff --git a/sfx2/source/control/templateremoteview.cxx b/sfx2/source/control/templateremoteview.cxx
index a04e4712a243..9e84c3feb9a0 100644
--- a/sfx2/source/control/templateremoteview.cxx
+++ b/sfx2/source/control/templateremoteview.cxx
@@ -10,7 +10,6 @@
#include <sfx2/templateremoteview.hxx>
#include <comphelper/processfactory.hxx>
-#include <officecfg/Office/Common.hxx>
#include <sfx2/templateremoteviewitem.hxx>
#include <sfx2/templateview.hxx>
#include <sfx2/templateviewitem.hxx>
@@ -47,7 +46,6 @@ enum
TemplateRemoteView::TemplateRemoteView (Window *pParent, WinBits nWinStyle, bool bDisableTransientChildren)
: TemplateAbstractView(pParent,nWinStyle,bDisableTransientChildren)
- , mbIsSynced(true)
{
mpItemView->SetColor(Color(COL_WHITE));
@@ -60,36 +58,6 @@ TemplateRemoteView::TemplateRemoteView (Window *pParent, WinBits nWinStyle, bool
TemplateRemoteView::~TemplateRemoteView ()
{
- for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
- delete maRepositories[i];
-}
-
-void TemplateRemoteView::Populate()
-{
- uno::Reference < uno::XComponentContext > m_context(comphelper::getProcessComponentContext());
-
- // Load from user settings
- com::sun::star::uno::Sequence<OUString> aUrls =
- officecfg::Office::Common::Misc::TemplateRepositoryUrls::get(m_context);
-
- com::sun::star::uno::Sequence<OUString> aNames =
- officecfg::Office::Common::Misc::TemplateRepositoryNames::get(m_context);
-
- for (sal_Int32 i = 0; i < aUrls.getLength() && i < aNames.getLength(); ++i)
- {
- TemplateRemoteViewItem *pItem = new TemplateRemoteViewItem(*this);
-
- pItem->mnId = i+1;
- pItem->maTitle = aNames[i];
- pItem->setURL(aUrls[i]);
-
- maRepositories.push_back(pItem);
- }
-}
-
-void TemplateRemoteView::reload ()
-{
- loadRepository(mpItemView->getId(),true);
}
void TemplateRemoteView::filterTemplatesByApp(const FILTER_APPLICATION &eApp)
@@ -109,19 +77,8 @@ void TemplateRemoteView::showOverlay (bool bVisible)
}
}
-bool TemplateRemoteView::loadRepository (const sal_uInt16 nRepositoryId, bool bRefresh)
+bool TemplateRemoteView::loadRepository (TemplateRemoteViewItem* pItem, bool bRefresh)
{
- TemplateRemoteViewItem *pItem = NULL;
-
- for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
- {
- if (maRepositories[i]->mnId == nRepositoryId)
- {
- pItem = maRepositories[i];
- break;
- }
- }
-
if (!pItem)
return false;
@@ -132,7 +89,7 @@ bool TemplateRemoteView::loadRepository (const sal_uInt16 nRepositoryId, bool bR
}
mpItemView->Clear();
- mpItemView->setId(nRepositoryId);
+ mpItemView->setId(pItem->mnId);
mpItemView->setName(pItem->maTitle);
OUString aURL = static_cast<TemplateRemoteViewItem*>(pItem)->getURL();
@@ -156,7 +113,7 @@ bool TemplateRemoteView::loadRepository (const sal_uInt16 nRepositoryId, bool bR
uno::Reference< XResultSet > xResultSet;
uno::Reference< XDynamicResultSet > xDynResultSet;
- ucbhelper::ResultSetInclude eInclude = ucbhelper::INCLUDE_DOCUMENTS_ONLY;
+ ucbhelper::ResultSetInclude eInclude = ucbhelper::INCLUDE_FOLDERS_AND_DOCUMENTS;
xDynResultSet = aContent.createDynamicCursor( aProps, eInclude );
if ( xDynResultSet.is() )
@@ -243,67 +200,4 @@ bool TemplateRemoteView::loadRepository (const sal_uInt16 nRepositoryId, bool bR
return true;
}
-bool TemplateRemoteView::insertRepository(const OUString &rName, const OUString &rURL)
-{
- for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
- {
- if (maRepositories[i]->maTitle == rName)
- return false;
- }
-
- TemplateRemoteViewItem *pItem = new TemplateRemoteViewItem(*this);
-
- pItem->mnId = maRepositories.size()+1;
- pItem->maTitle = rName;
- pItem->setURL(rURL);
-
- maRepositories.push_back(pItem);
-
- mbIsSynced = false;
- return true;
-}
-
-bool TemplateRemoteView::deleteRepository(const sal_uInt16 nRepositoryId)
-{
- bool bRet = false;
-
- for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
- {
- if (maRepositories[i]->mnId == nRepositoryId)
- {
- delete maRepositories[i];
-
- maRepositories.erase(maRepositories.begin() + i);
- mbIsSynced = false;
- bRet = true;
- break;
- }
- }
-
- return bRet;
-}
-
-void TemplateRemoteView::syncRepositories() const
-{
- if (!mbIsSynced)
- {
- uno::Reference < uno::XComponentContext > pContext(comphelper::getProcessComponentContext());
- boost::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create(pContext));
-
- size_t nSize = maRepositories.size();
- uno::Sequence<OUString> aUrls(nSize);
- uno::Sequence<OUString> aNames(nSize);
-
- for(size_t i = 0; i < nSize; ++i)
- {
- aUrls[i] = maRepositories[i]->getURL();
- aNames[i] = maRepositories[i]->maTitle;
- }
-
- officecfg::Office::Common::Misc::TemplateRepositoryUrls::set(aUrls, batch, pContext);
- officecfg::Office::Common::Misc::TemplateRepositoryNames::set(aNames, batch, pContext);
- batch->commit();
- }
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/control/templateremoteviewitem.cxx b/sfx2/source/control/templateremoteviewitem.cxx
deleted file mode 100644
index 626786f84794..000000000000
--- a/sfx2/source/control/templateremoteviewitem.cxx
+++ /dev/null
@@ -1,21 +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 <sfx2/templateremoteviewitem.hxx>
-
-TemplateRemoteViewItem::TemplateRemoteViewItem (ThumbnailView &rView)
- : ThumbnailViewItem(rView)
-{
-}
-
-TemplateRemoteViewItem::~TemplateRemoteViewItem()
-{
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/doc/templatedlg.cxx b/sfx2/source/doc/templatedlg.cxx
index 3546826a8b31..1e1ebd7ee68c 100644
--- a/sfx2/source/doc/templatedlg.cxx
+++ b/sfx2/source/doc/templatedlg.cxx
@@ -15,6 +15,7 @@
#include <comphelper/processfactory.hxx>
#include <comphelper/storagehelper.hxx>
+#include <officecfg/Office/Common.hxx>
#include <sfx2/app.hxx>
#include <sfx2/docfac.hxx>
#include <sfx2/fcontnr.hxx>
@@ -106,7 +107,9 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
maView(new TemplateLocalView(this,SfxResId(TEMPLATE_VIEW))),
mpOnlineView(new TemplateRemoteView(this, WB_VSCROLL,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),
+ maRepositories()
{
// Create popup menus
mpActionMenu = new PopupMenu;
@@ -179,7 +182,7 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
switchMainView(true);
- mpOnlineView->Populate();
+ loadRepositories();
createRepositoryMenu();
createDefaultTemplateMenu();
@@ -192,7 +195,10 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
SfxTemplateManagerDlg::~SfxTemplateManagerDlg ()
{
- mpOnlineView->syncRepositories();
+ // Synchronize the config before deleting it
+ syncRepositories();
+ for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
+ delete maRepositories[i];
delete mpSearchEdit;
delete mpViewBar;
@@ -602,7 +608,7 @@ IMPL_LINK(SfxTemplateManagerDlg, RepositoryMenuSelectHdl, Menu*, pMenu)
{
boost::shared_ptr<Place> pPlace = dlg.GetPlace();
- if (mpOnlineView->insertRepository(pPlace->GetName(),pPlace->GetUrl()))
+ if (insertRepository(pPlace->GetName(),pPlace->GetUrl()))
{
// update repository list menu.
createRepositoryMenu();
@@ -619,7 +625,18 @@ IMPL_LINK(SfxTemplateManagerDlg, RepositoryMenuSelectHdl, Menu*, pMenu)
{
sal_uInt16 nRepoId = nMenuId - MNI_REPOSITORY_BASE;
- if (mpOnlineView->loadRepository(nRepoId,false))
+ TemplateRemoteViewItem *pRepository = NULL;
+
+ for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
+ {
+ if (maRepositories[i]->mnId == nRepoId)
+ {
+ pRepository = maRepositories[i];
+ break;
+ }
+ }
+
+ if (mpOnlineView->loadRepository(pRepository,false))
{
switchMainView(false);
mpOnlineView->showOverlay(true);
@@ -1106,7 +1123,7 @@ void SfxTemplateManagerDlg::OnFolderDelete()
void SfxTemplateManagerDlg::OnRepositoryDelete()
{
- if(mpOnlineView->deleteRepository(mpOnlineView->getOverlayRegionId()))
+ if(deleteRepository(mpOnlineView->getOverlayRegionId()))
{
// close overlay and switch to local view
switchMainView(true);
@@ -1194,7 +1211,7 @@ void SfxTemplateManagerDlg::createRepositoryMenu()
mpRepositoryMenu->InsertItem(MNI_REPOSITORY_LOCAL,SfxResId(STR_REPOSITORY_LOCAL).toString());
- const std::vector<TemplateRemoteViewItem*> &rRepos = mpOnlineView->getRepositories();
+ const std::vector<TemplateRemoteViewItem*> &rRepos = getRepositories();
for (size_t i = 0, n = rRepos.size(); i < n; ++i)
mpRepositoryMenu->InsertItem(MNI_REPOSITORY_BASE+rRepos[i]->mnId,rRepos[i]->maTitle);
@@ -1419,6 +1436,92 @@ void SfxTemplateManagerDlg::localSearchMoveTo(sal_uInt16 nMenuId)
SearchUpdateHdl(mpSearchEdit);
}
+void SfxTemplateManagerDlg::loadRepositories()
+{
+ uno::Reference < uno::XComponentContext > m_context(comphelper::getProcessComponentContext());
+
+ // Load from user settings
+ com::sun::star::uno::Sequence<OUString> aUrls =
+ officecfg::Office::Common::Misc::TemplateRepositoryUrls::get(m_context);
+
+ com::sun::star::uno::Sequence<OUString> aNames =
+ officecfg::Office::Common::Misc::TemplateRepositoryNames::get(m_context);
+
+ for (sal_Int32 i = 0; i < aUrls.getLength() && i < aNames.getLength(); ++i)
+ {
+ TemplateRemoteViewItem *pItem = new TemplateRemoteViewItem();
+
+ pItem->mnId = i+1;
+ pItem->maTitle = aNames[i];
+ pItem->setURL(aUrls[i]);
+
+ maRepositories.push_back(pItem);
+ }
+}
+
+bool SfxTemplateManagerDlg::insertRepository(const OUString &rName, const OUString &rURL)
+{
+ for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
+ {
+ if (maRepositories[i]->maTitle == rName)
+ return false;
+ }
+
+ TemplateRemoteViewItem *pItem = new TemplateRemoteViewItem();
+
+ pItem->mnId = maRepositories.size()+1;
+ pItem->maTitle = rName;
+ pItem->setURL(rURL);
+
+ maRepositories.push_back(pItem);
+
+ mbIsSynced = false;
+ return true;
+}
+
+bool SfxTemplateManagerDlg::deleteRepository(const sal_uInt16 nRepositoryId)
+{
+ bool bRet = false;
+
+ for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
+ {
+ if (maRepositories[i]->mnId == nRepositoryId)
+ {
+ delete maRepositories[i];
+
+ maRepositories.erase(maRepositories.begin() + i);
+ mbIsSynced = false;
+ bRet = true;
+ break;
+ }
+ }
+
+ return bRet;
+}
+
+void SfxTemplateManagerDlg::syncRepositories() const
+{
+ if (!mbIsSynced)
+ {
+ uno::Reference < uno::XComponentContext > pContext(comphelper::getProcessComponentContext());
+ boost::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create(pContext));
+
+ size_t nSize = maRepositories.size();
+ uno::Sequence<OUString> aUrls(nSize);
+ uno::Sequence<OUString> aNames(nSize);
+
+ for(size_t i = 0; i < nSize; ++i)
+ {
+ aUrls[i] = maRepositories[i]->getURL();
+ aNames[i] = maRepositories[i]->maTitle;
+ }
+
+ officecfg::Office::Common::Misc::TemplateRepositoryUrls::set(aUrls, batch, pContext);
+ officecfg::Office::Common::Misc::TemplateRepositoryNames::set(aNames, batch, pContext);
+ batch->commit();
+ }
+}
+
static bool lcl_getServiceName ( const OUString &rFileURL, OUString &rName )
{
bool bRet = false;