LCOV - code coverage report
Current view: top level - libreoffice/sfx2/source/doc - templatedlg.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 783 0.1 %
Date: 2012-12-27 Functions: 2 64 3.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * Copyright 2012 LibreOffice contributors.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  */
       9             : 
      10             : #include "templatedlg.hxx"
      11             : 
      12             : #include "inputdlg.hxx"
      13             : #include "templatesearchview.hxx"
      14             : #include "templatesearchviewitem.hxx"
      15             : 
      16             : #include <comphelper/processfactory.hxx>
      17             : #include <comphelper/storagehelper.hxx>
      18             : #include <officecfg/Office/Common.hxx>
      19             : #include <sfx2/app.hxx>
      20             : #include <sfx2/docfac.hxx>
      21             : #include <sfx2/fcontnr.hxx>
      22             : #include <sfx2/filedlghelper.hxx>
      23             : #include <sfx2/sfxresid.hxx>
      24             : #include <sfx2/templateinfodlg.hxx>
      25             : #include <sfx2/templatelocalview.hxx>
      26             : #include <sfx2/templatecontaineritem.hxx>
      27             : #include <sfx2/templateremoteview.hxx>
      28             : #include <sfx2/templaterepository.hxx>
      29             : #include <sfx2/templateviewitem.hxx>
      30             : #include <sfx2/thumbnailviewitem.hxx>
      31             : #include <sot/storage.hxx>
      32             : #include <svtools/imagemgr.hxx>
      33             : #include <svtools/PlaceEditDialog.hxx>
      34             : #include <tools/urlobj.hxx>
      35             : #include <unotools/moduleoptions.hxx>
      36             : #include <unotools/pathoptions.hxx>
      37             : #include <vcl/edit.hxx>
      38             : #include <vcl/msgbox.hxx>
      39             : #include <vcl/toolbox.hxx>
      40             : 
      41             : #include <com/sun/star/beans/PropertyValue.hpp>
      42             : #include <com/sun/star/embed/XStorage.hpp>
      43             : #include <com/sun/star/embed/ElementModes.hpp>
      44             : #include <com/sun/star/frame/Desktop.hpp>
      45             : #include <com/sun/star/frame/XComponentLoader.hpp>
      46             : #include <com/sun/star/frame/XStorable.hpp>
      47             : #include <com/sun/star/lang/XComponent.hpp>
      48             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      49             : #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
      50             : #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
      51             : #include <com/sun/star/ui/dialogs/FolderPicker.hpp>
      52             : 
      53             : #include "doc.hrc"
      54             : #include "templatedlg.hrc"
      55             : 
      56             : #define PADDING_DLG_BORDER      10
      57             : 
      58             : using namespace ::com::sun::star;
      59             : using namespace ::com::sun::star::beans;
      60             : using namespace ::com::sun::star::embed;
      61             : using namespace ::com::sun::star::frame;
      62             : using namespace ::com::sun::star::lang;
      63             : using namespace ::com::sun::star::uno;
      64             : using namespace ::com::sun::star::ui::dialogs;
      65             : 
      66             : static bool lcl_getServiceName (const OUString &rFileURL, OUString &rName );
      67             : 
      68             : static std::vector<OUString> lcl_getAllFactoryURLs ();
      69             : 
      70             : // Sort by name in ascending order
      71             : class SortView_Name
      72             : {
      73             : public:
      74             : 
      75           0 :     bool operator() (const ThumbnailViewItem *pItem1, const ThumbnailViewItem *pItem2)
      76             :     {
      77           0 :         return (pItem1->maTitle.compareTo(pItem2->maTitle) < 0);
      78             :     }
      79             : };
      80             : 
      81           0 : class SearchView_Keyword
      82             : {
      83             : public:
      84             : 
      85           0 :     SearchView_Keyword (const OUString &rKeyword)
      86           0 :         : maKeyword(rKeyword)
      87           0 :     {}
      88             : 
      89           0 :     bool operator() (const TemplateItemProperties &rItem)
      90             :     {
      91           0 :         return rItem.aName.matchIgnoreAsciiCase(maKeyword);
      92             :     }
      93             : 
      94             : private:
      95             : 
      96             :     OUString maKeyword;
      97             : };
      98             : 
      99           0 : SfxTemplateManagerDlg::SfxTemplateManagerDlg (Window *parent)
     100             :     : ModelessDialog(parent, SfxResId(DLG_TEMPLATE_MANAGER)),
     101             :       maTabControl(this,SfxResId(TAB_CONTROL)),
     102           0 :       mpToolbars( new Control(&maTabControl,SfxResId(TOOLBARS))),
     103           0 :       mpSearchEdit(new Edit(this,WB_HIDE | WB_BORDER)),
     104           0 :       mpViewBar( new ToolBox(mpToolbars, SfxResId(TBX_ACTION_VIEW))),
     105           0 :       mpActionBar( new ToolBox(mpToolbars, SfxResId(TBX_ACTION_ACTION))),
     106           0 :       mpTemplateBar( new ToolBox(mpToolbars, SfxResId(TBX_ACTION_TEMPLATES))),
     107           0 :       mpSearchView(new TemplateSearchView(this)),
     108           0 :       maView(new TemplateLocalView(this,SfxResId(TEMPLATE_VIEW))),
     109           0 :       mpOnlineView(new TemplateRemoteView(this, WB_VSCROLL,false)),
     110             :       mbIsSaveMode(false),
     111             :       mxDesktop( Desktop::create(comphelper::getProcessComponentContext()) ),
     112             :       mbIsSynced(false),
     113           0 :       maRepositories()
     114             : {
     115             :     // Create popup menus
     116           0 :     mpActionMenu = new PopupMenu;
     117           0 :     mpActionMenu->InsertItem(MNI_ACTION_SORT_NAME,SfxResId(STR_ACTION_SORT_NAME).toString(),SfxResId(IMG_ACTION_SORT));
     118           0 :     mpActionMenu->InsertItem(MNI_ACTION_REFRESH,SfxResId(STR_ACTION_REFRESH).toString(),SfxResId(IMG_ACTION_REFRESH));
     119           0 :     mpActionMenu->InsertItem(MNI_ACTION_DEFAULT,SfxResId(STR_ACTION_DEFAULT).toString());
     120           0 :     mpActionMenu->SetSelectHdl(LINK(this,SfxTemplateManagerDlg,MenuSelectHdl));
     121             : 
     122           0 :     mpRepositoryMenu = new PopupMenu;
     123           0 :     mpRepositoryMenu->SetSelectHdl(LINK(this,SfxTemplateManagerDlg,RepositoryMenuSelectHdl));
     124             : 
     125           0 :     mpTemplateDefaultMenu = new PopupMenu;
     126           0 :     mpTemplateDefaultMenu->SetSelectHdl(LINK(this,SfxTemplateManagerDlg,DefaultTemplateMenuSelectHdl));
     127           0 :     mpActionMenu->SetPopupMenu(MNI_ACTION_DEFAULT,mpTemplateDefaultMenu);
     128             : 
     129             :     // Set toolbox styles
     130           0 :     mpViewBar->SetButtonType(BUTTON_SYMBOLTEXT);
     131           0 :     mpTemplateBar->SetButtonType(BUTTON_SYMBOLTEXT);
     132             : 
     133             :     // Set toolbox button bits
     134           0 :     mpViewBar->SetItemBits(TBI_TEMPLATE_REPOSITORY, TIB_DROPDOWNONLY);
     135           0 :     mpActionBar->SetItemBits(TBI_TEMPLATE_ACTION, TIB_DROPDOWNONLY);
     136           0 :     mpTemplateBar->SetItemBits(TBI_TEMPLATE_MOVE,TIB_DROPDOWNONLY);
     137             : 
     138             :     // Set toolbox handlers
     139           0 :     mpViewBar->SetClickHdl(LINK(this,SfxTemplateManagerDlg,TBXViewHdl));
     140           0 :     mpViewBar->SetDropdownClickHdl(LINK(this,SfxTemplateManagerDlg,TBXDropdownHdl));
     141           0 :     mpActionBar->SetClickHdl(LINK(this,SfxTemplateManagerDlg,TBXActionHdl));
     142           0 :     mpActionBar->SetDropdownClickHdl(LINK(this,SfxTemplateManagerDlg,TBXDropdownHdl));
     143           0 :     mpTemplateBar->SetClickHdl(LINK(this,SfxTemplateManagerDlg,TBXTemplateHdl));
     144           0 :     mpTemplateBar->SetDropdownClickHdl(LINK(this,SfxTemplateManagerDlg,TBXDropdownHdl));
     145           0 :     mpSearchEdit->SetUpdateDataHdl(LINK(this,SfxTemplateManagerDlg,SearchUpdateHdl));
     146           0 :     mpSearchEdit->EnableUpdateData();
     147             : 
     148           0 :     maView->SetStyle(WB_VSCROLL);
     149           0 :     maView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH);
     150             : 
     151             :     maView->setItemDimensions(TEMPLATE_ITEM_MAX_WIDTH,TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT,
     152             :                               TEMPLATE_ITEM_MAX_HEIGHT-TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT,
     153           0 :                               TEMPLATE_ITEM_PADDING);
     154             : 
     155           0 :     maView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVFolderStateHdl));
     156           0 :     maView->setOverlayItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl));
     157           0 :     maView->setOverlayDblClickHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl));
     158           0 :     maView->setOverlayCloseHdl(LINK(this,SfxTemplateManagerDlg,CloseOverlayHdl));
     159             : 
     160             :     // Set online view position and dimensions
     161           0 :     mpOnlineView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH);
     162             : 
     163             :     mpOnlineView->setItemDimensions(TEMPLATE_ITEM_MAX_WIDTH,TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT,
     164             :                                     TEMPLATE_ITEM_MAX_HEIGHT-TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT,
     165           0 :                                     TEMPLATE_ITEM_PADDING);
     166             : 
     167           0 :     mpOnlineView->setOverlayItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl));
     168           0 :     mpOnlineView->setOverlayDblClickHdl(LINK(this,SfxTemplateManagerDlg,OpenTemplateHdl));
     169           0 :     mpOnlineView->setOverlayCloseHdl(LINK(this,SfxTemplateManagerDlg,CloseOverlayHdl));
     170             : 
     171           0 :     mpSearchView->setItemMaxTextLength(TEMPLATE_ITEM_MAX_TEXT_LENGTH);
     172             : 
     173             :     mpSearchView->setItemDimensions(TEMPLATE_ITEM_MAX_WIDTH,TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT,
     174             :                                     TEMPLATE_ITEM_MAX_HEIGHT-TEMPLATE_ITEM_THUMBNAIL_MAX_HEIGHT,
     175           0 :                                     TEMPLATE_ITEM_PADDING);
     176             : 
     177           0 :     mpSearchView->setItemStateHdl(LINK(this,SfxTemplateManagerDlg,TVTemplateStateHdl));
     178             : 
     179           0 :     maTabControl.SetActivatePageHdl(LINK(this,SfxTemplateManagerDlg,ActivatePageHdl));
     180             : 
     181           0 :     mpViewBar->Show();
     182           0 :     mpActionBar->Show();
     183             : 
     184           0 :     switchMainView(true);
     185             : 
     186           0 :     loadRepositories();
     187             : 
     188           0 :     createRepositoryMenu();
     189           0 :     createDefaultTemplateMenu();
     190             : 
     191           0 :     maView->Populate();
     192           0 :     maView->Show();
     193             : 
     194           0 :     FreeResource();
     195           0 : }
     196             : 
     197           0 : SfxTemplateManagerDlg::~SfxTemplateManagerDlg ()
     198             : {
     199             :     // Synchronize the config before deleting it
     200           0 :     syncRepositories();
     201           0 :     for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
     202           0 :         delete maRepositories[i];
     203             : 
     204           0 :     delete mpSearchEdit;
     205           0 :     delete mpViewBar;
     206           0 :     delete mpActionBar;
     207           0 :     delete mpTemplateBar;
     208           0 :     delete mpSearchView;
     209           0 :     delete maView;
     210           0 :     delete mpOnlineView;
     211           0 :     delete mpActionMenu;
     212           0 :     delete mpRepositoryMenu;
     213           0 :     delete mpTemplateDefaultMenu;
     214           0 :     delete mpToolbars;
     215           0 : }
     216             : 
     217           0 : void SfxTemplateManagerDlg::setSaveMode(bool bMode)
     218             : {
     219           0 :     mbIsSaveMode = bMode;
     220             : 
     221           0 :     if (bMode)
     222             :     {
     223           0 :         mpViewBar->ShowItem(TBI_TEMPLATE_SAVE);
     224           0 :         mpViewBar->HideItem(TBI_TEMPLATE_IMPORT);
     225           0 :         mpViewBar->HideItem(TBI_TEMPLATE_REPOSITORY);
     226             :     }
     227             :     else
     228             :     {
     229           0 :         mpViewBar->HideItem(TBI_TEMPLATE_SAVE);
     230           0 :         mpViewBar->ShowItem(TBI_TEMPLATE_IMPORT);
     231           0 :         mpViewBar->ShowItem(TBI_TEMPLATE_REPOSITORY);
     232             :     }
     233           0 : }
     234             : 
     235           0 : void SfxTemplateManagerDlg::setDocumentModel(const uno::Reference<frame::XModel> &rModel)
     236             : {
     237           0 :     m_xModel = rModel;
     238           0 : }
     239             : 
     240           0 : IMPL_LINK_NOARG(SfxTemplateManagerDlg,ActivatePageHdl)
     241             : {
     242           0 :     FILTER_APPLICATION eFilter = FILTER_APP_NONE;
     243           0 :     switch (maTabControl.GetCurPageId())
     244             :     {
     245             :         case FILTER_DOCS:
     246           0 :             eFilter = FILTER_APP_WRITER;
     247           0 :             break;
     248             :         case FILTER_PRESENTATIONS:
     249           0 :             eFilter = FILTER_APP_IMPRESS;
     250           0 :             break;
     251             :         case FILTER_SHEETS:
     252           0 :             eFilter = FILTER_APP_CALC;
     253           0 :             break;
     254             :         case FILTER_DRAWS:
     255           0 :             eFilter = FILTER_APP_DRAW;
     256           0 :             break;
     257             :         default:
     258             :         case FILTER_ALL:
     259             :             ;
     260             :     }
     261           0 :     mpCurView->filterTemplatesByApp(eFilter);
     262           0 :     return 0;
     263             : }
     264             : 
     265           0 : void SfxTemplateManagerDlg::MouseButtonDown( const MouseEvent& rMEvt )
     266             : {
     267           0 :     if (!maView->GetActiveClipRegion().IsInside(rMEvt.GetPosPixel()) && maView->isOverlayVisible())
     268             :     {
     269           0 :         maSelTemplates.clear();
     270           0 :         mpTemplateBar->Hide();
     271           0 :         mpViewBar->Show();
     272             : 
     273           0 :         maView->showOverlay(false);
     274             :     }
     275           0 : }
     276             : 
     277           0 : void SfxTemplateManagerDlg::Resize()
     278             : {
     279           0 :     Size aWinSize = GetSizePixel();
     280             : 
     281             :     // Fit the tab page control and the toolbars
     282           0 :     Size aTabSize = maTabControl.GetSizePixel();
     283           0 :     aTabSize.setWidth(aWinSize.getWidth());
     284           0 :     maTabControl.SetSizePixel(aTabSize);
     285           0 :     Size aTabPageSize = maTabControl.GetTabPageSizePixel();
     286           0 :     Point aToolbarsPos(0, aTabSize.getHeight() - aTabPageSize.getHeight());
     287           0 :     mpToolbars->SetPosPixel(aToolbarsPos);
     288           0 :     aTabPageSize.setHeight(mpToolbars->GetSizePixel().getHeight() + 3);
     289           0 :     maTabControl.SetTabPageSizePixel(aTabPageSize);
     290             : 
     291           0 :     Size aToolbarsSize = mpToolbars->GetSizePixel();
     292           0 :     aToolbarsSize.setWidth(aWinSize.getWidth());
     293           0 :     mpToolbars->SetSizePixel(aToolbarsSize);
     294             : 
     295             :     // Calculate toolboxes size and positions
     296           0 :     Size aViewSize = mpViewBar->CalcMinimumWindowSizePixel();
     297           0 :     Size aActionSize = mpActionBar->CalcMinimumWindowSizePixel();
     298           0 :     Size aTemplateSize = mpTemplateBar->CalcMinimumWindowSizePixel();
     299             : 
     300           0 :     aActionSize.setWidth(3*aActionSize.getWidth());
     301           0 :     aViewSize.setWidth(aWinSize.getWidth()-aActionSize.getWidth()-mpViewBar->GetPosPixel().X());
     302           0 :     aTemplateSize.setWidth(aWinSize.getWidth());
     303             : 
     304           0 :     Point aActionPos = mpActionBar->GetPosPixel();
     305           0 :     aActionPos.setX(aWinSize.getWidth() - aActionSize.getWidth());
     306             : 
     307           0 :     mpViewBar->SetSizePixel(aViewSize);
     308           0 :     mpActionBar->SetPosSizePixel(aActionPos,aActionSize);
     309           0 :     mpTemplateBar->SetSizePixel(aTemplateSize);
     310             : 
     311             :     // Set view position below toolbox
     312           0 :     Point aViewPos = maView->GetPosPixel();
     313           0 :     aViewPos.setY(maTabControl.GetPosPixel().Y() + maTabControl.GetSizePixel().getHeight());
     314           0 :     aViewPos.setX(0);
     315           0 :     Size aThumbSize(aWinSize.getWidth(), aWinSize.getHeight() - aViewPos.getY());
     316           0 :     maView->SetPosSizePixel(aViewPos, aThumbSize);
     317             : 
     318           0 :     if (aWinSize.getHeight() < aViewPos.getY() + aThumbSize.getHeight() + PADDING_DLG_BORDER)
     319           0 :         aWinSize.setHeight(aViewPos.getY() + aThumbSize.getHeight() + PADDING_DLG_BORDER);
     320             : 
     321             :     // Set search box position and size
     322           0 :     Size aSearchSize = mpSearchEdit->CalcMinimumSize();
     323           0 :     aSearchSize.setWidth(aWinSize.getWidth() - 2*PADDING_DLG_BORDER);
     324             : 
     325           0 :     mpSearchEdit->SetSizePixel(aSearchSize);
     326           0 :     mpSearchEdit->SetPosPixel(Point(PADDING_DLG_BORDER,aViewPos.Y()));
     327             : 
     328           0 :     maView->SetSizePixel(aThumbSize);
     329           0 :     mpOnlineView->SetPosSizePixel(aViewPos,aThumbSize);
     330           0 :     mpSearchView->SetSizePixel(aThumbSize);
     331             : 
     332           0 :     mpCurView->Resize();
     333             : 
     334           0 :     ModelessDialog::Resize();
     335           0 : }
     336             : 
     337           0 : IMPL_LINK_NOARG(SfxTemplateManagerDlg, CloseOverlayHdl)
     338             : {
     339           0 :     maSelTemplates.clear();
     340           0 :     mpTemplateBar->Hide();
     341           0 :     mpViewBar->Show();
     342           0 :     mpActionBar->Show();
     343             : 
     344           0 :     if (mpCurView == maView)
     345           0 :         mpCurView->showOverlay(false);
     346             :     else
     347           0 :         switchMainView(true);
     348             : 
     349           0 :     return 0;
     350             : }
     351             : 
     352           0 : IMPL_LINK_NOARG(SfxTemplateManagerDlg,TBXViewHdl)
     353             : {
     354           0 :     switch(mpViewBar->GetCurItemId())
     355             :     {
     356             :     case TBI_TEMPLATE_IMPORT:
     357           0 :         OnTemplateImport();
     358           0 :         break;
     359             :     case TBI_TEMPLATE_FOLDER_DEL:
     360           0 :         if (mpCurView == maView)
     361           0 :             OnFolderDelete();
     362             :         else
     363           0 :             OnRepositoryDelete();
     364           0 :         break;
     365             :     case TBI_TEMPLATE_SAVE:
     366           0 :         OnTemplateSaveAs();
     367           0 :         break;
     368             :     default:
     369           0 :         break;
     370             :     }
     371             : 
     372           0 :     return 0;
     373             : }
     374             : 
     375           0 : IMPL_LINK_NOARG(SfxTemplateManagerDlg,TBXActionHdl)
     376             : {
     377           0 :     switch(mpActionBar->GetCurItemId())
     378             :     {
     379             :     case TBI_TEMPLATE_SEARCH:
     380           0 :         OnTemplateSearch();
     381           0 :         break;
     382             :     default:
     383           0 :         break;
     384             :     }
     385             : 
     386           0 :     return 0;
     387             : }
     388             : 
     389           0 : IMPL_LINK_NOARG(SfxTemplateManagerDlg,TBXTemplateHdl)
     390             : {
     391           0 :     switch(mpTemplateBar->GetCurItemId())
     392             :     {
     393             :     case TBI_TEMPLATE_EDIT:
     394           0 :         OnTemplateEdit();
     395           0 :         break;
     396             :     case TBI_TEMPLATE_PROPERTIES:
     397           0 :         OnTemplateProperties();
     398           0 :         break;
     399             :     case TBI_TEMPLATE_DELETE:
     400           0 :         OnTemplateDelete();
     401           0 :         break;
     402             :     case TBI_TEMPLATE_DEFAULT:
     403           0 :         OnTemplateAsDefault();
     404           0 :         break;
     405             :     case TBI_TEMPLATE_EXPORT:
     406           0 :         OnTemplateExport();
     407           0 :         break;
     408             :     default:
     409           0 :         break;
     410             :     }
     411             : 
     412           0 :     return 0;
     413             : }
     414             : 
     415           0 : IMPL_LINK(SfxTemplateManagerDlg, TBXDropdownHdl, ToolBox*, pBox)
     416             : {
     417           0 :     const sal_uInt16 nCurItemId = pBox->GetCurItemId();
     418             : 
     419           0 :     switch(nCurItemId)
     420             :     {
     421             :     case TBI_TEMPLATE_ACTION:
     422           0 :         pBox->SetItemDown( nCurItemId, true );
     423             : 
     424             :         mpActionMenu->Execute(pBox,pBox->GetItemRect(TBI_TEMPLATE_ACTION),
     425           0 :                               POPUPMENU_EXECUTE_DOWN);
     426             : 
     427           0 :         pBox->SetItemDown( nCurItemId, false );
     428           0 :         pBox->EndSelection();
     429           0 :         pBox->Invalidate();
     430           0 :         break;
     431             :     case TBI_TEMPLATE_MOVE:
     432             :     {
     433           0 :         pBox->SetItemDown( nCurItemId, true );
     434             : 
     435           0 :         std::vector<OUString> aNames = maView->getFolderNames();
     436             : 
     437           0 :         PopupMenu *pMoveMenu = new PopupMenu;
     438           0 :         pMoveMenu->SetSelectHdl(LINK(this,SfxTemplateManagerDlg,MoveMenuSelectHdl));
     439             : 
     440           0 :         if (!aNames.empty())
     441             :         {
     442           0 :             for (size_t i = 0, n = aNames.size(); i < n; ++i)
     443           0 :                 pMoveMenu->InsertItem(MNI_MOVE_FOLDER_BASE+i,aNames[i]);
     444             :         }
     445             : 
     446           0 :         pMoveMenu->InsertSeparator();
     447             : 
     448           0 :         pMoveMenu->InsertItem(MNI_MOVE_NEW,SfxResId(STR_MOVE_NEW).toString());
     449             : 
     450             :         pMoveMenu->Execute(pBox,pBox->GetItemRect(TBI_TEMPLATE_MOVE),
     451           0 :                             POPUPMENU_EXECUTE_DOWN);
     452             : 
     453           0 :         delete pMoveMenu;
     454             : 
     455           0 :         pBox->SetItemDown( nCurItemId, false );
     456           0 :         pBox->EndSelection();
     457           0 :         pBox->Invalidate();
     458           0 :         break;
     459             :     }
     460             :     case TBI_TEMPLATE_REPOSITORY:
     461           0 :         pBox->SetItemDown( nCurItemId, true );
     462             : 
     463             :         mpRepositoryMenu->Execute(pBox,pBox->GetItemRect(TBI_TEMPLATE_REPOSITORY),
     464           0 :                                   POPUPMENU_EXECUTE_DOWN);
     465             : 
     466           0 :         pBox->SetItemDown( nCurItemId, false );
     467           0 :         pBox->EndSelection();
     468           0 :         pBox->Invalidate();
     469           0 :         break;
     470             :     default:
     471           0 :         break;
     472             :     }
     473             : 
     474           0 :     return 0;
     475             : }
     476             : 
     477           0 : IMPL_LINK(SfxTemplateManagerDlg, TVFolderStateHdl, const ThumbnailViewItem*, pItem)
     478             : {
     479           0 :     if (pItem->isSelected())
     480             :     {
     481           0 :         if (maSelFolders.empty() && !mbIsSaveMode)
     482             :         {
     483           0 :             mpViewBar->ShowItem(TBI_TEMPLATE_IMPORT);
     484           0 :             mpViewBar->ShowItem(TBI_TEMPLATE_FOLDER_DEL);
     485             :         }
     486             : 
     487           0 :         maSelFolders.insert(pItem);
     488             :     }
     489             :     else
     490             :     {
     491           0 :         maSelFolders.erase(pItem);
     492             : 
     493           0 :         if (maSelFolders.empty() && !mbIsSaveMode)
     494             :         {
     495           0 :             mpViewBar->HideItem(TBI_TEMPLATE_IMPORT);
     496           0 :             mpViewBar->HideItem(TBI_TEMPLATE_FOLDER_DEL);
     497             :         }
     498             :     }
     499             : 
     500           0 :     return 0;
     501             : }
     502             : 
     503           0 : IMPL_LINK(SfxTemplateManagerDlg, TVTemplateStateHdl, const ThumbnailViewItem*, pItem)
     504             : {
     505           0 :     if (pItem->isSelected())
     506             :     {
     507           0 :         if (!mbIsSaveMode)
     508             :         {
     509           0 :             if (maSelTemplates.empty())
     510             :             {
     511           0 :                 mpViewBar->Show(false);
     512           0 :                 mpActionBar->Show(false);
     513           0 :                 mpTemplateBar->Show();
     514             :             }
     515             :             else
     516             :             {
     517           0 :                 mpTemplateBar->HideItem(TBI_TEMPLATE_EDIT);
     518           0 :                 mpTemplateBar->HideItem(TBI_TEMPLATE_PROPERTIES);
     519           0 :                 mpTemplateBar->HideItem(TBI_TEMPLATE_DEFAULT);
     520             :             }
     521             :         }
     522             : 
     523           0 :         maSelTemplates.insert(pItem);
     524             :     }
     525             :     else
     526             :     {
     527           0 :         if (maSelTemplates.find(pItem) != maSelTemplates.end())
     528             :         {
     529           0 :             maSelTemplates.erase(pItem);
     530             : 
     531           0 :             if (!mbIsSaveMode)
     532             :             {
     533           0 :                 if (maSelTemplates.empty())
     534             :                 {
     535           0 :                     mpTemplateBar->Show(false);
     536           0 :                     mpViewBar->Show();
     537           0 :                     mpActionBar->Show();
     538             :                 }
     539           0 :                 else if (maSelTemplates.size() == 1)
     540             :                 {
     541           0 :                     mpTemplateBar->ShowItem(TBI_TEMPLATE_EDIT);
     542           0 :                     mpTemplateBar->ShowItem(TBI_TEMPLATE_PROPERTIES);
     543           0 :                     mpTemplateBar->ShowItem(TBI_TEMPLATE_DEFAULT);
     544             :                 }
     545             :             }
     546             :         }
     547             :     }
     548             : 
     549           0 :     return 0;
     550             : }
     551             : 
     552           0 : IMPL_LINK(SfxTemplateManagerDlg, MenuSelectHdl, Menu*, pMenu)
     553             : {
     554           0 :     sal_uInt16 nMenuId = pMenu->GetCurItemId();
     555             : 
     556           0 :     switch(nMenuId)
     557             :     {
     558             :     case MNI_ACTION_SORT_NAME:
     559           0 :         if (maView->isOverlayVisible())
     560           0 :             maView->sortOverlayItems(SortView_Name());
     561             :         else
     562           0 :             maView->sortItems(SortView_Name());
     563           0 :         break;
     564             :     case MNI_ACTION_REFRESH:
     565           0 :         mpCurView->reload();
     566           0 :         break;
     567             :     default:
     568           0 :         break;
     569             :     }
     570             : 
     571           0 :     return 0;
     572             : }
     573             : 
     574           0 : IMPL_LINK(SfxTemplateManagerDlg, MoveMenuSelectHdl, Menu*, pMenu)
     575             : {
     576           0 :     sal_uInt16 nMenuId = pMenu->GetCurItemId();
     577             : 
     578           0 :     if (mpSearchView->IsVisible())
     579             :     {
     580             :         // Check if we are searching the local or remote templates
     581           0 :         if (mpCurView == maView)
     582           0 :             localSearchMoveTo(nMenuId);
     583             :     }
     584             :     else
     585             :     {
     586             :         // Check if we are displaying the local or remote templates
     587           0 :         if (mpCurView == maView)
     588           0 :             localMoveTo(nMenuId);
     589             :         else
     590           0 :             remoteMoveTo(nMenuId);
     591             :     }
     592             : 
     593           0 :     return 0;
     594             : }
     595             : 
     596           0 : IMPL_LINK(SfxTemplateManagerDlg, RepositoryMenuSelectHdl, Menu*, pMenu)
     597             : {
     598           0 :     sal_uInt16 nMenuId = pMenu->GetCurItemId();
     599             : 
     600           0 :     if (nMenuId == MNI_REPOSITORY_LOCAL)
     601             :     {
     602           0 :         switchMainView(true);
     603             :     }
     604           0 :     else if (nMenuId == MNI_REPOSITORY_NEW)
     605             :     {
     606           0 :         PlaceEditDialog dlg(this);
     607             : 
     608           0 :         if (dlg.Execute())
     609             :         {
     610           0 :             boost::shared_ptr<Place> pPlace = dlg.GetPlace();
     611             : 
     612           0 :             if (insertRepository(pPlace->GetName(),pPlace->GetUrl()))
     613             :             {
     614             :                 // update repository list menu.
     615           0 :                 createRepositoryMenu();
     616             :             }
     617             :             else
     618             :             {
     619           0 :                 OUString aMsg(SfxResId(STR_MSG_ERROR_REPOSITORY_NAME).toString());
     620           0 :                 aMsg = aMsg.replaceFirst("$1",pPlace->GetName());
     621           0 :                 ErrorBox(this,WB_OK,aMsg).Execute();
     622           0 :             }
     623           0 :         }
     624             :     }
     625             :     else
     626             :     {
     627           0 :         sal_uInt16 nRepoId = nMenuId - MNI_REPOSITORY_BASE;
     628             : 
     629           0 :         TemplateRepository *pRepository = NULL;
     630             : 
     631           0 :         for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
     632             :         {
     633           0 :             if (maRepositories[i]->mnId == nRepoId)
     634             :             {
     635           0 :                 pRepository = maRepositories[i];
     636           0 :                 break;
     637             :             }
     638             :         }
     639             : 
     640           0 :         if (mpOnlineView->loadRepository(pRepository,false))
     641             :         {
     642           0 :             switchMainView(false);
     643           0 :             mpOnlineView->showOverlay(true);
     644             :         }
     645             :     }
     646             : 
     647           0 :     return 0;
     648             : }
     649             : 
     650           0 : IMPL_LINK(SfxTemplateManagerDlg, DefaultTemplateMenuSelectHdl, Menu*, pMenu)
     651             : {
     652           0 :     sal_uInt16 nId = pMenu->GetCurItemId();
     653             : 
     654           0 :     OUString aServiceName = SfxObjectShell::GetServiceNameFromFactory( mpTemplateDefaultMenu->GetItemCommand(nId));
     655           0 :     SfxObjectFactory::SetStandardTemplate( aServiceName, OUString() );
     656             : 
     657           0 :     createDefaultTemplateMenu();
     658             : 
     659           0 :     return 0;
     660             : }
     661             : 
     662           0 : IMPL_LINK(SfxTemplateManagerDlg, OpenTemplateHdl, ThumbnailViewItem*, pItem)
     663             : {
     664           0 :     if (!mbIsSaveMode)
     665             :     {
     666           0 :         uno::Sequence< PropertyValue > aArgs(1);
     667           0 :         aArgs[0].Name = "AsTemplate";
     668           0 :         aArgs[0].Value <<= sal_True;
     669             : 
     670           0 :         TemplateViewItem *pTemplateItem = static_cast<TemplateViewItem*>(pItem);
     671             : 
     672             :         try
     673             :         {
     674           0 :             mxDesktop->loadComponentFromURL(pTemplateItem->getPath(),"_default", 0, aArgs );
     675             :         }
     676           0 :         catch( const uno::Exception& )
     677             :         {
     678             :         }
     679             : 
     680           0 :         Close();
     681             :     }
     682             : 
     683           0 :     return 0;
     684             : }
     685             : 
     686           0 : IMPL_LINK_NOARG(SfxTemplateManagerDlg, SearchUpdateHdl)
     687             : {
     688             :     // if the search view is hidden, hide the folder view and display search one
     689           0 :     if (!mpCurView->isOverlayVisible() && !mpSearchView->IsVisible())
     690             :     {
     691           0 :         mpSearchView->Clear();
     692           0 :         mpSearchView->Show();
     693           0 :         mpCurView->Hide();
     694             :     }
     695             : 
     696           0 :     OUString aKeyword = mpSearchEdit->GetText();
     697             : 
     698           0 :     if (!aKeyword.isEmpty())
     699             :     {
     700           0 :         if (mpCurView->isOverlayVisible())
     701             :         {
     702           0 :             mpCurView->filterTemplatesByKeyword(aKeyword);
     703             :         }
     704             :         else
     705             :         {
     706           0 :             mpSearchView->Clear();
     707             : 
     708             :             std::vector<TemplateItemProperties> aItems =
     709           0 :                     maView->getFilteredItems(SearchView_Keyword(aKeyword));
     710             : 
     711           0 :             size_t nCounter = 0;
     712           0 :             for (size_t i = 0; i < aItems.size(); ++i)
     713             :             {
     714           0 :                 TemplateItemProperties *pItem = &aItems[i];
     715             : 
     716             :                 mpSearchView->AppendItem(++nCounter,pItem->nRegionId,
     717             :                                          pItem->nId-1,
     718             :                                          pItem->aName,
     719             :                                          maView->GetItemText(pItem->nRegionId+1),
     720             :                                          pItem->aPath,
     721           0 :                                          pItem->aThumbnail);
     722             :             }
     723             : 
     724           0 :             mpSearchView->Invalidate();
     725             :         }
     726             :     }
     727             :     else
     728             :     {
     729           0 :         if (mpCurView->isOverlayVisible())
     730             :         {
     731           0 :             mpCurView->filterTemplatesByApp(FILTER_APP_NONE);
     732             :         }
     733             :         else
     734             :         {
     735           0 :             mpSearchView->Hide();
     736           0 :             mpCurView->Show();
     737             :         }
     738             :     }
     739             : 
     740           0 :     return 0;
     741             : }
     742             : 
     743           0 : void SfxTemplateManagerDlg::OnTemplateImport ()
     744             : {
     745             :     sal_Int16 nDialogType =
     746           0 :         com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE;
     747             : 
     748           0 :     sfx2::FileDialogHelper aFileDlg(nDialogType, SFXWB_MULTISELECTION);
     749             : 
     750             :     // add "All" filter
     751             :     aFileDlg.AddFilter( String(SfxResId( STR_SFX_FILTERNAME_ALL) ),
     752           0 :                         DEFINE_CONST_UNICODE(FILEDIALOG_FILTER_ALL) );
     753             : 
     754             :     // add template filter
     755           0 :     OUString sFilterExt;
     756           0 :     OUString sFilterName( SfxResId( STR_TEMPLATE_FILTER ).toString() );
     757             : 
     758             :     // add filters of modules which are installed
     759           0 :     SvtModuleOptions aModuleOpt;
     760           0 :     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SWRITER ) )
     761           0 :         sFilterExt += "*.ott;*.stw;*.oth";
     762             : 
     763           0 :     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SCALC ) )
     764             :     {
     765           0 :         if ( !sFilterExt.isEmpty() )
     766           0 :             sFilterExt += ";";
     767             : 
     768           0 :         sFilterExt += "*.ots;*.stc";
     769             :     }
     770             : 
     771           0 :     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SIMPRESS ) )
     772             :     {
     773           0 :         if ( !sFilterExt.isEmpty() )
     774           0 :             sFilterExt += ";";
     775             : 
     776           0 :         sFilterExt += "*.otp;*.sti";
     777             :     }
     778             : 
     779           0 :     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SDRAW ) )
     780             :     {
     781           0 :         if ( !sFilterExt.isEmpty() )
     782           0 :             sFilterExt += ";";
     783             : 
     784           0 :         sFilterExt += "*.otg;*.std";
     785             :     }
     786             : 
     787           0 :     if ( !sFilterExt.isEmpty() )
     788           0 :         sFilterExt += ";";
     789             : 
     790           0 :     sFilterExt += "*.vor";
     791             : 
     792           0 :     sFilterName += " (";
     793           0 :     sFilterName += sFilterExt;
     794           0 :     sFilterName += ")";
     795             : 
     796           0 :     aFileDlg.AddFilter( sFilterName, sFilterExt );
     797           0 :     aFileDlg.SetCurrentFilter( sFilterName );
     798             : 
     799           0 :     ErrCode nCode = aFileDlg.Execute();
     800             : 
     801           0 :     if ( nCode == ERRCODE_NONE )
     802             :     {
     803           0 :         com::sun::star::uno::Sequence<OUString> aFiles = aFileDlg.GetSelectedFiles();
     804             : 
     805           0 :         if (aFiles.hasElements())
     806             :         {
     807           0 :             std::set<const ThumbnailViewItem*>::const_iterator pIter;
     808           0 :             for (pIter = maSelFolders.begin(); pIter != maSelFolders.end(); ++pIter)
     809             :             {
     810           0 :                 OUString aTemplateList;
     811           0 :                 TemplateContainerItem *pFolder = (TemplateContainerItem*)(*pIter);
     812             : 
     813           0 :                 for (size_t i = 0, n = aFiles.getLength(); i < n; ++i)
     814             :                 {
     815           0 :                     if(!maView->copyFrom(pFolder,aFiles[i]))
     816             :                     {
     817           0 :                         if (aTemplateList.isEmpty())
     818           0 :                             aTemplateList = aFiles[i];
     819             :                         else
     820           0 :                             aTemplateList = aTemplateList + "\n" + aFiles[i];
     821             :                     }
     822             :                 }
     823             : 
     824           0 :                 if (!aTemplateList.isEmpty())
     825             :                 {
     826           0 :                     OUString aMsg(SfxResId(STR_MSG_ERROR_IMPORT).toString());
     827           0 :                     aMsg = aMsg.replaceFirst("$1",pFolder->maTitle);
     828           0 :                     ErrorBox(this,WB_OK,aMsg.replaceFirst("$2",aTemplateList));
     829             :                 }
     830           0 :             }
     831             : 
     832           0 :             maView->Invalidate(INVALIDATE_NOERASE);
     833           0 :         }
     834           0 :     }
     835           0 : }
     836             : 
     837           0 : void SfxTemplateManagerDlg::OnTemplateExport()
     838             : {
     839           0 :     uno::Reference<XComponentContext> xContext(comphelper::getProcessComponentContext());
     840           0 :     uno::Reference<XFolderPicker2> xFolderPicker = FolderPicker::create(xContext);
     841             : 
     842           0 :     xFolderPicker->setDisplayDirectory(SvtPathOptions().GetWorkPath());
     843             : 
     844           0 :     sal_Int16 nResult = xFolderPicker->execute();
     845             : 
     846           0 :     if( nResult == ExecutableDialogResults::OK )
     847             :     {
     848           0 :         OUString aTemplateList;
     849           0 :         INetURLObject aPathObj(xFolderPicker->getDirectory());
     850           0 :         aPathObj.setFinalSlash();
     851             : 
     852           0 :         if (mpSearchView->IsVisible())
     853             :         {
     854           0 :             sal_uInt16 i = 1;
     855             : 
     856           0 :             std::set<const ThumbnailViewItem*>::const_iterator pIter = maSelTemplates.begin();
     857           0 :             for (pIter = maSelTemplates.begin(); pIter != maSelTemplates.end(); ++pIter, ++i)
     858             :             {
     859           0 :                 const TemplateSearchViewItem *pItem = static_cast<const TemplateSearchViewItem*>(*pIter);
     860             : 
     861           0 :                 INetURLObject aItemPath(pItem->getPath());
     862             : 
     863           0 :                 if ( 1 == i )
     864           0 :                     aPathObj.Append(aItemPath.getName());
     865             :                 else
     866           0 :                     aPathObj.setName(aItemPath.getName());
     867             : 
     868           0 :                 OUString aPath = aPathObj.GetMainURL( INetURLObject::NO_DECODE );
     869             : 
     870           0 :                 if (!maView->exportTo(pItem->mnIdx+1,pItem->mnRegionId+1,aPath))
     871             :                 {
     872           0 :                     if (aTemplateList.isEmpty())
     873           0 :                         aTemplateList = pItem->maTitle;
     874             :                     else
     875           0 :                         aTemplateList = aTemplateList + "\n" + pItem->maTitle;
     876             :                 }
     877           0 :             }
     878             : 
     879           0 :             mpSearchView->deselectItems();
     880             :         }
     881             :         else
     882             :         {
     883             :             // export templates from the current open overlay
     884             : 
     885           0 :             sal_uInt16 i = 1;
     886           0 :             sal_uInt16 nRegionItemId = maView->getOverlayRegionId() + 1;
     887             : 
     888           0 :             std::set<const ThumbnailViewItem*>::const_iterator pIter = maSelTemplates.begin();
     889           0 :             for (pIter = maSelTemplates.begin(); pIter != maSelTemplates.end(); ++pIter, ++i)
     890             :             {
     891           0 :                 const TemplateViewItem *pItem = static_cast<const TemplateViewItem*>(*pIter);
     892             : 
     893           0 :                 INetURLObject aItemPath(pItem->getPath());
     894             : 
     895           0 :                 if ( 1 == i )
     896           0 :                     aPathObj.Append(aItemPath.getName());
     897             :                 else
     898           0 :                     aPathObj.setName(aItemPath.getName());
     899             : 
     900           0 :                 OUString aPath = aPathObj.GetMainURL( INetURLObject::NO_DECODE );
     901             : 
     902           0 :                 if (!maView->exportTo(pItem->mnId,nRegionItemId,aPath))
     903             :                 {
     904           0 :                     if (aTemplateList.isEmpty())
     905           0 :                         aTemplateList = pItem->maTitle;
     906             :                     else
     907           0 :                         aTemplateList = aTemplateList + "\n" + pItem->maTitle;
     908             :                 }
     909           0 :             }
     910             : 
     911           0 :             maView->deselectOverlayItems();
     912             :         }
     913             : 
     914           0 :         if (!aTemplateList.isEmpty())
     915             :         {
     916           0 :             OUString aText( SfxResId(STR_MSG_ERROR_EXPORT).toString() );
     917           0 :             ErrorBox(this, WB_OK,aText.replaceFirst("$1",aTemplateList)).Execute();
     918           0 :         }
     919           0 :     }
     920           0 : }
     921             : 
     922           0 : void SfxTemplateManagerDlg::OnTemplateSearch ()
     923             : {
     924           0 :     Point aPos = maView->GetPosPixel();
     925           0 :     bool bVisible = mpSearchEdit->IsVisible();
     926           0 :     Size aWinSize = GetSizePixel();
     927           0 :     long nEditHeight = mpSearchEdit->GetSizePixel().getHeight();
     928             : 
     929           0 :     if (bVisible)
     930             :     {
     931           0 :         aWinSize.setHeight(aWinSize.getHeight() - nEditHeight );
     932           0 :         aPos.setY(aPos.getY() - nEditHeight );
     933           0 :         mpActionBar->SetItemState(TBI_TEMPLATE_SEARCH,STATE_NOCHECK);
     934             :     }
     935             :     else
     936             :     {
     937           0 :         aWinSize.setHeight(aWinSize.getHeight() + nEditHeight );
     938           0 :         aPos.setY(aPos.getY() + nEditHeight );
     939           0 :         mpActionBar->SetItemState(TBI_TEMPLATE_SEARCH,STATE_CHECK);
     940             :     }
     941             : 
     942             : //    SetSizePixel(aWinSize);
     943           0 :     maView->SetPosPixel(aPos);
     944           0 :     mpOnlineView->SetPosPixel(aPos);
     945           0 :     mpSearchView->SetPosPixel(aPos);
     946             : 
     947             :     // Hide search view
     948           0 :     if (bVisible)
     949             :     {
     950           0 :         mpSearchView->Hide();
     951           0 :         mpCurView->Show();
     952             :     }
     953             : 
     954           0 :     mpSearchEdit->Show(!bVisible);
     955           0 :     mpSearchEdit->SetText(OUString());
     956             : 
     957             :     // display all templates if we hide the search bar
     958           0 :     if (bVisible && mpCurView->isOverlayVisible())
     959           0 :         mpCurView->filterTemplatesByApp(FILTER_APP_NONE);
     960           0 : }
     961             : 
     962           0 : void SfxTemplateManagerDlg::OnTemplateEdit ()
     963             : {
     964           0 :     uno::Sequence< PropertyValue > aArgs(1);
     965           0 :     aArgs[0].Name = "AsTemplate";
     966           0 :     aArgs[0].Value <<= sal_False;
     967             : 
     968           0 :     uno::Reference< XStorable > xStorable;
     969           0 :     std::set<const ThumbnailViewItem*>::const_iterator pIter;
     970           0 :     for (pIter = maSelTemplates.begin(); pIter != maSelTemplates.end(); ++pIter)
     971             :     {
     972           0 :         const TemplateViewItem *pItem = static_cast<const TemplateViewItem*>(*pIter);
     973             : 
     974             :         try
     975             :         {
     976             :             xStorable = uno::Reference< XStorable >(
     977           0 :                         mxDesktop->loadComponentFromURL(pItem->getPath(),"_default", 0, aArgs ),
     978           0 :                         uno::UNO_QUERY );
     979             :         }
     980           0 :         catch( const uno::Exception& )
     981             :         {
     982             :         }
     983             :     }
     984             : 
     985           0 :     Close();
     986           0 : }
     987             : 
     988           0 : void SfxTemplateManagerDlg::OnTemplateProperties ()
     989             : {
     990           0 :     const TemplateViewItem *pItem = static_cast<const TemplateViewItem*>(*maSelTemplates.begin());
     991             : 
     992           0 :     SfxTemplateInfoDlg aDlg;
     993           0 :     aDlg.loadDocument(pItem->getPath());
     994           0 :     aDlg.Execute();
     995           0 : }
     996             : 
     997           0 : void SfxTemplateManagerDlg::OnTemplateDelete ()
     998             : {
     999           0 :     OUString aTemplateList;
    1000             : 
    1001           0 :     if (mpSearchView->IsVisible())
    1002             :     {
    1003           0 :         std::set<const ThumbnailViewItem*>::const_iterator pIter;
    1004           0 :         for (pIter = maSelTemplates.begin(); pIter != maSelTemplates.end();)
    1005             :         {
    1006             :             const TemplateSearchViewItem *pItem =
    1007           0 :                     static_cast<const TemplateSearchViewItem*>(*pIter);
    1008             : 
    1009           0 :             sal_uInt16 nItemId = pItem->mnIdx + 1;
    1010           0 :             sal_uInt16 nItemRegionId = pItem->mnRegionId + 1;
    1011             : 
    1012           0 :             if (maView->removeTemplate(nItemId,nItemRegionId))
    1013           0 :                 maSelTemplates.erase(pIter++);
    1014             :             else
    1015             :             {
    1016           0 :                 if (aTemplateList.isEmpty())
    1017           0 :                     aTemplateList = pItem->maTitle;
    1018             :                 else
    1019           0 :                     aTemplateList = aTemplateList + "\n" + pItem->maTitle;
    1020             : 
    1021           0 :                 ++pIter;
    1022             :             }
    1023             :         }
    1024             : 
    1025             :         // Update search results
    1026           0 :         if (maSelTemplates.empty())
    1027             :         {
    1028           0 :             mpTemplateBar->Show(false);
    1029           0 :             mpViewBar->Show();
    1030           0 :             mpActionBar->Show();
    1031             :         }
    1032             : 
    1033           0 :         SearchUpdateHdl(mpSearchEdit);
    1034             :     }
    1035             :     else
    1036             :     {
    1037           0 :         std::set<const ThumbnailViewItem*>::const_iterator pIter;
    1038           0 :         for (pIter = maSelTemplates.begin(); pIter != maSelTemplates.end();)
    1039             :         {
    1040           0 :             if (maView->removeTemplate((*pIter)->mnId,maView->getOverlayRegionId()+1))
    1041           0 :                 maSelTemplates.erase(pIter++);
    1042             :             else
    1043             :             {
    1044           0 :                 if (aTemplateList.isEmpty())
    1045           0 :                     aTemplateList = (*pIter)->maTitle;
    1046             :                 else
    1047           0 :                     aTemplateList = aTemplateList + "\n" + (*pIter)->maTitle;
    1048             : 
    1049           0 :                 ++pIter;
    1050             :             }
    1051             :         }
    1052             : 
    1053           0 :         if (maSelTemplates.empty())
    1054             :         {
    1055           0 :             mpTemplateBar->SetItemDown(TBI_TEMPLATE_DELETE,false);
    1056           0 :             mpTemplateBar->Show(false);
    1057           0 :             mpViewBar->Show();
    1058           0 :             mpActionBar->Show();
    1059             :         }
    1060             :     }
    1061             : 
    1062           0 :     if (!aTemplateList.isEmpty())
    1063             :     {
    1064           0 :         OUString aMsg( SfxResId(STR_MSG_ERROR_DELETE_TEMPLATE).toString() );
    1065           0 :         ErrorBox(this, WB_OK,aMsg.replaceFirst("$1",aTemplateList)).Execute();
    1066           0 :     }
    1067           0 : }
    1068             : 
    1069           0 : void SfxTemplateManagerDlg::OnTemplateAsDefault ()
    1070             : {
    1071             :     assert(!maSelTemplates.empty());
    1072             : 
    1073           0 :     const TemplateViewItem *pItem = static_cast<const TemplateViewItem*>(*(maSelTemplates.begin()));
    1074             : 
    1075           0 :     OUString aServiceName;
    1076           0 :     if (lcl_getServiceName(pItem->getPath(),aServiceName))
    1077             :     {
    1078           0 :         SfxObjectFactory::SetStandardTemplate(aServiceName,pItem->getPath());
    1079             : 
    1080           0 :         createDefaultTemplateMenu();
    1081             : 
    1082             :         // clear selection and display view/action toolbars
    1083           0 :         maView->deselectOverlayItem(pItem->mnId);
    1084           0 :     }
    1085           0 : }
    1086             : 
    1087           0 : void SfxTemplateManagerDlg::OnFolderDelete()
    1088             : {
    1089           0 :     QueryBox aQueryDlg(this, WB_YES_NO | WB_DEF_YES, SfxResId(STR_QMSG_SEL_FOLDER_DELETE).toString());
    1090             : 
    1091           0 :     if ( aQueryDlg.Execute() == RET_NO )
    1092           0 :         return;
    1093             : 
    1094           0 :     OUString aFolderList;
    1095             : 
    1096           0 :     std::set<const ThumbnailViewItem*>::const_iterator pIter;
    1097           0 :     for (pIter = maSelFolders.begin(); pIter != maSelFolders.end();)
    1098             :     {
    1099           0 :         if (maView->removeRegion((*pIter)->mnId))
    1100           0 :             maSelFolders.erase(pIter++);
    1101             :         else
    1102             :         {
    1103           0 :             if (aFolderList.isEmpty())
    1104           0 :                 aFolderList = (*pIter)->maTitle;
    1105             :             else
    1106           0 :                 aFolderList = aFolderList + "\n" + (*pIter)->maTitle;
    1107             : 
    1108           0 :             ++pIter;
    1109             :         }
    1110             :     }
    1111             : 
    1112           0 :     if (maSelFolders.empty())
    1113             :     {
    1114           0 :         mpViewBar->HideItem(TBI_TEMPLATE_IMPORT);
    1115           0 :         mpViewBar->HideItem(TBI_TEMPLATE_FOLDER_DEL);
    1116             :     }
    1117             : 
    1118           0 :     if (!aFolderList.isEmpty())
    1119             :     {
    1120           0 :         OUString aMsg( SfxResId(STR_MSG_ERROR_DELETE_FOLDER).toString() );
    1121           0 :         ErrorBox(this, WB_OK,aMsg.replaceFirst("$1",aFolderList)).Execute();
    1122           0 :     }
    1123             : }
    1124             : 
    1125           0 : void SfxTemplateManagerDlg::OnRepositoryDelete()
    1126             : {
    1127           0 :     if(deleteRepository(mpOnlineView->getOverlayRegionId()))
    1128             :     {
    1129             :         // close overlay and switch to local view
    1130           0 :         switchMainView(true);
    1131             : 
    1132           0 :         createRepositoryMenu();
    1133             :     }
    1134           0 : }
    1135             : 
    1136           0 : void SfxTemplateManagerDlg::OnTemplateSaveAs()
    1137             : {
    1138             :     assert(m_xModel.is());
    1139             : 
    1140           0 :     if (!maView->isOverlayVisible() && maSelFolders.empty())
    1141             :     {
    1142           0 :         ErrorBox(this, WB_OK,SfxResId(STR_MSG_ERROR_SELECT_FOLDER).toString()).Execute();
    1143             :         return;
    1144             :     }
    1145             : 
    1146           0 :     InputDialog aDlg(SfxResId(STR_INPUT_TEMPLATE_NEW).toString(),this);
    1147             : 
    1148           0 :     if (aDlg.Execute())
    1149             :     {
    1150           0 :         OUString aName = aDlg.getEntryText();
    1151             : 
    1152           0 :         if (!aName.isEmpty())
    1153             :         {
    1154           0 :             OUString aFolderList;
    1155           0 :             OUString aQMsg(SfxResId(STR_QMSG_TEMPLATE_OVERWRITE).toString());
    1156           0 :             QueryBox aQueryDlg(this,WB_YES_NO | WB_DEF_YES, OUString());
    1157             : 
    1158           0 :             if (maView->isOverlayVisible())
    1159             :             {
    1160           0 :                 sal_uInt16 nRegionItemId = maView->getOverlayRegionId()+1;
    1161             : 
    1162           0 :                 if (!maView->isTemplateNameUnique(nRegionItemId,aName))
    1163             :                 {
    1164           0 :                     aQMsg = aQMsg.replaceFirst("$1",aName);
    1165           0 :                     aQueryDlg.SetMessText(aQMsg.replaceFirst("$2",maView->getOverlayName()));
    1166             : 
    1167           0 :                     if (aQueryDlg.Execute() == RET_NO)
    1168             :                         return;
    1169             :                 }
    1170             : 
    1171           0 :                 if (!maView->saveTemplateAs(nRegionItemId,m_xModel,aName))
    1172           0 :                     aFolderList = maView->getOverlayName();
    1173             :             }
    1174             :             else
    1175             :             {
    1176           0 :                 std::set<const ThumbnailViewItem*>::const_iterator pIter;
    1177           0 :                 for (pIter = maSelFolders.begin(); pIter != maSelFolders.end(); ++pIter)
    1178             :                 {
    1179           0 :                     TemplateContainerItem *pItem = (TemplateContainerItem*)(*pIter);
    1180             : 
    1181           0 :                     if (!maView->isTemplateNameUnique(pItem->mnId,aName))
    1182             :                     {
    1183           0 :                         OUString aDQMsg = aQMsg.replaceFirst("$1",aName);
    1184           0 :                         aQueryDlg.SetMessText(aDQMsg.replaceFirst("$2",pItem->maTitle));
    1185             : 
    1186           0 :                         if (aQueryDlg.Execute() == RET_NO)
    1187           0 :                             continue;
    1188             :                     }
    1189             : 
    1190           0 :                     if (!maView->saveTemplateAs(pItem,m_xModel,aName))
    1191             :                     {
    1192           0 :                         if (aFolderList.isEmpty())
    1193           0 :                             aFolderList = (*pIter)->maTitle;
    1194             :                         else
    1195           0 :                             aFolderList = aFolderList + "\n" + (*pIter)->maTitle;
    1196             :                     }
    1197             :                 }
    1198             :             }
    1199             : 
    1200           0 :             maView->reload();
    1201             : 
    1202           0 :             if (!aFolderList.isEmpty())
    1203             :             {
    1204           0 :             }
    1205           0 :         }
    1206           0 :     }
    1207             : }
    1208             : 
    1209           0 : void SfxTemplateManagerDlg::createRepositoryMenu()
    1210             : {
    1211           0 :     mpRepositoryMenu->Clear();
    1212             : 
    1213           0 :     mpRepositoryMenu->InsertItem(MNI_REPOSITORY_LOCAL,SfxResId(STR_REPOSITORY_LOCAL).toString());
    1214             : 
    1215           0 :     const std::vector<TemplateRepository*> &rRepos = getRepositories();
    1216             : 
    1217           0 :     for (size_t i = 0, n = rRepos.size(); i < n; ++i)
    1218           0 :         mpRepositoryMenu->InsertItem(MNI_REPOSITORY_BASE+rRepos[i]->mnId,rRepos[i]->maTitle);
    1219             : 
    1220           0 :     mpRepositoryMenu->InsertSeparator();
    1221           0 :     mpRepositoryMenu->InsertItem(MNI_REPOSITORY_NEW,SfxResId(STR_REPOSITORY_NEW).toString());
    1222           0 : }
    1223             : 
    1224           0 : void SfxTemplateManagerDlg::createDefaultTemplateMenu ()
    1225             : {
    1226           0 :     std::vector<OUString> aList = lcl_getAllFactoryURLs();
    1227             : 
    1228           0 :     if (!aList.empty())
    1229             :     {
    1230           0 :         mpTemplateDefaultMenu->Clear();
    1231             : 
    1232           0 :         sal_uInt16 nItemId = MNI_ACTION_DEFAULT + 1;
    1233           0 :         for( std::vector<OUString>::const_iterator i = aList.begin(); i != aList.end(); ++i )
    1234             :         {
    1235           0 :             INetURLObject aObj(*i);
    1236           0 :             OUString aTitle = SvFileInformationManager::GetDescription(aObj);
    1237           0 :             mpTemplateDefaultMenu->InsertItem(nItemId, aTitle, SvFileInformationManager::GetImage(aObj, false));
    1238           0 :             mpTemplateDefaultMenu->SetItemCommand(nItemId++, *i);
    1239           0 :         }
    1240             : 
    1241           0 :         mpActionMenu->ShowItem(MNI_ACTION_DEFAULT);
    1242             :     }
    1243             :     else
    1244           0 :         mpActionMenu->HideItem(MNI_ACTION_DEFAULT);
    1245           0 : }
    1246             : 
    1247           0 : void SfxTemplateManagerDlg::switchMainView(bool bDisplayLocal)
    1248             : {
    1249           0 :     if (bDisplayLocal)
    1250             :     {
    1251           0 :         mpCurView = maView;
    1252             : 
    1253           0 :         mpViewBar->HideItem(TBI_TEMPLATE_FOLDER_DEL);
    1254             : 
    1255             :         // Enable deleting and exporting items from the filesystem
    1256           0 :         mpTemplateBar->ShowItem(TBI_TEMPLATE_EXPORT);
    1257           0 :         mpTemplateBar->ShowItem(TBI_TEMPLATE_DELETE);
    1258             : 
    1259           0 :         mpOnlineView->Hide();
    1260           0 :         maView->Show();
    1261             :     }
    1262             :     else
    1263             :     {
    1264           0 :         mpCurView = mpOnlineView;
    1265             : 
    1266           0 :         mpViewBar->ShowItem(TBI_TEMPLATE_FOLDER_DEL);
    1267             : 
    1268             :         // Disable deleting and exporting items from remote repositories
    1269           0 :         mpTemplateBar->HideItem(TBI_TEMPLATE_EXPORT);
    1270           0 :         mpTemplateBar->HideItem(TBI_TEMPLATE_DELETE);
    1271             : 
    1272           0 :         maView->Hide();
    1273           0 :         mpOnlineView->Show();
    1274             :     }
    1275           0 : }
    1276             : 
    1277           0 : void SfxTemplateManagerDlg::localMoveTo(sal_uInt16 nMenuId)
    1278             : {
    1279           0 :     sal_uInt16 nItemId = 0;
    1280             : 
    1281           0 :     if (nMenuId == MNI_MOVE_NEW)
    1282             :     {
    1283           0 :         InputDialog dlg(SfxResId(STR_INPUT_NEW).toString(),this);
    1284             : 
    1285           0 :         int ret = dlg.Execute();
    1286             : 
    1287           0 :         if (ret)
    1288             :         {
    1289           0 :             OUString aName = dlg.getEntryText();
    1290             : 
    1291           0 :             if (!aName.isEmpty())
    1292           0 :                 nItemId = maView->createRegion(aName);
    1293           0 :         }
    1294             :     }
    1295             :     else
    1296             :     {
    1297           0 :         nItemId = maView->GetItemId(nMenuId-MNI_MOVE_FOLDER_BASE);
    1298             :     }
    1299             : 
    1300           0 :     if (nItemId)
    1301             :     {
    1302             :         // Move templates to desired folder if for some reason move fails
    1303             :         // try copying them.
    1304           0 :         if (!maView->moveTemplates(maSelTemplates,nItemId,false) &&
    1305           0 :                 !maView->moveTemplates(maSelTemplates,nItemId,true))
    1306             :         {
    1307           0 :             OUString aTemplateList;
    1308             : 
    1309           0 :             std::set<const ThumbnailViewItem*>::const_iterator pIter;
    1310           0 :             for (pIter = maSelFolders.begin(); pIter != maSelFolders.end(); ++pIter)
    1311             :             {
    1312           0 :                 if (aTemplateList.isEmpty())
    1313           0 :                     aTemplateList = (*pIter)->maTitle;
    1314             :                 else
    1315           0 :                     aTemplateList = aTemplateList + "\n" + (*pIter)->maTitle;
    1316             :             }
    1317             : 
    1318           0 :             OUString aDst = maView->GetItemText(nItemId);
    1319           0 :             OUString aMsg(SfxResId(STR_MSG_ERROR_LOCAL_MOVE).toString());
    1320           0 :             aMsg = aMsg.replaceFirst("$1",aDst);
    1321           0 :             ErrorBox(this, WB_OK,aMsg.replaceFirst( "$2",aTemplateList)).Execute();
    1322             :         }
    1323             :     }
    1324           0 : }
    1325             : 
    1326           0 : void SfxTemplateManagerDlg::remoteMoveTo(const sal_uInt16 nMenuId)
    1327             : {
    1328           0 :     sal_uInt16 nItemId = 0;
    1329             : 
    1330           0 :     if (nMenuId == MNI_MOVE_NEW)
    1331             :     {
    1332           0 :         InputDialog dlg(SfxResId(STR_INPUT_NEW).toString(),this);
    1333             : 
    1334           0 :         int ret = dlg.Execute();
    1335             : 
    1336           0 :         if (ret)
    1337             :         {
    1338           0 :             OUString aName = dlg.getEntryText();
    1339             : 
    1340           0 :             if (!aName.isEmpty())
    1341           0 :                 nItemId = maView->createRegion(aName);
    1342           0 :         }
    1343             :     }
    1344             :     else
    1345             :     {
    1346           0 :         nItemId = maView->GetItemId(nMenuId-MNI_MOVE_FOLDER_BASE);
    1347             :     }
    1348             : 
    1349           0 :     if (nItemId)
    1350             :     {
    1351           0 :         OUString aTemplateList;
    1352             : 
    1353           0 :         std::set<const ThumbnailViewItem*>::const_iterator aIter;
    1354           0 :         for (aIter = maSelTemplates.begin(); aIter != maSelTemplates.end(); ++aIter)
    1355             :         {
    1356             :             const TemplateSearchViewItem *pItem =
    1357           0 :                     static_cast<const TemplateSearchViewItem*>(*aIter);
    1358             : 
    1359           0 :             if(!maView->copyFrom(nItemId,pItem->maPreview1,pItem->getPath()))
    1360             :             {
    1361           0 :                 if (aTemplateList.isEmpty())
    1362           0 :                     aTemplateList = pItem->maTitle;
    1363             :                 else
    1364           0 :                     aTemplateList = aTemplateList + "\n" + pItem->maTitle;
    1365             :             }
    1366             :         }
    1367             : 
    1368           0 :         maView->Invalidate(INVALIDATE_NOERASE);
    1369             : 
    1370           0 :         if (!aTemplateList.isEmpty())
    1371             :         {
    1372           0 :             OUString aMsg(SfxResId(STR_MSG_ERROR_REMOTE_MOVE).toString());
    1373           0 :             aMsg = aMsg.replaceFirst("$1",mpOnlineView->getOverlayName());
    1374           0 :             aMsg = aMsg.replaceFirst("$2",maView->GetItemText(nItemId));
    1375           0 :             ErrorBox(this,WB_OK,aMsg.replaceFirst("$1",aTemplateList)).Execute();
    1376           0 :         }
    1377             :     }
    1378           0 : }
    1379             : 
    1380           0 : void SfxTemplateManagerDlg::localSearchMoveTo(sal_uInt16 nMenuId)
    1381             : {
    1382           0 :     sal_uInt16 nItemId = 0;
    1383             : 
    1384           0 :     if (nMenuId == MNI_MOVE_NEW)
    1385             :     {
    1386           0 :         InputDialog dlg(SfxResId(STR_INPUT_NEW).toString(),this);
    1387             : 
    1388           0 :         int ret = dlg.Execute();
    1389             : 
    1390           0 :         if (ret)
    1391             :         {
    1392           0 :             OUString aName = dlg.getEntryText();
    1393             : 
    1394           0 :             if (!aName.isEmpty())
    1395           0 :                 nItemId = maView->createRegion(aName);
    1396           0 :         }
    1397             :     }
    1398             :     else
    1399             :     {
    1400           0 :         nItemId = maView->GetItemId(nMenuId-MNI_MOVE_FOLDER_BASE);
    1401             :     }
    1402             : 
    1403           0 :     if (nItemId)
    1404             :     {
    1405           0 :         OUString aTemplateList;
    1406             : 
    1407             :         // Move templates to desired folder if for some reason move fails
    1408             :         // try copying them.
    1409           0 :         std::set<const ThumbnailViewItem*>::const_iterator aIter;
    1410           0 :         for (aIter = maSelTemplates.begin(); aIter != maSelTemplates.end(); ++aIter)
    1411             :         {
    1412             :             const TemplateSearchViewItem *pItem =
    1413           0 :                     static_cast<const TemplateSearchViewItem*>(*aIter);
    1414             : 
    1415           0 :             if(!maView->moveTemplate(pItem,pItem->mnRegionId+1,nItemId,false)
    1416           0 :                     && !maView->moveTemplate(pItem,pItem->mnRegionId+1,nItemId,true))
    1417             :             {
    1418           0 :                 if (aTemplateList.isEmpty())
    1419           0 :                     aTemplateList = (*aIter)->maTitle;
    1420             :                 else
    1421           0 :                     aTemplateList = aTemplateList + "\n" + (*aIter)->maTitle;
    1422             :             }
    1423             :         }
    1424             : 
    1425           0 :         if (!aTemplateList.isEmpty())
    1426             :         {
    1427           0 :             OUString aDst = maView->GetItemText(nItemId);
    1428           0 :             OUString aMsg(SfxResId(STR_MSG_ERROR_LOCAL_MOVE).toString());
    1429           0 :             aMsg = aMsg.replaceFirst("$1",aDst);
    1430           0 :             ErrorBox(this, WB_OK,aMsg.replaceFirst( "$2",aTemplateList)).Execute();
    1431           0 :         }
    1432             :     }
    1433             : 
    1434             :     // Deselect all items and update search results
    1435           0 :     mpSearchView->deselectItems();
    1436             : 
    1437           0 :     SearchUpdateHdl(mpSearchEdit);
    1438           0 : }
    1439             : 
    1440           0 : void SfxTemplateManagerDlg::loadRepositories()
    1441             : {
    1442           0 :     uno::Reference < uno::XComponentContext > m_context(comphelper::getProcessComponentContext());
    1443             : 
    1444             :     // Load from user settings
    1445             :     com::sun::star::uno::Sequence<OUString>  aUrls =
    1446           0 :             officecfg::Office::Common::Misc::TemplateRepositoryUrls::get(m_context);
    1447             : 
    1448             :     com::sun::star::uno::Sequence<OUString> aNames =
    1449           0 :             officecfg::Office::Common::Misc::TemplateRepositoryNames::get(m_context);
    1450             : 
    1451           0 :     for (sal_Int32 i = 0; i < aUrls.getLength() && i < aNames.getLength(); ++i)
    1452             :     {
    1453           0 :         TemplateRepository *pItem = new TemplateRepository();
    1454             : 
    1455           0 :         pItem->mnId = i+1;
    1456           0 :         pItem->maTitle = aNames[i];
    1457           0 :         pItem->setURL(aUrls[i]);
    1458             : 
    1459           0 :         maRepositories.push_back(pItem);
    1460           0 :     }
    1461           0 : }
    1462             : 
    1463           0 : bool SfxTemplateManagerDlg::insertRepository(const OUString &rName, const OUString &rURL)
    1464             : {
    1465           0 :     for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
    1466             :     {
    1467           0 :         if (maRepositories[i]->maTitle == rName)
    1468           0 :             return false;
    1469             :     }
    1470             : 
    1471           0 :     TemplateRepository *pItem = new TemplateRepository();
    1472             : 
    1473           0 :     pItem->mnId = maRepositories.size()+1;
    1474           0 :     pItem->maTitle = rName;
    1475           0 :     pItem->setURL(rURL);
    1476             : 
    1477           0 :     maRepositories.push_back(pItem);
    1478             : 
    1479           0 :     mbIsSynced = false;
    1480           0 :     return true;
    1481             : }
    1482             : 
    1483           0 : bool SfxTemplateManagerDlg::deleteRepository(const sal_uInt16 nRepositoryId)
    1484             : {
    1485           0 :     bool bRet = false;
    1486             : 
    1487           0 :     for (size_t i = 0, n = maRepositories.size(); i < n; ++i)
    1488             :     {
    1489           0 :         if (maRepositories[i]->mnId == nRepositoryId)
    1490             :         {
    1491           0 :             delete maRepositories[i];
    1492             : 
    1493           0 :             maRepositories.erase(maRepositories.begin() + i);
    1494           0 :             mbIsSynced = false;
    1495           0 :             bRet = true;
    1496           0 :             break;
    1497             :         }
    1498             :     }
    1499             : 
    1500           0 :     return bRet;
    1501             : }
    1502             : 
    1503           0 : void SfxTemplateManagerDlg::syncRepositories() const
    1504             : {
    1505           0 :     if (!mbIsSynced)
    1506             :     {
    1507           0 :         uno::Reference < uno::XComponentContext > pContext(comphelper::getProcessComponentContext());
    1508           0 :         boost::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create(pContext));
    1509             : 
    1510           0 :         size_t nSize = maRepositories.size();
    1511           0 :         uno::Sequence<OUString> aUrls(nSize);
    1512           0 :         uno::Sequence<OUString> aNames(nSize);
    1513             : 
    1514           0 :         for(size_t i = 0; i < nSize; ++i)
    1515             :         {
    1516           0 :             aUrls[i] = maRepositories[i]->getURL();
    1517           0 :             aNames[i] = maRepositories[i]->maTitle;
    1518             :         }
    1519             : 
    1520           0 :         officecfg::Office::Common::Misc::TemplateRepositoryUrls::set(aUrls, batch, pContext);
    1521           0 :         officecfg::Office::Common::Misc::TemplateRepositoryNames::set(aNames, batch, pContext);
    1522           0 :         batch->commit();
    1523             :     }
    1524           0 : }
    1525             : 
    1526           0 : static bool lcl_getServiceName ( const OUString &rFileURL, OUString &rName )
    1527             : {
    1528           0 :     bool bRet = false;
    1529             : 
    1530           0 :     if ( !rFileURL.isEmpty() )
    1531             :     {
    1532             :         try
    1533             :         {
    1534             :             uno::Reference< embed::XStorage > xStorage =
    1535           0 :                     comphelper::OStorageHelper::GetStorageFromURL( rFileURL, embed::ElementModes::READ );
    1536             : 
    1537           0 :             sal_uIntPtr nFormat = SotStorage::GetFormatID( xStorage );
    1538             : 
    1539           0 :             const SfxFilter* pFilter = SFX_APP()->GetFilterMatcher().GetFilter4ClipBoardId( nFormat );
    1540             : 
    1541           0 :             if ( pFilter )
    1542             :             {
    1543           0 :                 rName = pFilter->GetServiceName();
    1544           0 :                 bRet = true;
    1545           0 :             }
    1546             :         }
    1547           0 :         catch( uno::Exception& )
    1548             :         {}
    1549             :     }
    1550             : 
    1551           0 :     return bRet;
    1552             : }
    1553             : 
    1554           0 : static std::vector<OUString> lcl_getAllFactoryURLs ()
    1555             : {
    1556           0 :     SvtModuleOptions aModOpt;
    1557           0 :     std::vector<OUString> aList;
    1558           0 :     const ::com::sun::star::uno::Sequence<OUString> &aServiceNames = aModOpt.GetAllServiceNames();
    1559             : 
    1560           0 :     for( sal_Int32 i=0, nCount = aServiceNames.getLength(); i < nCount; ++i )
    1561             :     {
    1562           0 :         if ( SfxObjectFactory::GetStandardTemplate( aServiceNames[i] ).Len() > 0 )
    1563             :         {
    1564           0 :             SvtModuleOptions::EFactory eFac = SvtModuleOptions::E_WRITER;
    1565           0 :             SvtModuleOptions::ClassifyFactoryByName( aServiceNames[i], eFac );
    1566           0 :             aList.push_back(aModOpt.GetFactoryEmptyDocumentURL(eFac));
    1567             :         }
    1568             :     }
    1569             : 
    1570           0 :     return aList;
    1571          66 : }
    1572             : 
    1573             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10