1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/propgrid/advprops.h
3 // Purpose: wxPropertyGrid Advanced Properties (font, colour, etc.)
4 // Author: Jaakko Salli
8 // Copyright: (c) Jaakko Salli
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_PROPGRID_ADVPROPS_H_
13 #define _WX_PROPGRID_ADVPROPS_H_
17 #include "wx/propgrid/props.h"
19 // -----------------------------------------------------------------------
23 // Additional Value Type Handlers
26 bool WXDLLIMPEXP_PROPGRID
operator==(const wxFont
&, const wxFont
&);
28 bool WXDLLIMPEXP_PROPGRID
29 operator==(const wxArrayInt
& array1
, const wxArrayInt
& array2
);
34 // Additional Property Editors
37 WX_PG_DECLARE_EDITOR_WITH_DECL(SpinCtrl
,WXDLLIMPEXP_PROPGRID
)
40 #if wxUSE_DATEPICKCTRL
41 WX_PG_DECLARE_EDITOR_WITH_DECL(DatePickerCtrl
,WXDLLIMPEXP_PROPGRID
)
44 // -----------------------------------------------------------------------
47 // Web colour is currently unsupported
48 #define wxPG_COLOUR_WEB_BASE 0x10000
49 //#define wxPG_TO_WEB_COLOUR(A) ((wxUint32)(A+wxPG_COLOUR_WEB_BASE))
52 #define wxPG_COLOUR_CUSTOM 0xFFFFFF
53 #define wxPG_COLOUR_UNSPECIFIED (wxPG_COLOUR_CUSTOM+1)
55 /** @class wxColourPropertyValue
57 Because text, background and other colours tend to differ between
58 platforms, wxSystemColourProperty must be able to select between system
59 colour and, when necessary, to pick a custom one. wxSystemColourProperty
60 value makes this possible.
62 class WXDLLIMPEXP_PROPGRID wxColourPropertyValue
: public wxObject
65 /** An integer value relating to the colour, and which exact
66 meaning depends on the property with which it is used.
68 For wxSystemColourProperty:
70 Any of wxSYS_COLOUR_XXX, or any web-colour ( use wxPG_TO_WEB_COLOUR
71 macro - (currently unsupported) ), or wxPG_COLOUR_CUSTOM.
73 For custom colour properties without values array specified:
75 index or wxPG_COLOUR_CUSTOM
77 For custom colour properties <b>with</b> values array specified:
79 m_arrValues[index] or wxPG_COLOUR_CUSTOM
83 /** Resulting colour. Should be correct regardless of type. */
86 wxColourPropertyValue()
92 virtual ~wxColourPropertyValue()
96 wxColourPropertyValue( const wxColourPropertyValue
& v
)
100 m_colour
= v
.m_colour
;
103 void Init( wxUint32 type
, const wxColour
& colour
)
109 wxColourPropertyValue( const wxColour
& colour
)
112 m_type
= wxPG_COLOUR_CUSTOM
;
116 wxColourPropertyValue( wxUint32 type
)
122 wxColourPropertyValue( wxUint32 type
, const wxColour
& colour
)
125 Init( type
, colour
);
129 void operator=(const wxColourPropertyValue
& cpv
)
131 Init( cpv
.m_type
, cpv
.m_colour
);
135 DECLARE_DYNAMIC_CLASS(wxColourPropertyValue
)
141 bool WXDLLIMPEXP_PROPGRID
142 operator==(const wxColourPropertyValue
&, const wxColourPropertyValue
&);
144 DECLARE_VARIANT_OBJECT_EXPORTED(wxColourPropertyValue
, WXDLLIMPEXP_PROPGRID
)
149 #define wxPG_EMPTY_CPV (*((wxColourPropertyValue*)NULL))
150 #define wxPG_NORMAL_FONT (*wxNORMAL_FONT)
152 #define wxPG_EMPTY_CPV wxCPV_wxPG_EMPTY
153 #define wxPG_NORMAL_FONT wxFONT_wxPG_NORMAL_FONT
157 // -----------------------------------------------------------------------
158 // Declare part of custom colour property macro pairs.
160 #if wxUSE_IMAGE || defined(SWIG)
161 #include "wx/image.h"
164 // -----------------------------------------------------------------------
166 // Exclude class from wxPython bindings
169 /** @class wxFontProperty
171 Property representing wxFont.
173 class WXDLLIMPEXP_PROPGRID wxFontProperty
: public wxPGProperty
175 WX_PG_DECLARE_PROPERTY_CLASS(wxFontProperty
)
178 wxFontProperty(const wxString
& label
= wxPG_LABEL
,
179 const wxString
& name
= wxPG_LABEL
,
180 const wxFont
& value
= wxFont());
181 virtual ~wxFontProperty();
182 virtual void OnSetValue();
183 virtual wxString
GetValueAsString( int argFlags
= 0 ) const;
184 virtual bool OnEvent( wxPropertyGrid
* propgrid
,
185 wxWindow
* primary
, wxEvent
& event
);
186 virtual void ChildChanged( wxVariant
& thisValue
,
187 int childIndex
, wxVariant
& childValue
) const;
188 virtual void RefreshChildren();
195 // -----------------------------------------------------------------------
198 /** If set, then match from list is searched for a custom colour. */
199 #define wxPG_PROP_TRANSLATE_CUSTOM wxPG_PROP_CLASS_SPECIFIC_1
202 /** @class wxSystemColourProperty
204 Has dropdown list of wxWidgets system colours. Value used is
205 of wxColourPropertyValue type.
207 class WXDLLIMPEXP_PROPGRID wxSystemColourProperty
: public wxEnumProperty
209 WX_PG_DECLARE_PROPERTY_CLASS(wxSystemColourProperty
)
212 wxSystemColourProperty( const wxString
& label
= wxPG_LABEL
,
213 const wxString
& name
= wxPG_LABEL
,
214 const wxColourPropertyValue
&
215 value
= wxColourPropertyValue() );
216 virtual ~wxSystemColourProperty();
218 virtual void OnSetValue();
219 virtual bool IntToValue(wxVariant
& variant
,
221 int argFlags
= 0) const;
224 Override in derived class to customize how colours are printed as
227 virtual wxString
ColourToString( const wxColour
& col
, int index
) const;
229 /** Returns index of entry that triggers colour picker dialog
232 virtual int GetCustomColourIndex() const;
234 virtual wxString
GetValueAsString( int argFlags
= 0 ) const;
235 virtual bool StringToValue( wxVariant
& variant
,
236 const wxString
& text
,
237 int argFlags
= 0 ) const;
238 virtual bool OnEvent( wxPropertyGrid
* propgrid
,
239 wxWindow
* primary
, wxEvent
& event
);
240 virtual bool DoSetAttribute( const wxString
& name
, wxVariant
& value
);
241 virtual wxSize
OnMeasureImage( int item
) const;
242 virtual void OnCustomPaint( wxDC
& dc
,
243 const wxRect
& rect
, wxPGPaintData
& paintdata
);
245 // Helper function to show the colour dialog
246 bool QueryColourFromUser( wxVariant
& variant
) const;
248 /** Default is to use wxSystemSettings::GetColour(index). Override to use
249 custom colour tables etc.
251 virtual wxColour
GetColour( int index
) const;
253 wxColourPropertyValue
GetVal( const wxVariant
* pVariant
= NULL
) const;
257 // Special constructors to be used by derived classes.
258 wxSystemColourProperty( const wxString
& label
, const wxString
& name
,
259 const wxChar
** labels
, const long* values
, wxPGChoices
* choicesCache
,
260 const wxColourPropertyValue
& value
);
261 wxSystemColourProperty( const wxString
& label
, const wxString
& name
,
262 const wxChar
** labels
, const long* values
, wxPGChoices
* choicesCache
,
263 const wxColour
& value
);
265 void Init( int type
, const wxColour
& colour
);
267 // Utility functions for internal use
268 virtual wxVariant
DoTranslateVal( wxColourPropertyValue
& v
) const;
269 wxVariant
TranslateVal( wxColourPropertyValue
& v
) const
271 return DoTranslateVal( v
);
273 wxVariant
TranslateVal( int type
, const wxColour
& colour
) const
275 wxColourPropertyValue
v(type
, colour
);
276 return DoTranslateVal( v
);
279 // Translates colour to a int value, return wxNOT_FOUND if no match.
280 int ColToInd( const wxColour
& colour
) const;
283 // -----------------------------------------------------------------------
285 class WXDLLIMPEXP_PROPGRID wxColourProperty
: public wxSystemColourProperty
287 WX_PG_DECLARE_PROPERTY_CLASS(wxColourProperty
)
289 wxColourProperty( const wxString
& label
= wxPG_LABEL
,
290 const wxString
& name
= wxPG_LABEL
,
291 const wxColour
& value
= *wxWHITE
);
292 virtual ~wxColourProperty();
295 virtual wxString
GetValueAsString( int argFlags
) const;
296 virtual wxColour
GetColour( int index
) const;
297 virtual wxVariant
DoTranslateVal( wxColourPropertyValue
& v
) const;
300 void Init( wxColour colour
);
303 // -----------------------------------------------------------------------
305 // Exclude classes from wxPython bindings
308 /** @class wxCursorProperty
310 Property representing wxCursor.
312 class WXDLLIMPEXP_PROPGRID wxCursorProperty
: public wxEnumProperty
314 DECLARE_DYNAMIC_CLASS(wxCursorProperty
)
316 wxCursorProperty( const wxString
& label
= wxPG_LABEL
,
317 const wxString
& name
= wxPG_LABEL
,
319 virtual ~wxCursorProperty();
321 virtual wxSize
OnMeasureImage( int item
) const;
322 virtual void OnCustomPaint( wxDC
& dc
,
323 const wxRect
& rect
, wxPGPaintData
& paintdata
);
326 // -----------------------------------------------------------------------
330 WXDLLIMPEXP_PROPGRID
const wxString
& wxPGGetDefaultImageWildcard();
332 /** @class wxImageFileProperty
334 Property representing image file(name).
336 class WXDLLIMPEXP_PROPGRID wxImageFileProperty
: public wxFileProperty
338 DECLARE_DYNAMIC_CLASS(wxImageFileProperty
)
341 wxImageFileProperty( const wxString
& label
= wxPG_LABEL
,
342 const wxString
& name
= wxPG_LABEL
,
343 const wxString
& value
= wxEmptyString
);
344 virtual ~wxImageFileProperty();
346 virtual void OnSetValue();
348 virtual wxSize
OnMeasureImage( int item
) const;
349 virtual void OnCustomPaint( wxDC
& dc
,
350 const wxRect
& rect
, wxPGPaintData
& paintdata
);
353 wxBitmap
* m_pBitmap
; // final thumbnail area
354 wxImage
* m_pImage
; // intermediate thumbnail area
359 #if wxUSE_CHOICEDLG || defined(SWIG)
361 /** @class wxMultiChoiceProperty
363 Property that manages a value resulting from wxMultiChoiceDialog. Value is
364 array of strings. You can get value as array of choice values/indices by
365 calling wxMultiChoiceProperty::GetValueAsArrayInt().
367 <b>Supported special attributes:</b>
368 - "UserStringMode": If > 0, allow user to manually enter strings that are
369 not in the list of choices. If this value is 1, user strings are
370 preferably placed in front of valid choices. If value is 2, then those
371 strings will placed behind valid choices.
373 class WXDLLIMPEXP_PROPGRID wxMultiChoiceProperty
: public wxPGProperty
375 WX_PG_DECLARE_PROPERTY_CLASS(wxMultiChoiceProperty
)
378 wxMultiChoiceProperty( const wxString
& label
,
379 const wxString
& name
,
380 const wxArrayString
& strings
,
381 const wxArrayString
& value
);
383 wxMultiChoiceProperty( const wxString
& label
,
384 const wxString
& name
,
385 const wxPGChoices
& choices
,
386 const wxArrayString
& value
= wxArrayString() );
388 wxMultiChoiceProperty( const wxString
& label
= wxPG_LABEL
,
389 const wxString
& name
= wxPG_LABEL
,
390 const wxArrayString
& value
= wxArrayString() );
392 virtual ~wxMultiChoiceProperty();
394 virtual void OnSetValue();
395 virtual wxString
GetValueAsString( int flags
= 0 ) const;
396 virtual bool StringToValue(wxVariant
& variant
,
397 const wxString
& text
,
398 int argFlags
= 0) const;
399 virtual bool OnEvent( wxPropertyGrid
* propgrid
,
400 wxWindow
* primary
, wxEvent
& event
);
402 wxArrayInt
GetValueAsArrayInt() const
404 return m_choices
.GetValuesForStrings(m_value
.GetArrayString());
409 void GenerateValueAsString();
411 // Returns translation of values into string indices.
412 wxArrayInt
GetValueAsIndices() const;
414 wxArrayString m_valueAsStrings
; // Value as array of strings
416 // Cache displayed text since generating it is relatively complicated.
420 #endif // wxUSE_CHOICEDLG
422 // -----------------------------------------------------------------------
426 /** @class wxDateProperty
428 Property representing wxDateTime.
430 <b>Supported special attributes:</b>
431 - "DateFormat": Determines displayed date format.
432 - "PickerStyle": Determines window style used with wxDatePickerCtrl.
433 Default is wxDP_DEFAULT | wxDP_SHOWCENTURY.
435 class WXDLLIMPEXP_PROPGRID wxDateProperty
: public wxPGProperty
437 WX_PG_DECLARE_PROPERTY_CLASS(wxDateProperty
)
440 wxDateProperty( const wxString
& label
= wxPG_LABEL
,
441 const wxString
& name
= wxPG_LABEL
,
442 const wxDateTime
& value
= wxDateTime() );
443 virtual ~wxDateProperty();
445 virtual wxString
GetValueAsString( int flags
= 0 ) const;
446 virtual bool StringToValue(wxVariant
& variant
,
447 const wxString
& text
,
448 int argFlags
= 0) const;
450 virtual bool DoSetAttribute( const wxString
& name
, wxVariant
& value
);
452 void SetFormat( const wxString
& format
)
457 const wxString
& GetFormat() const
462 void SetDateValue( const wxDateTime
& dt
)
464 //m_valueDateTime = dt;
468 wxDateTime
GetDateValue() const
470 //return m_valueDateTime;
474 long GetDatePickerStyle() const
481 long m_dpStyle
; // DatePicker style
483 static wxString ms_defaultDateFormat
;
484 static wxString
DetermineDefaultDateFormat( bool showCentury
);
487 #endif // wxUSE_DATETIME
491 // -----------------------------------------------------------------------
496 // Implement an editor control that allows using wxSpinCtrl (actually, a
497 // combination of wxTextCtrl and wxSpinButton) to edit value of wxIntProperty
498 // and wxFloatProperty (and similar).
500 // Note that new editor classes needs to be registered before use. This can be
501 // accomplished using wxPGRegisterEditorClass macro, which is used for SpinCtrl
502 // in wxPropertyGridInterface::RegisterAdditionalEditors (see below).
503 // Registration can also be performed in a constructor of a property that is
504 // likely to require the editor in question.
508 #include "wx/spinbutt.h"
509 #include "wx/propgrid/editors.h"
512 // NOTE: Regardless that this class inherits from a working editor, it has
513 // all necessary methods to work independently. wxTextCtrl stuff is only
514 // used for event handling here.
515 class WXDLLIMPEXP_PROPGRID wxPGSpinCtrlEditor
: public wxPGTextCtrlEditor
517 DECLARE_DYNAMIC_CLASS(wxPGSpinCtrlEditor
)
519 virtual ~wxPGSpinCtrlEditor();
521 wxString
GetName() const;
522 virtual wxPGWindowList
CreateControls(wxPropertyGrid
* propgrid
,
523 wxPGProperty
* property
,
525 const wxSize
& size
) const;
526 virtual bool OnEvent( wxPropertyGrid
* propgrid
, wxPGProperty
* property
,
527 wxWindow
* wnd
, wxEvent
& event
) const;
530 mutable wxString m_tempString
;
533 #endif // wxUSE_SPINBTN
535 // -----------------------------------------------------------------------
537 #endif // wxUSE_PROPGRID
539 #endif // _WX_PROPGRID_ADVPROPS_H_