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
SmPtsTo100th_mm(long nNumPts)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
SmPtsTo100th_mm(const Fraction & rNumPts)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
Sm100th_mmToPts(long nNum100th_mm)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
SmRoundFraction(const Fraction & rFrac)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:
SmFace()102 SmFace() :
103 Font(), nBorderWidth(-1) { Impl_Init(); }
SmFace(const Font & rFont)104 SmFace(const Font& rFont) :
105 Font(rFont), nBorderWidth(-1) { Impl_Init(); }
SmFace(const String & rName,const Size & rSize)106 SmFace(const String& rName, const Size& rSize) :
107 Font(rName, rSize), nBorderWidth(-1) { Impl_Init(); }
SmFace(FontFamily eFamily,const Size & rSize)108 SmFace( FontFamily eFamily, const Size& rSize) :
109 Font(eFamily, rSize), nBorderWidth(-1) { Impl_Init(); }
110
SmFace(const SmFace & rFace)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
SetBorderWidth(long nWidth)118 void SetBorderWidth(long nWidth) { nBorderWidth = nWidth; }
119 long GetBorderWidth() const;
GetDefaultBorderWidth() const120 long GetDefaultBorderWidth() const { return GetSize().Height() / 20 ; }
FreezeBorderWidth()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
GetText() const147 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
GetPtr(sal_uInt16 nPos) const170 void *GetPtr(sal_uInt16 nPos) const { return SfxPtrArr::GetObject(nPos); }
GetPtr(sal_uInt16 nPos)171 void *&GetPtr(sal_uInt16 nPos) { return SfxPtrArr::GetObject(nPos); }
InsertPtr(sal_uInt16 nPos,void * pItem)172 void InsertPtr(sal_uInt16 nPos, void *pItem) { SfxPtrArr::Insert(nPos, pItem); }
RemovePtr(sal_uInt16 nPos,sal_uInt16 nCount=1)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
Get(sal_uInt16 nPos=0) const181 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 [];
operator [](sal_uInt16 nPos) const189 void *operator [] (sal_uInt16 nPos) const { return GetPtr(nPos); }
190
GetSize() const191 sal_uInt16 GetSize() const { return nSize; }
Count() const192 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:
SmStringPickList()215 SmStringPickList()
216 : SmPickList(0, 5) {}
SmStringPickList(sal_uInt16 nInitSize,sal_uInt16 nMaxSize)217 SmStringPickList(sal_uInt16 nInitSize, sal_uInt16 nMaxSize)
218 : SmPickList(nInitSize, nMaxSize) {}
SmStringPickList(const SmPickList & rOrig)219 SmStringPickList(const SmPickList& rOrig )
220 : SmPickList(rOrig) {}
~SmStringPickList()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
operator =(const SmStringPickList & rList)234 inline SmStringPickList& SmStringPickList::operator = (const SmStringPickList& rList)
235 {
236 *(SmPickList *)this = *(SmPickList *)&rList; return *this;
237 }
238
operator [](sal_uInt16 nPos) const239 inline String SmStringPickList::operator [] (sal_uInt16 nPos) const
240 {
241 return *((String *)SmPickList::operator[](nPos));
242 }
243
Get(sal_uInt16 nPos) const244 inline String SmStringPickList::Get(sal_uInt16 nPos) const
245 {
246 return nPos < Count() ? *((String *)SmPickList::Get(nPos)) : String();
247 }
248
Contains(const String & rString) const249 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:
SmFontPickList()274 SmFontPickList()
275 : SmPickList(0, 5) {}
SmFontPickList(sal_uInt16 nInitSize,sal_uInt16 nMaxSize)276 SmFontPickList(sal_uInt16 nInitSize, sal_uInt16 nMaxSize)
277 : SmPickList(nInitSize, nMaxSize) {}
SmFontPickList(const SmPickList & rOrig)278 SmFontPickList(const SmPickList& rOrig )
279 : SmPickList(rOrig) {}
~SmFontPickList()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
operator =(const SmFontPickList & rList)301 inline SmFontPickList& SmFontPickList::operator = (const SmFontPickList& rList)
302 {
303 *(SmPickList *)this = *(SmPickList *)&rList; return *this;
304 }
305
operator [](sal_uInt16 nPos) const306 inline Font SmFontPickList::operator [] (sal_uInt16 nPos) const
307 {
308 return *((Font *)SmPickList::operator[](nPos));
309 }
310
Get(sal_uInt16 nPos) const311 inline Font SmFontPickList::Get(sal_uInt16 nPos) const
312 {
313 return nPos < Count() ? *((Font *)SmPickList::Get(nPos)) : Font();
314 }
315
Contains(const Font & rFont) const316 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