// Author: Jaakko Salli
// Modified by:
// Created: 2007-03-28
-// RCS-ID: $Id:
+// RCS-ID: $Id$
// Copyright: (c) Jaakko Salli
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// Property class implementation helper macros.
//
-// Adds constructor function as well.
-#define WX_PG_IMPLEMENT_PROPERTY_CLASS2(NAME,CLASSNAME,\
- UPCLASS,T,T_AS_ARG,EDITOR) \
+#define WX_PG_IMPLEMENT_PROPERTY_CLASS(NAME, UPCLASS, T, T_AS_ARG, EDITOR) \
IMPLEMENT_DYNAMIC_CLASS(NAME, UPCLASS) \
-WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(NAME,T,EDITOR)
-
-// A regular property
-#define WX_PG_IMPLEMENT_PROPERTY_CLASS(NAME,UPNAME,T,T_AS_ARG,EDITOR) \
-WX_PG_IMPLEMENT_PROPERTY_CLASS2(NAME,NAME,UPNAME,T,T_AS_ARG,EDITOR)
-
-#define WX_PG_DECLARE_DERIVED_PROPERTY_CLASS(CLASSNAME) \
-DECLARE_DYNAMIC_CLASS(CLASSNAME)
-
-// Derived property class is one that inherits from an existing working property
-// class, but assumes same value and editor type.
-#define WX_PG_IMPLEMENT_DERIVED_PROPERTY_CLASS(NAME,UPNAME,T_AS_ARG) \
-IMPLEMENT_DYNAMIC_CLASS(NAME, UPNAME)
-
-// -----------------------------------------------------------------------
-
-#define wxPG_NO_ESCAPE wxPG_PROP_NO_ESCAPE // No escape sequences
-#define wxPG_ESCAPE 0 // Escape sequences
-
-#define WX_PG_DECLARE_STRING_PROPERTY_WITH_DECL(NAME, DECL) \
-DECL NAME : public wxLongStringProperty \
-{ \
- WX_PG_DECLARE_DERIVED_PROPERTY_CLASS(NAME) \
-public: \
- NAME( const wxString& name = wxPG_LABEL, \
- const wxString& label = wxPG_LABEL, \
- const wxString& value = wxEmptyString); \
- virtual ~NAME(); \
- virtual bool OnButtonClick( wxPropertyGrid* propgrid, wxString& value ); \
- virtual wxValidator* DoGetValidator() const; \
-};
-
-#define WX_PG_DECLARE_STRING_PROPERTY(NAME) \
-WX_PG_DECLARE_STRING_PROPERTY_WITH_DECL(NAME, class) \
-
-#define WX_PG_IMPLEMENT_STRING_PROPERTY_WITH_VALIDATOR(NAME, FLAGS) \
-WX_PG_IMPLEMENT_DERIVED_PROPERTY_CLASS(NAME,wxLongStringProperty,\
- const wxString&) \
-NAME::NAME( const wxString& name, \
- const wxString& label, \
- const wxString& value ) \
- : wxLongStringProperty(name,label,value) \
-{ \
- m_flags |= FLAGS; \
-} \
-NAME::~NAME() { }
-
-#define WX_PG_IMPLEMENT_STRING_PROPERTY(NAME, FLAGS) \
-WX_PG_IMPLEMENT_STRING_PROPERTY_WITH_VALIDATOR(NAME,FLAGS) \
-wxValidator* NAME::DoGetValidator () const \
-{ return (wxValidator*) NULL; }
-
-// -----------------------------------------------------------------------
-
-#define WX_PG_DECLARE_CUSTOM_FLAGS_PROPERTY_WITH_DECL(CLASSNAME,DECL) \
-DECL CLASSNAME : public wxFlagsProperty \
-{ \
- WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME) \
-public: \
- CLASSNAME( const wxString& label = wxPG_LABEL, \
- const wxString& name = wxPG_LABEL, \
- long value = -1 ); \
- virtual ~CLASSNAME(); \
-};
-
-#define WX_PG_DECLARE_CUSTOM_FLAGS_PROPERTY(CLASSNAME) \
-WX_PG_DECLARE_CUSTOM_FLAGS_PROPERTY_WITH_DECL(CLASSNAME, class)
-
-// This will create interface for wxFlagsProperty derived class
-// named CLASSNAME.
-#define WX_PG_IMPLEMENT_CUSTOM_FLAGS_PROPERTY(CLASSNAME,LABELS,VALUES,DEFVAL) \
-WX_PG_IMPLEMENT_PROPERTY_CLASS(CLASSNAME,wxFlagsProperty,long_##CLASSNAME,\
- long,TextCtrl) \
-CLASSNAME::CLASSNAME( const wxString& label, \
- const wxString& name, \
- long value ) \
- : wxFlagsProperty(label,name,LABELS,VALUES,value!=-1?value:DEFVAL) \
-{ \
- m_flags |= wxPG_PROP_STATIC_CHOICES; \
-} \
-CLASSNAME::~CLASSNAME() { }
-
-
-// -----------------------------------------------------------------------
-
-#define WX_PG_DECLARE_CUSTOM_ENUM_PROPERTY_WITH_DECL(CLASSNAME, DECL) \
-class CLASSNAME : public wxEnumProperty \
-{ \
- WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME) \
-public: \
- CLASSNAME( const wxString& label = wxPG_LABEL, \
- const wxString& name = wxPG_LABEL, \
- int value = -1 ); \
- virtual ~CLASSNAME(); \
-};
-
-#define WX_PG_DECLARE_CUSTOM_ENUM_PROPERTY(CLASSNAME) \
-WX_PG_DECLARE_CUSTOM_ENUM_PROPERTY_WITH_DECL(CLASSNAME, class)
-
-#define WX_PG_IMPLEMENT_CUSTOM_ENUM_PROPERTY(CLASSNAME,LABELS,VALUES,DEFVAL) \
-WX_PG_IMPLEMENT_PROPERTY_CLASS(CLASSNAME, wxEnumProperty, long_##CLASSNAME, \
- int, Choice) \
-CLASSNAME::CLASSNAME( const wxString& label, const wxString& name, int value ) \
- : wxEnumProperty(label,name,LABELS,VALUES,value!=-1?value:DEFVAL) \
-{ \
- m_flags |= wxPG_PROP_STATIC_CHOICES; \
-} \
-CLASSNAME::~CLASSNAME() { }
-
-
-// -----------------------------------------------------------------------
-
-#define WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_WITH_DECL(CLASSNAME, DECL) \
-DECL CLASSNAME : public wxSystemColourProperty \
-{ \
- DECLARE_DYNAMIC_CLASS(CLASSNAME) \
-public: \
- CLASSNAME( const wxString& label = wxPG_LABEL, \
- const wxString& name = wxPG_LABEL, \
- const wxColourPropertyValue& value = wxColourPropertyValue() ); \
- virtual ~CLASSNAME(); \
- virtual wxColour GetColour( int index ) const; \
-};
-
-#define WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY(CLASSNAME) \
-WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_WITH_DECL(CLASSNAME, class)
-
-#define WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY(CLASSNAME,\
- LABELS,VALUES,COLOURS) \
-static wxPGChoices gs_##CLASSNAME##_choicesCache; \
-WX_PG_IMPLEMENT_DERIVED_PROPERTY_CLASS(CLASSNAME, wxSystemColourProperty, \
- const wxColourPropertyValue&) \
-CLASSNAME::CLASSNAME( const wxString& label, const wxString& name, \
- const wxColourPropertyValue& value ) \
- : wxSystemColourProperty(label, name, LABELS, VALUES, \
- &gs_##CLASSNAME##_choicesCache, value ) \
-{ \
- m_flags |= wxPG_PROP_TRANSLATE_CUSTOM; \
-} \
-CLASSNAME::~CLASSNAME () { } \
-wxColour CLASSNAME::GetColour ( int index ) const \
-{ \
- if ( !m_choices.HasValue(index) ) \
- { \
- wxASSERT( index < (int)m_choices.GetCount() ); \
- return COLOURS[index]; \
- } \
- return COLOURS[m_choices.GetValue(index)]; \
-}
-
-// -----------------------------------------------------------------------
-
-#define WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR_WITH_DECL(CLASSNAME,\
- DECL) \
-DECL CLASSNAME : public wxSystemColourProperty \
-{ \
- WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME) \
-public: \
- CLASSNAME( const wxString& label = wxPG_LABEL, \
- const wxString& name = wxPG_LABEL, \
- const wxColour& value = wxColour() ); \
- virtual ~CLASSNAME(); \
- virtual wxString GetValueAsString( int argFlags ) const; \
- virtual wxColour GetColour( int index ) const; \
- virtual wxVariant DoTranslateVal( wxColourPropertyValue& v ) const; \
- void Init( wxColour colour ); \
-};
-
-#define WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR(CLASSNAME) \
-WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR_WITH_DECL(CLASSNAME, class)
-
-#define WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR2(CLASSNAME, \
- LABELS, \
- VALUES, \
- COLOURS, \
- EDITOR) \
-static wxPGChoices gs_##CLASSNAME##_choicesCache; \
-WX_PG_IMPLEMENT_PROPERTY_CLASS(CLASSNAME, wxSystemColourProperty, \
- wxColour, const wxColour&,EDITOR) \
-CLASSNAME::CLASSNAME( const wxString& label, \
- const wxString& name, \
- const wxColour& value ) \
- : wxSystemColourProperty(label, name, LABELS, VALUES, \
- &gs_##CLASSNAME##_choicesCache, value ) \
-{ \
- if ( &value ) \
- Init( value ); \
- else \
- Init( *wxWHITE ); \
- m_flags |= wxPG_PROP_TRANSLATE_CUSTOM; \
-} \
-CLASSNAME::~CLASSNAME() { } \
-void CLASSNAME::Init( wxColour colour ) \
-{ \
- if ( !colour.Ok() ) \
- colour = *wxWHITE; \
- wxVariant variant; \
- variant << colour; \
- m_value = variant; \
- int ind = ColToInd(colour); \
- if ( ind < 0 ) \
- ind = m_choices.GetCount() - 1; \
- SetIndex( ind ); \
-} \
-wxString CLASSNAME::GetValueAsString( int argFlags ) const \
-{ \
- const wxPGEditor* editor = GetEditorClass(); \
- if ( editor != wxPG_EDITOR(Choice) && \
- editor != wxPG_EDITOR(ChoiceAndButton) && \
- editor != wxPG_EDITOR(ComboBox) ) \
- argFlags |= wxPG_PROPERTY_SPECIFIC; \
- return wxSystemColourProperty::GetValueAsString(argFlags); \
-} \
-wxColour CLASSNAME::GetColour( int index ) const \
-{ \
- if ( !m_choices.HasValue(index) ) \
- { \
- wxASSERT( index < (int)GetItemCount() ); \
- return COLOURS[index]; \
- } \
- return COLOURS[m_choices.GetValue(index)]; \
-} \
-wxVariant CLASSNAME::DoTranslateVal( wxColourPropertyValue& v ) const \
-{ \
- wxVariant variant; \
- variant << v.m_colour; \
- return variant; \
-}
-
-
-#define WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR(CLASSNAME, \
- LABELS, \
- VALUES, \
- COLOURS) \
-WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR2(CLASSNAME, \
- LABELS, \
- VALUES, \
- COLOURS, \
- Choice)
+WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(NAME, T, EDITOR)
// -----------------------------------------------------------------------
// Common function exit
#define WX_PG_DOGETVALIDATOR_EXIT(VALIDATOR) \
s_ptr = VALIDATOR; \
- wxPGGlobalVars->m_arrValidators.Add( (void*) VALIDATOR ); \
+ wxPGGlobalVars->m_arrValidators.push_back( VALIDATOR ); \
return VALIDATOR;
// -----------------------------------------------------------------------
#ifndef SWIG
+#include "wx/textctrl.h"
+
/** @class wxPGInDialogValidator
@ingroup classes
Creates and manages a temporary wxTextCtrl for validation purposes.
const wxString& value = wxEmptyString );
virtual ~wxStringProperty();
- virtual wxString GetValueAsString( int argFlags = 0 ) const;
+ virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
virtual bool StringToValue( wxVariant& variant,
const wxString& text,
int argFlags = 0 ) const;
wxIntProperty( const wxString& label,
const wxString& name,
const wxLongLong& value );
- virtual wxString GetValueAsString( int argFlags = 0 ) const;
+ virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
virtual bool StringToValue( wxVariant& variant,
const wxString& text,
int argFlags = 0 ) const;
wxUIntProperty( const wxString& label,
const wxString& name,
const wxULongLong& value );
- virtual wxString GetValueAsString( int argFlags = 0 ) const;
+ virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
virtual bool StringToValue( wxVariant& variant,
const wxString& text,
int argFlags = 0 ) const;
double value = 0.0 );
virtual ~wxFloatProperty();
- virtual wxString GetValueAsString( int argFlags = 0 ) const;
+ virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
virtual bool StringToValue( wxVariant& variant,
const wxString& text,
int argFlags = 0 ) const;
bool value = false );
virtual ~wxBoolProperty();
- virtual wxString GetValueAsString( int argFlags = 0 ) const;
+ virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
virtual bool StringToValue( wxVariant& variant,
const wxString& text,
int argFlags = 0 ) const;
// -----------------------------------------------------------------------
-/** @class wxBaseEnumProperty
+// If set, then selection of choices is static and should not be
+// changed (i.e. returns NULL in GetPropertyChoices).
+#define wxPG_PROP_STATIC_CHOICES wxPG_PROP_CLASS_SPECIFIC_1
+
+/** @class wxEnumProperty
@ingroup classes
- Derive dynamic custom properties with choices from this class.
+ You can derive custom properties with choices from this class. See
+ wxBaseEnumProperty for remarks.
@remarks
- Updating private index is important. You can do this either by calling
be called (by not implementing it, or by calling super class function in
it) -OR- you can just call SetIndex in OnSetValue.
*/
-class WXDLLIMPEXP_PROPGRID wxBaseEnumProperty : public wxPGProperty
+class WXDLLIMPEXP_PROPGRID wxEnumProperty : public wxPGProperty
{
+ WX_PG_DECLARE_PROPERTY_CLASS(wxEnumProperty)
public:
- wxBaseEnumProperty( const wxString& label = wxPG_LABEL,
- const wxString& name = wxPG_LABEL );
+
+#ifndef SWIG
+ wxEnumProperty( const wxString& label = wxPG_LABEL,
+ const wxString& name = wxPG_LABEL,
+ const wxChar** labels = NULL,
+ const long* values = NULL,
+ int value = 0 );
+ wxEnumProperty( const wxString& label,
+ const wxString& name,
+ wxPGChoices& choices,
+ int value = 0 );
+
+ // Special constructor for caching choices (used by derived class)
+ wxEnumProperty( const wxString& label,
+ const wxString& name,
+ const wxChar** labels,
+ const long* values,
+ wxPGChoices* choicesCache,
+ int value = 0 );
+
+ wxEnumProperty( const wxString& label,
+ const wxString& name,
+ const wxArrayString& labels,
+ const wxArrayInt& values = wxArrayInt(),
+ int value = 0 );
+#else
+ wxEnumProperty( const wxString& label = wxPG_LABEL,
+ const wxString& name = wxPG_LABEL,
+ const wxArrayString& labels = wxArrayString(),
+ const wxArrayInt& values = wxArrayInt(),
+ int value = 0 );
+#endif
+
+ virtual ~wxEnumProperty();
+
+ size_t GetItemCount() const { return m_choices.GetCount(); }
virtual void OnSetValue();
- virtual wxString GetValueAsString( int argFlags ) const;
+ virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
virtual bool StringToValue( wxVariant& variant,
const wxString& text,
int argFlags = 0 ) const;
// This must be overridden to have non-index based value
virtual int GetIndexForValue( int value ) const;
- // This returns string and value for index
- // Returns NULL if beyond last item
- // pvalue is never NULL - always set it.
- virtual const wxString* GetEntry( size_t index, int* pvalue ) const = 0;
-
// GetChoiceSelection needs to overridden since m_index is
// the true index, and various property classes derived from
// this take advantage of it.
virtual int GetChoiceSelection() const { return m_index; }
- int GetValueForIndex( size_t index ) const
- {
- int v;
- GetEntry( index, &v );
- return v;
- }
-
protected:
int GetIndex() const;
// -----------------------------------------------------------------------
-// If set, then selection of choices is static and should not be
-// changed (i.e. returns NULL in GetPropertyChoices).
-#define wxPG_PROP_STATIC_CHOICES wxPG_PROP_CLASS_SPECIFIC_1
-
-/** @class wxEnumProperty
- @ingroup classes
- You can derive custom properties with choices from this class. See
- wxBaseEnumProperty for remarks.
-*/
-class WXDLLIMPEXP_PROPGRID wxEnumProperty : public wxBaseEnumProperty
-{
- WX_PG_DECLARE_PROPERTY_CLASS(wxEnumProperty)
-public:
-
-#ifndef SWIG
- wxEnumProperty( const wxString& label = wxPG_LABEL,
- const wxString& name = wxPG_LABEL,
- const wxChar** labels = NULL,
- const long* values = NULL,
- int value = 0 );
- wxEnumProperty( const wxString& label,
- const wxString& name,
- wxPGChoices& choices,
- int value = 0 );
-
- // Special constructor for caching choices (used by derived class)
- wxEnumProperty( const wxString& label,
- const wxString& name,
- const wxChar** labels,
- const long* values,
- wxPGChoices* choicesCache,
- int value = 0 );
-
- wxEnumProperty( const wxString& label,
- const wxString& name,
- const wxArrayString& labels,
- const wxArrayInt& values = wxArrayInt(),
- int value = 0 );
-#else
- wxEnumProperty( const wxString& label = wxPG_LABEL,
- const wxString& name = wxPG_LABEL,
- const wxArrayString& labels = wxArrayString(),
- const wxArrayInt& values = wxArrayInt(),
- int value = 0 );
-#endif
-
- virtual ~wxEnumProperty();
-
- virtual int GetIndexForValue( int value ) const;
- virtual const wxString* GetEntry( size_t index, int* pvalue ) const;
-
- size_t GetItemCount() const { return m_choices.GetCount(); }
- const wxPGChoices& GetChoices() const { return m_choices; }
-};
-
-// -----------------------------------------------------------------------
-
/** @class wxEditEnumProperty
@ingroup classes
wxEnumProperty with wxString value and writable combo box editor.
virtual ~wxFlagsProperty ();
virtual void OnSetValue();
- virtual wxString GetValueAsString( int argFlags ) const;
+ virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
virtual bool StringToValue( wxVariant& variant,
const wxString& text,
int flags ) const;
virtual ~wxFileProperty ();
virtual void OnSetValue();
- virtual wxString GetValueAsString( int argFlags ) const;
+ virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
virtual bool StringToValue( wxVariant& variant,
const wxString& text,
int argFlags = 0 ) const;
static wxValidator* GetClassValidator();
virtual wxValidator* DoGetValidator() const;
+ /**
+ Returns filename to file represented by current value.
+ */
+ wxFileName GetFileName() const;
+
protected:
wxString m_wildcard;
wxString m_basePath; // If set, then show path relative to it
wxString m_initialPath; // If set, start the file dialog here
wxString m_dlgTitle; // If set, used as title for file dialog
- wxFileName m_filename; // used as primary storage
int m_indFilter; // index to the selected filter
};
const wxString& value = wxEmptyString );
virtual ~wxLongStringProperty();
- virtual wxString GetValueAsString( int argFlags = 0 ) const;
+ virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
virtual bool StringToValue( wxVariant& variant,
const wxString& text,
int argFlags = 0 ) const;
virtual ~wxArrayStringProperty();
virtual void OnSetValue();
- virtual wxString GetValueAsString( int argFlags = 0 ) const;
+ virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
virtual bool StringToValue( wxVariant& variant,
const wxString& text,
int argFlags = 0 ) const;
// wxArrayEditorDialog
// -----------------------------------------------------------------------
-#include "wx/textctrl.h"
#include "wx/button.h"
+#include "wx/dialog.h"
#include "wx/listbox.h"
#define wxAEDIALOG_STYLE \