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/source | |
parent | 58fdb89bc384019e4eaf181a956fe4ca7ed5dd07 (diff) |
Template Manager: moved repositories storage to dialog
Change-Id: If049e05b7cec060cbdbc5a366a4019f088325e1f
Diffstat (limited to 'sfx2/source')
-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 |
3 files changed, 113 insertions, 137 deletions
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; |