/************************************************************************* * * $RCSfile: pagedesc.hxx,v $ * * $Revision: 1.1.1.1 $ * * last change: $Author: hr $ $Date: 2000-09-18 17:14:27 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses * * - GNU Lesser General Public License Version 2.1 * - Sun Industry Standards Source License Version 1.1 * * Sun Microsystems Inc., October, 2000 * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2000 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * * * Sun Industry Standards Source License Version 1.1 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.1 (the "License"); You may not use this file * except in compliance with the License. You may obtain a copy of the * License at http://www.openoffice.org/license.html. * * Software provided under this License is provided on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: Sun Microsystems, Inc. * * Copyright: 2000 by Sun Microsystems, Inc. * * All Rights Reserved. * * Contributor(s): _______________________________________ * * ************************************************************************/ #ifndef _PAGEDESC_HXX #define _PAGEDESC_HXX #ifndef _FRACT_HXX #include #endif #ifndef _TOOLS_COLOR_HXX #include #endif #ifndef _STRING_HXX //autogen #include #endif #ifndef _SWTYPES_HXX #include //fuer SwTwips #endif #ifndef _FRMFMT_HXX #include #endif #ifndef _NUMRULE_HXX #include #endif class SfxPoolItem; class SwTxtFmtColl; class SwNode; //Adjustierung der Trennlinie. enum SwFtnAdj { FTNADJ_LEFT, FTNADJ_CENTER, FTNADJ_RIGHT }; //Fussnoteninformationen class SwPageFtnInfo { SwTwips nMaxHeight; //Maximalraum auf der Seite. // Pen aPen; //Pen fuer Trennstrich. ULONG nLineWidth; //width of separator line Color aLineColor; //color of the separator line Fraction aWidth; //Prozentuale Breite des Trennstriches. SwFtnAdj eAdj; //Ausrichtung des Trennstriches. SwTwips nTopDist; //Abstand zwischen Body und Trennstrich. SwTwips nBottomDist; //Abstand zwischen Trennstrich und 1. Fussnote. public: SwTwips GetHeight() const { return nMaxHeight; } ULONG GetLineWidth() const { return nLineWidth; } const Color& GetLineColor() const { return aLineColor;} // const Pen& GetPen() const { return aPen; } const Fraction& GetWidth() const { return aWidth; } SwFtnAdj GetAdj() const { return eAdj; } SwTwips GetTopDist()const { return nTopDist; } SwTwips GetBottomDist() const { return nBottomDist; } void SetHeight( SwTwips nNew ) { nMaxHeight = nNew; } // void SetPen ( const Pen& rNew ) { aPen = rNew; } void SetLineWidth(ULONG nSet ) { nLineWidth = nSet; } void SetLineColor(const Color& rCol ) { aLineColor = rCol;} void SetWidth( const Fraction &rNew){ aWidth = rNew; } void SetAdj ( SwFtnAdj eNew ) { eAdj = eNew; } void SetTopDist ( SwTwips nNew ) { nTopDist = nNew; } void SetBottomDist( SwTwips nNew ) { nBottomDist = nNew; } SwPageFtnInfo(); SwPageFtnInfo( const SwPageFtnInfo& ); SwPageFtnInfo& operator=( const SwPageFtnInfo& ); BOOL operator ==( const SwPageFtnInfo& ) const; }; /* * Verwendung des UseOnPage (eUse) und der FrmFmt'e * * RIGHT - aMaster nur fuer rechte Seiten, linke Seiten immer leer. * LEFT - aLeft fuer linke Seiten, rechte Seiten immer leer. * aLeft ist eine Kopie des Master. * ALL - aMaster fuer rechte Seiten, aLeft fuer Linke Seiten. * aLeft ist eine Kopie des Master. * MIRROR - aMaster fuer rechte Seiten, aLeft fuer linke Seiten. * aLeft ist eine Kopie des Master, Raender sind gespiegelt. * * UI dreht auschliesslich am Master! aLeft wird beim Chg am Dokument * enstprechend dem eUse eingestellt. * * Damit es die Filter etwas einfacher haben werden weitere Werte im * eUse untergebracht: * * HEADERSHARE - Headerinhalt auf beiden Seiten gleich * FOOTERSHARE - Footerinhalt auf beiden Seiten gleich * * Die Werte werden bei den entsprechenden Get-/Set-Methden ausmaskiert. * Zugriff auf das volle eUse inclusive der Header-Footer information * per ReadUseOn(), WriteUseOn() (fuer Filter und CopyCTor)! * * Die FrmFormate fuer Header/Footer werden anhand der Attribute fuer * Header/Footer vom UI am Master eingestellt (Hoehe, Raender, Hintergrund...); * Header/Footer fuer die Linke Seite werden entsprechen kopiert bzw. * gespielt (Chg am Dokument). * Das jew. Attribut fuer den Inhalt wird automatisch beim Chg am * Dokument versorgt (entsprechen den SHARE-informationen werden Inhalte * erzeugt bzw. entfernt). * */ enum UseOnPage { PD_NONE = 0x0000, //for internal use only. PD_LEFT = 0x0001, PD_RIGHT = 0x0002, PD_ALL = 0x0003, PD_MIRROR = 0x0007, PD_HEADERSHARE = 0x0040, PD_FOOTERSHARE = 0x0080, PD_NOHEADERSHARE = 0x00BF, //for internal use only PD_NOFOOTERSHARE = 0x007F //for internal use only }; class SwPageDesc : public SwModify { friend class SwDoc; //nicht (mehr) implementiert. SwPageDesc& operator=( const SwPageDesc& ); String aDescName; SwNumType aNumType; SwFrmFmt aMaster; SwFrmFmt aLeft; SwDepend aDepend; // wg. Registerhaltigkeit SwPageDesc *pFollow; USHORT nRegHeight; // Zeilenabstand und Fontascent der Vorlage USHORT nRegAscent; // fuer die Registerhaltigkeit UseOnPage eUse; BOOL bLandscape; //Fussnoteninformationen SwPageFtnInfo aFtnInfo; //Wird zum Spiegeln vom Chg (Doc) gerufen. //Kein Abgleich an anderer Stelle. void Mirror(); SwPageDesc(const String&, SwFrmFmt*, SwDoc *pDc ); public: const String &GetName() const { return aDescName; } void SetName( const String& rNewName ) { aDescName = rNewName; } BOOL GetLandscape() const { return bLandscape; } void SetLandscape( BOOL bNew ) { bLandscape = bNew; } const SwNumType &GetNumType() const { return aNumType; } void SetNumType( const SwNumType& rNew ) { aNumType = rNew; } const SwPageFtnInfo &GetFtnInfo() const { return aFtnInfo; } SwPageFtnInfo &GetFtnInfo() { return aFtnInfo; } void SetFtnInfo( const SwPageFtnInfo &rNew ) { aFtnInfo = rNew; } inline BOOL IsHeaderShared() const; inline BOOL IsFooterShared() const; inline void ChgHeaderShare( BOOL bNew ); inline void ChgFooterShare( BOOL bNew ); inline void SetUseOn( UseOnPage eNew ); inline UseOnPage GetUseOn() const; void WriteUseOn( UseOnPage eNew ) { eUse = eNew; } UseOnPage ReadUseOn () const { return eUse; } SwFrmFmt &GetMaster() { return aMaster; } SwFrmFmt &GetLeft() { return aLeft; } const SwFrmFmt &GetMaster() const { return aMaster; } const SwFrmFmt &GetLeft() const { return aLeft; } //Mit den folgenden Methoden besorgt sich das Layout ein Format //um eine Seite erzeugen zu koennen inline SwFrmFmt *GetRightFmt(); inline const SwFrmFmt *GetRightFmt() const; inline SwFrmFmt *GetLeftFmt(); inline const SwFrmFmt *GetLeftFmt() const; USHORT GetRegHeight() const { return nRegHeight; } USHORT GetRegAscent() const { return nRegAscent; } void SetRegHeight( USHORT nNew ){ nRegHeight = nNew; } void SetRegAscent( USHORT nNew ){ nRegAscent = nNew; } inline void SetFollow( const SwPageDesc* pNew ); const SwPageDesc* GetFollow() const { return pFollow; } SwPageDesc* GetFollow() { return pFollow; } void SetRegisterFmtColl( const SwTxtFmtColl* rFmt ); const SwTxtFmtColl* GetRegisterFmtColl() const; virtual void Modify( SfxPoolItem *pOldValue, SfxPoolItem *pNewValue ); void RegisterChange(); // erfragen und setzen der PoolFormat-Id USHORT GetPoolFmtId() const { return aMaster.GetPoolFmtId(); } void SetPoolFmtId( USHORT nId ) { aMaster.SetPoolFmtId( nId ); } USHORT GetPoolHelpId() const { return aMaster.GetPoolHelpId(); } void SetPoolHelpId( USHORT nId ) { aMaster.SetPoolHelpId( nId ); } BYTE GetPoolHlpFileId() const { return aMaster.GetPoolHlpFileId(); } void SetPoolHlpFileId( BYTE nId ) { aMaster.SetPoolHlpFileId( nId ); } // erfrage die Attribut-Beschreibung, returnt den reingereichten String void GetPresentation( SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, String &rText ) const; // erfrage vom Client Informationen virtual BOOL GetInfo( SfxPoolItem& ) const; const SwFrmFmt* GetPageFmtOfNode( const SwNode& rNd, BOOL bCheckForThisPgDc = TRUE ) const; BOOL IsFollowNextPageOfNode( const SwNode& rNd ) const; SwPageDesc( const SwPageDesc& ); ~SwPageDesc(); }; inline void SwPageDesc::SetFollow( const SwPageDesc* pNew ) { pFollow = pNew ? (SwPageDesc*)pNew : this; } inline BOOL SwPageDesc::IsHeaderShared() const { return eUse & PD_HEADERSHARE ? TRUE : FALSE; } inline BOOL SwPageDesc::IsFooterShared() const { return eUse & PD_FOOTERSHARE ? TRUE : FALSE; } inline void SwPageDesc::ChgHeaderShare( BOOL bNew ) { if ( bNew ) eUse = (UseOnPage) (eUse | PD_HEADERSHARE); // (USHORT&)eUse |= (USHORT)PD_HEADERSHARE; else eUse = (UseOnPage) (eUse & PD_NOHEADERSHARE); // (USHORT&)eUse &= (USHORT)PD_NOHEADERSHARE; } inline void SwPageDesc::ChgFooterShare( BOOL bNew ) { if ( bNew ) eUse = (UseOnPage) (eUse | PD_FOOTERSHARE); // (USHORT&)eUse |= (USHORT)PD_FOOTERSHARE; else eUse = (UseOnPage) (eUse & PD_NOFOOTERSHARE); // (USHORT&)eUse &= (USHORT)PD_NOFOOTERSHARE; } inline void SwPageDesc::SetUseOn( UseOnPage eNew ) { UseOnPage eTmp = PD_NONE; if ( eUse & PD_HEADERSHARE ) eTmp = PD_HEADERSHARE; // (USHORT&)eTmp |= (USHORT)PD_HEADERSHARE; if ( eUse & PD_FOOTERSHARE ) eTmp = (UseOnPage) (eTmp | PD_FOOTERSHARE); // (USHORT&)eTmp |= (USHORT)PD_FOOTERSHARE; eUse = (UseOnPage) (eTmp | eNew); // (USHORT&)eUse = eTmp | eNew; } inline UseOnPage SwPageDesc::GetUseOn() const { UseOnPage eRet = eUse; eRet = (UseOnPage) (eRet & PD_NOHEADERSHARE); // (USHORT&)eRet &= (USHORT)PD_NOHEADERSHARE; eRet = (UseOnPage) (eRet & PD_NOFOOTERSHARE); // (USHORT&)eRet &= (USHORT)PD_NOFOOTERSHARE; return eRet; } inline SwFrmFmt *SwPageDesc::GetRightFmt() { return PD_RIGHT & eUse ? &aMaster : 0; } inline const SwFrmFmt *SwPageDesc::GetRightFmt() const { return PD_RIGHT & eUse ? &aMaster : 0; } inline SwFrmFmt *SwPageDesc::GetLeftFmt() { return PD_LEFT & eUse ? &aLeft : 0; } inline const SwFrmFmt *SwPageDesc::GetLeftFmt() const { return PD_LEFT & eUse ? &aLeft : 0; } #endif //_PAGEDESC_HXX