LCOV - code coverage report
Current view: top level - libreoffice/sd/source/ui/toolpanel/controls - MasterPageDescriptor.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 141 0.0 %
Date: 2012-12-27 Functions: 0 17 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             :  * This file is part of the LibreOffice project.
       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             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include "MasterPageDescriptor.hxx"
      22             : 
      23             : #include "DocumentHelper.hxx"
      24             : #include "sdpage.hxx"
      25             : #include <tools/urlobj.hxx>
      26             : 
      27             : namespace sd { namespace toolpanel { namespace controls {
      28             : 
      29             : 
      30             : //===== MasterPageDescriptor ==================================================
      31             : 
      32           0 : MasterPageDescriptor::MasterPageDescriptor (
      33             :     MasterPageContainer::Origin eOrigin,
      34             :     const sal_Int32 nTemplateIndex,
      35             :     const String& rsURL,
      36             :     const String& rsPageName,
      37             :     const String& rsStyleName,
      38             :     const bool bIsPrecious,
      39             :     const ::boost::shared_ptr<PageObjectProvider>& rpPageObjectProvider,
      40             :     const ::boost::shared_ptr<PreviewProvider>& rpPreviewProvider)
      41             :     : maToken(MasterPageContainer::NIL_TOKEN),
      42             :       meOrigin(eOrigin),
      43             :       msURL(INetURLObject(rsURL).GetMainURL(INetURLObject::DECODE_UNAMBIGUOUS)),
      44             :       msPageName(rsPageName),
      45             :       msStyleName(rsStyleName),
      46             :       mbIsPrecious(bIsPrecious),
      47             :       mpMasterPage(NULL),
      48             :       mpSlide(NULL),
      49             :       maSmallPreview(),
      50             :       maLargePreview(),
      51             :       mpPreviewProvider(rpPreviewProvider),
      52             :       mpPageObjectProvider(rpPageObjectProvider),
      53             :       mnTemplateIndex(nTemplateIndex),
      54             :       meURLClassification(URLCLASS_UNDETERMINED),
      55           0 :       mnUseCount(0)
      56             : {
      57           0 : }
      58             : 
      59             : 
      60             : 
      61             : 
      62           0 : MasterPageDescriptor::MasterPageDescriptor (const MasterPageDescriptor& rDescriptor)
      63             :     : maToken(rDescriptor.maToken),
      64             :       meOrigin(rDescriptor.meOrigin),
      65             :       msURL(rDescriptor.msURL),
      66             :       msPageName(rDescriptor.msPageName),
      67             :       msStyleName(rDescriptor.msStyleName),
      68             :       mbIsPrecious(rDescriptor.mbIsPrecious),
      69             :       mpMasterPage(rDescriptor.mpMasterPage),
      70             :       mpSlide(rDescriptor.mpSlide),
      71             :       maSmallPreview(rDescriptor.maSmallPreview),
      72             :       maLargePreview(rDescriptor.maLargePreview),
      73             :       mpPreviewProvider(rDescriptor.mpPreviewProvider),
      74             :       mpPageObjectProvider(rDescriptor.mpPageObjectProvider),
      75             :       mnTemplateIndex(rDescriptor.mnTemplateIndex),
      76             :       meURLClassification(rDescriptor.meURLClassification),
      77           0 :       mnUseCount(rDescriptor.mnUseCount)
      78             : {
      79           0 : }
      80             : 
      81             : 
      82             : 
      83             : 
      84           0 : MasterPageDescriptor::~MasterPageDescriptor (void)
      85             : {
      86           0 : }
      87             : 
      88             : 
      89             : 
      90             : 
      91           0 : void MasterPageDescriptor::SetToken (MasterPageContainer::Token aToken)
      92             : {
      93           0 :     maToken = aToken;
      94           0 : }
      95             : 
      96             : 
      97             : 
      98             : 
      99           0 : Image MasterPageDescriptor::GetPreview (MasterPageContainer::PreviewSize eSize) const
     100             : {
     101           0 :     if (eSize == MasterPageContainer::SMALL)
     102           0 :         return maSmallPreview;
     103             :     else
     104           0 :         return maLargePreview;
     105             : }
     106             : 
     107             : 
     108             : 
     109             : SAL_WNODEPRECATED_DECLARATIONS_PUSH
     110             : ::std::auto_ptr<std::vector<MasterPageContainerChangeEvent::EventType> >
     111           0 :     MasterPageDescriptor::Update (
     112             :         const MasterPageDescriptor& rDescriptor)
     113             : {
     114           0 :     bool bDataChanged (false);
     115           0 :     bool bIndexChanged (false);
     116           0 :     bool bPreviewChanged (false);
     117             : 
     118           0 :     if (meOrigin==MasterPageContainer::UNKNOWN
     119             :         && rDescriptor.meOrigin!=MasterPageContainer::UNKNOWN)
     120             :     {
     121           0 :         meOrigin = rDescriptor.meOrigin;
     122           0 :         bIndexChanged = true;
     123             :     }
     124             : 
     125           0 :     if (msURL.isEmpty() && !rDescriptor.msURL.isEmpty())
     126             :     {
     127           0 :         msURL = rDescriptor.msURL;
     128           0 :         bDataChanged = true;
     129             :     }
     130             : 
     131           0 :     if (msPageName.isEmpty() && !rDescriptor.msPageName.isEmpty())
     132             :     {
     133           0 :         msPageName = rDescriptor.msPageName;
     134           0 :         bDataChanged = true;
     135             :     }
     136             : 
     137           0 :     if (msStyleName.isEmpty() && !rDescriptor.msStyleName.isEmpty())
     138             :     {
     139           0 :         msStyleName = rDescriptor.msStyleName;
     140           0 :         bDataChanged = true;
     141             :     }
     142             : 
     143           0 :     if (mpPageObjectProvider.get()==NULL && rDescriptor.mpPageObjectProvider.get()!=NULL)
     144             :     {
     145           0 :         mpPageObjectProvider = rDescriptor.mpPageObjectProvider;
     146           0 :         bDataChanged = true;
     147             :     }
     148             : 
     149           0 :      if (mpPreviewProvider.get()==NULL && rDescriptor.mpPreviewProvider.get()!=NULL)
     150             :      {
     151           0 :          mpPreviewProvider = rDescriptor.mpPreviewProvider;
     152           0 :          bPreviewChanged = true;
     153             :      }
     154             : 
     155           0 :      if (mnTemplateIndex<0 && rDescriptor.mnTemplateIndex>=0)
     156             :      {
     157           0 :          mnTemplateIndex = rDescriptor.mnTemplateIndex;
     158           0 :          bIndexChanged = true;
     159             :      }
     160             : 
     161             :      // Prepare the list of event types that will be returned.
     162           0 :      ::std::auto_ptr<std::vector<MasterPageContainerChangeEvent::EventType> > pResult;
     163           0 :      if (bDataChanged || bIndexChanged || bPreviewChanged)
     164             :      {
     165           0 :          pResult.reset(new std::vector<MasterPageContainerChangeEvent::EventType>());
     166           0 :          if (bDataChanged)
     167           0 :              pResult->push_back(MasterPageContainerChangeEvent::DATA_CHANGED);
     168           0 :          if (bIndexChanged)
     169           0 :              pResult->push_back(MasterPageContainerChangeEvent::INDEX_CHANGED);
     170           0 :          if (bPreviewChanged)
     171           0 :              pResult->push_back(MasterPageContainerChangeEvent::PREVIEW_CHANGED);
     172             :      }
     173             : 
     174           0 :      return pResult;
     175             : }
     176             : SAL_WNODEPRECATED_DECLARATIONS_POP
     177             : 
     178             : 
     179             : 
     180           0 : int MasterPageDescriptor::UpdatePageObject (
     181             :     sal_Int32 nCostThreshold,
     182             :     SdDrawDocument* pDocument)
     183             : {
     184           0 :     int nModified = 0;
     185             : 
     186             :     // Update the page object when that is not yet known.
     187           0 :     if (mpMasterPage == NULL
     188           0 :         && mpPageObjectProvider.get()!=NULL
     189           0 :         && (nCostThreshold<0 || mpPageObjectProvider->GetCostIndex()<=nCostThreshold))
     190             :     {
     191             :         // Note that pDocument may be NULL.
     192             : 
     193           0 :         SdPage* pPage = (*mpPageObjectProvider)(pDocument);
     194           0 :         if (meOrigin == MasterPageContainer::MASTERPAGE)
     195             :         {
     196           0 :             mpMasterPage = pPage;
     197           0 :             if (mpMasterPage != NULL)
     198           0 :                 mpMasterPage->SetPrecious(mbIsPrecious);
     199             :         }
     200             :         else
     201             :         {
     202             :             // Master pages from templates are copied into the local document.
     203           0 :             if (pDocument != NULL)
     204           0 :                 mpMasterPage = DocumentHelper::CopyMasterPageToLocalDocument(*pDocument,pPage);
     205           0 :             mpSlide = DocumentHelper::GetSlideForMasterPage(mpMasterPage);
     206             :         }
     207             : 
     208           0 :         if (mpMasterPage != NULL)
     209             :         {
     210             :             // Update page name and style name.
     211           0 :             if (msPageName.isEmpty())
     212           0 :                 msPageName = mpMasterPage->GetName();
     213           0 :             msStyleName = mpMasterPage->GetName();
     214             : 
     215             :             // Delete an existing substitution. The next request for a preview
     216             :             // will create the real one.
     217           0 :             maSmallPreview = Image();
     218           0 :             maLargePreview = Image();
     219           0 :             mpPreviewProvider = ::boost::shared_ptr<PreviewProvider>(new PagePreviewProvider());
     220             :         }
     221             :         else
     222             :         {
     223             :             DBG_ASSERT(false, "UpdatePageObject: master page is NULL");
     224           0 :             return -1;
     225             :         }
     226             : 
     227           0 :         nModified = 1;
     228             :     }
     229             : 
     230           0 :     return nModified;
     231             : }
     232             : 
     233             : 
     234             : 
     235             : 
     236           0 : bool MasterPageDescriptor::UpdatePreview (
     237             :     sal_Int32 nCostThreshold,
     238             :     const Size& rSmallSize,
     239             :     const Size& rLargeSize,
     240             :     ::sd::PreviewRenderer& rRenderer)
     241             : {
     242           0 :     bool bModified (false);
     243             : 
     244             :     // Update the preview when that is not yet known.
     245           0 :     if (maLargePreview.GetSizePixel().Width()==0
     246           0 :         && mpPreviewProvider.get()!=NULL
     247           0 :         && (nCostThreshold<0 || mpPreviewProvider->GetCostIndex()<=nCostThreshold))
     248             :     {
     249           0 :         SdPage* pPage = mpSlide;
     250           0 :         if (pPage == NULL)
     251             :         {
     252           0 :             pPage = mpMasterPage;
     253             :         }
     254           0 :         maLargePreview = (*mpPreviewProvider)(
     255           0 :             rLargeSize.Width(),
     256             :             pPage,
     257           0 :             rRenderer);
     258           0 :         if (maLargePreview.GetSizePixel().Width() > 0)
     259             :         {
     260             :             // Create the small preview by scaling the large one down.
     261             :             maSmallPreview = rRenderer.ScaleBitmap(
     262             :                 maLargePreview.GetBitmapEx(),
     263           0 :                 rSmallSize.Width());
     264             :             // The large preview may not have the desired width.  Scale it
     265             :             // accrodingly.
     266           0 :             if (maLargePreview.GetSizePixel().Width() != rLargeSize.Width())
     267             :                 maLargePreview = rRenderer.ScaleBitmap(
     268             :                     maLargePreview.GetBitmapEx(),
     269           0 :                     rLargeSize.Width());
     270           0 :             bModified = true;
     271             :         }
     272             :     }
     273             : 
     274           0 :     return bModified;
     275             : }
     276             : 
     277             : 
     278             : 
     279             : 
     280           0 : MasterPageDescriptor::URLClassification MasterPageDescriptor::GetURLClassification (void)
     281             : {
     282           0 :     if (meURLClassification == URLCLASS_UNDETERMINED)
     283             :     {
     284           0 :         if (msURL.isEmpty())
     285           0 :             meURLClassification = URLCLASS_UNKNOWN;
     286           0 :         else if (msURL.indexOf("presnt")>=0)
     287             :         {
     288           0 :             meURLClassification = URLCLASS_PRESENTATION;
     289             :         }
     290           0 :         else if (msURL.indexOf("layout")>=0)
     291             :         {
     292           0 :             meURLClassification = URLCLASS_LAYOUT;
     293             :         }
     294           0 :         else if (msURL.indexOf("educate")>=0)
     295             :         {
     296           0 :             meURLClassification = URLCLASS_OTHER;
     297             :         }
     298             :         else
     299             :         {
     300           0 :             meURLClassification = URLCLASS_USER;
     301             :         }
     302             :     }
     303             : 
     304           0 :     return meURLClassification;
     305             : }
     306             : 
     307             : 
     308             : 
     309             : //===== URLComparator =========================================================
     310             : 
     311           0 : MasterPageDescriptor::URLComparator::URLComparator (const ::rtl::OUString& sURL)
     312           0 :     : msURL(sURL)
     313             : {
     314           0 : }
     315             : 
     316             : 
     317             : 
     318             : 
     319           0 : bool MasterPageDescriptor::URLComparator::operator() (
     320             :     const SharedMasterPageDescriptor& rDescriptor)
     321             : {
     322           0 :     if (rDescriptor.get() == NULL)
     323           0 :         return false;
     324             :     else
     325           0 :         return rDescriptor->msURL.equals(msURL);
     326             : }
     327             : 
     328             : 
     329             : 
     330             : 
     331             : // ===== StyleNameComparator ==================================================
     332             : 
     333           0 : MasterPageDescriptor::StyleNameComparator::StyleNameComparator (const ::rtl::OUString& sStyleName)
     334           0 :     : msStyleName(sStyleName)
     335             : {
     336           0 : }
     337             : 
     338             : 
     339             : 
     340             : 
     341           0 : bool MasterPageDescriptor::StyleNameComparator::operator() (
     342             :     const SharedMasterPageDescriptor& rDescriptor)
     343             : {
     344           0 :     if (rDescriptor.get() == NULL)
     345           0 :         return false;
     346             :     else
     347           0 :         return rDescriptor->msStyleName.equals(msStyleName);
     348             : }
     349             : 
     350             : 
     351             : 
     352             : 
     353             : //===== PageObjectComparator ==================================================
     354             : 
     355           0 : MasterPageDescriptor::PageObjectComparator::PageObjectComparator (const SdPage* pPageObject)
     356           0 :     : mpMasterPage(pPageObject)
     357             : {
     358           0 : }
     359             : 
     360             : 
     361             : 
     362             : 
     363           0 : bool MasterPageDescriptor::PageObjectComparator::operator() (
     364             :     const SharedMasterPageDescriptor& rDescriptor)
     365             : {
     366           0 :     if (rDescriptor.get() == NULL)
     367           0 :         return false;
     368             :     else
     369           0 :         return rDescriptor->mpMasterPage==mpMasterPage;
     370             : }
     371             : 
     372             : 
     373             : 
     374             : 
     375             : //===== AllComparator =========================================================
     376             : 
     377           0 : MasterPageDescriptor::AllComparator::AllComparator(const SharedMasterPageDescriptor& rDescriptor)
     378           0 :     : mpDescriptor(rDescriptor)
     379             : {
     380           0 : }
     381             : 
     382             : 
     383             : 
     384             : 
     385           0 : bool MasterPageDescriptor::AllComparator::operator() (const SharedMasterPageDescriptor&rDescriptor)
     386             : {
     387           0 :     if (rDescriptor.get() == NULL)
     388           0 :         return false;
     389             :     else
     390             :     {
     391             :         // Take URL, page name, style name, and page object into account
     392             :         // when comparing two descriptors.  When two descriptors are
     393             :         // identical in any of these values then their are thought of as
     394             :         // equivalent.  Only the Origin has to be the same in both
     395             :         // descriptors.
     396             :         return
     397           0 :             mpDescriptor->meOrigin == rDescriptor->meOrigin
     398             :             && (
     399           0 :                 (!mpDescriptor->msURL.isEmpty()
     400           0 :                     && mpDescriptor->msURL.equals(rDescriptor->msURL))
     401           0 :                 || (!mpDescriptor->msPageName.isEmpty()
     402           0 :                     && mpDescriptor->msPageName.equals(rDescriptor->msPageName))
     403           0 :                 || (!mpDescriptor->msStyleName.isEmpty()
     404           0 :                     && mpDescriptor->msStyleName.equals(rDescriptor->msStyleName))
     405           0 :                 || (mpDescriptor->mpMasterPage!=NULL
     406           0 :                     && mpDescriptor->mpMasterPage==rDescriptor->mpMasterPage)
     407           0 :                 || (mpDescriptor->mpPageObjectProvider.get()!=NULL
     408           0 :                     && rDescriptor->mpPageObjectProvider.get()!=NULL
     409           0 :                     && mpDescriptor->mpPageObjectProvider==rDescriptor->mpPageObjectProvider));
     410             :     }
     411             : }
     412             : 
     413             : 
     414             : } } } // end of namespace ::sd::toolpanel::controls
     415             : 
     416             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10