xref: /AOO41X/main/starmath/inc/utility.hxx (revision f6a9d5ca17e19b2857f1a47d10ddf4e3f0a53446)
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