LCOV - code coverage report
Current view: top level - svx/source/svdraw - svdlayer.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 136 183 74.3 %
Date: 2015-06-13 12:38:46 Functions: 24 29 82.8 %
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             : #include <com/sun/star/uno/Sequence.hxx>
      21             : 
      22             : #include <svx/svdlayer.hxx>
      23             : #include <svx/svdmodel.hxx>
      24             : #include "svdglob.hxx"
      25             : #include "svx/svdstr.hrc"
      26             : 
      27       63844 : bool SetOfByte::IsEmpty() const
      28             : {
      29      136239 :     for(sal_uInt16 i(0); i < 32; i++)
      30             :     {
      31      134803 :         if(aData[i] != 0)
      32       62408 :             return false;
      33             :     }
      34             : 
      35        1436 :     return true;
      36             : }
      37             : 
      38       23237 : void SetOfByte::operator&=(const SetOfByte& r2ndSet)
      39             : {
      40      766821 :     for(sal_uInt16 i(0); i < 32; i++)
      41             :     {
      42      743584 :         aData[i] &= r2ndSet.aData[i];
      43             :     }
      44       23237 : }
      45             : 
      46           0 : void SetOfByte::operator|=(const SetOfByte& r2ndSet)
      47             : {
      48           0 :     for(sal_uInt16 i(0); i < 32; i++)
      49             :     {
      50           0 :         aData[i] |= r2ndSet.aData[i];
      51             :     }
      52           0 : }
      53             : 
      54             : /** initialize this set with a uno sequence of sal_Int8
      55             : */
      56         255 : void SetOfByte::PutValue( const com::sun::star::uno::Any & rAny )
      57             : {
      58         255 :     com::sun::star::uno::Sequence< sal_Int8 > aSeq;
      59         255 :     if( rAny >>= aSeq )
      60             :     {
      61         255 :         sal_Int16 nCount = (sal_Int16)aSeq.getLength();
      62         255 :         if( nCount > 32 )
      63           0 :             nCount = 32;
      64             : 
      65             :         sal_Int16 nIndex;
      66        5695 :         for( nIndex = 0; nIndex < nCount; nIndex++ )
      67             :         {
      68        5440 :             aData[nIndex] = static_cast<sal_uInt8>(aSeq[nIndex]);
      69             :         }
      70             : 
      71        2975 :         for( ; nIndex < 32; nIndex++ )
      72             :         {
      73        2720 :             aData[nIndex] = 0;
      74             :         }
      75         255 :     }
      76         255 : }
      77             : 
      78             : /** returns a uno sequence of sal_Int8
      79             : */
      80         357 : void SetOfByte::QueryValue( com::sun::star::uno::Any & rAny ) const
      81             : {
      82         357 :     sal_Int16 nNumBytesSet = 0;
      83             :     sal_Int16 nIndex;
      84        4165 :     for( nIndex = 31; nIndex >= 00; nIndex-- )
      85             :     {
      86        4046 :         if( 0 != aData[nIndex] )
      87             :         {
      88         238 :             nNumBytesSet = nIndex + 1;
      89         238 :             break;
      90             :         }
      91             :     }
      92             : 
      93         357 :     com::sun::star::uno::Sequence< sal_Int8 > aSeq( nNumBytesSet );
      94             : 
      95        7973 :     for( nIndex = 0; nIndex < nNumBytesSet; nIndex++ )
      96             :     {
      97        7616 :         aSeq[nIndex] = static_cast<sal_Int8>(aData[nIndex]);
      98             :     }
      99             : 
     100         357 :     rAny <<= aSeq;
     101         357 : }
     102             : 
     103       22097 : SdrLayer::SdrLayer(SdrLayerID nNewID, const OUString& rNewName) :
     104       22097 :     maName(rNewName), pModel(NULL), nType(0), nID(nNewID)
     105             : {
     106       22097 : }
     107             : 
     108           0 : void SdrLayer::SetStandardLayer(bool bStd)
     109             : {
     110           0 :     nType=(sal_uInt16)bStd;
     111           0 :     if (bStd) {
     112           0 :         maName = ImpGetResStr(STR_StandardLayerName);
     113             :     }
     114           0 :     if (pModel!=NULL) {
     115           0 :         SdrHint aHint(HINT_LAYERCHG);
     116           0 :         pModel->Broadcast(aHint);
     117           0 :         pModel->SetChanged();
     118             :     }
     119           0 : }
     120             : 
     121           3 : void SdrLayer::SetName(const OUString& rNewName)
     122             : {
     123           3 :     if (rNewName == maName)
     124           3 :         return;
     125             : 
     126           3 :     maName = rNewName;
     127           3 :     nType = 0; // user defined
     128             : 
     129           3 :     if (pModel)
     130             :     {
     131           3 :         SdrHint aHint(HINT_LAYERCHG);
     132           3 :         pModel->Broadcast(aHint);
     133           3 :         pModel->SetChanged();
     134             :     }
     135             : }
     136             : 
     137           0 : bool SdrLayer::operator==(const SdrLayer& rCmpLayer) const
     138             : {
     139           0 :     return (nID == rCmpLayer.nID
     140           0 :         && nType == rCmpLayer.nType
     141           0 :         && maName == rCmpLayer.maName);
     142             : }
     143             : 
     144       10749 : SdrLayerAdmin::SdrLayerAdmin(SdrLayerAdmin* pNewParent):
     145             :     aLayer(),
     146             :     pParent(pNewParent),
     147             :     pModel(NULL),
     148       10749 :     maControlLayerName("Controls")
     149             : {
     150       10749 : }
     151             : 
     152           1 : SdrLayerAdmin::SdrLayerAdmin(const SdrLayerAdmin& rSrcLayerAdmin):
     153             :     aLayer(),
     154             :     pParent(NULL),
     155             :     pModel(NULL),
     156           1 :     maControlLayerName("Controls")
     157             : {
     158           1 :     *this = rSrcLayerAdmin;
     159           1 : }
     160             : 
     161       21272 : SdrLayerAdmin::~SdrLayerAdmin()
     162             : {
     163       10636 :     ClearLayer();
     164       10636 : }
     165             : 
     166       19090 : void SdrLayerAdmin::ClearLayer()
     167             : {
     168       41067 :     for( std::vector<SdrLayer*>::const_iterator it = aLayer.begin(); it != aLayer.end(); ++it )
     169       21977 :         delete *it;
     170       19090 :     aLayer.clear();
     171       19090 : }
     172             : 
     173           1 : const SdrLayerAdmin& SdrLayerAdmin::operator=(const SdrLayerAdmin& rSrcLayerAdmin)
     174             : {
     175           1 :     ClearLayer();
     176           1 :     pParent=rSrcLayerAdmin.pParent;
     177             :     sal_uInt16 i;
     178           1 :     sal_uInt16 nCount=rSrcLayerAdmin.GetLayerCount();
     179           6 :     for (i=0; i<nCount; i++) {
     180           5 :         aLayer.push_back(new SdrLayer(*rSrcLayerAdmin.GetLayer(i)));
     181             :     }
     182           1 :     return *this;
     183             : }
     184             : 
     185           0 : bool SdrLayerAdmin::operator==(const SdrLayerAdmin& rCmpLayerAdmin) const
     186             : {
     187           0 :     if (pParent!=rCmpLayerAdmin.pParent ||
     188           0 :         aLayer.size()!=rCmpLayerAdmin.aLayer.size())
     189           0 :         return false;
     190           0 :     bool bOk = true;
     191           0 :     sal_uInt16 nCount=GetLayerCount();
     192           0 :     sal_uInt16 i=0;
     193           0 :     while (bOk && i<nCount) {
     194           0 :         bOk=*GetLayer(i)==*rCmpLayerAdmin.GetLayer(i);
     195           0 :         i++;
     196             :     }
     197           0 :     return bOk;
     198             : }
     199             : 
     200        4148 : void SdrLayerAdmin::SetModel(SdrModel* pNewModel)
     201             : {
     202        4148 :     if (pNewModel!=pModel) {
     203        4148 :         pModel=pNewModel;
     204        4148 :         sal_uInt16 nCount=GetLayerCount();
     205             :         sal_uInt16 i;
     206        4148 :         for (i=0; i<nCount; i++) {
     207           0 :             GetLayer(i)->SetModel(pNewModel);
     208             :         }
     209             :     }
     210        4148 : }
     211             : 
     212       22098 : void SdrLayerAdmin::Broadcast() const
     213             : {
     214       22098 :     if (pModel!=NULL) {
     215       22098 :         SdrHint aHint(HINT_LAYERORDERCHG);
     216       22098 :         pModel->Broadcast(aHint);
     217       22098 :         pModel->SetChanged();
     218             :     }
     219       22098 : }
     220             : 
     221           1 : SdrLayer* SdrLayerAdmin::RemoveLayer(sal_uInt16 nPos)
     222             : {
     223           1 :     SdrLayer* pRetLayer=aLayer[nPos];
     224           1 :     aLayer.erase(aLayer.begin()+nPos);
     225           1 :     Broadcast();
     226           1 :     return pRetLayer;
     227             : }
     228             : 
     229       22097 : SdrLayer* SdrLayerAdmin::NewLayer(const OUString& rName, sal_uInt16 nPos)
     230             : {
     231       22097 :     SdrLayerID nID=GetUniqueLayerID();
     232       22097 :     SdrLayer* pLay=new SdrLayer(nID,rName);
     233       22097 :     pLay->SetModel(pModel);
     234       22097 :     if(nPos==0xFFFF)
     235       19348 :         aLayer.push_back(pLay);
     236             :     else
     237        2749 :         aLayer.insert(aLayer.begin() + nPos, pLay);
     238       22097 :     Broadcast();
     239       22097 :     return pLay;
     240             : }
     241             : 
     242           0 : SdrLayer* SdrLayerAdmin::NewStandardLayer(sal_uInt16 nPos)
     243             : {
     244           0 :     SdrLayerID nID=GetUniqueLayerID();
     245           0 :     SdrLayer* pLay=new SdrLayer(nID,OUString());
     246           0 :     pLay->SetStandardLayer();
     247           0 :     pLay->SetModel(pModel);
     248           0 :     if(nPos==0xFFFF)
     249           0 :         aLayer.push_back(pLay);
     250             :     else
     251           0 :         aLayer.insert(aLayer.begin() + nPos, pLay);
     252           0 :     Broadcast();
     253           0 :     return pLay;
     254             : }
     255             : 
     256           1 : sal_uInt16 SdrLayerAdmin::GetLayerPos(SdrLayer* pLayer) const
     257             : {
     258           1 :     sal_uIntPtr nRet=SDRLAYER_NOTFOUND;
     259           1 :     if (pLayer!=NULL) {
     260           1 :         std::vector<SdrLayer*>::const_iterator it = std::find(aLayer.begin(), aLayer.end(), pLayer);
     261           1 :         if (it==aLayer.end()) {
     262           0 :             nRet=SDRLAYER_NOTFOUND;
     263             :         } else {
     264           1 :             nRet=it - aLayer.begin();
     265             :         }
     266             :     }
     267           1 :     return sal_uInt16(nRet);
     268             : }
     269             : 
     270       27934 : SdrLayer* SdrLayerAdmin::GetLayer(const OUString& rName, bool bInherited)
     271             : {
     272       27934 :     return const_cast<SdrLayer*>(const_cast<const SdrLayerAdmin*>(this)->GetLayer(rName, bInherited));
     273             : }
     274             : 
     275      115482 : const SdrLayer* SdrLayerAdmin::GetLayer(const OUString& rName, bool /*bInherited*/) const
     276             : {
     277      115482 :     sal_uInt16 i(0);
     278      115482 :     const SdrLayer* pLay = NULL;
     279             : 
     280      508671 :     while(i < GetLayerCount() && !pLay)
     281             :     {
     282      277707 :         if (rName == GetLayer(i)->GetName())
     283       87806 :             pLay = GetLayer(i);
     284             :         else
     285      189901 :             i++;
     286             :     }
     287             : 
     288      115482 :     if(!pLay && pParent)
     289             :     {
     290       25079 :         pLay = pParent->GetLayer(rName, true);
     291             :     }
     292             : 
     293      115482 :     return pLay;
     294             : }
     295             : 
     296       87548 : SdrLayerID SdrLayerAdmin::GetLayerID(const OUString& rName, bool bInherited) const
     297             : {
     298       87548 :     SdrLayerID nRet=SDRLAYER_NOTFOUND;
     299       87548 :     const SdrLayer* pLay=GetLayer(rName,bInherited);
     300       87548 :     if (pLay!=NULL) nRet=pLay->GetID();
     301       87548 :     return nRet;
     302             : }
     303             : 
     304        5367 : const SdrLayer* SdrLayerAdmin::GetLayerPerID(sal_uInt16 nID) const
     305             : {
     306        5367 :     sal_uInt16 i=0;
     307        5367 :     const SdrLayer* pLay=NULL;
     308       26245 :     while (i<GetLayerCount() && pLay==NULL) {
     309       15511 :         if (nID==GetLayer(i)->GetID()) pLay=GetLayer(i);
     310       10144 :         else i++;
     311             :     }
     312        5367 :     return pLay;
     313             : }
     314             : 
     315             : // Global LayerIDs begin at 0 and increase,
     316             : // local LayerIDs begin at 254 and decrease;
     317             : // 255 is reserved for SDRLAYER_NOTFOUND.
     318             : 
     319       22097 : SdrLayerID SdrLayerAdmin::GetUniqueLayerID() const
     320             : {
     321       22097 :     SetOfByte aSet;
     322       22097 :     bool bDown = (pParent == NULL);
     323             :     sal_uInt16 j;
     324       75178 :     for (j=0; j<GetLayerCount(); j++)
     325             :     {
     326       53081 :         aSet.Set(GetLayer((sal_uInt16)j)->GetID());
     327             :     }
     328             :     SdrLayerID i;
     329       22097 :     if (!bDown)
     330             :     {
     331           0 :         i=254;
     332           0 :         while (i && aSet.IsSet(sal_uInt8(i)))
     333           0 :             --i;
     334           0 :         if (i == 0)
     335           0 :             i=254;
     336             :     }
     337             :     else
     338             :     {
     339       22097 :         i=0;
     340       97275 :         while (i<=254 && aSet.IsSet(sal_uInt8(i)))
     341       53081 :             i++;
     342       22097 :         if (i>254)
     343           0 :             i=0;
     344             :     }
     345       22097 :     return i;
     346             : }
     347             : 
     348         320 : void SdrLayerAdmin::SetControlLayerName(const OUString& rNewName)
     349             : {
     350         320 :     maControlLayerName = rNewName;
     351         755 : }
     352             : 
     353             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11