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
27 operator==(const wxArrayInt
& array1
, const wxArrayInt
& array2
);
32 // Additional Property Editors
35 WX_PG_DECLARE_EDITOR_WITH_DECL(SpinCtrl
,WXDLLIMPEXP_PROPGRID
)
38 #if wxUSE_DATEPICKCTRL
39 WX_PG_DECLARE_EDITOR_WITH_DECL(DatePickerCtrl
,WXDLLIMPEXP_PROPGRID
)
42 // -----------------------------------------------------------------------
45 // Web colour is currently unsupported
46 #define wxPG_COLOUR_WEB_BASE 0x10000
47 //#define wxPG_TO_WEB_COLOUR(A) ((wxUint32)(A+wxPG_COLOUR_WEB_BASE))
50 #define wxPG_COLOUR_CUSTOM 0xFFFFFF
51 #define wxPG_COLOUR_UNSPECIFIED (wxPG_COLOUR_CUSTOM+1)
53 /** @class wxColourPropertyValue
55 Because text, background and other colours tend to differ between
56 platforms, wxSystemColourProperty must be able to select between system
57 colour and, when necessary, to pick a custom one. wxSystemColourProperty
58 value makes this possible.
60 class WXDLLIMPEXP_PROPGRID wxColourPropertyValue
: public wxObject
63 /** An integer value relating to the colour, and which exact
64 meaning depends on the property with which it is used.
66 For wxSystemColourProperty:
68 Any of wxSYS_COLOUR_XXX, or any web-colour ( use wxPG_TO_WEB_COLOUR
69 macro - (currently unsupported) ), or wxPG_COLOUR_CUSTOM.
71 For custom colour properties without values array specified:
73 index or wxPG_COLOUR_CUSTOM
75 For custom colour properties <b>with</b> values array specified:
77 m_arrValues[index] or wxPG_COLOUR_CUSTOM
81 /** Resulting colour. Should be correct regardless of type. */
84 wxColourPropertyValue()
90 virtual ~wxColourPropertyValue()
94 wxColourPropertyValue( const wxColourPropertyValue
& v
)
98 m_colour
= v
.m_colour
;
101 void Init( wxUint32 type
, const wxColour
& colour
)
107 wxColourPropertyValue( const wxColour
& colour
)
110 m_type
= wxPG_COLOUR_CUSTOM
;
114 wxColourPropertyValue( wxUint32 type
)
120 wxColourPropertyValue( wxUint32 type
, const wxColour
& colour
)
123 Init( type
, colour
);
127 void operator=(const wxColourPropertyValue
& cpv
)
130 Init( cpv
.m_type
, cpv
.m_colour
);
134 DECLARE_DYNAMIC_CLASS(wxColourPropertyValue
)
140 bool WXDLLIMPEXP_PROPGRID
141 operator==(const wxColourPropertyValue
&, const wxColourPropertyValue
&);
143 DECLARE_VARIANT_OBJECT_EXPORTED(wxColourPropertyValue
, WXDLLIMPEXP_PROPGRID
)
148 #define wxPG_EMPTY_CPV (*((wxColourPropertyValue*)NULL))
149 #define wxPG_NORMAL_FONT (*wxNORMAL_FONT)
151 #define wxPG_EMPTY_CPV wxCPV_wxPG_EMPTY
152 #define wxPG_NORMAL_FONT wxFONT_wxPG_NORMAL_FONT
156 // -----------------------------------------------------------------------
157 // Declare part of custom colour property macro pairs.
159 #if wxUSE_IMAGE || defined(SWIG)
160 #include "wx/image.h"
163 // -----------------------------------------------------------------------
165 // Exclude class from wxPython bindings
168 /** @class wxFontProperty
170 Property representing wxFont.
172 class WXDLLIMPEXP_PROPGRID wxFontProperty
: public wxPGProperty
174 WX_PG_DECLARE_PROPERTY_CLASS(wxFontProperty
)
177 wxFontProperty(const wxString
& label
= wxPG_LABEL
,
178 const wxString
& name
= wxPG_LABEL
,
179 const wxFont
& value
= wxFont());
180 virtual ~wxFontProperty();
181 virtual void OnSetValue();
182 virtual wxString
ValueToString( wxVariant
& value
, int argFlags
= 0 ) const;
183 virtual bool OnEvent( wxPropertyGrid
* propgrid
,
184 wxWindow
* primary
, wxEvent
& event
);
185 virtual void ChildChanged( wxVariant
& thisValue
,
186 int childIndex
, wxVariant
& childValue
) const;
187 virtual void RefreshChildren();
194 // -----------------------------------------------------------------------
197 /** If set, then match from list is searched for a custom colour. */
198 #define wxPG_PROP_TRANSLATE_CUSTOM wxPG_PROP_CLASS_SPECIFIC_1
201 /** @class wxSystemColourProperty
203 Has dropdown list of wxWidgets system colours. Value used is
204 of wxColourPropertyValue type.
206 class WXDLLIMPEXP_PROPGRID wxSystemColourProperty
: public wxEnumProperty
208 WX_PG_DECLARE_PROPERTY_CLASS(wxSystemColourProperty
)
211 wxSystemColourProperty( const wxString
& label
= wxPG_LABEL
,
212 const wxString
& name
= wxPG_LABEL
,
213 const wxColourPropertyValue
&
214 value
= wxColourPropertyValue() );
215 virtual ~wxSystemColourProperty();
217 virtual void OnSetValue();
218 virtual bool IntToValue(wxVariant
& variant
,
220 int argFlags
= 0) const;
223 Override in derived class to customize how colours are printed as
226 virtual wxString
ColourToString( const wxColour
& col
, int index
) const;
228 /** Returns index of entry that triggers colour picker dialog
231 virtual int GetCustomColourIndex() const;
233 virtual wxString
ValueToString( wxVariant
& value
, int argFlags
= 0 ) const;
234 virtual bool StringToValue( wxVariant
& variant
,
235 const wxString
& text
,
236 int argFlags
= 0 ) const;
237 virtual bool OnEvent( wxPropertyGrid
* propgrid
,
238 wxWindow
* primary
, wxEvent
& event
);
239 virtual bool DoSetAttribute( const wxString
& name
, wxVariant
& value
);
240 virtual wxSize
OnMeasureImage( int item
) const;
241 virtual void OnCustomPaint( wxDC
& dc
,
242 const wxRect
& rect
, wxPGPaintData
& paintdata
);
244 // Helper function to show the colour dialog
245 bool QueryColourFromUser( wxVariant
& variant
) const;
247 /** Default is to use wxSystemSettings::GetColour(index). Override to use
248 custom colour tables etc.
250 virtual wxColour
GetColour( int index
) const;
252 wxColourPropertyValue
GetVal( const wxVariant
* pVariant
= NULL
) const;
256 // Special constructors to be used by derived classes.
257 wxSystemColourProperty( const wxString
& label
, const wxString
& name
,
258 const wxChar
** labels
, const long* values
, wxPGChoices
* choicesCache
,
259 const wxColourPropertyValue
& value
);
260 wxSystemColourProperty( const wxString
& label
, const wxString
& name
,
261 const wxChar
** labels
, const long* values
, wxPGChoices
* choicesCache
,
262 const wxColour
& value
);
264 void Init( int type
, const wxColour
& colour
);
266 // Utility functions for internal use
267 virtual wxVariant
DoTranslateVal( wxColourPropertyValue
& v
) const;
268 wxVariant
TranslateVal( wxColourPropertyValue
& v
) const
270 return DoTranslateVal( v
);
272 wxVariant
TranslateVal( int type
, const wxColour
& colour
) const
274 wxColourPropertyValue
v(type
, colour
);
275 return DoTranslateVal( v
);
278 // Translates colour to a int value, return wxNOT_FOUND if no match.
279 int ColToInd( const wxColour
& colour
) const;
282 // -----------------------------------------------------------------------
284 class WXDLLIMPEXP_PROPGRID wxColourProperty
: public wxSystemColourProperty
286 WX_PG_DECLARE_PROPERTY_CLASS(wxColourProperty
)
288 wxColourProperty( const wxString
& label
= wxPG_LABEL
,
289 const wxString
& name
= wxPG_LABEL
,
290 const wxColour
& value
= *wxWHITE
);
291 virtual ~wxColourProperty();
293 virtual wxString
ValueToString( wxVariant
& value
, int argFlags
= 0 ) const;
294 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
ValueToString( wxVariant
& value
, int argFlags
= 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( wxVariant
& value
, wxString
* target
) const;
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. Using wxDP_ALLOWNONE
434 enables additional support for unspecified property value.
436 class WXDLLIMPEXP_PROPGRID wxDateProperty
: public wxPGProperty
438 WX_PG_DECLARE_PROPERTY_CLASS(wxDateProperty
)
441 wxDateProperty( const wxString
& label
= wxPG_LABEL
,
442 const wxString
& name
= wxPG_LABEL
,
443 const wxDateTime
& value
= wxDateTime() );
444 virtual ~wxDateProperty();
446 virtual void OnSetValue();
447 virtual wxString
ValueToString( wxVariant
& value
, int argFlags
= 0 ) const;
448 virtual bool StringToValue(wxVariant
& variant
,
449 const wxString
& text
,
450 int argFlags
= 0) const;
452 virtual bool DoSetAttribute( const wxString
& name
, wxVariant
& value
);
454 void SetFormat( const wxString
& format
)
459 const wxString
& GetFormat() const
464 void SetDateValue( const wxDateTime
& dt
)
466 //m_valueDateTime = dt;
470 wxDateTime
GetDateValue() const
472 //return m_valueDateTime;
476 long GetDatePickerStyle() const
483 long m_dpStyle
; // DatePicker style
485 static wxString ms_defaultDateFormat
;
486 static wxString
DetermineDefaultDateFormat( bool showCentury
);
489 #endif // wxUSE_DATETIME
493 // -----------------------------------------------------------------------
498 // Implement an editor control that allows using wxSpinCtrl (actually, a
499 // combination of wxTextCtrl and wxSpinButton) to edit value of wxIntProperty
500 // and wxFloatProperty (and similar).
502 // Note that new editor classes needs to be registered before use. This can be
503 // accomplished using wxPGRegisterEditorClass macro, which is used for SpinCtrl
504 // in wxPropertyGridInterface::RegisterAdditionalEditors (see below).
505 // Registration can also be performed in a constructor of a property that is
506 // likely to require the editor in question.
510 #include "wx/spinbutt.h"
511 #include "wx/propgrid/editors.h"
514 // NOTE: Regardless that this class inherits from a working editor, it has
515 // all necessary methods to work independently. wxTextCtrl stuff is only
516 // used for event handling here.
517 class WXDLLIMPEXP_PROPGRID wxPGSpinCtrlEditor
: public wxPGTextCtrlEditor
519 DECLARE_DYNAMIC_CLASS(wxPGSpinCtrlEditor
)
521 virtual ~wxPGSpinCtrlEditor();
523 wxString
GetName() const;
524 virtual wxPGWindowList
CreateControls(wxPropertyGrid
* propgrid
,
525 wxPGProperty
* property
,
527 const wxSize
& size
) const;
528 virtual bool OnEvent( wxPropertyGrid
* propgrid
, wxPGProperty
* property
,
529 wxWindow
* wnd
, wxEvent
& event
) const;
532 mutable wxString m_tempString
;
535 #endif // wxUSE_SPINBTN
537 // -----------------------------------------------------------------------
539 #endif // wxUSE_PROPGRID
541 #endif // _WX_PROPGRID_ADVPROPS_H_