1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: pagedesc.hxx,v $
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 ************************************************************************/
34 #include <tools/fract.hxx>
37 #ifndef _TOOLS_COLOR_HXX
38 #include <tools/color.hxx>
40 #ifndef _STRING_HXX //autogen
41 #include <tools/string.hxx>
44 #include <swtypes.hxx> //fuer SwTwips
50 #include <numrule.hxx>
58 //Separator line adjustment
66 //footnote information
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
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
; }
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).
135 { PD_NONE
= 0x0000, //for internal use only.
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
150 //nicht (mehr) implementiert.
151 SwPageDesc
& operator=( const SwPageDesc
& );
154 SvxNumberType aNumType
;
157 SwDepend aDepend
; // wg. Registerhaltigkeit
159 USHORT nRegHeight
; // Zeilenabstand und Fontascent der Vorlage
160 USHORT nRegAscent
; // fuer die Registerhaltigkeit
164 //Fussnoteninformationen
165 SwPageFtnInfo aFtnInfo
;
167 //Wird zum Spiegeln vom Chg (Doc) gerufen.
168 //Kein Abgleich an anderer Stelle.
171 void ResetAllAttr( sal_Bool bLeft
);
173 SwPageDesc(const String
&, SwFrmFmt
*, SwDoc
*pDc
);
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
& );
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
)
267 eUse
= (UseOnPage
) (eUse
| PD_HEADERSHARE
);
268 // (USHORT&)eUse |= (USHORT)PD_HEADERSHARE;
270 eUse
= (UseOnPage
) (eUse
& PD_NOHEADERSHARE
);
271 // (USHORT&)eUse &= (USHORT)PD_NOHEADERSHARE;
273 inline void SwPageDesc::ChgFooterShare( BOOL bNew
)
276 eUse
= (UseOnPage
) (eUse
| PD_FOOTERSHARE
);
277 // (USHORT&)eUse |= (USHORT)PD_FOOTERSHARE;
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;
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