Update ooo320-m1
[ooovba.git] / binfilter / inc / bf_svx / svdlayer.hxx
blob8f82af3ab4e6234186da2b7829c3570282476026
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: svdlayer.hxx,v $
10 * $Revision: 1.6 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _SVDLAYER_HXX
32 #define _SVDLAYER_HXX
34 #ifndef _STRING_HXX //autogen
35 #include <tools/string.hxx>
36 #endif
38 #ifndef _STREAM_HXX //autogen
39 #include <tools/stream.hxx>
40 #endif
42 #ifndef _SVDSOB_HXX //autogen
43 #include <bf_svx/svdsob.hxx>
44 #endif
46 #ifndef _SVDTYPES_HXX
47 #include <bf_svx/svdtypes.hxx> // fuer typedef SdrLayerID
48 #endif
49 namespace binfilter {
51 class SdrModel;
52 class SdrLayerSet;
54 class SdrLayer {
55 friend class SdrLayerSet;
56 friend class SdrLayerAdmin;
57 protected:
58 String aName;
59 SdrModel* pModel; // zum Broadcasten
60 UINT16 nType; // 0=Userdefined,1=Standardlayer
61 SdrLayerID nID;
62 protected:
63 SdrLayer(SdrLayerID nNewID, const String& rNewName) { nID=nNewID; aName=rNewName; nType=0; pModel=NULL; }
64 void SetID(SdrLayerID nNewID) { nID=nNewID; }
65 public:
66 SdrLayer(): pModel(NULL),nType(0),nID(0) {}
67 void SetName(const String& rNewName);
68 const String& GetName() const { return aName; }
69 SdrLayerID GetID() const { return nID; }
70 void SetModel(SdrModel* pNewModel) { pModel=pNewModel; }
71 SdrModel* GetModel() const { return pModel; }
72 // Einem SdrLayer kann man sagen dass er ein (der) Standardlayer sein soll.
73 // Es wird dann laenderspeziefisch der passende Name gesetzt. SetName()
74 // setzt das Flag "StandardLayer" ggf. zurueck auf "Userdefined".
75 FASTBOOL IsStandardLayer() const { return nType==1; }
76 friend SvStream& operator>>(SvStream& rIn, SdrLayer& rLayer);
77 friend SvStream& operator<<(SvStream& rOut, const SdrLayer& rLayer);
80 ////////////////////////////////////////////////////////////////////////////////////////////////////
82 // Der Layerset merkt sich eine Menge von LayerID's.
83 // Wird die ID eines zum Set gehoerigen Layer geaendert, so gehoert
84 // dieser damit nichtmehr zum Set ...
85 // Beim Einblenden eines Layerset in einer View werden alle Member-
86 // Layer sichtbar und alle Excluded-Layer unsichtbat geschaltet.
87 // alle anderen Layer bleiben unberuehrt.
88 class SdrLayerSet {
89 friend class SdrLayerAdmin;
90 friend class SdrView;
91 protected:
92 //SdrLayerAdmin& rAd; // Admin, um Layernamen herauszufinden, ...
93 String aName;
94 SetOfByte aMember;
95 SetOfByte aExclude;
96 SdrModel* pModel; // zum Broadcasten
97 protected:
98 // Broadcasting ueber's Model und setzen des Modified-Flags
99 public:
100 SdrLayerSet(): pModel(NULL) {}
101 SdrLayerSet(const String& rNewName): aName(rNewName), pModel(NULL) {}
102 void SetModel(SdrModel* pNewModel) { pModel=pNewModel; }
103 // void AddAll() { aMember.SetAll(); }
104 // void ExcludeAll() { aExclude.SetAll(); }
105 friend SvStream& operator>>(SvStream& rIn, SdrLayerSet& rSet);
106 friend SvStream& operator<<(SvStream& rOut, const SdrLayerSet& rSet);
109 // Beim Aendern von Layerdaten muss man derzeit
110 // noch selbst das Modify-Flag am Model setzen.
111 #define SDRLAYER_MAXCOUNT 255
112 class SdrLayerAdmin {
113 friend class SdrView;
114 friend class SdrModel;
115 friend class SdrPage;
116 //friend class MyScr; // debug
117 protected:
118 Container aLayer;
119 Container aLSets;
120 SdrLayerAdmin* pParent; // Der Admin der Seite kennt den Admin des Docs
121 SdrModel* pModel; // zum Broadcasten
122 String aControlLayerName;
123 protected:
124 // Eine noch nicht verwendete LayerID raussuchen. Sind bereits alle
125 // verbraucht, so gibt's 'ne 0. Wer sicher gehen will, muss vorher
126 // GetLayerCount()<SDRLAYER_MAXCOUNT abfragen, denn sonst sind alle
127 // vergeben.
128 SdrLayerID GetUniqueLayerID() const;
129 // Broadcasting ueber's Model und setzen des Modified-Flags
130 void Broadcast(FASTBOOL bLayerSet) const;
131 public:
132 SdrLayerAdmin(SdrLayerAdmin* pNewParent=NULL);
133 SdrLayerAdmin(const SdrLayerAdmin& rSrcLayerAdmin);
134 ~SdrLayerAdmin();
135 SdrLayerAdmin* GetParent() const { return pParent; }
136 void SetParent(SdrLayerAdmin* pNewParent) { pParent=pNewParent; }
137 void SetModel(SdrModel* pNewModel);
138 SdrModel* GetModel() const { return pModel; }
139 void InsertLayer(SdrLayer* pLayer, USHORT nPos=0xFFFF) { aLayer.Insert(pLayer,nPos); pLayer->SetModel(pModel); Broadcast(FALSE); }
140 // Alle Layer loeschen
141 void ClearLayer();
142 // Neuer Layer wird angelegt und eingefuegt
143 SdrLayer* NewLayer(const String& rName, USHORT nPos=0xFFFF);
144 void DeleteLayer(SdrLayer* pLayer) { aLayer.Remove(pLayer); delete pLayer; Broadcast(FALSE); }
145 // Neuer Layer, Name wird aus der Resource geholt
147 // Iterieren ueber alle Layer
148 USHORT GetLayerCount() const { return USHORT(aLayer.Count()); }
149 SdrLayer* GetLayer(USHORT i) { return (SdrLayer*)(aLayer.GetObject(i)); }
150 const SdrLayer* GetLayer(USHORT i) const { return (SdrLayer*)(aLayer.GetObject(i)); }
153 SdrLayer* GetLayer(const String& rName, FASTBOOL bInherited) { return (SdrLayer*)(((const SdrLayerAdmin*)this)->GetLayer(rName,bInherited)); }
154 const SdrLayer* GetLayer(const String& rName, FASTBOOL bInherited) const;
155 SdrLayerID GetLayerID(const String& rName, FASTBOOL bInherited) const;
156 SdrLayer* GetLayerPerID(USHORT nID) { return (SdrLayer*)(((const SdrLayerAdmin*)this)->GetLayerPerID(nID)); }
157 const SdrLayer* GetLayerPerID(USHORT nID) const;
159 void InsertLayerSet(SdrLayerSet* pSet, USHORT nPos=0xFFFF) { aLSets.Insert(pSet,nPos); pSet->SetModel(pModel); Broadcast(TRUE); }
160 // Alle LayerSets loeschen
161 void ClearLayerSets();
162 // Neuer Layerset wird angelegt und eingefuegt
163 void DeleteLayerSet(SdrLayerSet* pSet) { aLSets.Remove(pSet); delete pSet; Broadcast(TRUE); }
164 // Iterieren ueber alle LayerSets
165 USHORT GetLayerSetCount() const { return USHORT(aLSets.Count()); }
166 SdrLayerSet* GetLayerSet(USHORT i) { return (SdrLayerSet*)(aLSets.GetObject(i)); }
167 const SdrLayerSet* GetLayerSet(USHORT i) const { return (SdrLayerSet*)(aLSets.GetObject(i)); }
170 void SetControlLayerName(const String& rNewName) { aControlLayerName=rNewName; }
171 const String& GetControlLayerName() const { return aControlLayerName; }
175 Anmerkung zu den Layer - Gemischt symbolisch/ID-basierendes Interface
176 Einen neuen Layer macht man sich mit:
177 pLayerAdmin->NewLayer("Der neue Layer");
178 Der Layer wird dann automatisch an das Ende der Liste angehaengt.
179 Entsprechdes gilt fuer Layersets gleichermassen.
180 Das Interface am SdrLayerSet basiert auf LayerID's. Die App muss sich
181 dafuer am SdrLayerAdmin eine ID abholen:
182 SdrLayerID nLayerID=pLayerAdmin->GetLayerID("Der neue Layer");
183 Wird der Layer nicht gefunden, so liefert die Methode SDRLAYER_NOTFOUND
184 zurueck. Die Methoden mit ID-Interface fangen diesen Wert jedoch i.d.R
185 sinnvoll ab.
186 Hat man nicht nur den Namen, sondern gar einen SdrLayer*, so kann man
187 sich die ID natuerlich wesentlich schneller direkt vom Layer abholen.
188 bInherited:
189 TRUE: Wird der Layer/LayerSet nicht gefunden, so wird im Parent-LayerAdmin
190 nachgesehen, ob es dort einen entsprechende Definition gibt.
191 FALSE: Es wird nur dieser LayerAdmin durchsucht.
192 Jeder LayerAdmin einer Seite hat einen Parent-LayerAdmin, nämlich den des
193 Model. Das Model selbst hat keinen Parent.
196 }//end of namespace binfilter
197 #endif //_SVDLAYER_HXX