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

Generated by: LCOV version 1.10