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 24 #ifndef _TXTATTR_HXX 25 #define _TXTATTR_HXX 26 27 #include "svtools/svtdllapi.h" 28 #include <tools/color.hxx> 29 #include <vcl/vclenum.hxx> 30 #include <tools/string.hxx> 31 #include <tools/debug.hxx> 32 33 class Font; 34 35 #define TEXTATTR_INVALID 0 36 #define TEXTATTR_FONTCOLOR 1 37 #define TEXTATTR_HYPERLINK 2 38 #define TEXTATTR_FONTWEIGHT 3 39 40 #define TEXTATTR_USER_START 1000 //start id for user defined text attributes 41 #define TEXTATTR_PROTECTED 4 42 43 44 class SVT_DLLPUBLIC TextAttrib 45 { 46 private: 47 sal_uInt16 mnWhich; 48 49 protected: 50 TextAttrib( sal_uInt16 nWhich ) { mnWhich = nWhich; } 51 TextAttrib( const TextAttrib& rAttr ) { mnWhich = rAttr.mnWhich; } 52 53 public: 54 55 virtual ~TextAttrib(); 56 57 sal_uInt16 Which() const { return mnWhich; } 58 59 virtual void SetFont( Font& rFont ) const = 0; 60 virtual TextAttrib* Clone() const = 0; 61 virtual int operator==( const TextAttrib& rAttr ) const = 0; 62 int operator!=( const TextAttrib& rAttr ) const 63 { return !(*this == rAttr ); } 64 }; 65 66 67 68 class SVT_DLLPUBLIC TextAttribFontColor : public TextAttrib 69 { 70 private: 71 Color maColor; 72 73 public: 74 TextAttribFontColor( const Color& rColor ); 75 TextAttribFontColor( const TextAttribFontColor& rAttr ); 76 ~TextAttribFontColor(); 77 78 const Color& GetColor() const { return maColor; } 79 80 virtual void SetFont( Font& rFont ) const; 81 virtual TextAttrib* Clone() const; 82 virtual int operator==( const TextAttrib& rAttr ) const; 83 84 }; 85 86 class SVT_DLLPUBLIC TextAttribFontWeight : public TextAttrib 87 { 88 private: 89 FontWeight meWeight; 90 91 public: 92 TextAttribFontWeight( FontWeight eWeight ); 93 TextAttribFontWeight( const TextAttribFontWeight& rAttr ); 94 ~TextAttribFontWeight(); 95 96 virtual void SetFont( Font& rFont ) const; 97 virtual TextAttrib* Clone() const; 98 virtual int operator==( const TextAttrib& rAttr ) const; 99 100 inline FontWeight getFontWeight() const { return meWeight; } 101 }; 102 103 104 class TextAttribHyperLink : public TextAttrib 105 { 106 private: 107 XubString maURL; 108 XubString maDescription; 109 Color maColor; 110 111 public: 112 TextAttribHyperLink( const XubString& rURL ); 113 TextAttribHyperLink( const XubString& rURL, const XubString& rDescription ); 114 TextAttribHyperLink( const TextAttribHyperLink& rAttr ); 115 ~TextAttribHyperLink(); 116 117 void SetURL( const XubString& rURL ) { maURL = rURL; } 118 const XubString& GetURL() const { return maURL; } 119 120 void SetDescription( const XubString& rDescr ) { maDescription = rDescr; } 121 const XubString& GetDescription() const { return maDescription; } 122 123 void SetColor( const Color& rColor ) { maColor = rColor; } 124 const Color& GetColor() const { return maColor; } 125 126 virtual void SetFont( Font& rFont ) const; 127 virtual TextAttrib* Clone() const; 128 virtual int operator==( const TextAttrib& rAttr ) const; 129 }; 130 131 class SVT_DLLPUBLIC TextAttribProtect : public TextAttrib 132 { 133 public: 134 TextAttribProtect(); 135 TextAttribProtect( const TextAttribProtect& rAttr ); 136 ~TextAttribProtect(); 137 138 virtual void SetFont( Font& rFont ) const; 139 virtual TextAttrib* Clone() const; 140 virtual int operator==( const TextAttrib& rAttr ) const; 141 142 }; 143 144 145 class TextCharAttrib 146 { 147 private: 148 TextAttrib* mpAttr; 149 sal_uInt16 mnStart; 150 sal_uInt16 mnEnd; 151 152 protected: 153 154 public: 155 156 TextCharAttrib( const TextAttrib& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd ); 157 TextCharAttrib( const TextCharAttrib& rTextCharAttrib ); 158 ~TextCharAttrib(); 159 160 const TextAttrib& GetAttr() const { return *mpAttr; } 161 162 sal_uInt16 Which() const { return mpAttr->Which(); } 163 164 sal_uInt16 GetStart() const { return mnStart; } 165 sal_uInt16& GetStart() { return mnStart; } 166 167 sal_uInt16 GetEnd() const { return mnEnd; } 168 sal_uInt16& GetEnd() { return mnEnd; } 169 170 inline sal_uInt16 GetLen() const; 171 172 inline void MoveForward( sal_uInt16 nDiff ); 173 inline void MoveBackward( sal_uInt16 nDiff ); 174 175 inline void Expand( sal_uInt16 nDiff ); 176 inline void Collaps( sal_uInt16 nDiff ); 177 178 inline sal_Bool IsIn( sal_uInt16 nIndex ); 179 inline sal_Bool IsInside( sal_uInt16 nIndex ); 180 inline sal_Bool IsEmpty(); 181 182 }; 183 184 inline sal_uInt16 TextCharAttrib::GetLen() const 185 { 186 DBG_ASSERT( mnEnd >= mnStart, "TextCharAttrib: nEnd < nStart!" ); 187 return mnEnd-mnStart; 188 } 189 190 inline void TextCharAttrib::MoveForward( sal_uInt16 nDiff ) 191 { 192 DBG_ASSERT( ((long)mnEnd + nDiff) <= 0xFFFF, "TextCharAttrib: MoveForward?!" ); 193 mnStart = mnStart + nDiff; 194 mnEnd = mnEnd + nDiff; 195 } 196 197 inline void TextCharAttrib::MoveBackward( sal_uInt16 nDiff ) 198 { 199 DBG_ASSERT( ((long)mnStart - nDiff) >= 0, "TextCharAttrib: MoveBackward?!" ); 200 mnStart = mnStart - nDiff; 201 mnEnd = mnEnd - nDiff; 202 } 203 204 inline void TextCharAttrib::Expand( sal_uInt16 nDiff ) 205 { 206 DBG_ASSERT( ( ((long)mnEnd + nDiff) <= (long)0xFFFF ), "TextCharAttrib: Expand?!" ); 207 mnEnd = mnEnd + nDiff; 208 } 209 210 inline void TextCharAttrib::Collaps( sal_uInt16 nDiff ) 211 { 212 DBG_ASSERT( (long)mnEnd - nDiff >= (long)mnStart, "TextCharAttrib: Collaps?!" ); 213 mnEnd = mnEnd - nDiff; 214 } 215 216 inline sal_Bool TextCharAttrib::IsIn( sal_uInt16 nIndex ) 217 { 218 return ( ( mnStart <= nIndex ) && ( mnEnd >= nIndex ) ); 219 } 220 221 inline sal_Bool TextCharAttrib::IsInside( sal_uInt16 nIndex ) 222 { 223 return ( ( mnStart < nIndex ) && ( mnEnd > nIndex ) ); 224 } 225 226 inline sal_Bool TextCharAttrib::IsEmpty() 227 { 228 return mnStart == mnEnd; 229 } 230 231 #endif // _TXTATTR_HXX 232