Update ooo320-m1
[ooovba.git] / binfilter / inc / bf_sw / pagedesc.hxx
blob138d83ac07b097eb099df9bfe17a85ca074d0cde
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: pagedesc.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 ************************************************************************/
30 #ifndef _PAGEDESC_HXX
31 #define _PAGEDESC_HXX
33 #ifndef _FRACT_HXX
34 #include <tools/fract.hxx>
35 #endif
37 #ifndef _TOOLS_COLOR_HXX
38 #include <tools/color.hxx>
39 #endif
40 #ifndef _STRING_HXX //autogen
41 #include <tools/string.hxx>
42 #endif
43 #ifndef _SWTYPES_HXX
44 #include <swtypes.hxx> //fuer SwTwips
45 #endif
46 #ifndef _FRMFMT_HXX
47 #include <frmfmt.hxx>
48 #endif
49 #ifndef _NUMRULE_HXX
50 #include <numrule.hxx>
51 #endif
52 namespace binfilter {
54 class SfxPoolItem;
55 class SwTxtFmtColl;
56 class SwNode;
58 //Separator line adjustment
59 enum SwFtnAdj
61 FTNADJ_LEFT,
62 FTNADJ_CENTER,
63 FTNADJ_RIGHT
66 //footnote information
67 class SwPageFtnInfo
69 SwTwips nMaxHeight; //maximum height of the footnote area.
70 ULONG nLineWidth; //width of separator line
71 Color aLineColor; //color of the separator line
72 Fraction aWidth; //percentage width of the separator line.
73 SwFtnAdj eAdj; //line adjustment.
74 SwTwips nTopDist; //distance between body and separator.
75 SwTwips nBottomDist; //distance between separator and first footnote
76 public:
77 SwTwips GetHeight() const { return nMaxHeight; }
78 ULONG GetLineWidth() const { return nLineWidth; }
79 const Color& GetLineColor() const { return aLineColor;}
80 const Fraction& GetWidth() const { return aWidth; }
81 SwFtnAdj GetAdj() const { return eAdj; }
82 SwTwips GetTopDist()const { return nTopDist; }
83 SwTwips GetBottomDist() const { return nBottomDist; }
85 void SetHeight( SwTwips nNew ) { nMaxHeight = nNew; }
86 void SetLineWidth(ULONG nSet ) { nLineWidth = nSet; }
87 void SetLineColor(const Color& rCol ) { aLineColor = rCol;}
88 void SetWidth( const Fraction &rNew){ aWidth = rNew; }
89 void SetAdj ( SwFtnAdj eNew ) { eAdj = eNew; }
90 void SetTopDist ( SwTwips nNew ) { nTopDist = nNew; }
91 void SetBottomDist( SwTwips nNew ) { nBottomDist = nNew; }
93 SwPageFtnInfo();
94 SwPageFtnInfo( const SwPageFtnInfo& );
95 SwPageFtnInfo& operator=( const SwPageFtnInfo& );
97 BOOL operator ==( const SwPageFtnInfo& ) const;
101 * Verwendung des UseOnPage (eUse) und der FrmFmt'e
103 * RIGHT - aMaster nur fuer rechte Seiten, linke Seiten immer leer.
104 * LEFT - aLeft fuer linke Seiten, rechte Seiten immer leer.
105 * aLeft ist eine Kopie des Master.
106 * ALL - aMaster fuer rechte Seiten, aLeft fuer Linke Seiten.
107 * aLeft ist eine Kopie des Master.
108 * MIRROR - aMaster fuer rechte Seiten, aLeft fuer linke Seiten.
109 * aLeft ist eine Kopie des Master, Raender sind gespiegelt.
111 * UI dreht auschliesslich am Master! aLeft wird beim Chg am Dokument
112 * enstprechend dem eUse eingestellt.
114 * Damit es die Filter etwas einfacher haben werden weitere Werte im
115 * eUse untergebracht:
117 * HEADERSHARE - Headerinhalt auf beiden Seiten gleich
118 * FOOTERSHARE - Footerinhalt auf beiden Seiten gleich
120 * Die Werte werden bei den entsprechenden Get-/Set-Methden ausmaskiert.
121 * Zugriff auf das volle eUse inclusive der Header-Footer information
122 * per ReadUseOn(), WriteUseOn() (fuer Filter und CopyCTor)!
124 * Die FrmFormate fuer Header/Footer werden anhand der Attribute fuer
125 * Header/Footer vom UI am Master eingestellt (Hoehe, Raender, Hintergrund...);
126 * Header/Footer fuer die Linke Seite werden entsprechen kopiert bzw.
127 * gespielt (Chg am Dokument).
128 * Das jew. Attribut fuer den Inhalt wird automatisch beim Chg am
129 * Dokument versorgt (entsprechen den SHARE-informationen werden Inhalte
130 * erzeugt bzw. entfernt).
134 enum UseOnPage
135 { PD_NONE = 0x0000, //for internal use only.
136 PD_LEFT = 0x0001,
137 PD_RIGHT = 0x0002,
138 PD_ALL = 0x0003,
139 PD_MIRROR = 0x0007,
140 PD_HEADERSHARE = 0x0040,
141 PD_FOOTERSHARE = 0x0080,
142 PD_NOHEADERSHARE = 0x00BF, //for internal use only
143 PD_NOFOOTERSHARE = 0x007F //for internal use only
146 class SwPageDesc : public SwModify
148 friend class SwDoc;
150 //nicht (mehr) implementiert.
151 SwPageDesc& operator=( const SwPageDesc& );
153 String aDescName;
154 SvxNumberType aNumType;
155 SwFrmFmt aMaster;
156 SwFrmFmt aLeft;
157 SwDepend aDepend; // wg. Registerhaltigkeit
158 SwPageDesc *pFollow;
159 USHORT nRegHeight; // Zeilenabstand und Fontascent der Vorlage
160 USHORT nRegAscent; // fuer die Registerhaltigkeit
161 UseOnPage eUse;
162 BOOL bLandscape;
164 //Fussnoteninformationen
165 SwPageFtnInfo aFtnInfo;
167 //Wird zum Spiegeln vom Chg (Doc) gerufen.
168 //Kein Abgleich an anderer Stelle.
169 void Mirror();
171 void ResetAllAttr( sal_Bool bLeft );
173 SwPageDesc(const String&, SwFrmFmt*, SwDoc *pDc );
174 public:
175 const String &GetName() const { return aDescName; }
176 void SetName( const String& rNewName ) { aDescName = rNewName; }
178 BOOL GetLandscape() const { return bLandscape; }
179 void SetLandscape( BOOL bNew ) { bLandscape = bNew; }
181 const SvxNumberType &GetNumType() const { return aNumType; }
182 void SetNumType( const SvxNumberType& rNew ) { aNumType = rNew; }
184 const SwPageFtnInfo &GetFtnInfo() const { return aFtnInfo; }
185 SwPageFtnInfo &GetFtnInfo() { return aFtnInfo; }
186 void SetFtnInfo( const SwPageFtnInfo &rNew ) { aFtnInfo = rNew; }
188 inline BOOL IsHeaderShared() const;
189 inline BOOL IsFooterShared() const;
190 inline void ChgHeaderShare( BOOL bNew );
191 inline void ChgFooterShare( BOOL bNew );
193 inline void SetUseOn( UseOnPage eNew );
194 inline UseOnPage GetUseOn() const;
196 void WriteUseOn( UseOnPage eNew ) { eUse = eNew; }
197 UseOnPage ReadUseOn () const { return eUse; }
199 SwFrmFmt &GetMaster() { return aMaster; }
200 SwFrmFmt &GetLeft() { return aLeft; }
201 const SwFrmFmt &GetMaster() const { return aMaster; }
202 const SwFrmFmt &GetLeft() const { return aLeft; }
204 // Reset all attrs of the format but keep the ones a pagedesc
205 // cannot live without.
206 inline void ResetAllMasterAttr();
207 inline void ResetAllLeftAttr();
209 //Mit den folgenden Methoden besorgt sich das Layout ein Format
210 //um eine Seite erzeugen zu koennen
211 inline SwFrmFmt *GetRightFmt();
212 inline const SwFrmFmt *GetRightFmt() const;
213 inline SwFrmFmt *GetLeftFmt();
214 inline const SwFrmFmt *GetLeftFmt() const;
216 USHORT GetRegHeight() const { return nRegHeight; }
217 USHORT GetRegAscent() const { return nRegAscent; }
218 void SetRegHeight( USHORT nNew ){ nRegHeight = nNew; }
219 void SetRegAscent( USHORT nNew ){ nRegAscent = nNew; }
221 inline void SetFollow( const SwPageDesc* pNew );
222 const SwPageDesc* GetFollow() const { return pFollow; }
223 SwPageDesc* GetFollow() { return pFollow; }
225 void SetRegisterFmtColl( const SwTxtFmtColl* rFmt );
226 const SwTxtFmtColl* GetRegisterFmtColl() const;
227 virtual void Modify( SfxPoolItem *pOldValue, SfxPoolItem *pNewValue );
228 void RegisterChange();
230 // erfragen und setzen der PoolFormat-Id
231 USHORT GetPoolFmtId() const { return aMaster.GetPoolFmtId(); }
232 void SetPoolFmtId( USHORT nId ) { aMaster.SetPoolFmtId( nId ); }
233 USHORT GetPoolHelpId() const { return aMaster.GetPoolHelpId(); }
234 void SetPoolHelpId( USHORT nId ) { aMaster.SetPoolHelpId( nId ); }
235 BYTE GetPoolHlpFileId() const { return aMaster.GetPoolHlpFileId(); }
236 void SetPoolHlpFileId( BYTE nId ) { aMaster.SetPoolHlpFileId( nId ); }
237 // erfrage die Attribut-Beschreibung, returnt den reingereichten String
238 void GetPresentation( SfxItemPresentation ePres,
239 SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, String &rText ) const;
241 // erfrage vom Client Informationen
244 //Given a SwNode return the pagedesc in use at that location.
245 static const SwPageDesc* GetPageDescOfNode(const SwNode& rNd);
247 SwPageDesc( const SwPageDesc& );
248 ~SwPageDesc();
251 inline void SwPageDesc::SetFollow( const SwPageDesc* pNew )
253 pFollow = pNew ? (SwPageDesc*)pNew : this;
256 inline BOOL SwPageDesc::IsHeaderShared() const
258 return eUse & PD_HEADERSHARE ? TRUE : FALSE;
260 inline BOOL SwPageDesc::IsFooterShared() const
262 return eUse & PD_FOOTERSHARE ? TRUE : FALSE;
264 inline void SwPageDesc::ChgHeaderShare( BOOL bNew )
266 if ( bNew )
267 eUse = (UseOnPage) (eUse | PD_HEADERSHARE);
268 // (USHORT&)eUse |= (USHORT)PD_HEADERSHARE;
269 else
270 eUse = (UseOnPage) (eUse & PD_NOHEADERSHARE);
271 // (USHORT&)eUse &= (USHORT)PD_NOHEADERSHARE;
273 inline void SwPageDesc::ChgFooterShare( BOOL bNew )
275 if ( bNew )
276 eUse = (UseOnPage) (eUse | PD_FOOTERSHARE);
277 // (USHORT&)eUse |= (USHORT)PD_FOOTERSHARE;
278 else
279 eUse = (UseOnPage) (eUse & PD_NOFOOTERSHARE);
280 // (USHORT&)eUse &= (USHORT)PD_NOFOOTERSHARE;
282 inline void SwPageDesc::SetUseOn( UseOnPage eNew )
284 UseOnPage eTmp = PD_NONE;
285 if ( eUse & PD_HEADERSHARE )
286 eTmp = PD_HEADERSHARE;
287 // (USHORT&)eTmp |= (USHORT)PD_HEADERSHARE;
288 if ( eUse & PD_FOOTERSHARE )
289 eTmp = (UseOnPage) (eTmp | PD_FOOTERSHARE);
290 // (USHORT&)eTmp |= (USHORT)PD_FOOTERSHARE;
291 eUse = (UseOnPage) (eTmp | eNew);
292 // (USHORT&)eUse = eTmp | eNew;
294 inline UseOnPage SwPageDesc::GetUseOn() const
296 UseOnPage eRet = eUse;
297 eRet = (UseOnPage) (eRet & PD_NOHEADERSHARE);
298 // (USHORT&)eRet &= (USHORT)PD_NOHEADERSHARE;
299 eRet = (UseOnPage) (eRet & PD_NOFOOTERSHARE);
300 // (USHORT&)eRet &= (USHORT)PD_NOFOOTERSHARE;
301 return eRet;
304 inline void SwPageDesc::ResetAllMasterAttr()
306 ResetAllAttr( sal_False );
309 inline void SwPageDesc::ResetAllLeftAttr()
311 ResetAllAttr( sal_True );
314 inline SwFrmFmt *SwPageDesc::GetRightFmt()
316 return PD_RIGHT & eUse ? &aMaster : 0;
318 inline const SwFrmFmt *SwPageDesc::GetRightFmt() const
320 return PD_RIGHT & eUse ? &aMaster : 0;
322 inline SwFrmFmt *SwPageDesc::GetLeftFmt()
324 return PD_LEFT & eUse ? &aLeft : 0;
326 inline const SwFrmFmt *SwPageDesc::GetLeftFmt() const
328 return PD_LEFT & eUse ? &aLeft : 0;
331 } //namespace binfilter
332 #endif //_PAGEDESC_HXX