LCOV - code coverage report
Current view: top level - libreoffice/solver/unxlngi6.pro/inc/svx - svdlayer.hxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 5 13 38.5 %
Date: 2012-12-27 Functions: 5 13 38.5 %
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             : #ifndef _SVDLAYER_HXX
      21             : #define _SVDLAYER_HXX
      22             : 
      23             : #include <tools/string.hxx>
      24             : #include <tools/stream.hxx>
      25             : #include <svx/svdsob.hxx>
      26             : #include <svx/svdtypes.hxx> // fuer typedef SdrLayerID
      27             : #include "svx/svxdllapi.h"
      28             : #include <algorithm>
      29             : 
      30             : class SdrModel;
      31             : 
      32             : class SVX_DLLPUBLIC SdrLayer
      33             : {
      34             : friend class SdrLayerAdmin;
      35             : protected:
      36             :     String     aName;
      37             :     String      maTitle;
      38             :     String      maDescription;
      39             :     SdrModel*  pModel; // zum Broadcasten
      40             :     sal_uInt16     nType;  // 0=Userdefined,1=Standardlayer
      41             :     SdrLayerID nID;
      42             : protected:
      43             :     SdrLayer(SdrLayerID nNewID, const String& rNewName)       { nID=nNewID; aName=rNewName; nType=0; pModel=NULL; }
      44             :     void SetID(SdrLayerID nNewID)                             { nID=nNewID; }
      45             : public:
      46             :     SdrLayer(): pModel(NULL),nType(0),nID(0)                  {}
      47             :     bool      operator==(const SdrLayer& rCmpLayer) const;
      48             :     bool      operator!=(const SdrLayer& rCmpLayer) const { return !operator==(rCmpLayer); }
      49             : 
      50             :     void          SetName(const String& rNewName);
      51           0 :     const String& GetName() const                             { return aName; }
      52             : 
      53          10 :     void          SetTitle(const String& rTitle) { maTitle = rTitle; }
      54           0 :     const String& GetTitle() const { return maTitle; }
      55             : 
      56          10 :     void          SetDescription(const String& rDesc) { maDescription = rDesc; }
      57           0 :     const String& GetDescription() const { return maDescription; }
      58             : 
      59        1572 :     SdrLayerID    GetID() const                               { return nID; }
      60             :     void          SetModel(SdrModel* pNewModel)               { pModel=pNewModel; }
      61             :     SdrModel*     GetModel() const                            { return pModel; }
      62             :     // Einem SdrLayer kann man sagen dass er ein (der) Standardlayer sein soll.
      63             :     // Es wird dann laenderspeziefisch der passende Name gesetzt. SetName()
      64             :     // setzt das Flag "StandardLayer" ggf. zurueck auf "Userdefined".
      65             :     void          SetStandardLayer(bool bStd = true);
      66             :     bool          IsStandardLayer() const                     { return nType==1; }
      67             : };
      68             : 
      69             : // Beim Aendern von Layerdaten muss man derzeit
      70             : // noch selbst das Modify-Flag am Model setzen.
      71             : #define SDRLAYER_MAXCOUNT 255
      72             : class SVX_DLLPUBLIC SdrLayerAdmin {
      73             : friend class SdrView;
      74             : friend class SdrModel;
      75             : friend class SdrPage;
      76             : 
      77             : protected:
      78             :     std::vector<SdrLayer*> aLayer;
      79             :     SdrLayerAdmin* pParent; // Der Admin der Seite kennt den Admin des Docs
      80             :     SdrModel*      pModel; // zum Broadcasten
      81             :     String         aControlLayerName;
      82             : protected:
      83             :     // Eine noch nicht verwendete LayerID raussuchen. Sind bereits alle
      84             :     // verbraucht, so gibt's 'ne 0. Wer sicher gehen will, muss vorher
      85             :     // GetLayerCount()<SDRLAYER_MAXCOUNT abfragen, denn sonst sind alle
      86             :     // vergeben.
      87             :     SdrLayerID           GetUniqueLayerID() const;
      88             :     void                 Broadcast() const;
      89             : public:
      90             :     explicit SdrLayerAdmin(SdrLayerAdmin* pNewParent=NULL);
      91             :     SdrLayerAdmin(const SdrLayerAdmin& rSrcLayerAdmin);
      92             :     ~SdrLayerAdmin();
      93             :     const SdrLayerAdmin& operator=(const SdrLayerAdmin& rSrcLayerAdmin);
      94             :     bool             operator==(const SdrLayerAdmin& rCmpLayerAdmin) const;
      95             :     bool             operator!=(const SdrLayerAdmin& rCmpLayerAdmin) const       { return !operator==(rCmpLayerAdmin); }
      96             :     SdrLayerAdmin*       GetParent() const                                           { return pParent; }
      97             :     void                 SetParent(SdrLayerAdmin* pNewParent)                        { pParent=pNewParent; }
      98             :     void                 SetModel(SdrModel* pNewModel);
      99             :     SdrModel*            GetModel() const                                            { return pModel; }
     100             :     void                 InsertLayer(SdrLayer* pLayer)
     101             :     {
     102             :         aLayer.push_back(pLayer);
     103             :         pLayer->SetModel(pModel);
     104             :         Broadcast();
     105             :     }
     106             :     void                 InsertLayer(SdrLayer* pLayer, sal_uInt16 nPos)
     107             :     {
     108             :         if(nPos==0xFFFF)
     109             :             aLayer.push_back(pLayer);
     110             :         else
     111             :             aLayer.insert(aLayer.begin() + nPos, pLayer);
     112             :         pLayer->SetModel(pModel);
     113             :         Broadcast();
     114             :     }
     115             :     SdrLayer*            RemoveLayer(sal_uInt16 nPos);
     116             :     // Alle Layer loeschen
     117             :     void               ClearLayer();
     118             :     // Neuer Layer wird angelegt und eingefuegt
     119             :     SdrLayer*          NewLayer(const String& rName, sal_uInt16 nPos=0xFFFF);
     120             :     void               DeleteLayer(SdrLayer* pLayer)
     121             :     {
     122             :         std::vector<SdrLayer*>::iterator it = std::find(aLayer.begin(), aLayer.end(), pLayer);
     123             :         if( it == aLayer.end() )
     124             :             return;
     125             :         aLayer.erase(it);
     126             :         delete pLayer;
     127             :         Broadcast();
     128             :     }
     129             :     // Neuer Layer, Name wird aus der Resource geholt
     130             :     SdrLayer*          NewStandardLayer(sal_uInt16 nPos=0xFFFF);
     131             : 
     132             :     // Iterieren ueber alle Layer
     133           0 :     sal_uInt16             GetLayerCount() const                                         { return sal_uInt16(aLayer.size()); }
     134           0 :     SdrLayer*          GetLayer(sal_uInt16 i)                                            { return aLayer[i]; }
     135           0 :     const SdrLayer*    GetLayer(sal_uInt16 i) const                                      { return aLayer[i]; }
     136             : 
     137             :     sal_uInt16             GetLayerPos(SdrLayer* pLayer) const;
     138             : 
     139          20 :     SdrLayer*          GetLayer(const String& rName, bool bInherited)            { return (SdrLayer*)(((const SdrLayerAdmin*)this)->GetLayer(rName,bInherited)); }
     140             :     const SdrLayer*    GetLayer(const String& rName, bool bInherited) const;
     141             :           SdrLayerID   GetLayerID(const String& rName, bool bInherited) const;
     142           0 :           SdrLayer*    GetLayerPerID(sal_uInt16 nID)                                     { return (SdrLayer*)(((const SdrLayerAdmin*)this)->GetLayerPerID(nID)); }
     143             :     const SdrLayer*    GetLayerPerID(sal_uInt16 nID) const;
     144             : 
     145          20 :     void               SetControlLayerName(const String& rNewName) { aControlLayerName=rNewName; }
     146           0 :     const String&      GetControlLayerName() const                 { return aControlLayerName; }
     147             : };
     148             : 
     149             : /*
     150             : Anmerkung zu den Layer - Gemischt symbolisch/ID-basierendes Interface
     151             :     Einen neuen Layer macht man sich mit:
     152             :       pLayerAdmin->NewLayer("Der neue Layer");
     153             :     Der Layer wird dann automatisch an das Ende der Liste angehaengt.
     154             :     Entsprechdes gilt fuer Layersets gleichermassen.
     155             :     Das Interface am SdrLayerSet basiert auf LayerID's. Die App muss sich
     156             :     dafuer am SdrLayerAdmin eine ID abholen:
     157             :         SdrLayerID nLayerID=pLayerAdmin->GetLayerID("Der neue Layer");
     158             :     Wird der Layer nicht gefunden, so liefert die Methode SDRLAYER_NOTFOUND
     159             :     zurueck. Die Methoden mit ID-Interface fangen diesen Wert jedoch i.d.R
     160             :     sinnvoll ab.
     161             :     Hat man nicht nur den Namen, sondern gar einen SdrLayer*, so kann man
     162             :     sich die ID natuerlich wesentlich schneller direkt vom Layer abholen.
     163             : bInherited:
     164             :     TRUE: Wird der Layer/LayerSet nicht gefunden, so wird im Parent-LayerAdmin
     165             :           nachgesehen, ob es dort einen entsprechende Definition gibt.
     166             :     FALSE: Es wird nur dieser LayerAdmin durchsucht.
     167             :     Jeder LayerAdmin einer Seite hat einen Parent-LayerAdmin, n�mlich den des
     168             :     Model. Das Model selbst hat keinen Parent.
     169             : */
     170             : 
     171             : #endif //_SVDLAYER_HXX
     172             : 
     173             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10