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 UTILITY_HXX 24 #define UTILITY_HXX 25 26 #include <sfx2/minarray.hxx> 27 #ifndef _FONT_HXX //autogen 28 #include <vcl/font.hxx> 29 #endif 30 #include <vcl/fixed.hxx> 31 #include <vcl/combobox.hxx> 32 #include <vcl/lstbox.hxx> 33 #include <tools/fract.hxx> 34 35 36 class SmRect; 37 class String; 38 39 #define C2S(cChar) String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(cChar)) 40 41 42 ///////////////////////////////////////////////////////////////// 43 44 inline long SmPtsTo100th_mm(long nNumPts) 45 // returns the length (in 100th of mm) that corresponds to the length 46 // 'nNumPts' (in units points). 47 // 72.27 [pt] = 1 [inch] = 2,54 [cm] = 2540 [100th of mm]. 48 // result is being rounded to the nearest integer. 49 { 50 DBG_ASSERT(nNumPts >= 0, "Sm : Ooops..."); 51 // broken into multiple and fraction of 'nNumPts' to reduce chance 52 // of overflow 53 // (7227 / 2) is added in order to round to the nearest integer 54 return 35 * nNumPts + (nNumPts * 1055L + (7227 / 2)) / 7227L; 55 } 56 57 58 inline long SmPtsTo100th_mm(const Fraction &rNumPts) 59 // as above but with argument 'rNumPts' as 'Fraction' 60 { 61 Fraction aTmp (254000L, 7227L); 62 return aTmp *= rNumPts; 63 } 64 65 66 inline Fraction Sm100th_mmToPts(long nNum100th_mm) 67 // returns the length (in points) that corresponds to the length 68 // 'nNum100th_mm' (in 100th of mm). 69 { 70 DBG_ASSERT(nNum100th_mm >= 0, "Sm : Ooops..."); 71 Fraction aTmp (7227L, 254000L); 72 return aTmp *= Fraction(nNum100th_mm); 73 } 74 75 76 inline long SmRoundFraction(const Fraction &rFrac) 77 { 78 DBG_ASSERT(rFrac > Fraction(), "Sm : Ooops..."); 79 return (rFrac.GetNumerator() + rFrac.GetDenominator() / 2) / rFrac.GetDenominator(); 80 } 81 82 83 class SmViewShell; 84 SmViewShell * SmGetActiveView(); 85 86 87 //////////////////////////////////////////////////////////// 88 // 89 // SmFace 90 // 91 92 sal_Bool IsItalic( const Font &rFont ); 93 sal_Bool IsBold( const Font &rFont ); 94 95 class SmFace : public Font 96 { 97 long nBorderWidth; 98 99 void Impl_Init(); 100 101 public: 102 SmFace() : 103 Font(), nBorderWidth(-1) { Impl_Init(); } 104 SmFace(const Font& rFont) : 105 Font(rFont), nBorderWidth(-1) { Impl_Init(); } 106 SmFace(const String& rName, const Size& rSize) : 107 Font(rName, rSize), nBorderWidth(-1) { Impl_Init(); } 108 SmFace( FontFamily eFamily, const Size& rSize) : 109 Font(eFamily, rSize), nBorderWidth(-1) { Impl_Init(); } 110 111 SmFace(const SmFace &rFace) : 112 Font(rFace), nBorderWidth(-1) { Impl_Init(); } 113 114 // overloaded version in order to supply a min value 115 // for font size (height). (Also used in ctor's to do so.) 116 void SetSize(const Size& rSize); 117 118 void SetBorderWidth(long nWidth) { nBorderWidth = nWidth; } 119 long GetBorderWidth() const; 120 long GetDefaultBorderWidth() const { return GetSize().Height() / 20 ; } 121 void FreezeBorderWidth() { nBorderWidth = GetDefaultBorderWidth(); } 122 123 SmFace & operator = (const SmFace &rFace); 124 }; 125 126 SmFace & operator *= (SmFace &rFace, const Fraction &rFrac); 127 128 129 #ifdef NEVER 130 //////////////////////////////////////////////////////////// 131 // 132 // SmInfoText 133 // 134 135 class SmInfoText : public FixedText 136 { 137 protected: 138 sal_uInt16 nMaxLen; 139 String aText; 140 141 public: 142 SmInfoText(Window* pParent, WinBits nWinStyle = 0, sal_uInt16 nMax = 128); 143 SmInfoText(Window* pParent, const ResId& rResId, sal_uInt16 nMax = 128); 144 145 void SetText(const String& rStr); 146 147 XubString GetText() const { return (aText); } 148 }; 149 #endif 150 151 152 //////////////////////////////////////////////////////////// 153 // 154 // SmPickList 155 // 156 157 class SmPickList : public SfxPtrArr 158 { 159 protected: 160 sal_uInt16 nSize; 161 162 virtual void *CreateItem(const String& rString) = 0; 163 virtual void *CreateItem(const void *pItem) = 0; 164 virtual void DestroyItem(void *pItem) = 0; 165 166 virtual sal_Bool CompareItem(const void *pFirstItem, const void *pSecondItem) const = 0; 167 168 virtual String GetStringItem(void *pItem) = 0; 169 170 void *GetPtr(sal_uInt16 nPos) const { return SfxPtrArr::GetObject(nPos); } 171 void *&GetPtr(sal_uInt16 nPos) { return SfxPtrArr::GetObject(nPos); } 172 void InsertPtr(sal_uInt16 nPos, void *pItem) { SfxPtrArr::Insert(nPos, pItem); } 173 void RemovePtr(sal_uInt16 nPos, sal_uInt16 nCount = 1) { SfxPtrArr::Remove(nPos, nCount); } 174 175 public: 176 SmPickList(sal_uInt16 nInitSize = 0, sal_uInt16 nMaxSize = 5); 177 virtual ~SmPickList(); 178 179 SmPickList& operator = (const SmPickList& rList); 180 181 void *Get(sal_uInt16 nPos = 0) const { return GetPtr(nPos); } 182 using SfxPtrArr::Insert; 183 void Insert(const void* pItem); 184 void Update(const void* pItem, const void *pNewItem); 185 using SfxPtrArr::Remove; 186 void Remove(const void* pItem); 187 188 using SfxPtrArr::operator []; 189 void *operator [] (sal_uInt16 nPos) const { return GetPtr(nPos); } 190 191 sal_uInt16 GetSize() const { return nSize; } 192 sal_uInt16 Count() const { return SfxPtrArr::Count(); } 193 194 void Clear(); 195 }; 196 197 198 //////////////////////////////////////////////////////////// 199 // 200 // SmStringPickList 201 // 202 #ifdef NEVER 203 class SmStringPickList : public SmPickList 204 { 205 protected: 206 virtual void *CreateItem(const String& rString); 207 virtual void *CreateItem(const void *pItem); 208 virtual void DestroyItem(void *pItem); 209 210 virtual sal_Bool CompareItem(const void *pFirstItem, const void *pSecondItem) const; 211 212 virtual String GetStringItem(void *pItem); 213 214 public: 215 SmStringPickList() 216 : SmPickList(0, 5) {} 217 SmStringPickList(sal_uInt16 nInitSize, sal_uInt16 nMaxSize) 218 : SmPickList(nInitSize, nMaxSize) {} 219 SmStringPickList(const SmPickList& rOrig ) 220 : SmPickList(rOrig) {} 221 virtual ~SmStringPickList() { Clear(); } 222 223 virtual void Insert(const String &rString); 224 virtual void Update(const String &rString, const String &rNewString); 225 virtual void Remove(const String &rString); 226 227 inline sal_Bool Contains(const String &rString) const; 228 inline String Get(sal_uInt16 nPos = 0) const; 229 230 inline SmStringPickList& operator = (const SmStringPickList& rList); 231 inline String operator [] (sal_uInt16 nPos) const; 232 }; 233 234 inline SmStringPickList& SmStringPickList::operator = (const SmStringPickList& rList) 235 { 236 *(SmPickList *)this = *(SmPickList *)&rList; return *this; 237 } 238 239 inline String SmStringPickList::operator [] (sal_uInt16 nPos) const 240 { 241 return *((String *)SmPickList::operator[](nPos)); 242 } 243 244 inline String SmStringPickList::Get(sal_uInt16 nPos) const 245 { 246 return nPos < Count() ? *((String *)SmPickList::Get(nPos)) : String(); 247 } 248 249 inline sal_Bool SmStringPickList::Contains(const String &rString) const 250 { 251 return SmPickList::Contains((void *)&rString); 252 } 253 #endif 254 255 //////////////////////////////////////////////////////////// 256 // 257 // SmFontPickList 258 // 259 260 class SmFontDialog; 261 262 class SmFontPickList : public SmPickList 263 { 264 protected: 265 virtual void *CreateItem(const String& rString); 266 virtual void *CreateItem(const void *pItem); 267 virtual void DestroyItem(void *pItem); 268 269 virtual sal_Bool CompareItem(const void *pFirstItem, const void *pSecondItem) const; 270 271 virtual String GetStringItem(void *pItem); 272 273 public: 274 SmFontPickList() 275 : SmPickList(0, 5) {} 276 SmFontPickList(sal_uInt16 nInitSize, sal_uInt16 nMaxSize) 277 : SmPickList(nInitSize, nMaxSize) {} 278 SmFontPickList(const SmPickList& rOrig ) 279 : SmPickList(rOrig) {} 280 virtual ~SmFontPickList() { Clear(); } 281 282 using SfxPtrArr::Insert; 283 virtual void Insert(const Font &rFont); 284 using SmPickList::Update; 285 virtual void Update(const Font &rFont, const Font &rNewFont); 286 using SfxPtrArr::Remove; 287 virtual void Remove(const Font &rFont); 288 289 using SmPickList::Contains; 290 inline sal_Bool Contains(const Font &rFont) const; 291 inline Font Get(sal_uInt16 nPos = 0) const; 292 293 inline SmFontPickList& operator = (const SmFontPickList& rList); 294 using SfxPtrArr::operator []; 295 inline Font operator [] (sal_uInt16 nPos) const; 296 297 void ReadFrom(const SmFontDialog& rDialog); 298 void WriteTo(SmFontDialog& rDialog) const; 299 }; 300 301 inline SmFontPickList& SmFontPickList::operator = (const SmFontPickList& rList) 302 { 303 *(SmPickList *)this = *(SmPickList *)&rList; return *this; 304 } 305 306 inline Font SmFontPickList::operator [] (sal_uInt16 nPos) const 307 { 308 return *((Font *)SmPickList::operator[](nPos)); 309 } 310 311 inline Font SmFontPickList::Get(sal_uInt16 nPos) const 312 { 313 return nPos < Count() ? *((Font *)SmPickList::Get(nPos)) : Font(); 314 } 315 316 inline sal_Bool SmFontPickList::Contains(const Font &rFont) const 317 { 318 return SmPickList::Contains((void *)&rFont); 319 } 320 321 322 //////////////////////////////////////////////////////////// 323 // 324 // SmStringPickComboBox 325 // 326 #ifdef NEVER 327 class SmStringPickComboBox : public SmStringPickList, public ComboBox 328 { 329 protected: 330 virtual void LoseFocus(); 331 332 DECL_LINK(SelectHdl, ComboBox *); 333 334 public: 335 SmStringPickComboBox(Window* pParent, WinBits nWinStyle = 0, sal_uInt16 nMax = 4); 336 SmStringPickComboBox(Window* pParent, const ResId& rResId, sal_uInt16 nMax = 4); 337 338 SmStringPickComboBox& operator = (const SmStringPickList& rList); 339 340 void SetText(const String& rStr); 341 342 virtual void Insert(const String &rString); 343 virtual void Update(const String &rString, const String &rNewString); 344 virtual void Remove(const String &rString); 345 }; 346 #endif 347 348 //////////////////////////////////////////////////////////// 349 // 350 // SmFontPickListBox 351 // 352 353 class SmFontPickListBox : public SmFontPickList, public ListBox 354 { 355 protected: 356 DECL_LINK(SelectHdl, ListBox *); 357 358 public: 359 SmFontPickListBox(Window* pParent, const ResId& rResId, sal_uInt16 nMax = 4); 360 361 SmFontPickListBox& operator = (const SmFontPickList& rList); 362 363 using SfxPtrArr::Insert; 364 virtual void Insert(const Font &rFont); 365 using Window::Update; 366 virtual void Update(const Font &rFont, const Font &rNewFont); 367 using SfxPtrArr::Remove; 368 virtual void Remove(const Font &rFont); 369 }; 370 371 #endif 372 373