LCOV - code coverage report
Current view: top level - svx/source/svdraw - svdlayer.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 183 0.0 %
Date: 2014-04-14 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             :  * 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 "svx/svdglob.hxx"
      25             : #include "svx/svdstr.hrc"
      26             : 
      27           0 : bool SetOfByte::IsEmpty() const
      28             : {
      29           0 :     for(sal_uInt16 i(0); i < 32; i++)
      30             :     {
      31           0 :         if(aData[i] != 0)
      32           0 :             return false;
      33             :     }
      34             : 
      35           0 :     return true;
      36             : }
      37             : 
      38           0 : void SetOfByte::operator&=(const SetOfByte& r2ndSet)
      39             : {
      40           0 :     for(sal_uInt16 i(0); i < 32; i++)
      41             :     {
      42           0 :         aData[i] &= r2ndSet.aData[i];
      43             :     }
      44           0 : }
      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           0 : void SetOfByte::PutValue( const com::sun::star::uno::Any & rAny )
      57             : {
      58           0 :     com::sun::star::uno::Sequence< sal_Int8 > aSeq;
      59           0 :     if( rAny >>= aSeq )
      60             :     {
      61           0 :         sal_Int16 nCount = (sal_Int16)aSeq.getLength();
      62           0 :         if( nCount > 32 )
      63           0 :             nCount = 32;
      64             : 
      65             :         sal_Int16 nIndex;
      66           0 :         for( nIndex = 0; nIndex < nCount; nIndex++ )
      67             :         {
      68           0 :             aData[nIndex] = static_cast<sal_uInt8>(aSeq[nIndex]);
      69             :         }
      70             : 
      71           0 :         for( ; nIndex < 32; nIndex++ )
      72             :         {
      73           0 :             aData[nIndex] = 0;
      74             :         }
      75           0 :     }
      76           0 : }
      77             : 
      78             : /** returns a uno sequence of sal_Int8
      79             : */
      80           0 : void SetOfByte::QueryValue( com::sun::star::uno::Any & rAny ) const
      81             : {
      82           0 :     sal_Int16 nNumBytesSet = 0;
      83             :     sal_Int16 nIndex;
      84           0 :     for( nIndex = 31; nIndex >= 00; nIndex-- )
      85             :     {
      86           0 :         if( 0 != aData[nIndex] )
      87             :         {
      88           0 :             nNumBytesSet = nIndex + 1;
      89           0 :             break;
      90             :         }
      91             :     }
      92             : 
      93           0 :     com::sun::star::uno::Sequence< sal_Int8 > aSeq( nNumBytesSet );
      94             : 
      95           0 :     for( nIndex = 0; nIndex < nNumBytesSet; nIndex++ )
      96             :     {
      97           0 :         aSeq[nIndex] = static_cast<sal_Int8>(aData[nIndex]);
      98             :     }
      99             : 
     100           0 :     rAny <<= aSeq;
     101           0 : }
     102             : 
     103           0 : SdrLayer::SdrLayer(SdrLayerID nNewID, const OUString& rNewName) :
     104           0 :     maName(rNewName), pModel(NULL), nType(0), nID(nNewID)
     105             : {
     106           0 : }
     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             : 
     145             : // SdrLayerAdmin
     146             : 
     147             : 
     148           0 : SdrLayerAdmin::SdrLayerAdmin(SdrLayerAdmin* pNewParent):
     149             :     aLayer(),
     150             :     pParent(pNewParent),
     151             :     pModel(NULL),
     152           0 :     maControlLayerName("Controls")
     153             : {
     154           0 : }
     155             : 
     156           0 : SdrLayerAdmin::SdrLayerAdmin(const SdrLayerAdmin& rSrcLayerAdmin):
     157             :     aLayer(),
     158             :     pParent(NULL),
     159             :     pModel(NULL),
     160           0 :     maControlLayerName("Controls")
     161             : {
     162           0 :     *this = rSrcLayerAdmin;
     163           0 : }
     164             : 
     165           0 : SdrLayerAdmin::~SdrLayerAdmin()
     166             : {
     167           0 :     ClearLayer();
     168           0 : }
     169             : 
     170           0 : void SdrLayerAdmin::ClearLayer()
     171             : {
     172           0 :     for( std::vector<SdrLayer*>::const_iterator it = aLayer.begin(); it != aLayer.end(); ++it )
     173           0 :         delete *it;
     174           0 :     aLayer.clear();
     175           0 : }
     176             : 
     177           0 : const SdrLayerAdmin& SdrLayerAdmin::operator=(const SdrLayerAdmin& rSrcLayerAdmin)
     178             : {
     179           0 :     ClearLayer();
     180           0 :     pParent=rSrcLayerAdmin.pParent;
     181             :     sal_uInt16 i;
     182           0 :     sal_uInt16 nAnz=rSrcLayerAdmin.GetLayerCount();
     183           0 :     for (i=0; i<nAnz; i++) {
     184           0 :         aLayer.push_back(new SdrLayer(*rSrcLayerAdmin.GetLayer(i)));
     185             :     }
     186           0 :     return *this;
     187             : }
     188             : 
     189           0 : bool SdrLayerAdmin::operator==(const SdrLayerAdmin& rCmpLayerAdmin) const
     190             : {
     191           0 :     if (pParent!=rCmpLayerAdmin.pParent ||
     192           0 :         aLayer.size()!=rCmpLayerAdmin.aLayer.size())
     193           0 :         return false;
     194           0 :     bool bOk = true;
     195           0 :     sal_uInt16 nAnz=GetLayerCount();
     196           0 :     sal_uInt16 i=0;
     197           0 :     while (bOk && i<nAnz) {
     198           0 :         bOk=*GetLayer(i)==*rCmpLayerAdmin.GetLayer(i);
     199           0 :         i++;
     200             :     }
     201           0 :     return bOk;
     202             : }
     203             : 
     204           0 : void SdrLayerAdmin::SetModel(SdrModel* pNewModel)
     205             : {
     206           0 :     if (pNewModel!=pModel) {
     207           0 :         pModel=pNewModel;
     208           0 :         sal_uInt16 nAnz=GetLayerCount();
     209             :         sal_uInt16 i;
     210           0 :         for (i=0; i<nAnz; i++) {
     211           0 :             GetLayer(i)->SetModel(pNewModel);
     212             :         }
     213             :     }
     214           0 : }
     215             : 
     216           0 : void SdrLayerAdmin::Broadcast() const
     217             : {
     218           0 :     if (pModel!=NULL) {
     219           0 :         SdrHint aHint(HINT_LAYERORDERCHG);
     220           0 :         pModel->Broadcast(aHint);
     221           0 :         pModel->SetChanged();
     222             :     }
     223           0 : }
     224             : 
     225           0 : SdrLayer* SdrLayerAdmin::RemoveLayer(sal_uInt16 nPos)
     226             : {
     227           0 :     SdrLayer* pRetLayer=aLayer[nPos];
     228           0 :     aLayer.erase(aLayer.begin()+nPos);
     229           0 :     Broadcast();
     230           0 :     return pRetLayer;
     231             : }
     232             : 
     233           0 : SdrLayer* SdrLayerAdmin::NewLayer(const OUString& rName, sal_uInt16 nPos)
     234             : {
     235           0 :     SdrLayerID nID=GetUniqueLayerID();
     236           0 :     SdrLayer* pLay=new SdrLayer(nID,rName);
     237           0 :     pLay->SetModel(pModel);
     238           0 :     if(nPos==0xFFFF)
     239           0 :         aLayer.push_back(pLay);
     240             :     else
     241           0 :         aLayer.insert(aLayer.begin() + nPos, pLay);
     242           0 :     Broadcast();
     243           0 :     return pLay;
     244             : }
     245             : 
     246           0 : SdrLayer* SdrLayerAdmin::NewStandardLayer(sal_uInt16 nPos)
     247             : {
     248           0 :     SdrLayerID nID=GetUniqueLayerID();
     249           0 :     SdrLayer* pLay=new SdrLayer(nID,OUString());
     250           0 :     pLay->SetStandardLayer();
     251           0 :     pLay->SetModel(pModel);
     252           0 :     if(nPos==0xFFFF)
     253           0 :         aLayer.push_back(pLay);
     254             :     else
     255           0 :         aLayer.insert(aLayer.begin() + nPos, pLay);
     256           0 :     Broadcast();
     257           0 :     return pLay;
     258             : }
     259             : 
     260           0 : sal_uInt16 SdrLayerAdmin::GetLayerPos(SdrLayer* pLayer) const
     261             : {
     262           0 :     sal_uIntPtr nRet=SDRLAYER_NOTFOUND;
     263           0 :     if (pLayer!=NULL) {
     264           0 :         std::vector<SdrLayer*>::const_iterator it = std::find(aLayer.begin(), aLayer.end(), pLayer);
     265           0 :         if (it==aLayer.end()) {
     266           0 :             nRet=SDRLAYER_NOTFOUND;
     267             :         } else {
     268           0 :             nRet=it - aLayer.begin();
     269             :         }
     270             :     }
     271           0 :     return sal_uInt16(nRet);
     272             : }
     273             : 
     274           0 : SdrLayer* SdrLayerAdmin::GetLayer(const OUString& rName, bool bInherited)
     275             : {
     276           0 :     return (SdrLayer*)(((const SdrLayerAdmin*)this)->GetLayer(rName, bInherited));
     277             : }
     278             : 
     279           0 : const SdrLayer* SdrLayerAdmin::GetLayer(const OUString& rName, bool /*bInherited*/) const
     280             : {
     281           0 :     sal_uInt16 i(0);
     282           0 :     const SdrLayer* pLay = NULL;
     283             : 
     284           0 :     while(i < GetLayerCount() && !pLay)
     285             :     {
     286           0 :         if (rName == GetLayer(i)->GetName())
     287           0 :             pLay = GetLayer(i);
     288             :         else
     289           0 :             i++;
     290             :     }
     291             : 
     292           0 :     if(!pLay && pParent)
     293             :     {
     294           0 :         pLay = pParent->GetLayer(rName, true);
     295             :     }
     296             : 
     297           0 :     return pLay;
     298             : }
     299             : 
     300           0 : SdrLayerID SdrLayerAdmin::GetLayerID(const OUString& rName, bool bInherited) const
     301             : {
     302           0 :     SdrLayerID nRet=SDRLAYER_NOTFOUND;
     303           0 :     const SdrLayer* pLay=GetLayer(rName,bInherited);
     304           0 :     if (pLay!=NULL) nRet=pLay->GetID();
     305           0 :     return nRet;
     306             : }
     307             : 
     308           0 : const SdrLayer* SdrLayerAdmin::GetLayerPerID(sal_uInt16 nID) const
     309             : {
     310           0 :     sal_uInt16 i=0;
     311           0 :     const SdrLayer* pLay=NULL;
     312           0 :     while (i<GetLayerCount() && pLay==NULL) {
     313           0 :         if (nID==GetLayer(i)->GetID()) pLay=GetLayer(i);
     314           0 :         else i++;
     315             :     }
     316           0 :     return pLay;
     317             : }
     318             : 
     319             : // Global LayerIDs begin at 0 and increase,
     320             : // local LayerIDs begin at 254 and decrease;
     321             : // 255 is reserved for SDRLAYER_NOTFOUND.
     322             : 
     323           0 : SdrLayerID SdrLayerAdmin::GetUniqueLayerID() const
     324             : {
     325           0 :     SetOfByte aSet;
     326           0 :     bool bDown = (pParent == NULL);
     327             :     sal_uInt16 j;
     328           0 :     for (j=0; j<GetLayerCount(); j++)
     329             :     {
     330           0 :         aSet.Set(GetLayer((sal_uInt16)j)->GetID());
     331             :     }
     332             :     SdrLayerID i;
     333           0 :     if (!bDown)
     334             :     {
     335           0 :         i=254;
     336           0 :         while (i && aSet.IsSet(sal_uInt8(i)))
     337           0 :             --i;
     338           0 :         if (i == 0)
     339           0 :             i=254;
     340             :     }
     341             :     else
     342             :     {
     343           0 :         i=0;
     344           0 :         while (i<=254 && aSet.IsSet(sal_uInt8(i)))
     345           0 :             i++;
     346           0 :         if (i>254)
     347           0 :             i=0;
     348             :     }
     349           0 :     return i;
     350             : }
     351             : 
     352           0 : void SdrLayerAdmin::SetControlLayerName(const OUString& rNewName)
     353             : {
     354           0 :     maControlLayerName = rNewName;
     355           0 : }
     356             : 
     357             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10