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 // -----------------------------------------------------------------------
25 // Additional Value Type Handlers
27 bool WXDLLIMPEXP_PROPGRID
28 operator==(const wxArrayInt
& array1
, const wxArrayInt
& array2
);
31 // Additional Property Editors
34 WX_PG_DECLARE_EDITOR_WITH_DECL(SpinCtrl
,WXDLLIMPEXP_PROPGRID
)
37 #if wxUSE_DATEPICKCTRL
38 WX_PG_DECLARE_EDITOR_WITH_DECL(DatePickerCtrl
,WXDLLIMPEXP_PROPGRID
)
43 // -----------------------------------------------------------------------
46 // Web colour is currently unsupported
47 #define wxPG_COLOUR_WEB_BASE 0x10000
48 //#define wxPG_TO_WEB_COLOUR(A) ((wxUint32)(A+wxPG_COLOUR_WEB_BASE))
51 #define wxPG_COLOUR_CUSTOM 0xFFFFFF
52 #define wxPG_COLOUR_UNSPECIFIED (wxPG_COLOUR_CUSTOM+1)
54 /** @class wxColourPropertyValue
56 Because text, background and other colours tend to differ between
57 platforms, wxSystemColourProperty must be able to select between system
58 colour and, when necessary, to pick a custom one. wxSystemColourProperty
59 value makes this possible.
61 class WXDLLIMPEXP_PROPGRID wxColourPropertyValue
: public wxObject
64 /** An integer value relating to the colour, and which exact
65 meaning depends on the property with which it is used.
67 For wxSystemColourProperty:
69 Any of wxSYS_COLOUR_XXX, or any web-colour ( use wxPG_TO_WEB_COLOUR
70 macro - (currently unsupported) ), or wxPG_COLOUR_CUSTOM.
72 For custom colour properties without values array specified:
74 index or wxPG_COLOUR_CUSTOM
76 For custom colour properties <b>with</b> values array specified:
78 m_arrValues[index] or wxPG_COLOUR_CUSTOM
82 /** Resulting colour. Should be correct regardless of type. */
85 wxColourPropertyValue()
91 virtual ~wxColourPropertyValue()
95 wxColourPropertyValue( const wxColourPropertyValue
& v
)
99 m_colour
= v
.m_colour
;
102 void Init( wxUint32 type
, const wxColour
& colour
)
108 wxColourPropertyValue( const wxColour
& colour
)
111 m_type
= wxPG_COLOUR_CUSTOM
;
115 wxColourPropertyValue( wxUint32 type
)
121 wxColourPropertyValue( wxUint32 type
, const wxColour
& colour
)
124 Init( type
, colour
);
128 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 (*(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.
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
ValueToString( wxVariant
& value
, 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
ValueToString( wxVariant
& value
, 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();
294 virtual wxString
ValueToString( wxVariant
& value
, int argFlags
= 0 ) const;
295 virtual wxColour
GetColour( int index
) const;
298 virtual wxVariant
DoTranslateVal( wxColourPropertyValue
& v
) const;
301 void Init( wxColour colour
);
304 // -----------------------------------------------------------------------
306 // Exclude classes from wxPython bindings
309 /** @class wxCursorProperty
311 Property representing wxCursor.
313 class WXDLLIMPEXP_PROPGRID wxCursorProperty
: public wxEnumProperty
315 DECLARE_DYNAMIC_CLASS(wxCursorProperty
)
317 wxCursorProperty( const wxString
& label
= wxPG_LABEL
,
318 const wxString
& name
= wxPG_LABEL
,
320 virtual ~wxCursorProperty();
322 virtual wxSize
OnMeasureImage( int item
) const;
323 virtual void OnCustomPaint( wxDC
& dc
,
324 const wxRect
& rect
, wxPGPaintData
& paintdata
);
327 // -----------------------------------------------------------------------
331 WXDLLIMPEXP_PROPGRID
const wxString
& wxPGGetDefaultImageWildcard();
333 /** @class wxImageFileProperty
335 Property representing image file(name).
337 class WXDLLIMPEXP_PROPGRID wxImageFileProperty
: public wxFileProperty
339 DECLARE_DYNAMIC_CLASS(wxImageFileProperty
)
342 wxImageFileProperty( const wxString
& label
= wxPG_LABEL
,
343 const wxString
& name
= wxPG_LABEL
,
344 const wxString
& value
= wxEmptyString
);
345 virtual ~wxImageFileProperty();
347 virtual void OnSetValue();
349 virtual wxSize
OnMeasureImage( int item
) const;
350 virtual void OnCustomPaint( wxDC
& dc
,
351 const wxRect
& rect
, wxPGPaintData
& paintdata
);
354 wxBitmap
* m_pBitmap
; // final thumbnail area
355 wxImage
* m_pImage
; // intermediate thumbnail area
362 /** @class wxMultiChoiceProperty
364 Property that manages a value resulting from wxMultiChoiceDialog. Value is
365 array of strings. You can get value as array of choice values/indices by
366 calling wxMultiChoiceProperty::GetValueAsArrayInt().
368 <b>Supported special attributes:</b>
369 - "UserStringMode": If > 0, allow user to manually enter strings that are
370 not in the list of choices. If this value is 1, user strings are
371 preferably placed in front of valid choices. If value is 2, then those
372 strings will placed behind valid choices.
374 class WXDLLIMPEXP_PROPGRID wxMultiChoiceProperty
: public wxPGProperty
376 WX_PG_DECLARE_PROPERTY_CLASS(wxMultiChoiceProperty
)
379 wxMultiChoiceProperty( const wxString
& label
,
380 const wxString
& name
,
381 const wxArrayString
& strings
,
382 const wxArrayString
& value
);
384 wxMultiChoiceProperty( const wxString
& label
,
385 const wxString
& name
,
386 const wxPGChoices
& choices
,
387 const wxArrayString
& value
= wxArrayString() );
389 wxMultiChoiceProperty( const wxString
& label
= wxPG_LABEL
,
390 const wxString
& name
= wxPG_LABEL
,
391 const wxArrayString
& value
= wxArrayString() );
393 virtual ~wxMultiChoiceProperty();
395 virtual void OnSetValue();
396 virtual wxString
ValueToString( wxVariant
& value
, int argFlags
= 0 ) const;
397 virtual bool StringToValue(wxVariant
& variant
,
398 const wxString
& text
,
399 int argFlags
= 0) const;
400 virtual bool OnEvent( wxPropertyGrid
* propgrid
,
401 wxWindow
* primary
, wxEvent
& event
);
403 wxArrayInt
GetValueAsArrayInt() const
405 return m_choices
.GetValuesForStrings(m_value
.GetArrayString());
410 void GenerateValueAsString( wxVariant
& value
, wxString
* target
) const;
412 // Returns translation of values into string indices.
413 wxArrayInt
GetValueAsIndices() const;
415 wxArrayString m_valueAsStrings
; // Value as array of strings
417 // Cache displayed text since generating it is relatively complicated.
421 #endif // wxUSE_CHOICEDLG
423 // -----------------------------------------------------------------------
427 /** @class wxDateProperty
429 Property representing wxDateTime.
431 <b>Supported special attributes:</b>
432 - "DateFormat": Determines displayed date format.
433 - "PickerStyle": Determines window style used with wxDatePickerCtrl.
434 Default is wxDP_DEFAULT | wxDP_SHOWCENTURY. Using wxDP_ALLOWNONE
435 enables additional support for unspecified property value.
437 class WXDLLIMPEXP_PROPGRID wxDateProperty
: public wxPGProperty
439 WX_PG_DECLARE_PROPERTY_CLASS(wxDateProperty
)
442 wxDateProperty( const wxString
& label
= wxPG_LABEL
,
443 const wxString
& name
= wxPG_LABEL
,
444 const wxDateTime
& value
= wxDateTime() );
445 virtual ~wxDateProperty();
447 virtual void OnSetValue();
448 virtual wxString
ValueToString( wxVariant
& value
, int argFlags
= 0 ) const;
449 virtual bool StringToValue(wxVariant
& variant
,
450 const wxString
& text
,
451 int argFlags
= 0) const;
453 virtual bool DoSetAttribute( const wxString
& name
, wxVariant
& value
);
455 void SetFormat( const wxString
& format
)
460 const wxString
& GetFormat() const
465 void SetDateValue( const wxDateTime
& dt
)
467 //m_valueDateTime = dt;
471 wxDateTime
GetDateValue() const
473 //return m_valueDateTime;
477 long GetDatePickerStyle() const
484 long m_dpStyle
; // DatePicker style
486 static wxString ms_defaultDateFormat
;
487 static wxString
DetermineDefaultDateFormat( bool showCentury
);
490 #endif // wxUSE_DATETIME
494 // -----------------------------------------------------------------------
499 // Implement an editor control that allows using wxSpinCtrl (actually, a
500 // combination of wxTextCtrl and wxSpinButton) to edit value of wxIntProperty
501 // and wxFloatProperty (and similar).
503 // Note that new editor classes needs to be registered before use. This can be
504 // accomplished using wxPGRegisterEditorClass macro, which is used for SpinCtrl
505 // in wxPropertyGridInterface::RegisterAdditionalEditors (see below).
506 // Registration can also be performed in a constructor of a property that is
507 // likely to require the editor in question.
511 #include "wx/spinbutt.h"
512 #include "wx/propgrid/editors.h"
515 // NOTE: Regardless that this class inherits from a working editor, it has
516 // all necessary methods to work independently. wxTextCtrl stuff is only
517 // used for event handling here.
518 class WXDLLIMPEXP_PROPGRID wxPGSpinCtrlEditor
: public wxPGTextCtrlEditor
520 DECLARE_DYNAMIC_CLASS(wxPGSpinCtrlEditor
)
522 virtual ~wxPGSpinCtrlEditor();
524 wxString
GetName() const;
525 virtual wxPGWindowList
CreateControls(wxPropertyGrid
* propgrid
,
526 wxPGProperty
* property
,
528 const wxSize
& size
) const;
529 virtual bool OnEvent( wxPropertyGrid
* propgrid
, wxPGProperty
* property
,
530 wxWindow
* wnd
, wxEvent
& event
) const;
533 mutable wxString m_tempString
;
536 #endif // wxUSE_SPINBTN
538 // -----------------------------------------------------------------------
540 #endif // wxUSE_PROPGRID
542 #endif // _WX_PROPGRID_ADVPROPS_H_