1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_SVX_SVDLAYER_HXX
21 #define INCLUDED_SVX_SVDLAYER_HXX
23 #include <tools/stream.hxx>
24 #include <svx/svdsob.hxx>
25 #include <svx/svdtypes.hxx>
26 #include <svx/svxdllapi.h>
31 class SVX_DLLPUBLIC SdrLayer
33 friend class SdrLayerAdmin
;
37 OUString maDescription
;
38 SdrModel
* pModel
; // zum Broadcasten
39 sal_uInt16 nType
; // 0=Userdefined,1=Standardlayer
42 SdrLayer(SdrLayerID nNewID
, const OUString
& rNewName
);
45 bool operator==(const SdrLayer
& rCmpLayer
) const;
46 bool operator!=(const SdrLayer
& rCmpLayer
) const { return !operator==(rCmpLayer
); }
48 void SetName(const OUString
& rNewName
);
49 const OUString
& GetName() const { return maName
; }
51 void SetTitle(const OUString
& rTitle
) { maTitle
= rTitle
; }
52 const OUString
& GetTitle() const { return maTitle
; }
54 void SetDescription(const OUString
& rDesc
) { maDescription
= rDesc
; }
55 const OUString
& GetDescription() const { return maDescription
; }
57 SdrLayerID
GetID() const { return nID
; }
58 void SetModel(SdrModel
* pNewModel
) { pModel
=pNewModel
; }
59 SdrModel
* GetModel() const { return pModel
; }
60 // Einem SdrLayer kann man sagen dass er ein (der) Standardlayer sein soll.
61 // Es wird dann laenderspeziefisch der passende Name gesetzt. SetName()
62 // setzt das Flag "StandardLayer" ggf. zurueck auf "Userdefined".
63 void SetStandardLayer(bool bStd
= true);
64 bool IsStandardLayer() const { return nType
==1; }
67 // Beim Aendern von Layerdaten muss man derzeit
68 // noch selbst das Modify-Flag am Model setzen.
69 #define SDRLAYER_MAXCOUNT 255
70 class SVX_DLLPUBLIC SdrLayerAdmin
{
72 friend class SdrModel
;
76 std::vector
<SdrLayer
*> aLayer
;
77 SdrLayerAdmin
* pParent
; // Der Admin der Seite kennt den Admin des Docs
78 SdrModel
* pModel
; // zum Broadcasten
79 OUString maControlLayerName
;
81 // Eine noch nicht verwendete LayerID raussuchen. Sind bereits alle
82 // verbraucht, so gibt's 'ne 0. Wer sicher gehen will, muss vorher
83 // GetLayerCount()<SDRLAYER_MAXCOUNT abfragen, denn sonst sind alle
85 SdrLayerID
GetUniqueLayerID() const;
86 void Broadcast() const;
88 explicit SdrLayerAdmin(SdrLayerAdmin
* pNewParent
=NULL
);
89 SdrLayerAdmin(const SdrLayerAdmin
& rSrcLayerAdmin
);
91 const SdrLayerAdmin
& operator=(const SdrLayerAdmin
& rSrcLayerAdmin
);
92 bool operator==(const SdrLayerAdmin
& rCmpLayerAdmin
) const;
93 bool operator!=(const SdrLayerAdmin
& rCmpLayerAdmin
) const { return !operator==(rCmpLayerAdmin
); }
94 SdrLayerAdmin
* GetParent() const { return pParent
; }
95 void SetParent(SdrLayerAdmin
* pNewParent
) { pParent
=pNewParent
; }
96 void SetModel(SdrModel
* pNewModel
);
97 SdrModel
* GetModel() const { return pModel
; }
98 void InsertLayer(SdrLayer
* pLayer
)
100 aLayer
.push_back(pLayer
);
101 pLayer
->SetModel(pModel
);
104 void InsertLayer(SdrLayer
* pLayer
, sal_uInt16 nPos
)
107 aLayer
.push_back(pLayer
);
109 aLayer
.insert(aLayer
.begin() + nPos
, pLayer
);
110 pLayer
->SetModel(pModel
);
113 SdrLayer
* RemoveLayer(sal_uInt16 nPos
);
114 // Alle Layer loeschen
116 // Neuer Layer wird angelegt und eingefuegt
117 SdrLayer
* NewLayer(const OUString
& rName
, sal_uInt16 nPos
=0xFFFF);
118 void DeleteLayer(SdrLayer
* pLayer
)
120 std::vector
<SdrLayer
*>::iterator it
= std::find(aLayer
.begin(), aLayer
.end(), pLayer
);
121 if( it
== aLayer
.end() )
127 // Neuer Layer, Name wird aus der Resource geholt
128 SdrLayer
* NewStandardLayer(sal_uInt16 nPos
=0xFFFF);
130 // Iterieren ueber alle Layer
131 sal_uInt16
GetLayerCount() const { return sal_uInt16(aLayer
.size()); }
132 SdrLayer
* GetLayer(sal_uInt16 i
) { return aLayer
[i
]; }
133 const SdrLayer
* GetLayer(sal_uInt16 i
) const { return aLayer
[i
]; }
135 sal_uInt16
GetLayerPos(SdrLayer
* pLayer
) const;
137 SdrLayer
* GetLayer(const OUString
& rName
, bool bInherited
);
138 const SdrLayer
* GetLayer(const OUString
& rName
, bool bInherited
) const;
139 SdrLayerID
GetLayerID(const OUString
& rName
, bool bInherited
) const;
140 SdrLayer
* GetLayerPerID(sal_uInt16 nID
) { return const_cast<SdrLayer
*>(((const SdrLayerAdmin
*)this)->GetLayerPerID(nID
)); }
141 const SdrLayer
* GetLayerPerID(sal_uInt16 nID
) const;
143 void SetControlLayerName(const OUString
& rNewName
);
144 const OUString
& GetControlLayerName() const { return maControlLayerName
; }
148 Anmerkung zu den Layer - Gemischt symbolisch/ID-basierendes Interface
149 Einen neuen Layer macht man sich mit:
150 pLayerAdmin->NewLayer("Der neue Layer");
151 Der Layer wird dann automatisch an das Ende der Liste angehaengt.
152 Entsprechdes gilt fuer Layersets gleichermassen.
153 Das Interface am SdrLayerSet basiert auf LayerID's. Die App muss sich
154 dafuer am SdrLayerAdmin eine ID abholen:
155 SdrLayerID nLayerID=pLayerAdmin->GetLayerID("Der neue Layer");
156 Wird der Layer nicht gefunden, so liefert die Methode SDRLAYER_NOTFOUND
157 zurueck. Die Methoden mit ID-Interface fangen diesen Wert jedoch i.d.R
159 Hat man nicht nur den Namen, sondern gar einen SdrLayer*, so kann man
160 sich die ID natuerlich wesentlich schneller direkt vom Layer abholen.
162 TRUE: Wird der Layer/LayerSet nicht gefunden, so wird im Parent-LayerAdmin
163 nachgesehen, ob es dort einen entsprechende Definition gibt.
164 FALSE: Es wird nur dieser LayerAdmin durchsucht.
165 Jeder LayerAdmin einer Seite hat einen Parent-LayerAdmin, n?mlich den des
166 Model. Das Model selbst hat keinen Parent.
169 #endif // INCLUDED_SVX_SVDLAYER_HXX
171 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */