1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef _PORFLD_HXX 24 #define _PORFLD_HXX 25 26 #include "swtypes.hxx" 27 #include "porexp.hxx" 28 #include <fmtornt.hxx> 29 30 class SwFont; 31 class SvxBrushItem; 32 class SwFmtVertOrient; 33 class SwFrm; 34 35 /************************************************************************* 36 * class SwFldPortion 37 *************************************************************************/ 38 39 class SwFldPortion : public SwExpandPortion 40 { 41 friend class SwTxtFormatter; 42 protected: 43 XubString aExpand; // das expandierte Feld 44 SwFont *pFnt; // Fuer mehrzeilige Felder 45 xub_StrLen nNextOffset; // Offset des Follows im Originalstring 46 xub_StrLen nNextScriptChg; 47 KSHORT nViewWidth; // Screenbreite fuer leere Felder 48 sal_Bool bFollow : 1; // 2. oder weiterer Teil eines Feldes 49 sal_Bool bLeft : 1; // wird von SwNumberPortion benutzt 50 sal_Bool bHide : 1; // wird von SwNumberPortion benutzt 51 sal_Bool bCenter : 1; // wird von SwNumberPortion benutzt 52 sal_Bool bHasFollow : 1; // geht in der naechsten Zeile weiter 53 sal_Bool bAnimated : 1; // wird von SwGrfNumPortion benutzt 54 sal_Bool bNoPaint : 1; // wird von SwGrfNumPortion benutzt 55 sal_Bool bReplace : 1; // wird von SwGrfNumPortion benutzt 56 const sal_Bool bPlaceHolder : 1; 57 sal_Bool m_bNoLength : 1; // HACK for meta suffix (no CH_TXTATR) 58 SetFont(SwFont * pNew)59 inline void SetFont( SwFont *pNew ) { pFnt = pNew; } IsNoLength() const60 inline bool IsNoLength() const { return m_bNoLength; } SetNoLength()61 inline void SetNoLength() { m_bNoLength = sal_True; } 62 63 public: 64 SwFldPortion( const SwFldPortion& rFld ); 65 SwFldPortion( const XubString &rExpand, SwFont *pFnt = 0, sal_Bool bPlaceHolder = sal_False ); 66 ~SwFldPortion(); 67 68 sal_uInt16 m_nAttrFldType; 69 void TakeNextOffset( const SwFldPortion* pFld ); 70 void CheckScript( const SwTxtSizeInfo &rInf ); HasFont() const71 inline sal_Bool HasFont() const { return 0 != pFnt; } 72 // --> OD 2008-06-05 #i89179# - made public GetFont() const73 inline const SwFont *GetFont() const { return pFnt; } 74 // <-- 75 GetExp() const76 inline const XubString &GetExp() const { return aExpand; } 77 virtual sal_Bool GetExpTxt( const SwTxtSizeInfo &rInf, XubString &rTxt ) const; 78 virtual sal_Bool Format( SwTxtFormatInfo &rInf ); 79 virtual void Paint( const SwTxtPaintInfo &rInf ) const; 80 81 // leere Felder sind auch erlaubt 82 virtual SwLinePortion *Compress(); 83 84 virtual KSHORT GetViewWidth( const SwTxtSizeInfo &rInf ) const; 85 IsFollow() const86 inline sal_Bool IsFollow() const { return bFollow; } SetFollow(sal_Bool bNew)87 inline void SetFollow( sal_Bool bNew ) { bFollow = bNew; } 88 IsLeft() const89 inline sal_Bool IsLeft() const { return bLeft; } SetLeft(sal_Bool bNew)90 inline void SetLeft( sal_Bool bNew ) { bLeft = bNew; } 91 IsHide() const92 inline sal_Bool IsHide() const { return bHide; } SetHide(sal_Bool bNew)93 inline void SetHide( sal_Bool bNew ) { bHide = bNew; } 94 IsCenter() const95 inline sal_Bool IsCenter() const { return bCenter; } SetCenter(sal_Bool bNew)96 inline void SetCenter( sal_Bool bNew ) { bCenter = bNew; } 97 HasFollow() const98 inline sal_Bool HasFollow() const { return bHasFollow; } SetHasFollow(sal_Bool bNew)99 inline void SetHasFollow( sal_Bool bNew ) { bHasFollow = bNew; } 100 GetNextOffset() const101 inline xub_StrLen GetNextOffset() const { return nNextOffset; } SetNextOffset(xub_StrLen nNew)102 inline void SetNextOffset( xub_StrLen nNew ) { nNextOffset = nNew; } 103 GetNextScriptChg() const104 inline xub_StrLen GetNextScriptChg() const { return nNextScriptChg; } SetNextScriptChg(xub_StrLen nNew)105 inline void SetNextScriptChg( xub_StrLen nNew ) { nNextScriptChg = nNew; } 106 107 // Felder-Cloner fuer SplitGlue 108 virtual SwFldPortion *Clone( const XubString &rExpand ) const; 109 110 // Extra-GetTxtSize wegen pFnt 111 virtual SwPosSize GetTxtSize( const SwTxtSizeInfo &rInfo ) const; 112 113 // Accessibility: pass information about this portion to the PortionHandler 114 virtual void HandlePortion( SwPortionHandler& rPH ) const; 115 116 OUTPUT_OPERATOR 117 }; 118 119 /************************************************************************* 120 * class SwHiddenPortion 121 *************************************************************************/ 122 // Unterscheidung nur fuer's Painten/verstecken. 123 124 class SwHiddenPortion : public SwFldPortion 125 { 126 public: SwHiddenPortion(const XubString & rExpand,SwFont * pFntL=0)127 inline SwHiddenPortion( const XubString &rExpand, SwFont *pFntL = 0 ) 128 : SwFldPortion( rExpand, pFntL ) 129 { SetLen(1); SetWhichPor( POR_HIDDEN ); } 130 virtual void Paint( const SwTxtPaintInfo &rInf ) const; 131 virtual sal_Bool GetExpTxt( const SwTxtSizeInfo &rInf, XubString &rTxt ) const; 132 133 // Felder-Cloner fuer SplitGlue 134 virtual SwFldPortion *Clone( const XubString &rExpand ) const; 135 OUTPUT_OPERATOR 136 }; 137 138 /************************************************************************* 139 * class SwNumberPortion 140 *************************************************************************/ 141 142 class SwNumberPortion : public SwFldPortion 143 { 144 protected: 145 KSHORT nFixWidth; // vgl. Glues 146 KSHORT nMinDist; // minimaler Abstand zum Text 147 // --> OD 2008-01-23 #newlistlevelattrs# 148 bool mbLabelAlignmentPosAndSpaceModeActive; 149 // <-- 150 151 public: 152 // --> OD 2008-01-23 #newlistlevelattrs# 153 SwNumberPortion( const XubString &rExpand, 154 SwFont *pFnt, 155 const sal_Bool bLeft, 156 const sal_Bool bCenter, 157 const KSHORT nMinDst, 158 const bool bLabelAlignmentPosAndSpaceModeActive ); 159 // <-- 160 virtual void Paint( const SwTxtPaintInfo &rInf ) const; 161 virtual xub_StrLen GetCrsrOfst( const MSHORT nOfst ) const; 162 virtual sal_Bool Format( SwTxtFormatInfo &rInf ); 163 164 // Felder-Cloner fuer SplitGlue 165 virtual SwFldPortion *Clone( const XubString &rExpand ) const; 166 virtual void FormatEOL( SwTxtFormatInfo &rInf ); 167 168 OUTPUT_OPERATOR 169 }; 170 171 /************************************************************************* 172 * class SwBulletPortion 173 *************************************************************************/ 174 175 class SwBulletPortion : public SwNumberPortion 176 { 177 public: 178 SwBulletPortion( const xub_Unicode cCh, 179 const XubString& rBulletFollowedBy, 180 SwFont *pFnt, 181 const sal_Bool bLeft, 182 const sal_Bool bCenter, 183 const KSHORT nMinDst, 184 const bool bLabelAlignmentPosAndSpaceModeActive ); 185 OUTPUT_OPERATOR 186 }; 187 188 /************************************************************************* 189 * class SwBmpBulletPortion 190 *************************************************************************/ 191 192 class SwGrfNumPortion : public SwNumberPortion 193 { 194 SvxBrushItem* pBrush; 195 long nId; //fuer StopAnimation 196 SwTwips nYPos; //Enthaelt _immer_ die aktuelle RelPos. 197 SwTwips nGrfHeight; 198 sal_Int16 eOrient; 199 public: 200 SwGrfNumPortion( SwFrm *pFrm, 201 const XubString& rGraphicFollowedBy, 202 const SvxBrushItem* pGrfBrush, 203 const SwFmtVertOrient* pGrfOrient, 204 const Size& rGrfSize, 205 const sal_Bool bLeft, 206 const sal_Bool bCenter, 207 const KSHORT nMinDst, 208 const bool bLabelAlignmentPosAndSpaceModeActive ); 209 ~SwGrfNumPortion(); 210 virtual void Paint( const SwTxtPaintInfo &rInf ) const; 211 virtual sal_Bool Format( SwTxtFormatInfo &rInf ); 212 213 void SetBase( long nLnAscent, long nLnDescent, 214 long nFlyAscent, long nFlyDescent ); 215 216 void StopAnimation( OutputDevice* pOut ); 217 IsAnimated() const218 inline sal_Bool IsAnimated() const { return bAnimated; } SetAnimated(sal_Bool bNew)219 inline void SetAnimated( sal_Bool bNew ) { bAnimated = bNew; } DontPaint() const220 inline sal_Bool DontPaint() const { return bNoPaint; } SetNoPaint(sal_Bool bNew)221 inline void SetNoPaint( sal_Bool bNew ) { bNoPaint = bNew; } SetRelPos(SwTwips nNew)222 inline void SetRelPos( SwTwips nNew ) { nYPos = nNew; } SetId(long nNew) const223 inline void SetId( long nNew ) const 224 { ((SwGrfNumPortion*)this)->nId = nNew; } GetRelPos() const225 inline SwTwips GetRelPos() const { return nYPos; } GetGrfHeight() const226 inline SwTwips GetGrfHeight() const { return nGrfHeight; } GetId() const227 inline SwTwips GetId() const { return nId; } GetOrient() const228 inline sal_Int16 GetOrient() const { return eOrient; } 229 230 OUTPUT_OPERATOR 231 }; 232 233 /************************************************************************* 234 * class SwCombinedPortion 235 * Used in for asian layout specialities to display up to six characters 236 * in 2 rows and 2-3 columns. 237 * e.g. 238 * 239 * A.. A.. A.B A.B A.B.C A.B.C 240 * ... ..B .C. C.D .D.E. D.E.F 241 *************************************************************************/ 242 243 class SwCombinedPortion : public SwFldPortion 244 { 245 sal_uInt16 aPos[6]; // up to six X positions 246 sal_uInt16 aWidth[3]; // one width for every scripttype 247 sal_uInt8 aScrType[6]; // scripttype of every character 248 sal_uInt16 nUpPos; // the Y position of the upper baseline 249 sal_uInt16 nLowPos; // the Y position of the lower baseline 250 sal_uInt8 nProportion; // relative font height 251 public: 252 SwCombinedPortion( const XubString &rExpand ); 253 virtual void Paint( const SwTxtPaintInfo &rInf ) const; 254 virtual sal_Bool Format( SwTxtFormatInfo &rInf ); 255 virtual KSHORT GetViewWidth( const SwTxtSizeInfo &rInf ) const; 256 OUTPUT_OPERATOR 257 }; 258 259 260 CLASSIO( SwHiddenPortion ) 261 CLASSIO( SwNumberPortion ) 262 CLASSIO( SwBulletPortion ) 263 CLASSIO( SwGrfNumPortion ) 264 CLASSIO( SwCombinedPortion ) 265 266 267 #endif 268