xref: /aoo42x/main/sw/inc/fmtcol.hxx (revision 28f5a95a)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _FMTCOL_HXX
24 #define _FMTCOL_HXX
25 
26 #include <svl/svarray.hxx>
27 #include "swdllapi.h"
28 #include <format.hxx>
29 #include <swtypes.hxx>		// fuer MAXLEVEL
30 
31 class SwDoc;		// fuer friend
32 
33 class SwFmtColl : public SwFmt
34 {
35 protected:
SwFmtColl(SwAttrPool & rPool,const sal_Char * pFmtName,const sal_uInt16 * pWhichRanges,SwFmtColl * pDerFrom,sal_uInt16 nFmtWhich)36 	SwFmtColl( SwAttrPool& rPool, const sal_Char* pFmtName,
37 				const sal_uInt16* pWhichRanges, SwFmtColl* pDerFrom,
38 				sal_uInt16 nFmtWhich )
39 	  	: SwFmt( rPool, pFmtName, pWhichRanges, pDerFrom, nFmtWhich )
40 	{ SetAuto( sal_False ); }
41 
SwFmtColl(SwAttrPool & rPool,const String & rFmtName,const sal_uInt16 * pWhichRanges,SwFmtColl * pDerFrom,sal_uInt16 nFmtWhich)42 	SwFmtColl( SwAttrPool& rPool, const String &rFmtName,
43 				const sal_uInt16* pWhichRanges, SwFmtColl* pDerFrom,
44 				sal_uInt16 nFmtWhich )
45 	  	: SwFmt( rPool, rFmtName, pWhichRanges, pDerFrom, nFmtWhich )
46 	{ SetAuto( sal_False ); }
47 
48 
49 private:
50 	// erstmal wird nicht kopiert und nicht zugewiesen
51 	SwFmtColl(const SwFmtColl & );
52 	const SwFmtColl &operator=(const SwFmtColl &);
53 };
54 
55 
56 class SW_DLLPUBLIC SwTxtFmtColl: public SwFmtColl
57 {
58 	friend class SwDoc;
59 
60     SwTxtFmtColl(const SwTxtFmtColl & rRef);
61 
62     // --> OD 2007-01-24 #i73790#
63     bool mbStayAssignedToListLevelOfOutlineStyle;
64     // <--
65 
66 protected:
67 	//sal_uInt8 nOutlineLevel;		 //<-#outline level, removed by zhaojianwei
68 	bool mbAssignedToOutlineStyle;//<-#outline level added by zhaojianwei
69 
70 	SwTxtFmtColl *pNextTxtFmtColl;
71 
SwTxtFmtColl(SwAttrPool & rPool,const sal_Char * pFmtCollName,SwTxtFmtColl * pDerFrom=0,sal_uInt16 nFmtWh=RES_TXTFMTCOLL)72     SwTxtFmtColl(
73         SwAttrPool& rPool,
74         const sal_Char* pFmtCollName,
75         SwTxtFmtColl* pDerFrom = 0,
76         sal_uInt16 nFmtWh = RES_TXTFMTCOLL )
77         : SwFmtColl( rPool, pFmtCollName, aTxtFmtCollSetRange
78         , pDerFrom, nFmtWh )
79 	    , mbStayAssignedToListLevelOfOutlineStyle( false )
80 	    , mbAssignedToOutlineStyle( false )
81     {
82         pNextTxtFmtColl = this;
83     }
84 
SwTxtFmtColl(SwAttrPool & rPool,const String & rFmtCollName,SwTxtFmtColl * pDerFrom=0,sal_uInt16 nFmtWh=RES_TXTFMTCOLL)85     SwTxtFmtColl(
86         SwAttrPool& rPool,
87         const String &rFmtCollName,
88         SwTxtFmtColl* pDerFrom = 0,
89         sal_uInt16 nFmtWh = RES_TXTFMTCOLL )
90         : SwFmtColl( rPool, rFmtCollName, aTxtFmtCollSetRange
91         , pDerFrom, nFmtWh )
92         , mbStayAssignedToListLevelOfOutlineStyle( false )
93         , mbAssignedToOutlineStyle( false )
94     {
95         pNextTxtFmtColl = this;
96     }
97 
98 	// zum "abfischen" von UL-/LR-/FontHeight Aenderungen
99    virtual void Modify( const SfxPoolItem*, const SfxPoolItem* );
100 
101 public:
102 
103 	TYPEINFO();		//Bereits in Basisklasse Client drin.
104 
105 	inline void SetNextTxtFmtColl(SwTxtFmtColl& rNext);
GetNextTxtFmtColl() const106 	SwTxtFmtColl& GetNextTxtFmtColl() const { return *pNextTxtFmtColl; }
107 
108 	sal_Bool IsAtDocNodeSet() const;
109 
110     void SetAttrOutlineLevel( int );
111     int GetAttrOutlineLevel() const;
112 
113     // Return the list level of the Outline Style - the List Style for the outline numbering -
114     // to which the Paragraph Style is assigned.
115     int GetAssignedOutlineStyleLevel() const;
116 
IsAssignedToListLevelOfOutlineStyle() const117     inline bool IsAssignedToListLevelOfOutlineStyle() const
118     {
119         return mbAssignedToOutlineStyle;
120     }
121 
122     // If a Paragraph Style is assigned to list level N of the Outline Style,
123     // then its outline level - AttrOutlineLevel - is set to N+1
124     void AssignToListLevelOfOutlineStyle(const int nAssignedListLevel);
125 
126 	void DeleteAssignmentToListLevelOfOutlineStyle( const bool bResetOutlineLevel = true );
127 
128     // override to recognize changes on the <SwNumRuleItem> and register/unregister
129     // the paragragh style at the corresponding <SwNumRule> instance
130     virtual sal_Bool SetFmtAttr( const SfxPoolItem& rAttr );
131     virtual sal_Bool SetFmtAttr( const SfxItemSet& rSet );
132     virtual sal_Bool ResetFmtAttr( sal_uInt16 nWhich1, sal_uInt16 nWhich2 = 0 );
133 
134     // override <ResetAllFmtAttr()> to stay assigned to list level of outline style
135     virtual sal_uInt16 ResetAllFmtAttr();
136 
StayAssignedToListLevelOfOutlineStyle() const137     inline bool StayAssignedToListLevelOfOutlineStyle() const
138     {
139         return mbStayAssignedToListLevelOfOutlineStyle;
140     }
141     // <--
142 
143     // --> OD 2008-02-13 #newlistleveattrs#
144     bool AreListLevelIndentsApplicable() const;
145     // <--
146 
147 /*----------------- JP 09.08.94 17:36 -------------------
148  wird die Funktionalitaet von Zeichenvorlagen an Absatzvorlagen
149  ueberhaupt benoetigt ??
150 
151  Wenn, ja dann muessen im TextNode und hier in der TxtCollection ein 2.
152  Attset fuer die Char-Attribute angelegt werden; damit die Vererbung
153  und der Zugriff auf die gesetzen Attribute richtig funktioniert!!
154 
155 	virtual sal_Bool SetDerivedFrom( SwFmtColl* pDerFrom = 0 );
156 
157 	inline SwCharFmt* GetCharFmt() const;
158 	inline sal_Bool IsCharFmtSet() const;
159 	void SetCharFmt(SwCharFmt *);
160 	void ResetCharFmt();
161 inline sal_Bool SwTxtFmtColl::IsCharFmtSet() const
162 {
163 	return aCharDepend.GetRegisteredIn() ? sal_True : sal_False;
164 }
165 inline SwCharFmt* SwTxtFmtColl::GetCharFmt() const
166 {
167 	return (SwCharFmt*)aCharDepend.GetRegisteredIn();
168 }
169 --------------------------------------------------*/
170 };
171 
172 typedef SwTxtFmtColl* SwTxtFmtCollPtr;
173 SV_DECL_PTRARR(SwTxtFmtColls,SwTxtFmtCollPtr,2,4)
174 
175 
176 class SwGrfFmtColl: public SwFmtColl
177 {
178 	friend class SwDoc;
179 protected:
SwGrfFmtColl(SwAttrPool & rPool,const sal_Char * pFmtCollName,SwGrfFmtColl * pDerFrom=0)180 	SwGrfFmtColl( SwAttrPool& rPool, const sal_Char* pFmtCollName,
181 					SwGrfFmtColl* pDerFrom = 0 )
182 		: SwFmtColl( rPool, pFmtCollName, aGrfFmtCollSetRange,
183 					pDerFrom, RES_GRFFMTCOLL )
184 	{}
185 
SwGrfFmtColl(SwAttrPool & rPool,const String & rFmtCollName,SwGrfFmtColl * pDerFrom=0)186 	SwGrfFmtColl( SwAttrPool& rPool, const String &rFmtCollName,
187 					SwGrfFmtColl* pDerFrom = 0 )
188 		: SwFmtColl( rPool, rFmtCollName, aGrfFmtCollSetRange,
189 					pDerFrom, RES_GRFFMTCOLL )
190 	{}
191 
192 public:
193 	TYPEINFO();		//Bereits in Basisklasse Client drin.
194 };
195 
196 typedef SwGrfFmtColl* SwGrfFmtCollPtr;
197 SV_DECL_PTRARR(SwGrfFmtColls,SwGrfFmtCollPtr,2,4)
198 
199 
200 
201 //FEATURE::CONDCOLL
202 // --------- Bedingte Vorlagen -------------------------------
203 
204 enum Master_CollConditions
205 {
206 	PARA_IN_LIST		= 0x0001,
207 	PARA_IN_OUTLINE		= 0x0002,
208 	PARA_IN_FRAME		= 0x0004,
209 	PARA_IN_TABLEHEAD	= 0x0008,
210 	PARA_IN_TABLEBODY	= 0x0010,
211 	PARA_IN_SECTION		= 0x0020,
212 	PARA_IN_FOOTENOTE 	= 0x0040,
213 	PARA_IN_FOOTER 		= 0x0080,
214 	PARA_IN_HEADER 		= 0x0100,
215 	PARA_IN_ENDNOTE 	= 0x0200,
216 	// ...
217 	USRFLD_EXPRESSION	= (int)0x8000
218 };
219 
220 
221 class SW_DLLPUBLIC SwCollCondition : public SwClient
222 {
223 	sal_uLong nCondition;
224 	union
225 	{
226 		sal_uLong nSubCondition;
227 		String* pFldExpression;
228 	} aSubCondition;
229 
230 public:
231 	TYPEINFO();		//Bereits in Basisklasse Client drin.
232 
233 
234 	SwCollCondition( SwTxtFmtColl* pColl, sal_uLong nMasterCond,
235 					sal_uLong nSubCond = 0 );
236 	SwCollCondition( SwTxtFmtColl* pColl, sal_uLong nMasterCond,
237 					const String& rSubExp );
238 	virtual ~SwCollCondition();
239 
240 	// @@@ public copy ctor, but no copy assignment?
241 	SwCollCondition( const SwCollCondition& rCpy );
242 private:
243 	// @@@ public copy ctor, but no copy assignment?
244 	SwCollCondition & operator= (const SwCollCondition &);
245 public:
246 
247 	int operator==( const SwCollCondition& rCmp ) const;
operator !=(const SwCollCondition & rCmp) const248 	int operator!=( const SwCollCondition& rCmp ) const
249 							{ return ! (*this == rCmp); }
250 
GetCondition() const251 	sal_uLong GetCondition() const 		{ return nCondition; }
GetSubCondition() const252 	sal_uLong GetSubCondition() const	{ return aSubCondition.nSubCondition; }
GetFldExpression() const253 	const String* GetFldExpression() const
254 									{ return aSubCondition.pFldExpression; }
255 
256 	void SetCondition( sal_uLong nCond, sal_uLong nSubCond );
GetTxtFmtColl() const257 	SwTxtFmtColl* GetTxtFmtColl() const 	{ return (SwTxtFmtColl*)GetRegisteredIn(); }
258     void RegisterToFormat( SwFmt& );
259 };
260 
261 
262 typedef SwCollCondition* SwCollConditionPtr;
263 SV_DECL_PTRARR_DEL( SwFmtCollConditions, SwCollConditionPtr, 0, 5 )
264 
265 class SW_DLLPUBLIC SwConditionTxtFmtColl : public SwTxtFmtColl
266 {
267 	friend class SwDoc;
268 protected:
269 	SwFmtCollConditions aCondColls;
270 
SwConditionTxtFmtColl(SwAttrPool & rPool,const sal_Char * pFmtCollName,SwTxtFmtColl * pDerFrom=0)271 	SwConditionTxtFmtColl( SwAttrPool& rPool, const sal_Char* pFmtCollName,
272 							SwTxtFmtColl* pDerFrom = 0 )
273 		: SwTxtFmtColl( rPool, pFmtCollName, pDerFrom, RES_CONDTXTFMTCOLL )
274 	{}
SwConditionTxtFmtColl(SwAttrPool & rPool,const String & rFmtCollName,SwTxtFmtColl * pDerFrom=0)275 	SwConditionTxtFmtColl( SwAttrPool& rPool, const String &rFmtCollName,
276 							SwTxtFmtColl* pDerFrom = 0 )
277 		: SwTxtFmtColl( rPool, rFmtCollName, pDerFrom, RES_CONDTXTFMTCOLL )
278 	{}
279 
280 public:
281 	TYPEINFO();		//Bereits in Basisklasse Client drin.
282 
283 	virtual ~SwConditionTxtFmtColl();
284 
285 	const SwCollCondition* HasCondition( const SwCollCondition& rCond ) const;
GetCondColls() const286 	const SwFmtCollConditions& GetCondColls() const		{ return aCondColls; }
287 	void InsertCondition( const SwCollCondition& rCond );
288 	sal_Bool RemoveCondition( const SwCollCondition& rCond );
289 
290 	void SetConditions( const SwFmtCollConditions& );
291 };
292 
293 //FEATURE::CONDCOLL
294 
295 // ------------- Inline Implementierungen --------------------
296 
SetNextTxtFmtColl(SwTxtFmtColl & rNext)297 inline void SwTxtFmtColl::SetNextTxtFmtColl( SwTxtFmtColl& rNext )
298 {
299 	pNextTxtFmtColl = &rNext;
300 }
301 #endif
302 
303