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