Files
libreoffice/sw/source/core/text/porfld.hxx
Rüdiger Timm 3aab2609fe INTEGRATION: CWS ooo19126 (1.10.846); FILE MERGED
2005/09/05 13:40:55 rt 1.10.846.1: #i54170# Change license header: remove SISSL
2005-09-09 03:57:56 +00:00

253 lines
9.5 KiB
C++

/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: porfld.hxx,v $
*
* $Revision: 1.11 $
*
* last change: $Author: rt $ $Date: 2005-09-09 04:57:56 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 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
*
************************************************************************/
#ifndef _PORFLD_HXX
#define _PORFLD_HXX
#include "swtypes.hxx"
#include "porexp.hxx"
#ifndef _FMTORNT_HXX //autogen
#include <fmtornt.hxx>
#endif
class SwFont;
class SvxBrushItem;
class SwFmtVertOrient;
class SwFrm;
/*************************************************************************
* class SwFldPortion
*************************************************************************/
class SwFldPortion : public SwExpandPortion
{
friend class SwTxtFormatter;
protected:
XubString aExpand; // das expandierte Feld
SwFont *pFnt; // Fuer mehrzeilige Felder
xub_StrLen nNextOffset; // Offset des Follows im Originalstring
xub_StrLen nNextScriptChg;
KSHORT nViewWidth; // Screenbreite fuer leere Felder
sal_Bool bFollow : 1; // 2. oder weiterer Teil eines Feldes
sal_Bool bLeft : 1; // wird von SwNumberPortion benutzt
sal_Bool bHide : 1; // wird von SwNumberPortion benutzt
sal_Bool bCenter : 1; // wird von SwNumberPortion benutzt
sal_Bool bHasFollow : 1; // geht in der naechsten Zeile weiter
sal_Bool bAnimated : 1; // wird von SwGrfNumPortion benutzt
sal_Bool bNoPaint : 1; // wird von SwGrfNumPortion benutzt
sal_Bool bReplace : 1; // wird von SwGrfNumPortion benutzt
inline void SetFont( SwFont *pNew ) { pFnt = pNew; }
inline const SwFont *GetFont() const { return pFnt; }
public:
SwFldPortion( const SwFldPortion& rFld );
SwFldPortion( const XubString &rExpand, SwFont *pFnt = 0 );
~SwFldPortion();
void TakeNextOffset( const SwFldPortion* pFld );
void CheckScript( const SwTxtSizeInfo &rInf );
inline const sal_Bool HasFont() const { return 0 != pFnt; }
inline const XubString &GetExp() const { return aExpand; }
virtual sal_Bool GetExpTxt( const SwTxtSizeInfo &rInf, XubString &rTxt ) const;
virtual sal_Bool Format( SwTxtFormatInfo &rInf );
virtual void Paint( const SwTxtPaintInfo &rInf ) const;
// leere Felder sind auch erlaubt
virtual SwLinePortion *Compress();
virtual KSHORT GetViewWidth( const SwTxtSizeInfo &rInf ) const;
inline sal_Bool IsFollow() const { return bFollow; }
inline void SetFollow( sal_Bool bNew ) { bFollow = bNew; }
inline sal_Bool IsLeft() const { return bLeft; }
inline void SetLeft( sal_Bool bNew ) { bLeft = bNew; }
inline sal_Bool IsHide() const { return bHide; }
inline void SetHide( sal_Bool bNew ) { bHide = bNew; }
inline sal_Bool IsCenter() const { return bCenter; }
inline void SetCenter( sal_Bool bNew ) { bCenter = bNew; }
inline sal_Bool HasFollow() const { return bHasFollow; }
inline void SetHasFollow( sal_Bool bNew ) { bHasFollow = bNew; }
inline xub_StrLen GetNextOffset() const { return nNextOffset; }
inline void SetNextOffset( xub_StrLen nNew ) { nNextOffset = nNew; }
inline xub_StrLen GetNextScriptChg() const { return nNextScriptChg; }
inline void SetNextScriptChg( xub_StrLen nNew ) { nNextScriptChg = nNew; }
// Felder-Cloner fuer SplitGlue
virtual SwFldPortion *Clone( const XubString &rExpand ) const;
// Extra-GetTxtSize wegen pFnt
virtual SwPosSize GetTxtSize( const SwTxtSizeInfo &rInfo ) const;
// Accessibility: pass information about this portion to the PortionHandler
virtual void HandlePortion( SwPortionHandler& rPH ) const;
OUTPUT_OPERATOR
};
/*************************************************************************
* class SwHiddenPortion
*************************************************************************/
// Unterscheidung nur fuer's Painten/verstecken.
class SwHiddenPortion : public SwFldPortion
{
public:
inline SwHiddenPortion( const XubString &rExpand, SwFont *pFnt = 0 )
: SwFldPortion( rExpand, pFnt )
{ SetLen(1); SetWhichPor( POR_HIDDEN ); }
virtual void Paint( const SwTxtPaintInfo &rInf ) const;
virtual sal_Bool GetExpTxt( const SwTxtSizeInfo &rInf, XubString &rTxt ) const;
// Felder-Cloner fuer SplitGlue
virtual SwFldPortion *Clone( const XubString &rExpand ) const;
OUTPUT_OPERATOR
};
/*************************************************************************
* class SwNumberPortion
*************************************************************************/
class SwNumberPortion : public SwFldPortion
{
protected:
KSHORT nFixWidth; // vgl. Glues
KSHORT nMinDist; // minimaler Abstand zum Text
public:
SwNumberPortion( const XubString &rExpand, SwFont *pFnt,
const sal_Bool bLeft, const sal_Bool bCenter, const KSHORT nMinDst );
virtual void Paint( const SwTxtPaintInfo &rInf ) const;
virtual xub_StrLen GetCrsrOfst( const MSHORT nOfst ) const;
virtual sal_Bool Format( SwTxtFormatInfo &rInf );
// Felder-Cloner fuer SplitGlue
virtual SwFldPortion *Clone( const XubString &rExpand ) const;
virtual void FormatEOL( SwTxtFormatInfo &rInf );
OUTPUT_OPERATOR
};
/*************************************************************************
* class SwBulletPortion
*************************************************************************/
class SwBulletPortion : public SwNumberPortion
{
public:
SwBulletPortion( const xub_Unicode cCh, SwFont *pFnt, const sal_Bool bLeft,
const sal_Bool bCenter, const KSHORT nMinDst );
OUTPUT_OPERATOR
};
/*************************************************************************
* class SwBmpBulletPortion
*************************************************************************/
class SwGrfNumPortion : public SwNumberPortion
{
SvxBrushItem* pBrush;
long nId; //fuer StopAnimation
SwTwips nYPos; //Enthaelt _immer_ die aktuelle RelPos.
SwTwips nGrfHeight;
SwVertOrient eOrient;
public:
SwGrfNumPortion( SwFrm *pFrm, const SvxBrushItem* pGrfBrush,
const SwFmtVertOrient* pGrfOrient, const Size& rGrfSize,
const sal_Bool bLeft, const sal_Bool bCenter, const KSHORT nMinDst );
~SwGrfNumPortion();
virtual void Paint( const SwTxtPaintInfo &rInf ) const;
virtual sal_Bool Format( SwTxtFormatInfo &rInf );
void SetBase( long nLnAscent, long nLnDescent,
long nFlyAscent, long nFlyDescent );
void StopAnimation( OutputDevice* pOut );
inline sal_Bool IsAnimated() const { return bAnimated; }
inline void SetAnimated( sal_Bool bNew ) { bAnimated = bNew; }
inline sal_Bool DontPaint() const { return bNoPaint; }
inline void SetNoPaint( sal_Bool bNew ) { bNoPaint = bNew; }
inline void SetRelPos( SwTwips nNew ) { nYPos = nNew; }
inline void SetId( long nNew ) const
{ ((SwGrfNumPortion*)this)->nId = nNew; }
inline SwTwips GetRelPos() const { return nYPos; }
inline SwTwips GetGrfHeight() const { return nGrfHeight; }
inline SwTwips GetId() const { return nId; }
inline SwVertOrient GetOrient() const { return eOrient; }
OUTPUT_OPERATOR
};
/*************************************************************************
* class SwCombinedPortion
* Used in for asian layout specialities to display up to six characters
* in 2 rows and 2-3 columns.
* e.g.
*
* A.. A.. A.B A.B A.B.C A.B.C
* ... ..B .C. C.D .D.E. D.E.F
*************************************************************************/
class SwCombinedPortion : public SwFldPortion
{
USHORT aPos[6]; // up to six X positions
USHORT aWidth[3]; // one width for every scripttype
BYTE aScrType[6]; // scripttype of every character
USHORT nUpPos; // the Y position of the upper baseline
USHORT nLowPos; // the Y position of the lower baseline
BYTE nProportion; // relative font height
public:
SwCombinedPortion( const XubString &rExpand );
virtual void Paint( const SwTxtPaintInfo &rInf ) const;
virtual sal_Bool Format( SwTxtFormatInfo &rInf );
virtual KSHORT GetViewWidth( const SwTxtSizeInfo &rInf ) const;
OUTPUT_OPERATOR
};
CLASSIO( SwHiddenPortion )
CLASSIO( SwNumberPortion )
CLASSIO( SwBulletPortion )
CLASSIO( SwGrfNumPortion )
CLASSIO( SwCombinedPortion )
#endif