blob: 561eb220a67061e38a2f693d60954bc296aa4063 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _PORFLD_HXX
#define _PORFLD_HXX
#include "swtypes.hxx"
#include "porexp.hxx"
#include <fmtornt.hxx>
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
const sal_Bool bPlaceHolder : 1;
sal_Bool m_bNoLength : 1; // HACK for meta suffix (no CH_TXTATR)
inline void SetFont( SwFont *pNew ) { pFnt = pNew; }
inline bool IsNoLength() const { return m_bNoLength; }
inline void SetNoLength() { m_bNoLength = sal_True; }
public:
SwFldPortion( const SwFldPortion& rFld );
SwFldPortion( const XubString &rExpand, SwFont *pFnt = 0, sal_Bool bPlaceHolder = sal_False );
~SwFldPortion();
sal_uInt16 m_nAttrFldType;
void TakeNextOffset( const SwFldPortion* pFld );
void CheckScript( const SwTxtSizeInfo &rInf );
inline sal_Bool HasFont() const { return 0 != pFnt; }
// --> OD 2008-06-05 #i89179# - made public
inline const SwFont *GetFont() const { return 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 *pFntL = 0 )
: SwFldPortion( rExpand, pFntL )
{ 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
// --> OD 2008-01-23 #newlistlevelattrs#
bool mbLabelAlignmentPosAndSpaceModeActive;
// <--
public:
// --> OD 2008-01-23 #newlistlevelattrs#
SwNumberPortion( const XubString &rExpand,
SwFont *pFnt,
const sal_Bool bLeft,
const sal_Bool bCenter,
const KSHORT nMinDst,
const bool bLabelAlignmentPosAndSpaceModeActive );
// <--
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,
const XubString& rBulletFollowedBy,
SwFont *pFnt,
const sal_Bool bLeft,
const sal_Bool bCenter,
const KSHORT nMinDst,
const bool bLabelAlignmentPosAndSpaceModeActive );
OUTPUT_OPERATOR
};
/*************************************************************************
* class SwBmpBulletPortion
*************************************************************************/
class SwGrfNumPortion : public SwNumberPortion
{
SvxBrushItem* pBrush;
long nId; //fuer StopAnimation
SwTwips nYPos; //Enthaelt _immer_ die aktuelle RelPos.
SwTwips nGrfHeight;
sal_Int16 eOrient;
public:
SwGrfNumPortion( SwFrm *pFrm,
const XubString& rGraphicFollowedBy,
const SvxBrushItem* pGrfBrush,
const SwFmtVertOrient* pGrfOrient,
const Size& rGrfSize,
const sal_Bool bLeft,
const sal_Bool bCenter,
const KSHORT nMinDst,
const bool bLabelAlignmentPosAndSpaceModeActive );
~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 sal_Int16 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
{
sal_uInt16 aPos[6]; // up to six X positions
sal_uInt16 aWidth[3]; // one width for every scripttype
sal_uInt8 aScrType[6]; // scripttype of every character
sal_uInt16 nUpPos; // the Y position of the upper baseline
sal_uInt16 nLowPos; // the Y position of the lower baseline
sal_uInt8 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