update dev300-m57
[ooovba.git] / svtools / inc / ctrlbox.hxx
blob1feb2df2e43653c0784d13457a73685b6a3a3270
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: ctrlbox.hxx,v $
10 * $Revision: 1.15 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _CTRLBOX_HXX
32 #define _CTRLBOX_HXX
34 #include "svtools/svtdllapi.h"
36 #ifndef _LSTBOX_HXX
37 #include <vcl/lstbox.hxx>
38 #endif
39 #ifndef _COMBOBOX_HXX
40 #include <vcl/combobox.hxx>
41 #endif
42 #ifndef _IMAGE_HXX
43 #include <vcl/image.hxx>
44 #endif
45 #ifndef _VIRDEV_HXX
46 #include <vcl/virdev.hxx>
47 #endif
48 #ifndef _METRIC_HXX
49 #include <vcl/metric.hxx>
50 #endif
51 #ifndef _FIELD_HXX
52 #include <vcl/field.hxx>
53 #endif
55 class ImplFontList;
56 class ImpColorList;
57 class ImpLineList;
58 class FontList;
60 /*************************************************************************
62 Beschreibung
63 ============
65 class ColorListBox
67 Beschreibung
69 Erlaubt die Auswahl von Farben.
71 --------------------------------------------------------------------------
73 class LineListBox
75 Beschreibung
77 Erlaubt die Auswahl von Linien-Styles und Groessen. Es ist darauf zu achten,
78 das vor dem ersten Insert die Units und die Fesntergroesse gesetzt sein
79 muessen. An Unit wird Point und mm unterstuetzt und als SourceUnit Point,
80 mm und Twips. Alle Angaben muessen in 100teln der jeweiligen Einheit
81 vorliegen.
83 Line1 ist aeussere, Line2 die innere und Distance die Distanz zwischen
84 den beiden Linien. Wenn Line2 = 0 ist, wird nur Line1 angezeigt. Als
85 Default sind sowohl Source als auch Ziel-Unit FUNIT_POINT.
87 Mit SetColor() kann die Linienfarbe eingestellt werden.
89 Anmerkungen und Ausnahmen
91 Gegenueber einer normalen ListBox, koennen keine User-Daten gesetzt
92 werden. Ausserdem sollte wenn der UpdateMode ausgeschaltet ist, keine
93 Daten abgefragt oder die Selektion gesetzt werden, da in diesem Zustand
94 die Daten nicht definiert sind. Wenn der UpdateMode ausgeschaltet ist,
95 sollte der Rueckgabewert bei Insert nicht ausgewertet werden, da er keine
96 Bedeutung hat. Ausserdem darf nicht das WinBit WB_SORT gesetzt sein.
98 --------------------------------------------------------------------------
100 class FontNameBox
102 Beschreibung
104 Erlaubt die Auswahl von Fonts. Die ListBox wird mit Fill gefuellt, wo
105 ein Pointer auf eine FontList uebergeben werden muss.
107 Mit EnableWYSIWYG() kann man einstellen, das die Fontnamen in Ihrer Schrift
108 angezeigt werden und mit EnableSymbols() kann eingestellt werden, das
109 vor dem Namen ueber ein Symbol angezeigt wird, ob es sich um eine
110 Drucker oder Bildschirmschrift handelt.
112 Querverweise
114 FontList; FontStyleBox; FontSizeBox; FontNameMenu
116 --------------------------------------------------------------------------
118 class FontStyleBox
120 Beschreibung
122 Erlaubt die Auswahl eines FontStyles. Mit Fill wird die ListBox mit
123 den Styles zum uebergebenen Font gefuellt. Nachgebildete Styles werden
124 immer mit eingefuegt (kann sich aber noch aendern, da vielleicht
125 nicht alle Applikationen [StarDraw,Formel,FontWork] mit Syntetic-Fonts
126 umgehen koennen). Bei Fill bleibt vorherige Name soweit wie moeglich
127 erhalten.
129 Fuer DontKnow sollte die FontStyleBox mit String() gefuellt werden.
130 Dann enthaellt die Liste die Standardattribute. Der Style, der gerade
131 angezeigt wird, muss gegebenenfalls noch vom Programm zurueckgesetzt werden.
133 Querverweise
135 FontList; FontNameBox; FontSizeBox; FontStyleMenu
137 --------------------------------------------------------------------------
139 class FontSizeBox
141 Beschreibung
143 Erlaubt die Auswahl von Fontgroessen. Werte werden ueber GetValue()
144 abgefragt und ueber SetValue() gesetzt. Fill fuellt die ListBox mit den
145 Groessen zum uebergebenen Font. Alle Groessen werden in 10tel Point
146 angegeben. Die FontListe, die bei Fill uebergeben wird, muss bis zum
147 naechsten Fill-Aufruf erhalten bleiben.
149 Zusaetzlich erlaubt die FontSizeBox noch einen Relative-Mode. Dieser
150 dient dazu, Prozent-Werte eingeben zu koennen. Dies kann zum Beispiel
151 nuetzlich sein, wenn man die Box in einem Vorlagen-Dialog anbietet.
152 Dieser Modus ist nur anschaltbar, jedoch nicht wieder abschaltbar.
154 Fuer DontKnow sollte die FontSizeBox mit FontInfo() gefuellt werden.
155 Dann enthaellt die Liste die Standardgroessen. Die Groesse, die gerade
156 angezeigt wird, muss gegebenenfalls noch vom Programm zurueckgesetzt werden.
158 Querverweise
160 FontList; FontNameBox; FontStyleBox; FontSizeMenu
162 *************************************************************************/
164 // ----------------
165 // - ColorListBox -
166 // ----------------
168 class SVT_DLLPUBLIC ColorListBox : public ListBox
170 ImpColorList* pColorList; // Separate Liste, falls UserDaten von aussen verwendet werden.
171 Size aImageSize;
173 #ifdef _CTRLBOX_CXX
174 using Window::ImplInit;
175 SVT_DLLPRIVATE void ImplInit();
176 SVT_DLLPRIVATE void ImplDestroyColorEntries();
177 #endif
178 public:
179 ColorListBox( Window* pParent,
180 WinBits nWinStyle = WB_BORDER );
181 ColorListBox( Window* pParent, const ResId& rResId );
182 virtual ~ColorListBox();
184 virtual void UserDraw( const UserDrawEvent& rUDEvt );
186 using ListBox::InsertEntry;
187 virtual USHORT InsertEntry( const XubString& rStr,
188 USHORT nPos = LISTBOX_APPEND );
189 virtual USHORT InsertEntry( const Color& rColor, const XubString& rStr,
190 USHORT nPos = LISTBOX_APPEND );
191 void InsertAutomaticEntry();
192 using ListBox::RemoveEntry;
193 virtual void RemoveEntry( USHORT nPos );
194 virtual void Clear();
195 void CopyEntries( const ColorListBox& rBox );
197 using ListBox::GetEntryPos;
198 virtual USHORT GetEntryPos( const Color& rColor ) const;
199 virtual Color GetEntryColor( USHORT nPos ) const;
200 Size GetImageSize() const { return aImageSize; }
202 void SelectEntry( const XubString& rStr, BOOL bSelect = TRUE )
203 { ListBox::SelectEntry( rStr, bSelect ); }
204 void SelectEntry( const Color& rColor, BOOL bSelect = TRUE );
205 XubString GetSelectEntry( USHORT nSelIndex = 0 ) const
206 { return ListBox::GetSelectEntry( nSelIndex ); }
207 Color GetSelectEntryColor( USHORT nSelIndex = 0 ) const;
208 BOOL IsEntrySelected( const XubString& rStr ) const
209 { return ListBox::IsEntrySelected( rStr ); }
211 BOOL IsEntrySelected( const Color& rColor ) const;
213 private:
214 // declared as private because some compilers would generate the default functions
215 ColorListBox( const ColorListBox& );
216 ColorListBox& operator =( const ColorListBox& );
218 void SetEntryData( USHORT nPos, void* pNewData );
219 void* GetEntryData( USHORT nPos ) const;
222 inline void ColorListBox::SelectEntry( const Color& rColor, BOOL bSelect )
224 USHORT nPos = GetEntryPos( rColor );
225 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
226 ListBox::SelectEntryPos( nPos, bSelect );
229 inline BOOL ColorListBox::IsEntrySelected( const Color& rColor ) const
231 USHORT nPos = GetEntryPos( rColor );
232 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
233 return IsEntryPosSelected( nPos );
234 else
235 return FALSE;
238 inline Color ColorListBox::GetSelectEntryColor( USHORT nSelIndex ) const
240 USHORT nPos = GetSelectEntryPos( nSelIndex );
241 Color aColor;
242 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
243 aColor = GetEntryColor( nPos );
244 return aColor;
247 // ---------------
248 // - LineListBox -
249 // ---------------
251 class SVT_DLLPUBLIC LineListBox : public ListBox
253 ImpLineList* pLineList;
254 VirtualDevice aVirDev;
255 Size aTxtSize;
256 Color aColor;
257 Color maPaintCol;
258 FieldUnit eUnit;
259 FieldUnit eSourceUnit;
261 SVT_DLLPRIVATE void ImpGetLine( long nLine1, long nLine2, long nDistance, Bitmap& rBmp, XubString& rStr );
262 using Window::ImplInit;
263 SVT_DLLPRIVATE void ImplInit();
264 void UpdateLineColors( void );
265 BOOL UpdatePaintLineColor( void ); // returns TRUE if maPaintCol has changed
266 inline const Color& GetPaintColor( void ) const;
267 virtual void DataChanged( const DataChangedEvent& rDCEvt );
269 public:
270 LineListBox( Window* pParent, WinBits nWinStyle = WB_BORDER );
271 LineListBox( Window* pParent, const ResId& rResId );
272 virtual ~LineListBox();
274 using ListBox::InsertEntry;
275 virtual USHORT InsertEntry( const XubString& rStr, USHORT nPos = LISTBOX_APPEND );
276 virtual USHORT InsertEntry( long nLine1, long nLine2 = 0, long nDistance = 0, USHORT nPos = LISTBOX_APPEND );
277 using ListBox::RemoveEntry;
278 virtual void RemoveEntry( USHORT nPos );
279 virtual void Clear();
281 using ListBox::GetEntryPos;
282 USHORT GetEntryPos( long nLine1, long nLine2 = 0, long nDistance = 0 ) const;
283 long GetEntryLine1( USHORT nPos ) const;
284 long GetEntryLine2( USHORT nPos ) const;
285 long GetEntryDistance( USHORT nPos ) const;
287 inline void SelectEntry( const XubString& rStr, BOOL bSelect = TRUE ) { ListBox::SelectEntry( rStr, bSelect ); }
288 void SelectEntry( long nLine1, long nLine2 = 0, long nDistance = 0, BOOL bSelect = TRUE );
289 long GetSelectEntryLine1( USHORT nSelIndex = 0 ) const;
290 long GetSelectEntryLine2( USHORT nSelIndex = 0 ) const;
291 long GetSelectEntryDistance( USHORT nSelIndex = 0 ) const;
292 inline BOOL IsEntrySelected( const XubString& rStr ) const { return ListBox::IsEntrySelected( rStr ); }
293 BOOL IsEntrySelected( long nLine1, long nLine2 = 0, long nDistance = 0 ) const;
295 inline void SetUnit( FieldUnit eNewUnit ) { eUnit = eNewUnit; }
296 inline FieldUnit GetUnit() const { return eUnit; }
297 inline void SetSourceUnit( FieldUnit eNewUnit ) { eSourceUnit = eNewUnit; }
298 inline FieldUnit GetSourceUnit() const { return eSourceUnit; }
300 void SetColor( const Color& rColor );
301 inline Color GetColor( void ) const;
303 private:
304 // declared as private because some compilers would generate the default methods
305 LineListBox( const LineListBox& );
306 LineListBox& operator =( const LineListBox& );
307 void SetEntryData( USHORT nPos, void* pNewData );
308 void* GetEntryData( USHORT nPos ) const;
311 inline void LineListBox::SelectEntry( long nLine1, long nLine2, long nDistance, BOOL bSelect )
313 USHORT nPos = GetEntryPos( nLine1, nLine2, nDistance );
314 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
315 ListBox::SelectEntryPos( nPos, bSelect );
318 inline long LineListBox::GetSelectEntryLine1( USHORT nSelIndex ) const
320 USHORT nPos = GetSelectEntryPos( nSelIndex );
321 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
322 return GetEntryLine1( nPos );
323 else
324 return 0;
327 inline long LineListBox::GetSelectEntryLine2( USHORT nSelIndex ) const
329 USHORT nPos = GetSelectEntryPos( nSelIndex );
330 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
331 return GetEntryLine2( nPos );
332 else
333 return 0;
336 inline long LineListBox::GetSelectEntryDistance( USHORT nSelIndex ) const
338 USHORT nPos = GetSelectEntryPos( nSelIndex );
339 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
340 return GetEntryDistance( nPos );
341 else
342 return 0;
345 inline BOOL LineListBox::IsEntrySelected( long nLine1, long nLine2, long nDistance ) const
347 USHORT nPos = GetEntryPos( nLine1, nLine2, nDistance );
348 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
349 return IsEntryPosSelected( nPos );
350 else
351 return FALSE;
354 inline void LineListBox::SetColor( const Color& rColor )
356 aColor = rColor;
358 UpdateLineColors();
361 inline Color LineListBox::GetColor( void ) const
363 return aColor;
367 // ---------------
368 // - FontNameBox -
369 // ---------------
371 class SVT_DLLPUBLIC FontNameBox : public ComboBox
373 private:
374 ImplFontList* mpFontList;
375 Image maImagePrinterFont;
376 Image maImageBitmapFont;
377 Image maImageScalableFont;
378 BOOL mbWYSIWYG;
379 BOOL mbSymbols;
381 #ifdef _CTRLBOX_CXX
382 SVT_DLLPRIVATE void ImplCalcUserItemSize();
383 SVT_DLLPRIVATE void ImplDestroyFontList();
384 #endif
386 void InitBitmaps( void );
387 protected:
388 virtual void DataChanged( const DataChangedEvent& rDCEvt );
389 public:
390 FontNameBox( Window* pParent,
391 WinBits nWinStyle = WB_SORT );
392 FontNameBox( Window* pParent, const ResId& rResId );
393 virtual ~FontNameBox();
395 virtual void UserDraw( const UserDrawEvent& rUDEvt );
397 void Fill( const FontList* pList );
399 void EnableWYSIWYG( BOOL bEnable = TRUE );
400 BOOL IsWYSIWYGEnabled() const { return mbWYSIWYG; }
402 void EnableSymbols( BOOL bEnable = TRUE );
403 BOOL IsSymbolsEnabled() const { return mbSymbols; }
405 private:
406 // declared as private because some compilers would generate the default functions
407 FontNameBox( const FontNameBox& );
408 FontNameBox& operator =( const FontNameBox& );
411 // ----------------
412 // - FontStyleBox -
413 // ----------------
415 class SVT_DLLPUBLIC FontStyleBox : public ComboBox
417 XubString aLastStyle;
419 private:
420 using ComboBox::SetText;
421 public:
422 FontStyleBox( Window* pParent, WinBits nWinStyle = 0 );
423 FontStyleBox( Window* pParent, const ResId& rResId );
424 virtual ~FontStyleBox();
426 virtual void Select();
427 virtual void LoseFocus();
428 virtual void Modify();
430 void SetText( const XubString& rText );
431 void Fill( const XubString& rName, const FontList* pList );
433 private:
434 // declared as private because some compilers would generate the default functions
435 FontStyleBox( const FontStyleBox& );
436 FontStyleBox& operator =( const FontStyleBox& );
439 inline void FontStyleBox::SetText( const XubString& rText )
441 aLastStyle = rText;
442 ComboBox::SetText( rText );
445 // ---------------
446 // - FontSizeBox -
447 // ---------------
449 class SVT_DLLPUBLIC FontSizeBox : public MetricBox
451 FontInfo aFontInfo;
452 const FontList* pFontList;
453 USHORT nRelMin;
454 USHORT nRelMax;
455 USHORT nRelStep;
456 short nPtRelMin;
457 short nPtRelMax;
458 short nPtRelStep;
459 BOOL bRelativeMode:1,
460 bRelative:1,
461 bPtRelative:1,
462 bStdSize:1;
464 #ifdef _CTRLBOX_CXX
465 using Window::ImplInit;
466 SVT_DLLPRIVATE void ImplInit();
467 #endif
469 protected:
470 virtual XubString CreateFieldText( sal_Int64 nValue ) const;
472 public:
473 FontSizeBox( Window* pParent, WinBits nWinStyle = 0 );
474 FontSizeBox( Window* pParent, const ResId& rResId );
475 virtual ~FontSizeBox();
477 void Reformat();
478 void Modify();
480 void Fill( const FontInfo* pInfo, const FontList* pList );
482 void EnableRelativeMode( USHORT nMin = 50, USHORT nMax = 150,
483 USHORT nStep = 5 );
484 void EnablePtRelativeMode( short nMin = -200, short nMax = 200,
485 short nStep = 10 );
486 BOOL IsRelativeMode() const { return bRelativeMode; }
487 void SetRelative( BOOL bRelative = FALSE );
488 BOOL IsRelative() const { return bRelative; }
489 void SetPtRelative( BOOL bPtRel = TRUE )
490 { bPtRelative = bPtRel; SetRelative( TRUE ); }
491 BOOL IsPtRelative() const { return bPtRelative; }
493 virtual void SetValue( sal_Int64 nNewValue, FieldUnit eInUnit );
494 virtual void SetValue( sal_Int64 nNewValue );
495 virtual sal_Int64 GetValue( FieldUnit eOutUnit ) const;
496 virtual sal_Int64 GetValue() const;
497 sal_Int64 GetValue( USHORT nPos, FieldUnit eOutUnit ) const;
498 void SetUserValue( sal_Int64 nNewValue, FieldUnit eInUnit );
499 void SetUserValue( sal_Int64 nNewValue ) { SetUserValue( nNewValue, FUNIT_NONE ); }
501 private:
502 // declared as private because some compilers would generate the default functions
503 FontSizeBox( const FontSizeBox& );
504 FontSizeBox& operator =( const FontSizeBox& );
507 #endif // _CTRLBOX_HXX