LCOV - code coverage report
Current view: top level - svx/source/svdraw - svdlayer.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 127 183 69.4 %
Date: 2014-11-03 Functions: 23 29 79.3 %
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       54389 : bool SetOfByte::IsEmpty() const
      28             : {
      29      104870 :     for(sal_uInt16 i(0); i < 32; i++)
      30             :     {
      31      103524 :         if(aData[i] != 0)
      32       53043 :             return false;
      33             :     }
      34             : 
      35        1346 :     return true;
      36             : }
      37             : 
      38        9787 : void SetOfByte::operator&=(const SetOfByte& r2ndSet)
      39             : {
      40      322971 :     for(sal_uInt16 i(0); i < 32; i++)
      41             :     {
      42      313184 :         aData[i] &= r2ndSet.aData[i];
      43             :     }
      44        9787 : }
      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         480 : void SetOfByte::PutValue( const com::sun::star::uno::Any & rAny )
      57             : {
      58         480 :     com::sun::star::uno::Sequence< sal_Int8 > aSeq;
      59         480 :     if( rAny >>= aSeq )
      60             :     {
      61         480 :         sal_Int16 nCount = (sal_Int16)aSeq.getLength();
      62         480 :         if( nCount > 32 )
      63           0 :             nCount = 32;
      64             : 
      65             :         sal_Int16 nIndex;
      66       10720 :         for( nIndex = 0; nIndex < nCount; nIndex++ )
      67             :         {
      68       10240 :             aData[nIndex] = static_cast<sal_uInt8>(aSeq[nIndex]);
      69             :         }
      70             : 
      71        5600 :         for( ; nIndex < 32; nIndex++ )
      72             :         {
      73        5120 :             aData[nIndex] = 0;
      74             :         }
      75         480 :     }
      76         480 : }
      77             : 
      78             : /** returns a uno sequence of sal_Int8
      79             : */
      80         660 : void SetOfByte::QueryValue( com::sun::star::uno::Any & rAny ) const
      81             : {
      82         660 :     sal_Int16 nNumBytesSet = 0;
      83             :     sal_Int16 nIndex;
      84        7700 :     for( nIndex = 31; nIndex >= 00; nIndex-- )
      85             :     {
      86        7480 :         if( 0 != aData[nIndex] )
      87             :         {
      88         440 :             nNumBytesSet = nIndex + 1;
      89         440 :             break;
      90             :         }
      91             :     }
      92             : 
      93         660 :     com::sun::star::uno::Sequence< sal_Int8 > aSeq( nNumBytesSet );
      94             : 
      95       14740 :     for( nIndex = 0; nIndex < nNumBytesSet; nIndex++ )
      96             :     {
      97       14080 :         aSeq[nIndex] = static_cast<sal_Int8>(aData[nIndex]);
      98             :     }
      99             : 
     100         660 :     rAny <<= aSeq;
     101         660 : }
     102             : 
     103       36654 : SdrLayer::SdrLayer(SdrLayerID nNewID, const OUString& rNewName) :
     104       36654 :     maName(rNewName), pModel(NULL), nType(0), nID(nNewID)
     105             : {
     106       36654 : }
     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           0 : void SdrLayer::SetName(const OUString& rNewName)
     122             : {
     123           0 :     if (rNewName == maName)
     124           0 :         return;
     125             : 
     126           0 :     maName = rNewName;
     127           0 :     nType = 0; // user defined
     128             : 
     129           0 :     if (pModel)
     130             :     {
     131           0 :         SdrHint aHint(HINT_LAYERCHG);
     132           0 :         pModel->Broadcast(aHint);
     133           0 :         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       17096 : SdrLayerAdmin::SdrLayerAdmin(SdrLayerAdmin* pNewParent):
     145             :     aLayer(),
     146             :     pParent(pNewParent),
     147             :     pModel(NULL),
     148       17096 :     maControlLayerName("Controls")
     149             : {
     150       17096 : }
     151             : 
     152           2 : SdrLayerAdmin::SdrLayerAdmin(const SdrLayerAdmin& rSrcLayerAdmin):
     153             :     aLayer(),
     154             :     pParent(NULL),
     155             :     pModel(NULL),
     156           2 :     maControlLayerName("Controls")
     157             : {
     158           2 :     *this = rSrcLayerAdmin;
     159           2 : }
     160             : 
     161       34032 : SdrLayerAdmin::~SdrLayerAdmin()
     162             : {
     163       17016 :     ClearLayer();
     164       17016 : }
     165             : 
     166       31038 : void SdrLayerAdmin::ClearLayer()
     167             : {
     168       67648 :     for( std::vector<SdrLayer*>::const_iterator it = aLayer.begin(); it != aLayer.end(); ++it )
     169       36610 :         delete *it;
     170       31038 :     aLayer.clear();
     171       31038 : }
     172             : 
     173           2 : const SdrLayerAdmin& SdrLayerAdmin::operator=(const SdrLayerAdmin& rSrcLayerAdmin)
     174             : {
     175           2 :     ClearLayer();
     176           2 :     pParent=rSrcLayerAdmin.pParent;
     177             :     sal_uInt16 i;
     178           2 :     sal_uInt16 nAnz=rSrcLayerAdmin.GetLayerCount();
     179          12 :     for (i=0; i<nAnz; i++) {
     180          10 :         aLayer.push_back(new SdrLayer(*rSrcLayerAdmin.GetLayer(i)));
     181             :     }
     182           2 :     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 nAnz=GetLayerCount();
     192           0 :     sal_uInt16 i=0;
     193           0 :     while (bOk && i<nAnz) {
     194           0 :         bOk=*GetLayer(i)==*rCmpLayerAdmin.GetLayer(i);
     195           0 :         i++;
     196             :     }
     197           0 :     return bOk;
     198             : }
     199             : 
     200        6926 : void SdrLayerAdmin::SetModel(SdrModel* pNewModel)
     201             : {
     202        6926 :     if (pNewModel!=pModel) {
     203        6926 :         pModel=pNewModel;
     204        6926 :         sal_uInt16 nAnz=GetLayerCount();
     205             :         sal_uInt16 i;
     206        6926 :         for (i=0; i<nAnz; i++) {
     207           0 :             GetLayer(i)->SetModel(pNewModel);
     208             :         }
     209             :     }
     210        6926 : }
     211             : 
     212       36656 : void SdrLayerAdmin::Broadcast() const
     213             : {
     214       36656 :     if (pModel!=NULL) {
     215       36656 :         SdrHint aHint(HINT_LAYERORDERCHG);
     216       36656 :         pModel->Broadcast(aHint);
     217       36656 :         pModel->SetChanged();
     218             :     }
     219       36656 : }
     220             : 
     221           2 : SdrLayer* SdrLayerAdmin::RemoveLayer(sal_uInt16 nPos)
     222             : {
     223           2 :     SdrLayer* pRetLayer=aLayer[nPos];
     224           2 :     aLayer.erase(aLayer.begin()+nPos);
     225           2 :     Broadcast();
     226           2 :     return pRetLayer;
     227             : }
     228             : 
     229       36654 : SdrLayer* SdrLayerAdmin::NewLayer(const OUString& rName, sal_uInt16 nPos)
     230             : {
     231       36654 :     SdrLayerID nID=GetUniqueLayerID();
     232       36654 :     SdrLayer* pLay=new SdrLayer(nID,rName);
     233       36654 :     pLay->SetModel(pModel);
     234       36654 :     if(nPos==0xFFFF)
     235       32522 :         aLayer.push_back(pLay);
     236             :     else
     237        4132 :         aLayer.insert(aLayer.begin() + nPos, pLay);
     238       36654 :     Broadcast();
     239       36654 :     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           2 : sal_uInt16 SdrLayerAdmin::GetLayerPos(SdrLayer* pLayer) const
     257             : {
     258           2 :     sal_uIntPtr nRet=SDRLAYER_NOTFOUND;
     259           2 :     if (pLayer!=NULL) {
     260           2 :         std::vector<SdrLayer*>::const_iterator it = std::find(aLayer.begin(), aLayer.end(), pLayer);
     261           2 :         if (it==aLayer.end()) {
     262           0 :             nRet=SDRLAYER_NOTFOUND;
     263             :         } else {
     264           2 :             nRet=it - aLayer.begin();
     265             :         }
     266             :     }
     267           2 :     return sal_uInt16(nRet);
     268             : }
     269             : 
     270       38318 : SdrLayer* SdrLayerAdmin::GetLayer(const OUString& rName, bool bInherited)
     271             : {
     272       38318 :     return (SdrLayer*)(((const SdrLayerAdmin*)this)->GetLayer(rName, bInherited));
     273             : }
     274             : 
     275      141441 : const SdrLayer* SdrLayerAdmin::GetLayer(const OUString& rName, bool /*bInherited*/) const
     276             : {
     277      141441 :     sal_uInt16 i(0);
     278      141441 :     const SdrLayer* pLay = NULL;
     279             : 
     280      620888 :     while(i < GetLayerCount() && !pLay)
     281             :     {
     282      338006 :         if (rName == GetLayer(i)->GetName())
     283      105904 :             pLay = GetLayer(i);
     284             :         else
     285      232102 :             i++;
     286             :     }
     287             : 
     288      141441 :     if(!pLay && pParent)
     289             :     {
     290       34768 :         pLay = pParent->GetLayer(rName, true);
     291             :     }
     292             : 
     293      141441 :     return pLay;
     294             : }
     295             : 
     296      103123 : SdrLayerID SdrLayerAdmin::GetLayerID(const OUString& rName, bool bInherited) const
     297             : {
     298      103123 :     SdrLayerID nRet=SDRLAYER_NOTFOUND;
     299      103123 :     const SdrLayer* pLay=GetLayer(rName,bInherited);
     300      103123 :     if (pLay!=NULL) nRet=pLay->GetID();
     301      103123 :     return nRet;
     302             : }
     303             : 
     304        7364 : const SdrLayer* SdrLayerAdmin::GetLayerPerID(sal_uInt16 nID) const
     305             : {
     306        7364 :     sal_uInt16 i=0;
     307        7364 :     const SdrLayer* pLay=NULL;
     308       35758 :     while (i<GetLayerCount() && pLay==NULL) {
     309       21030 :         if (nID==GetLayer(i)->GetID()) pLay=GetLayer(i);
     310       13666 :         else i++;
     311             :     }
     312        7364 :     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       36654 : SdrLayerID SdrLayerAdmin::GetUniqueLayerID() const
     320             : {
     321       36654 :     SetOfByte aSet;
     322       36654 :     bool bDown = (pParent == NULL);
     323             :     sal_uInt16 j;
     324      125124 :     for (j=0; j<GetLayerCount(); j++)
     325             :     {
     326       88470 :         aSet.Set(GetLayer((sal_uInt16)j)->GetID());
     327             :     }
     328             :     SdrLayerID i;
     329       36654 :     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       36654 :         i=0;
     340      161778 :         while (i<=254 && aSet.IsSet(sal_uInt8(i)))
     341       88470 :             i++;
     342       36654 :         if (i>254)
     343           0 :             i=0;
     344             :     }
     345       36654 :     return i;
     346             : }
     347             : 
     348         442 : void SdrLayerAdmin::SetControlLayerName(const OUString& rNewName)
     349             : {
     350         442 :     maControlLayerName = rNewName;
     351        1093 : }
     352             : 
     353             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10