1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: ctrlbox.hxx,v $
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 ************************************************************************/
34 #include "svtools/svtdllapi.h"
37 #include <vcl/lstbox.hxx>
40 #include <vcl/combobox.hxx>
43 #include <vcl/image.hxx>
46 #include <vcl/virdev.hxx>
49 #include <vcl/metric.hxx>
52 #include <vcl/field.hxx>
60 /*************************************************************************
69 Erlaubt die Auswahl von Farben.
71 --------------------------------------------------------------------------
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
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 --------------------------------------------------------------------------
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.
114 FontList; FontStyleBox; FontSizeBox; FontNameMenu
116 --------------------------------------------------------------------------
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
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.
135 FontList; FontNameBox; FontSizeBox; FontStyleMenu
137 --------------------------------------------------------------------------
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.
160 FontList; FontNameBox; FontStyleBox; FontSizeMenu
162 *************************************************************************/
168 class SVT_DLLPUBLIC ColorListBox
: public ListBox
170 ImpColorList
* pColorList
; // Separate Liste, falls UserDaten von aussen verwendet werden.
174 using Window::ImplInit
;
175 SVT_DLLPRIVATE
void ImplInit();
176 SVT_DLLPRIVATE
void ImplDestroyColorEntries();
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;
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
);
238 inline Color
ColorListBox::GetSelectEntryColor( USHORT nSelIndex
) const
240 USHORT nPos
= GetSelectEntryPos( nSelIndex
);
242 if ( nPos
!= LISTBOX_ENTRY_NOTFOUND
)
243 aColor
= GetEntryColor( nPos
);
251 class SVT_DLLPUBLIC LineListBox
: public ListBox
253 ImpLineList
* pLineList
;
254 VirtualDevice aVirDev
;
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
);
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;
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
);
327 inline long LineListBox::GetSelectEntryLine2( USHORT nSelIndex
) const
329 USHORT nPos
= GetSelectEntryPos( nSelIndex
);
330 if ( nPos
!= LISTBOX_ENTRY_NOTFOUND
)
331 return GetEntryLine2( nPos
);
336 inline long LineListBox::GetSelectEntryDistance( USHORT nSelIndex
) const
338 USHORT nPos
= GetSelectEntryPos( nSelIndex
);
339 if ( nPos
!= LISTBOX_ENTRY_NOTFOUND
)
340 return GetEntryDistance( nPos
);
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
);
354 inline void LineListBox::SetColor( const Color
& rColor
)
361 inline Color
LineListBox::GetColor( void ) const
371 class SVT_DLLPUBLIC FontNameBox
: public ComboBox
374 ImplFontList
* mpFontList
;
375 Image maImagePrinterFont
;
376 Image maImageBitmapFont
;
377 Image maImageScalableFont
;
382 SVT_DLLPRIVATE
void ImplCalcUserItemSize();
383 SVT_DLLPRIVATE
void ImplDestroyFontList();
386 void InitBitmaps( void );
388 virtual void DataChanged( const DataChangedEvent
& rDCEvt
);
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
; }
406 // declared as private because some compilers would generate the default functions
407 FontNameBox( const FontNameBox
& );
408 FontNameBox
& operator =( const FontNameBox
& );
415 class SVT_DLLPUBLIC FontStyleBox
: public ComboBox
417 XubString aLastStyle
;
420 using ComboBox::SetText
;
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
);
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
)
442 ComboBox::SetText( rText
);
449 class SVT_DLLPUBLIC FontSizeBox
: public MetricBox
452 const FontList
* pFontList
;
459 BOOL bRelativeMode
:1,
465 using Window::ImplInit
;
466 SVT_DLLPRIVATE
void ImplInit();
470 virtual XubString
CreateFieldText( sal_Int64 nValue
) const;
473 FontSizeBox( Window
* pParent
, WinBits nWinStyle
= 0 );
474 FontSizeBox( Window
* pParent
, const ResId
& rResId
);
475 virtual ~FontSizeBox();
480 void Fill( const FontInfo
* pInfo
, const FontList
* pList
);
482 void EnableRelativeMode( USHORT nMin
= 50, USHORT nMax
= 150,
484 void EnablePtRelativeMode( short nMin
= -200, short nMax
= 200,
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
); }
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