xref: /aoo42x/main/sw/inc/format.hxx (revision 1d2dbeb0)
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 _FORMAT_HXX
24 #define _FORMAT_HXX
25 
26 #include <tools/solar.h>
27 #include "swdllapi.h"
28 #include <errhdl.hxx>		// fuer ASSERT
29 #include <swatrset.hxx>		// fuer SfxItemPool/-Set, Attr forward decl.
30 #include <calbck.hxx>		// fuer SwModify
31 #include <hintids.hxx>
32 
33 class IDocumentSettingAccess;
34 class IDocumentDrawModelAccess;
35 class IDocumentLayoutAccess;
36 class IDocumentTimerAccess;
37 class IDocumentFieldsAccess;
38 class IDocumentChartDataProviderAccess;
39 class SwDoc;
40 
41 class SW_DLLPUBLIC SwFmt : public SwModify
42 {
43 	String aFmtName;
44 	SwAttrSet aSet;
45 
46 	sal_uInt16 nWhichId;
47 	sal_uInt16 nFmtId;			// Format-ID fuer Lesen/Schreiben
48 	sal_uInt16 nPoolFmtId;		// Id-fuer "automatich" erzeugte Formate
49 							// (ist keine harte Attributierung !!)
50 	sal_uInt16 nPoolHelpId;		// HelpId fuer diese Pool-Vorlage
51 	sal_uInt8 nPoolHlpFileId; 	// FilePos ans Doc auf die Vorlagen-Hilfen
52 	sal_Bool   bWritten : 1;	// sal_True: bereits geschrieben
53 	sal_Bool   bAutoFmt : 1;	// sal_False: es handelt sich um eine Vorlage
54 							// ist dflt immer auf sal_True !
55 	sal_Bool   bFmtInDTOR : 1;	// sal_True: das Format wird geloscht. Damit man in
56 							// der FmtChg-Message das erkennen kann!!!
57 	sal_Bool   bAutoUpdateFmt : 1;	// sal_True: am Format werden die Attribute
58 							// eines kompletten Absatzes gesetzt (UI-seitig!)
59 
60 protected:
61 	SwFmt( SwAttrPool& rPool, const sal_Char* pFmtNm,
62 			const sal_uInt16* pWhichRanges, SwFmt *pDrvdFrm, sal_uInt16 nFmtWhich );
63 	SwFmt( SwAttrPool& rPool, const String &rFmtNm, const sal_uInt16* pWhichRanges,
64 			SwFmt *pDrvdFrm, sal_uInt16 nFmtWhich );
65 	SwFmt( const SwFmt& rFmt );
66    virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNewValue );
67 
68 public:
69 	TYPEINFO();		//Bereits in Basisklasse Client drin.
70 
71 	virtual ~SwFmt();
72 	SwFmt &operator=(const SwFmt&);
73 
74 	// fuer die Abfrage der Writer-Funktionen
75 	sal_uInt16 Which() const { return nWhichId; }
76 
77 		// erfrage vom Format Informationen
78 	virtual sal_Bool GetInfo( SfxPoolItem& ) const;
79 
80 	// kopiere Attribute; auch ueber Dokumentgrenzen hinweg
81 	void CopyAttrs( const SwFmt&, sal_Bool bReplace=sal_True );
82 
83 	// loesche alle Attribute, die nicht in rFmt stehen
84 	void DelDiffs( const SfxItemSet& rSet );
85 	void DelDiffs( const SwFmt& rFmt ) { DelDiffs( rFmt.GetAttrSet() ); }
86 
87 	// Umhaengen des Formats (0 = Default)
88 	sal_Bool SetDerivedFrom(SwFmt *pDerivedFrom = 0);
89 
90 	// Ist bInParents sal_False,
91 	// wird nur in diesem Format nach dem Attribut gesucht.
92     inline const SfxPoolItem& GetFmtAttr( sal_uInt16 nWhich,
93                                           sal_Bool bInParents = sal_True ) const;
94 	inline SfxItemState GetItemState( sal_uInt16 nWhich, sal_Bool bSrchInParent = sal_True,
95 									const SfxPoolItem **ppItem = 0 ) const;
96     // --> OD 2008-03-03 #refactorlists#
97     // methods renamed and made virtual
98     virtual sal_Bool SetFmtAttr( const SfxPoolItem& rAttr );
99     virtual sal_Bool SetFmtAttr( const SfxItemSet& rSet );
100     virtual sal_Bool ResetFmtAttr( sal_uInt16 nWhich1, sal_uInt16 nWhich2 = 0 );
101     // <--
102 
103     // --> OD 2007-01-24 #i73790#
104     // Method renamed and made virtual
105     // Nimmt alle Hints aus dem Delta-Array,
106     // liefert die Anzahl der geloeschten Hints
107     virtual sal_uInt16 ResetAllFmtAttr();
108     // <--
109 
110 	inline SwFmt* DerivedFrom() const { return (SwFmt*)GetRegisteredIn(); }
111 	inline sal_Bool IsDefault() const { return DerivedFrom() == 0; }
112 
113 	inline const String& GetName() const 		{ return aFmtName; }
114 	void SetName( const String& rNewName, sal_Bool bBroadcast=sal_False );
115 	inline void SetName( const sal_Char* pNewName,
116 						 sal_Bool bBroadcast=sal_False);
117 
118 	// zur Abfrage des Attribute Arrays
119 	inline const SwAttrSet& GetAttrSet() const { return aSet; }
120 
121 	// Das Doc wird jetzt am SwAttrPool gesetzt. Dadurch hat man es immer
122 	// im Zugriff.
123 	const SwDoc *GetDoc() const			{ return aSet.GetDoc(); }
124 		  SwDoc *GetDoc() 				{ return aSet.GetDoc(); }
125 
126     /** Provides access to the document settings interface
127      */
128     const IDocumentSettingAccess* getIDocumentSettingAccess() const;
129 
130     /** Provides access to the document draw model interface
131      */
132     const IDocumentDrawModelAccess* getIDocumentDrawModelAccess() const;
133           IDocumentDrawModelAccess* getIDocumentDrawModelAccess();
134 
135     /** Provides access to the document layout interface
136      */
137     const IDocumentLayoutAccess* getIDocumentLayoutAccess() const;
138           IDocumentLayoutAccess* getIDocumentLayoutAccess();
139 
140      /** Provides access to the document idle timer interface
141      */
142     IDocumentTimerAccess* getIDocumentTimerAccess();
143 
144      /** Provides access to the document idle timer interface
145      */
146     IDocumentFieldsAccess* getIDocumentFieldsAccess();
147 
148      /** gives access to the chart data-provider
149      */
150     IDocumentChartDataProviderAccess* getIDocumentChartDataProviderAccess();
151 
152     // erfragen und setzen der Poolvorlagen-Id's
153 	sal_uInt16 GetPoolFmtId() const { return nPoolFmtId; }
154 	void SetPoolFmtId( sal_uInt16 nId ) { nPoolFmtId = nId; }
155 
156 	// erfragen und setzen der Hilfe-Id's fuer die Document-Vorlagen
157 	sal_uInt16 GetPoolHelpId() const { return nPoolHelpId; }
158 	void SetPoolHelpId( sal_uInt16 nId ) { nPoolHelpId = nId; }
159 	sal_uInt8 GetPoolHlpFileId() const { return nPoolHlpFileId; }
160 	void SetPoolHlpFileId( sal_uInt8 nId ) { nPoolHlpFileId = nId; }
161 	// erfrage die Attribut-Beschreibung, returnt den reingereichten String
162 	void GetPresentation( SfxItemPresentation ePres,
163 		SfxMapUnit eCoreMetric,	SfxMapUnit ePresMetric,	String &rText ) const
164 		{ aSet.GetPresentation( ePres, eCoreMetric,	ePresMetric, rText ); }
165 	// Das Format-ID fuer Lesen/Schreiben:
166     void   ResetWritten()    { bWritten = sal_False; }
167 
168 	// Abfragen/Setzen vom AutoFmt-Flag
169 	sal_Bool IsAuto() const 				{ return bAutoFmt; }
170 	void SetAuto( sal_Bool bNew = sal_False )	{ bAutoFmt = bNew; }
171 
172 	// Abfragen/Setzen vom bAutoUpdateFmt-Flag
173 	sal_Bool IsAutoUpdateFmt() const 				{ return bAutoUpdateFmt; }
174 	void SetAutoUpdateFmt( sal_Bool bNew = sal_True )	{ bAutoUpdateFmt = bNew; }
175 
176 	sal_Bool IsFmtInDTOR() const { return bFmtInDTOR; }
177 
178     // GetMethoden: das Bool gibt an, ob nur im Set (sal_False) oder auch in
179 	//				den Parents gesucht werden soll. Wird nichts gefunden,
180 	//				wird das deflt. Attribut returnt.
181 	// Charakter-Attribute	- impl. steht im charatr.hxx
182 	// AMA 12.10.94: Umstellung von SwFmt... auf Svx...
183 	inline const SvxPostureItem      &GetPosture( sal_Bool = sal_True ) const;
184 	inline const SvxWeightItem       &GetWeight( sal_Bool = sal_True ) const;
185 	inline const SvxShadowedItem     &GetShadowed( sal_Bool = sal_True ) const;
186 	inline const SvxAutoKernItem     &GetAutoKern( sal_Bool = sal_True ) const;
187 	inline const SvxWordLineModeItem &GetWordLineMode( sal_Bool = sal_True ) const;
188 	inline const SvxContourItem      &GetContour( sal_Bool = sal_True ) const;
189 	inline const SvxKerningItem      &GetKerning( sal_Bool = sal_True ) const;
190 	inline const SvxUnderlineItem    &GetUnderline( sal_Bool = sal_True ) const;
191 	inline const SvxOverlineItem     &GetOverline( sal_Bool = sal_True ) const;
192 	inline const SvxCrossedOutItem   &GetCrossedOut( sal_Bool = sal_True ) const;
193 	inline const SvxFontHeightItem   &GetSize( sal_Bool = sal_True ) const;
194 	inline const SvxPropSizeItem     &GetPropSize( sal_Bool = sal_True ) const;
195     inline const SvxFontItem         &GetFont( sal_Bool = sal_True ) const;
196 	inline const SvxColorItem        &GetColor( sal_Bool = sal_True ) const;
197 	inline const SvxCharSetColorItem &GetCharSetColor( sal_Bool = sal_True ) const;
198 	inline const SvxLanguageItem     &GetLanguage( sal_Bool = sal_True ) const;
199 	inline const SvxEscapementItem   &GetEscapement( sal_Bool = sal_True ) const;
200 	inline const SvxCaseMapItem      &GetCaseMap( sal_Bool = sal_True ) const;
201 	inline const SvxNoHyphenItem     &GetNoHyphenHere( sal_Bool = sal_True ) const;
202 	inline const SvxBlinkItem		 &GetBlink( sal_Bool = sal_True ) const;
203 	inline const SvxBrushItem	 	 &GetChrBackground( sal_Bool = sal_True ) const;
204 
205     inline const SvxFontItem         &GetCJKFont( sal_Bool = sal_True ) const;
206     inline const SvxFontHeightItem   &GetCJKSize( sal_Bool = sal_True ) const;
207     inline const SvxLanguageItem     &GetCJKLanguage( sal_Bool = sal_True ) const;
208     inline const SvxPostureItem      &GetCJKPosture( sal_Bool = sal_True ) const;
209     inline const SvxWeightItem       &GetCJKWeight( sal_Bool = sal_True ) const;
210     inline const SvxFontItem         &GetCTLFont( sal_Bool = sal_True ) const;
211     inline const SvxFontHeightItem   &GetCTLSize( sal_Bool = sal_True ) const;
212     inline const SvxLanguageItem     &GetCTLLanguage( sal_Bool = sal_True ) const;
213     inline const SvxPostureItem      &GetCTLPosture( sal_Bool = sal_True ) const;
214     inline const SvxWeightItem       &GetCTLWeight( sal_Bool = sal_True ) const;
215     inline const SfxBoolItem           &GetWritingDirection( sal_Bool = sal_True ) const;
216     inline const SvxEmphasisMarkItem &GetEmphasisMark( sal_Bool = sal_True ) const;
217     inline const SvxTwoLinesItem   &Get2Lines( sal_Bool = sal_True ) const;
218     inline const SvxCharScaleWidthItem &GetCharScaleW( sal_Bool = sal_True ) const;
219     inline const SvxCharRotateItem     &GetCharRotate( sal_Bool = sal_True ) const;
220     inline const SvxCharReliefItem     &GetCharRelief( sal_Bool = sal_True ) const;
221     inline const SvxCharHiddenItem   &GetCharHidden( sal_Bool = sal_True ) const;
222 
223 	// Frame-Attribute	- impl. steht im frmatr.hxx,
224     inline const SwFmtFillOrder           &GetFillOrder( sal_Bool = sal_True ) const;
225     inline const SwFmtFrmSize             &GetFrmSize( sal_Bool = sal_True ) const;
226     inline const SwFmtHeader          &GetHeader( sal_Bool = sal_True ) const;
227     inline const SwFmtFooter          &GetFooter( sal_Bool = sal_True ) const;
228     inline const SwFmtSurround            &GetSurround( sal_Bool = sal_True ) const;
229     inline const SwFmtHoriOrient      &GetHoriOrient( sal_Bool = sal_True ) const;
230     inline const SwFmtAnchor          &GetAnchor( sal_Bool = sal_True ) const;
231     inline const SwFmtCol                 &GetCol( sal_Bool = sal_True ) const;
232     inline const SvxPaperBinItem      &GetPaperBin( sal_Bool = sal_True ) const;
233     inline const SvxLRSpaceItem           &GetLRSpace( sal_Bool = sal_True ) const;
234     inline const SvxULSpaceItem           &GetULSpace( sal_Bool = sal_True ) const;
235     inline const SwFmtCntnt           &GetCntnt( sal_Bool = sal_True ) const;
236     inline const SvxPrintItem             &GetPrint( sal_Bool = sal_True ) const;
237     inline const SvxOpaqueItem            &GetOpaque( sal_Bool = sal_True ) const;
238     inline const SvxProtectItem           &GetProtect( sal_Bool = sal_True ) const;
239     inline const SwFmtVertOrient      &GetVertOrient( sal_Bool = sal_True ) const;
240     inline const SvxBoxItem               &GetBox( sal_Bool = sal_True ) const;
241     inline const SvxFmtKeepItem         &GetKeep( sal_Bool = sal_True ) const;
242     inline const SvxBrushItem           &GetBackground( sal_Bool = sal_True ) const;
243     inline const SvxShadowItem            &GetShadow( sal_Bool = sal_True ) const;
244     inline const SwFmtPageDesc            &GetPageDesc( sal_Bool = sal_True ) const;
245     inline const SvxFmtBreakItem      &GetBreak( sal_Bool = sal_True ) const;
246     inline const SvxMacroItem             &GetMacro( sal_Bool = sal_True ) const;
247     inline const SwFmtURL             &GetURL( sal_Bool = sal_True ) const;
248     inline const SwFmtEditInReadonly  &GetEditInReadonly( sal_Bool = sal_True ) const;
249     inline const SwFmtLayoutSplit     &GetLayoutSplit( sal_Bool = sal_True ) const;
250     inline const SwFmtRowSplit          &GetRowSplit( sal_Bool = sal_True ) const;
251     inline const SwFmtChain               &GetChain( sal_Bool = sal_True ) const;
252     inline const SwFmtLineNumber      &GetLineNumber( sal_Bool = sal_True ) const;
253     inline const SwFmtFtnAtTxtEnd     &GetFtnAtTxtEnd( sal_Bool = sal_True ) const;
254     inline const SwFmtEndAtTxtEnd     &GetEndAtTxtEnd( sal_Bool = sal_True ) const;
255     inline const SwFmtNoBalancedColumns &GetBalancedColumns( sal_Bool = sal_True ) const;
256     inline const SvxFrameDirectionItem    &GetFrmDir( sal_Bool = sal_True ) const;
257     inline const SwTextGridItem         &GetTextGrid( sal_Bool = sal_True ) const;
258     inline const SwHeaderAndFooterEatSpacingItem &GetHeaderAndFooterEatSpacing( sal_Bool = sal_True ) const;
259     // OD 18.09.2003 #i18732#
260     inline const SwFmtFollowTextFlow    &GetFollowTextFlow(sal_Bool = sal_True) const;
261     // OD 2004-05-05 #i28701#
262     inline const SwFmtWrapInfluenceOnObjPos& GetWrapInfluenceOnObjPos(sal_Bool = sal_True) const;
263 
264 	// Grafik-Attribute	- impl. steht im grfatr.hxx
265     inline const SwMirrorGrf          &GetMirrorGrf( sal_Bool = sal_True ) const;
266     inline const SwCropGrf            &GetCropGrf( sal_Bool = sal_True ) const;
267     inline const SwRotationGrf            &GetRotationGrf(sal_Bool = sal_True ) const;
268     inline const SwLuminanceGrf       &GetLuminanceGrf(sal_Bool = sal_True ) const;
269     inline const SwContrastGrf            &GetContrastGrf(sal_Bool = sal_True ) const;
270     inline const SwChannelRGrf            &GetChannelRGrf(sal_Bool = sal_True ) const;
271     inline const SwChannelGGrf            &GetChannelGGrf(sal_Bool = sal_True ) const;
272     inline const SwChannelBGrf            &GetChannelBGrf(sal_Bool = sal_True ) const;
273     inline const SwGammaGrf           &GetGammaGrf(sal_Bool = sal_True ) const;
274     inline const SwInvertGrf          &GetInvertGrf(sal_Bool = sal_True ) const;
275     inline const SwTransparencyGrf        &GetTransparencyGrf(sal_Bool = sal_True ) const;
276     inline const SwDrawModeGrf            &GetDrawModeGrf(sal_Bool = sal_True ) const;
277 
278 	// Paragraph-Attribute	- impl. steht im paratr.hxx
279     inline const SvxLineSpacingItem       &GetLineSpacing( sal_Bool = sal_True ) const;
280     inline const SvxAdjustItem            &GetAdjust( sal_Bool = sal_True ) const;
281     inline const SvxFmtSplitItem      &GetSplit( sal_Bool = sal_True ) const;
282     inline const SwRegisterItem           &GetRegister( sal_Bool = sal_True ) const;
283     inline const SwNumRuleItem            &GetNumRule( sal_Bool = sal_True ) const;
284     inline const SvxWidowsItem            &GetWidows( sal_Bool = sal_True ) const;
285     inline const SvxOrphansItem           &GetOrphans( sal_Bool = sal_True ) const;
286     inline const SvxTabStopItem           &GetTabStops( sal_Bool = sal_True ) const;
287     inline const SvxHyphenZoneItem        &GetHyphenZone( sal_Bool = sal_True ) const;
288     inline const SwFmtDrop                &GetDrop( sal_Bool = sal_True ) const;
289     inline const SvxScriptSpaceItem       &GetScriptSpace(sal_Bool = sal_True) const;
290     inline const SvxHangingPunctuationItem &GetHangingPunctuation(sal_Bool = sal_True) const;
291     inline const SvxForbiddenRuleItem     &GetForbiddenRule(sal_Bool = sal_True) const;
292     inline const SvxParaVertAlignItem &GetParaVertAlign(sal_Bool = sal_True) const;
293     inline const SvxParaGridItem        &GetParaGrid(sal_Bool = sal_True) const;
294     inline const SwParaConnectBorderItem &GetParaConnectBorder(sal_Bool = sal_True ) const;
295 
296 	// TabellenBox-Attribute	- impl. steht im cellatr.hxx
297     inline  const SwTblBoxNumFormat     &GetTblBoxNumFmt( sal_Bool = sal_True ) const;
298     inline  const SwTblBoxFormula       &GetTblBoxFormula( sal_Bool = sal_True ) const;
299     inline  const SwTblBoxValue         &GetTblBoxValue( sal_Bool = sal_True ) const;
300 
301     /** SwFmt::IsBackgroundTransparent - for feature #99657#
302 
303         OD 22.08.2002
304         Virtual method to determine, if background of format is transparent.
305         Default implementation returns false. Thus, subclasses have to overload
306         method, if the specific subclass can have a transparent background.
307 
308         @author OD
309 
310         @return false, default implementation
311     */
312     virtual sal_Bool IsBackgroundTransparent() const;
313 
314     /** SwFmt::IsShadowTransparent - for feature #99657#
315 
316         OD 22.08.2002
317         Virtual method to determine, if shadow of format is transparent.
318         Default implementation returns false. Thus, subclasses have to overload
319         method, if the specific subclass can have a transparent shadow.
320 
321         @author OD
322 
323         @return false, default implementation
324     */
325     virtual sal_Bool IsShadowTransparent() const;
326 };
327 
328 // --------------- inline Implementierungen ------------------------
329 
330 inline const SfxPoolItem& SwFmt::GetFmtAttr( sal_uInt16 nWhich,
331                                              sal_Bool bInParents ) const
332 {
333 	return aSet.Get( nWhich, bInParents );
334 }
335 
336 inline void SwFmt::SetName( const sal_Char* pNewName,
337 						 	sal_Bool bBroadcast )
338 {
339 	String aTmp( String::CreateFromAscii( pNewName ) );
340 	SetName( aTmp, bBroadcast );
341 }
342 
343 inline SfxItemState SwFmt::GetItemState( sal_uInt16 nWhich, sal_Bool bSrchInParent,
344 										const SfxPoolItem **ppItem ) const
345 {
346 	return aSet.GetItemState( nWhich, bSrchInParent, ppItem );
347 }
348 
349 #undef inline
350 
351 #endif // _FORMAT_HXX
352