diff options
author | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2012-12-17 21:51:04 +0100 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2012-12-18 09:30:15 +0100 |
commit | 3016b60bcb938eb2d4a5e5d7f9f4c0f5c136522e (patch) | |
tree | b665335c83f53599f874071aaedb186f9e3d2d65 /sfx2 | |
parent | 58fdb89bc384019e4eaf181a956fe4ca7ed5dd07 (diff) |
Template Manager: moved repositories storage to dialog
Change-Id: If049e05b7cec060cbdbc5a366a4019f088325e1f
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/Library_sfx.mk | 1 | ||||
-rw-r--r-- | sfx2/inc/sfx2/templateabstractview.hxx | 4 | ||||
-rw-r--r-- | sfx2/inc/sfx2/templateremoteview.hxx | 17 | ||||
-rw-r--r-- | sfx2/inc/sfx2/templateremoteviewitem.hxx | 12 | ||||
-rw-r--r-- | sfx2/inc/templatedlg.hxx | 15 | ||||
-rw-r--r-- | sfx2/source/control/templateremoteview.cxx | 112 | ||||
-rw-r--r-- | sfx2/source/control/templateremoteviewitem.cxx | 21 | ||||
-rw-r--r-- | sfx2/source/doc/templatedlg.cxx | 117 |
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; |