LCOV - code coverage report
Current view: top level - libreoffice/sfx2/source/control - templatelocalview.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 337 0.0 %
Date: 2012-12-17 Functions: 0 27 0.0 %
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 <sfx2/templatelocalview.hxx>
      11             : 
      12             : #include <comphelper/processfactory.hxx>
      13             : #include <sfx2/doctempl.hxx>
      14             : #include <sfx2/templatelocalviewitem.hxx>
      15             : #include <sfx2/templateview.hxx>
      16             : #include <sfx2/templateviewitem.hxx>
      17             : #include <svl/inettype.hxx>
      18             : #include <tools/urlobj.hxx>
      19             : #include <unotools/ucbstreamhelper.hxx>
      20             : #include <vcl/pngread.hxx>
      21             : 
      22             : #include <com/sun/star/embed/ElementModes.hpp>
      23             : #include <com/sun/star/embed/XStorage.hpp>
      24             : #include <com/sun/star/frame/DocumentTemplates.hpp>
      25             : #include <com/sun/star/lang/XComponent.hpp>
      26             : #include <com/sun/star/frame/XDocumentTemplates.hpp>
      27             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      28             : #include <com/sun/star/lang/XSingleServiceFactory.hpp>
      29             : 
      30             : using namespace ::com::sun::star;
      31             : using namespace ::com::sun::star::frame;
      32             : 
      33             : static void lcl_updateThumbnails (TemplateLocalViewItem *pItem);
      34             : 
      35           0 : class FolderFilter_Application : public ViewFilter_Application
      36             : {
      37             : public:
      38             : 
      39           0 :     FolderFilter_Application (FILTER_APPLICATION eApp)
      40           0 :         : ViewFilter_Application(eApp)
      41             :     {
      42           0 :     }
      43             : 
      44           0 :     bool operator () (const ThumbnailViewItem *pItem)
      45             :     {
      46           0 :         TemplateLocalViewItem *pFolderItem = (TemplateLocalViewItem*)pItem;
      47             : 
      48           0 :         std::vector<TemplateItemProperties> &rTemplates = pFolderItem->maTemplates;
      49             : 
      50           0 :         size_t nVisCount = 0;
      51             : 
      52             :         // Clear thumbnails
      53           0 :         pFolderItem->maPreview1.Clear();
      54           0 :         pFolderItem->maPreview2.Clear();
      55             : 
      56           0 :         for (size_t i = 0, n = rTemplates.size(); i < n; ++i)
      57             :         {
      58           0 :             if (isValid(rTemplates[i].aPath))
      59             :             {
      60           0 :                 ++nVisCount;
      61           0 :                 if ( pFolderItem->maPreview1.IsEmpty( ) )
      62             :                 {
      63           0 :                     pFolderItem->maPreview1 = TemplateAbstractView::scaleImg(rTemplates[i].aThumbnail,
      64             :                                                                        TEMPLATE_THUMBNAIL_MAX_WIDTH*0.75,
      65           0 :                                                                        TEMPLATE_THUMBNAIL_MAX_HEIGHT*0.75);
      66             :                 }
      67           0 :                 else if ( pFolderItem->maPreview2.IsEmpty() )
      68             :                 {
      69           0 :                     pFolderItem->maPreview2 = TemplateAbstractView::scaleImg(rTemplates[i].aThumbnail,
      70             :                                                                        TEMPLATE_THUMBNAIL_MAX_WIDTH*0.75,
      71           0 :                                                                        TEMPLATE_THUMBNAIL_MAX_HEIGHT*0.75);
      72             :                 }
      73             :             }
      74             :         }
      75             : 
      76           0 :         return meApp != FILTER_APP_NONE ? nVisCount : true ;
      77             :     }
      78             : 
      79             : 
      80             : private:
      81             : 
      82             :     FILTER_APPLICATION meApp;
      83             : };
      84             : 
      85           0 : TemplateLocalView::TemplateLocalView ( Window* pParent, const ResId& rResId, bool bDisableTransientChildren)
      86             :     : TemplateAbstractView(pParent,rResId,bDisableTransientChildren),
      87             :       mbFilteredResults(false),
      88             :       meFilterOption(FILTER_APP_NONE),
      89           0 :       mpDocTemplates(new SfxDocumentTemplates)
      90             : {
      91           0 :     mpItemView->SetColor(GetSettings().GetStyleSettings().GetFieldColor());
      92           0 : }
      93             : 
      94           0 : TemplateLocalView::~TemplateLocalView()
      95             : {
      96           0 :     delete mpDocTemplates;
      97           0 : }
      98             : 
      99           0 : void TemplateLocalView::Populate ()
     100             : {
     101           0 :     sal_uInt16 nCount = mpDocTemplates->GetRegionCount();
     102           0 :     for (sal_uInt16 i = 0; i < nCount; ++i)
     103             :     {
     104           0 :         OUString aRegionName(mpDocTemplates->GetFullRegionName(i));
     105             : 
     106           0 :         if ((sal_uInt32)aRegionName.getLength() > mpItemAttrs->nMaxTextLenght)
     107             :         {
     108           0 :             aRegionName = aRegionName.copy(0,mpItemAttrs->nMaxTextLenght-3);
     109           0 :             aRegionName += "...";
     110             :         }
     111             : 
     112           0 :         TemplateLocalViewItem* pItem = new TemplateLocalViewItem( *this );
     113           0 :         pItem->mnId = i+1;
     114           0 :         pItem->maTitle = aRegionName;
     115           0 :         pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnItemSelected));
     116             : 
     117           0 :         sal_uInt16 nEntries = mpDocTemplates->GetCount(i);
     118             : 
     119           0 :         for (sal_uInt16 j = 0; j < nEntries; ++j)
     120             :         {
     121           0 :             OUString aName = mpDocTemplates->GetName(i,j);
     122           0 :             OUString aURL = mpDocTemplates->GetPath(i,j);
     123             : 
     124           0 :             if ((sal_uInt32)aName.getLength() > mpItemAttrs->nMaxTextLenght)
     125             :             {
     126           0 :                 aName = aName.copy(0,mpItemAttrs->nMaxTextLenght-3);
     127           0 :                 aName += "...";
     128             :             }
     129             : 
     130           0 :             TemplateItemProperties aProperties;;
     131           0 :             aProperties.nId = j+1;
     132           0 :             aProperties.nDocId = j;
     133           0 :             aProperties.nRegionId = i;
     134           0 :             aProperties.aName = aName;
     135           0 :             aProperties.aPath = aURL;
     136             :             aProperties.aThumbnail = TemplateAbstractView::fetchThumbnail(aURL,
     137             :                                                                           TEMPLATE_THUMBNAIL_MAX_WIDTH,
     138           0 :                                                                           TEMPLATE_THUMBNAIL_MAX_HEIGHT);
     139             : 
     140           0 :             pItem->maTemplates.push_back(aProperties);
     141           0 :         }
     142             : 
     143           0 :         lcl_updateThumbnails(pItem);
     144             : 
     145           0 :         mItemList.push_back(pItem);
     146           0 :     }
     147             : 
     148           0 :     CalculateItemPositions();
     149             : 
     150           0 :     if ( IsReallyVisible() && IsUpdateMode() )
     151           0 :         Invalidate();
     152           0 : }
     153             : 
     154           0 : void TemplateLocalView::reload ()
     155             : {
     156           0 :     mpDocTemplates->Update();
     157             : 
     158           0 :     Clear();
     159             : 
     160           0 :     Populate();
     161             : 
     162           0 :     if (mpItemView->IsVisible())
     163             :     {
     164           0 :         sal_uInt16 nItemId = mpItemView->getId() + 1;
     165             : 
     166           0 :         for (size_t i = 0; i < mItemList.size(); ++i)
     167             :         {
     168           0 :             if (mItemList[i]->mnId == nItemId)
     169             :             {
     170           0 :                 mpItemView->Clear();
     171           0 :                 mpItemView->InsertItems(static_cast<TemplateLocalViewItem*>(mItemList[i])->maTemplates);
     172           0 :                 break;
     173             :             }
     174             :         }
     175             :     }
     176           0 : }
     177             : 
     178           0 : std::vector<OUString> TemplateLocalView::getFolderNames()
     179             : {
     180           0 :     size_t n = mItemList.size();
     181           0 :     std::vector<OUString> ret(n);
     182             : 
     183           0 :     for (size_t i = 0; i < n; ++i)
     184           0 :         ret[i] = mItemList[i]->maTitle;
     185             : 
     186           0 :     return ret;
     187             : }
     188             : 
     189           0 : void TemplateLocalView::showOverlay (bool bVisible)
     190             : {
     191           0 :     mpItemView->Show(bVisible);
     192             : 
     193             :     // Clear items is the overlay is closed.
     194           0 :     if (!bVisible)
     195             :     {
     196             :         // Check if the folder view needs to be filtered
     197           0 :         if (mbFilteredResults)
     198             :         {
     199           0 :             filterItems(FolderFilter_Application(meFilterOption));
     200             : 
     201           0 :             mbFilteredResults = false;
     202           0 :             meFilterOption = FILTER_APP_NONE;
     203             :         }
     204             : 
     205           0 :         mpItemView->Clear();
     206             :     }
     207           0 : }
     208             : 
     209           0 : void TemplateLocalView::filterTemplatesByApp (const FILTER_APPLICATION &eApp)
     210             : {
     211           0 :     meFilterOption = eApp;
     212             : 
     213           0 :     if (mpItemView->IsVisible())
     214             :     {
     215           0 :         mbFilteredResults = true;
     216           0 :         mpItemView->filterItems(ViewFilter_Application(eApp));
     217             :     }
     218             :     else
     219             :     {
     220           0 :         filterItems(FolderFilter_Application(eApp));
     221             :     }
     222           0 : }
     223             : 
     224             : std::vector<TemplateItemProperties>
     225           0 : TemplateLocalView::getFilteredItems(const boost::function<bool (const TemplateItemProperties&) > &rFunc) const
     226             : {
     227           0 :     std::vector<TemplateItemProperties> aItems;
     228             : 
     229           0 :     for (size_t i = 0; i < mItemList.size(); ++i)
     230             :     {
     231           0 :         TemplateLocalViewItem *pFolderItem = static_cast<TemplateLocalViewItem*>(mItemList[i]);
     232             : 
     233           0 :         for (size_t j = 0; j < pFolderItem->maTemplates.size(); ++j)
     234             :         {
     235           0 :             if (rFunc(pFolderItem->maTemplates[j]))
     236           0 :                 aItems.push_back(pFolderItem->maTemplates[j]);
     237             :         }
     238             :     }
     239             : 
     240           0 :     return aItems;
     241             : }
     242             : 
     243           0 : sal_uInt16 TemplateLocalView::createRegion(const OUString &rName)
     244             : {
     245           0 :     sal_uInt16 nRegionId = mpDocTemplates->GetRegionCount();    // Next regionId
     246             : 
     247           0 :     if (!mpDocTemplates->InsertDir(rName,nRegionId))
     248           0 :         return false;
     249             : 
     250           0 :     OUString aRegionName = rName;
     251             : 
     252           0 :     if ((sal_uInt32)aRegionName.getLength() > mpItemAttrs->nMaxTextLenght)
     253             :     {
     254           0 :         aRegionName = aRegionName.copy(0,mpItemAttrs->nMaxTextLenght-3);
     255           0 :         aRegionName += "...";
     256             :     }
     257             : 
     258           0 :     TemplateLocalViewItem* pItem = new TemplateLocalViewItem( *this );
     259           0 :     pItem->mnId = nRegionId+1;
     260           0 :     pItem->maTitle = aRegionName;
     261           0 :     pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnItemSelected));
     262             : 
     263           0 :     mItemList.push_back(pItem);
     264             : 
     265           0 :     CalculateItemPositions();
     266             : 
     267           0 :     if ( IsReallyVisible() && IsUpdateMode() )
     268           0 :         Invalidate();
     269             : 
     270           0 :     return pItem->mnId;
     271             : }
     272             : 
     273           0 : bool TemplateLocalView::removeRegion(const sal_uInt16 nItemId)
     274             : {
     275           0 :     sal_uInt16 nRegionId = nItemId - 1;
     276             : 
     277           0 :     if (!mpDocTemplates->Delete(nRegionId,USHRT_MAX))
     278           0 :         return false;
     279             : 
     280           0 :     RemoveItem(nItemId);
     281             : 
     282           0 :     return true;
     283             : }
     284             : 
     285           0 : bool TemplateLocalView::removeTemplate (const sal_uInt16 nItemId, const sal_uInt16 nSrcItemId)
     286             : {
     287           0 :     sal_uInt16 nRegionId = nSrcItemId - 1;
     288             : 
     289           0 :     for (size_t i = 0, n = mItemList.size(); i < n; ++i)
     290             :     {
     291           0 :         if (mItemList[i]->mnId == nSrcItemId)
     292             :         {
     293           0 :             TemplateLocalViewItem *pItem = static_cast<TemplateLocalViewItem*>(mItemList[i]);
     294           0 :             std::vector<TemplateItemProperties>::iterator pIter;
     295           0 :             for (pIter = pItem->maTemplates.begin(); pIter != pItem->maTemplates.end(); ++pIter)
     296             :             {
     297           0 :                 if (pIter->nId == nItemId)
     298             :                 {
     299           0 :                     if (!mpDocTemplates->Delete(nRegionId,pIter->nDocId))
     300           0 :                         return false;
     301             : 
     302           0 :                     pIter = pItem->maTemplates.erase(pIter);
     303             : 
     304           0 :                     mpItemView->RemoveItem(nItemId);
     305             : 
     306             :                     // Update Doc Idx for all templates that follow
     307           0 :                     for (; pIter != pItem->maTemplates.end(); ++pIter)
     308           0 :                         pIter->nDocId = pIter->nDocId - 1;
     309             : 
     310           0 :                     break;
     311             :                 }
     312             :             }
     313             : 
     314           0 :             lcl_updateThumbnails(pItem);
     315             : 
     316           0 :             CalculateItemPositions();
     317             : 
     318             :             break;
     319             :         }
     320             :     }
     321             : 
     322           0 :     return true;
     323             : }
     324             : 
     325           0 : bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_uInt16 nSrcItem,
     326             :                                        const sal_uInt16 nTargetItem, bool bCopy)
     327             : {
     328           0 :     bool bRet = true;
     329           0 :     bool bRefresh = false;
     330             : 
     331           0 :     TemplateLocalViewItem *pTarget = NULL;
     332           0 :     TemplateLocalViewItem *pSrc = NULL;
     333             : 
     334           0 :     for (size_t i = 0, n = mItemList.size(); i < n; ++i)
     335             :     {
     336           0 :         if (mItemList[i]->mnId == nTargetItem)
     337           0 :             pTarget = static_cast<TemplateLocalViewItem*>(mItemList[i]);
     338           0 :         else if (mItemList[i]->mnId == nSrcItem)
     339           0 :             pSrc = static_cast<TemplateLocalViewItem*>(mItemList[i]);
     340             :     }
     341             : 
     342           0 :     if (pTarget && pSrc)
     343             :     {
     344           0 :         sal_uInt16 nSrcRegionId = nSrcItem-1;
     345           0 :         sal_uInt16 nTargetRegion = pTarget->mnId-1;
     346           0 :         sal_uInt16 nTargetIdx = mpDocTemplates->GetCount(nTargetRegion);    // Next Idx
     347             : 
     348           0 :         const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(pItem);
     349             : 
     350             :         bool bOK;
     351             : 
     352           0 :         if (bCopy)
     353           0 :             bOK = mpDocTemplates->Copy(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1);
     354             :         else
     355           0 :             bOK = mpDocTemplates->Move(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1);
     356             : 
     357           0 :         if (!bOK)
     358           0 :             return false;
     359             : 
     360             :         // move template to destination
     361             : 
     362           0 :         TemplateItemProperties aTemplateItem;
     363           0 :         aTemplateItem.nId = nTargetIdx + 1;
     364           0 :         aTemplateItem.nDocId = nTargetIdx;
     365           0 :         aTemplateItem.nRegionId = nTargetRegion;
     366           0 :         aTemplateItem.aName = pViewItem->maTitle;
     367           0 :         aTemplateItem.aPath = pViewItem->getPath();
     368           0 :         aTemplateItem.aThumbnail = pViewItem->maPreview1;
     369             : 
     370           0 :         pTarget->maTemplates.push_back(aTemplateItem);
     371             : 
     372           0 :         if (!bCopy)
     373             :         {
     374             :             // remove template from overlay and from cached data
     375             : 
     376           0 :             std::vector<TemplateItemProperties>::iterator aIter;
     377           0 :             for (aIter = pSrc->maTemplates.begin(); aIter != pSrc->maTemplates.end(); ++aIter)
     378             :             {
     379           0 :                 if (aIter->nId == pViewItem->mnId)
     380             :                 {
     381           0 :                     pSrc->maTemplates.erase(aIter);
     382             : 
     383           0 :                     mpItemView->RemoveItem(pViewItem->mnId);
     384           0 :                     break;
     385             :                 }
     386             :             }
     387             :         }
     388             : 
     389           0 :         bRefresh = true;
     390             :     }
     391             :     else
     392           0 :         bRet = false;
     393             : 
     394           0 :     if (bRefresh)
     395             :     {
     396           0 :         lcl_updateThumbnails(pSrc);
     397           0 :         lcl_updateThumbnails(pTarget);
     398             : 
     399           0 :         CalculateItemPositions();
     400             : 
     401           0 :         if (IsReallyVisible() && IsUpdateMode())
     402             :         {
     403           0 :             Invalidate();
     404           0 :             mpItemView->Invalidate();
     405             :         }
     406             :     }
     407             : 
     408           0 :     return bRet;
     409             : }
     410             : 
     411           0 : bool TemplateLocalView::moveTemplates(std::set<const ThumbnailViewItem *> &rItems,
     412             :                                        const sal_uInt16 nTargetItem, bool bCopy)
     413             : {
     414           0 :     bool ret = true;
     415           0 :     bool refresh = false;
     416             : 
     417           0 :     sal_uInt16 nSrcRegionId = mpItemView->getId();
     418           0 :     sal_uInt16 nSrcRegionItemId = nSrcRegionId + 1;
     419             : 
     420           0 :     TemplateLocalViewItem *pTarget = NULL;
     421           0 :     TemplateLocalViewItem *pSrc = NULL;
     422             : 
     423           0 :     for (size_t i = 0, n = mItemList.size(); i < n; ++i)
     424             :     {
     425           0 :         if (mItemList[i]->mnId == nTargetItem)
     426           0 :             pTarget = static_cast<TemplateLocalViewItem*>(mItemList[i]);
     427           0 :         else if (mItemList[i]->mnId == nSrcRegionItemId)
     428           0 :             pSrc = static_cast<TemplateLocalViewItem*>(mItemList[i]);
     429             :     }
     430             : 
     431           0 :     if (pTarget && pSrc)
     432             :     {
     433           0 :         sal_uInt16 nTargetRegion = pTarget->mnId-1;
     434           0 :         sal_uInt16 nTargetIdx = mpDocTemplates->GetCount(nTargetRegion);    // Next Idx
     435             : 
     436           0 :         std::set<const ThumbnailViewItem*>::iterator aSelIter;
     437           0 :         for ( aSelIter = rItems.begin(); aSelIter != rItems.end(); ++aSelIter, ++nTargetIdx )
     438             :         {
     439           0 :             const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(*aSelIter);
     440             : 
     441             :             bool bOK;
     442             : 
     443           0 :             if (bCopy)
     444           0 :                 bOK = mpDocTemplates->Copy(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1);
     445             :             else
     446           0 :                 bOK = mpDocTemplates->Move(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1);
     447             : 
     448           0 :             if (!bOK)
     449             :             {
     450           0 :                 ret = false;
     451           0 :                 continue;
     452             :             }
     453             : 
     454             :             // move template to destination
     455             : 
     456           0 :             TemplateItemProperties aTemplateItem;
     457           0 :             aTemplateItem.nId = nTargetIdx + 1;
     458           0 :             aTemplateItem.nDocId = nTargetIdx;
     459           0 :             aTemplateItem.nRegionId = nTargetRegion;
     460           0 :             aTemplateItem.aName = pViewItem->maTitle;
     461           0 :             aTemplateItem.aPath = pViewItem->getPath();
     462           0 :             aTemplateItem.aThumbnail = pViewItem->maPreview1;
     463             : 
     464           0 :             pTarget->maTemplates.push_back(aTemplateItem);
     465             : 
     466           0 :             if (!bCopy)
     467             :             {
     468             :                 // remove template from overlay and from cached data
     469             : 
     470           0 :                 std::vector<TemplateItemProperties>::iterator pIter;
     471           0 :                 for (pIter = pSrc->maTemplates.begin(); pIter != pSrc->maTemplates.end(); ++pIter)
     472             :                 {
     473           0 :                     if (pIter->nId == pViewItem->mnId)
     474             :                     {
     475           0 :                         pSrc->maTemplates.erase(pIter);
     476             : 
     477           0 :                         mpItemView->RemoveItem(pViewItem->mnId);
     478           0 :                         break;
     479             :                     }
     480             :                 }
     481             :             }
     482             : 
     483           0 :             refresh = true;
     484           0 :         }
     485             :     }
     486             :     else
     487           0 :         ret = false;
     488             : 
     489           0 :     if (refresh)
     490             :     {
     491           0 :         lcl_updateThumbnails(pSrc);
     492           0 :         lcl_updateThumbnails(pTarget);
     493             : 
     494           0 :         CalculateItemPositions();
     495             : 
     496           0 :         Invalidate();
     497           0 :         mpItemView->Invalidate();
     498             :     }
     499             : 
     500           0 :     return ret;
     501             : }
     502             : 
     503           0 : bool TemplateLocalView::copyFrom(const sal_uInt16 nRegionItemId, const BitmapEx &rThumbnail,
     504             :                                   const OUString &rPath)
     505             : {
     506           0 :     sal_uInt16 nRegionId = nRegionItemId - 1;
     507             : 
     508           0 :     for (size_t i = 0, n = mItemList.size(); i < n; ++i)
     509             :     {
     510           0 :         if (mItemList[i]->mnId == nRegionItemId)
     511             :         {
     512           0 :             sal_uInt16 nId = 0;
     513           0 :             sal_uInt16 nDocId = 0;
     514             : 
     515             :             TemplateLocalViewItem *pRegionItem =
     516           0 :                     static_cast<TemplateLocalViewItem*>(mItemList[i]);
     517             : 
     518           0 :             if (!pRegionItem->maTemplates.empty())
     519             :             {
     520           0 :                 nId = (pRegionItem->maTemplates.back()).nId+1;
     521           0 :                 nDocId = (pRegionItem->maTemplates.back()).nDocId+1;
     522             :             }
     523             : 
     524           0 :             String aPath(rPath);
     525             : 
     526           0 :             if (mpDocTemplates->CopyFrom(nRegionId,nDocId,aPath))
     527             :             {
     528           0 :                 TemplateItemProperties aTemplate;
     529           0 :                 aTemplate.nId = nId;
     530           0 :                 aTemplate.nDocId = nDocId;
     531           0 :                 aTemplate.nRegionId = nRegionId;
     532           0 :                 aTemplate.aName = aPath;
     533           0 :                 aTemplate.aThumbnail = rThumbnail;
     534           0 :                 aTemplate.aPath = mpDocTemplates->GetPath(nRegionId,nDocId);
     535             : 
     536             :                 TemplateLocalViewItem *pItem =
     537           0 :                         static_cast<TemplateLocalViewItem*>(mItemList[i]);
     538             : 
     539           0 :                 pItem->maTemplates.push_back(aTemplate);
     540             : 
     541           0 :                 lcl_updateThumbnails(pItem);
     542             : 
     543           0 :                 return true;
     544             :             }
     545             : 
     546           0 :             break;
     547             :         }
     548             :     }
     549             : 
     550           0 :     return false;
     551             : }
     552             : 
     553           0 : bool TemplateLocalView::copyFrom (TemplateLocalViewItem *pItem, const OUString &rPath)
     554             : {
     555           0 :     sal_uInt16 nId = 0;
     556           0 :     sal_uInt16 nDocId = 0;
     557           0 :     sal_uInt16 nRegionId = pItem->mnId - 1;
     558           0 :     String aPath(rPath);
     559             : 
     560           0 :     if (!pItem->maTemplates.empty())
     561             :     {
     562           0 :         nId = (pItem->maTemplates.back()).nId+1;
     563           0 :         nDocId = (pItem->maTemplates.back()).nDocId+1;
     564             :     }
     565             : 
     566           0 :     if (mpDocTemplates->CopyFrom(nRegionId,nDocId,aPath))
     567             :     {
     568           0 :         TemplateItemProperties aTemplate;
     569           0 :         aTemplate.nId = nId;
     570           0 :         aTemplate.nDocId = nDocId;
     571           0 :         aTemplate.nRegionId = nRegionId;
     572           0 :         aTemplate.aName = aPath;
     573             :         aTemplate.aThumbnail = TemplateAbstractView::fetchThumbnail(rPath,
     574             :                                                                     TEMPLATE_THUMBNAIL_MAX_WIDTH,
     575           0 :                                                                     TEMPLATE_THUMBNAIL_MAX_HEIGHT);
     576           0 :         aTemplate.aPath = rPath;
     577             : 
     578           0 :         pItem->maTemplates.push_back(aTemplate);
     579             : 
     580           0 :         lcl_updateThumbnails(pItem);
     581             : 
     582           0 :         CalculateItemPositions();
     583             : 
     584           0 :         return true;
     585             :     }
     586             : 
     587           0 :     return false;
     588             : }
     589             : 
     590           0 : bool TemplateLocalView::exportTo(const sal_uInt16 nItemId, const sal_uInt16 nRegionItemId, const OUString &rName)
     591             : {
     592           0 :     sal_uInt16 nRegionId = nRegionItemId - 1;
     593             : 
     594           0 :     for (size_t i = 0, n = mItemList.size(); i < n; ++i)
     595             :     {
     596           0 :         if (mItemList[i]->mnId == nRegionItemId)
     597             :         {
     598             :             TemplateLocalViewItem *pRegItem =
     599           0 :                     static_cast<TemplateLocalViewItem*>(mItemList[i]);
     600             : 
     601           0 :             std::vector<TemplateItemProperties>::iterator aIter;
     602           0 :             for (aIter = pRegItem->maTemplates.begin(); aIter != pRegItem->maTemplates.end(); ++aIter)
     603             :             {
     604           0 :                 if (aIter->nId == nItemId)
     605             :                 {
     606           0 :                     if (!mpDocTemplates->CopyTo(nRegionId,aIter->nDocId,rName))
     607           0 :                         return false;
     608             : 
     609           0 :                     return true;
     610             :                 }
     611             :             }
     612             : 
     613             :             break;
     614             :         }
     615             :     }
     616             : 
     617           0 :     return false;
     618             : }
     619             : 
     620           0 : bool TemplateLocalView::saveTemplateAs (sal_uInt16 nItemId,
     621             :                                         com::sun::star::uno::Reference<com::sun::star::frame::XModel> &rModel,
     622             :                                         const OUString &rName)
     623             : {
     624           0 :     bool bRet = false;
     625             : 
     626           0 :     for (size_t i = 0, n = mItemList.size(); i < n; ++i)
     627             :     {
     628           0 :         if (mItemList[i]->mnId == nItemId)
     629             :         {
     630           0 :             bRet = saveTemplateAs((const TemplateLocalViewItem*)mItemList[i],rModel,rName);
     631           0 :             break;
     632             :         }
     633             :     }
     634             : 
     635           0 :     return bRet;
     636             : }
     637             : 
     638           0 : bool TemplateLocalView::saveTemplateAs(const TemplateLocalViewItem *pDstItem,
     639             :                                        com::sun::star::uno::Reference<com::sun::star::frame::XModel> &rModel,
     640             :                                        const OUString &rName)
     641             : {
     642           0 :     uno::Reference< frame::XStorable > xStorable(rModel, uno::UNO_QUERY_THROW );
     643             : 
     644             :     uno::Reference< frame::XDocumentTemplates > xTemplates(
     645           0 :                     frame::DocumentTemplates::create(comphelper::getProcessComponentContext()) );
     646             : 
     647           0 :     sal_uInt16 nRegionId = pDstItem->mnId-1;
     648             : 
     649           0 :     if (!xTemplates->storeTemplate(mpDocTemplates->GetRegionName(nRegionId),rName, xStorable ))
     650           0 :         return false;
     651             : 
     652           0 :     return true;
     653             : }
     654             : 
     655           0 : bool TemplateLocalView::isTemplateNameUnique(const sal_uInt16 nRegionItemId, const OUString &rName) const
     656             : {
     657           0 :     for (size_t i = 0, n = mItemList.size(); i < n; ++i)
     658             :     {
     659           0 :         if (mItemList[i]->mnId == nRegionItemId)
     660             :         {
     661             :             TemplateLocalViewItem *pRegItem =
     662           0 :                     static_cast<TemplateLocalViewItem*>(mItemList[i]);
     663             : 
     664           0 :             std::vector<TemplateItemProperties>::iterator aIter;
     665           0 :             for (aIter = pRegItem->maTemplates.begin(); aIter != pRegItem->maTemplates.end(); ++aIter)
     666             :             {
     667           0 :                 if (aIter->aName == rName)
     668           0 :                     return false;
     669             :             }
     670             : 
     671             :             break;
     672             :         }
     673             :     }
     674             : 
     675           0 :     return true;
     676             : }
     677             : 
     678           0 : void TemplateLocalView::OnItemDblClicked (ThumbnailViewItem *pRegionItem)
     679             : {
     680             :     // Fill templates
     681           0 :     sal_uInt16 nRegionId = pRegionItem->mnId-1;
     682             : 
     683           0 :     mpItemView->setId(nRegionId);
     684           0 :     mpItemView->setName(mpDocTemplates->GetRegionName(nRegionId));
     685           0 :     mpItemView->InsertItems(static_cast<TemplateLocalViewItem*>(pRegionItem)->maTemplates);
     686             : 
     687           0 :     mpItemView->filterItems(ViewFilter_Application(meFilterOption));
     688             : 
     689           0 :     showOverlay(true);
     690           0 : }
     691             : 
     692           0 : static void lcl_updateThumbnails (TemplateLocalViewItem *pItem)
     693             : {
     694           0 :     pItem->maPreview1.Clear();
     695           0 :     pItem->maPreview2.Clear();
     696             : 
     697             :     // Update folder thumbnails
     698           0 :     for (size_t i = 0, n = pItem->maTemplates.size(); i < n && ( pItem->maPreview1.IsEmpty() || pItem->maPreview2.IsEmpty( ) ); ++i)
     699             :     {
     700           0 :         if ( pItem->maPreview1.IsEmpty( ) )
     701             :         {
     702           0 :             pItem->maPreview1 = TemplateAbstractView::scaleImg(pItem->maTemplates[i].aThumbnail,
     703             :                                                                TEMPLATE_THUMBNAIL_MAX_WIDTH*0.75,
     704           0 :                                                                TEMPLATE_THUMBNAIL_MAX_HEIGHT*0.75);
     705             :         }
     706             :         else
     707             :         {
     708           0 :             pItem->maPreview2 = TemplateAbstractView::scaleImg(pItem->maTemplates[i].aThumbnail,
     709             :                                                                TEMPLATE_THUMBNAIL_MAX_WIDTH*0.75,
     710           0 :                                                                TEMPLATE_THUMBNAIL_MAX_HEIGHT*0.75);
     711             :         }
     712             :     }
     713           0 : }
     714             : 
     715             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10