From: Jaakko Salli Date: Wed, 22 Oct 2008 15:23:07 +0000 (+0000) Subject: Merged wxBaseEnumPropertyClass (intermediate property class with obsolete purpose... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/78f2d746a01dba8b3f62f89050129a351906ce2a Merged wxBaseEnumPropertyClass (intermediate property class with obsolete purpose) to wxEnumPropertyClass git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56486 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/propgrid/props.h b/include/wx/propgrid/props.h index 965de7dc7a..b096bb24e1 100644 --- a/include/wx/propgrid/props.h +++ b/include/wx/propgrid/props.h @@ -343,9 +343,14 @@ public: // ----------------------------------------------------------------------- -/** @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 @@ -353,11 +358,46 @@ public: 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 ValueToString( wxVariant& value, int argFlags = 0 ) const; @@ -379,23 +419,11 @@ public: // 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; @@ -419,63 +447,6 @@ private: // ----------------------------------------------------------------------- -// 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. diff --git a/src/propgrid/advprops.cpp b/src/propgrid/advprops.cpp index 60fda14f1b..0b578f6874 100644 --- a/src/propgrid/advprops.cpp +++ b/src/propgrid/advprops.cpp @@ -1082,7 +1082,7 @@ bool wxSystemColourProperty::QueryColourFromUser( wxVariant& variant ) const bool wxSystemColourProperty::IntToValue( wxVariant& variant, int number, int WXUNUSED(argFlags) ) const { int index = number; - int type = GetValueForIndex(index); + int type = m_choices.GetValue(index); if ( type == wxPG_COLOUR_CUSTOM ) { diff --git a/src/propgrid/props.cpp b/src/propgrid/props.cpp index 1b61ba15df..566572ff87 100644 --- a/src/propgrid/props.cpp +++ b/src/propgrid/props.cpp @@ -878,26 +878,93 @@ bool wxBoolProperty::DoSetAttribute( const wxString& name, wxVariant& value ) } // ----------------------------------------------------------------------- -// wxBaseEnumProperty +// wxEnumProperty // ----------------------------------------------------------------------- -int wxBaseEnumProperty::ms_nextIndex = -2; +IMPLEMENT_DYNAMIC_CLASS(wxEnumProperty, wxPGProperty) + +WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(wxEnumProperty,long,Choice) + +wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, const wxChar** labels, + const long* values, int value ) : wxPGProperty(label,name) +{ + SetIndex(0); + + if ( labels ) + { + m_choices.Add(labels,values); + + if ( GetItemCount() ) + SetValue( (long)value ); + } +} + +wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, const wxChar** labels, + const long* values, wxPGChoices* choicesCache, int value ) + : wxPGProperty(label,name) +{ + SetIndex(0); + + wxASSERT( choicesCache ); + + if ( choicesCache->IsOk() ) + { + m_choices.Assign( *choicesCache ); + m_value = wxPGVariant_Zero; + } + else if ( labels ) + { + m_choices.Add(labels,values); + + if ( GetItemCount() ) + SetValue( (long)value ); + } +} + +wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, + const wxArrayString& labels, const wxArrayInt& values, int value ) + : wxPGProperty(label,name) +{ + SetIndex(0); + + if ( &labels && labels.size() ) + { + m_choices.Set(labels, values); + + if ( GetItemCount() ) + SetValue( (long)value ); + } +} -wxBaseEnumProperty::wxBaseEnumProperty( const wxString& label, const wxString& name ) +wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, + wxPGChoices& choices, int value ) : wxPGProperty(label,name) { - m_value = wxPGVariant_Zero; + m_choices.Assign( choices ); + + if ( GetItemCount() ) + SetValue( (long)value ); } -/** If has values array, then returns number at index with value - - otherwise just returns the value. -*/ -int wxBaseEnumProperty::GetIndexForValue( int value ) const +int wxEnumProperty::GetIndexForValue( int value ) const { + if ( !m_choices.IsOk() ) + return -1; + + int intVal = m_choices.Index(value); + if ( intVal >= 0 ) + return intVal; + return value; } -void wxBaseEnumProperty::OnSetValue() +wxEnumProperty::~wxEnumProperty () +{ +} + +int wxEnumProperty::ms_nextIndex = -2; + +void wxEnumProperty::OnSetValue() { wxString variantType = m_value.GetType(); @@ -915,7 +982,7 @@ void wxBaseEnumProperty::OnSetValue() } } -bool wxBaseEnumProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& WXUNUSED(validationInfo) ) const +bool wxEnumProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& WXUNUSED(validationInfo) ) const { // Make sure string value is in the list, // unless property has string as preferred value type @@ -927,7 +994,7 @@ bool wxBaseEnumProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& WX return true; } -wxString wxBaseEnumProperty::ValueToString( wxVariant& value, +wxString wxEnumProperty::ValueToString( wxVariant& value, int WXUNUSED(argFlags) ) const { if ( value.GetType() == wxPG_VARIANT_TYPE_STRING ) @@ -940,36 +1007,30 @@ wxString wxBaseEnumProperty::ValueToString( wxVariant& value, return m_choices.GetLabel(index); } -bool wxBaseEnumProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const +bool wxEnumProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const { return ValueFromString_( variant, text, argFlags ); } -bool wxBaseEnumProperty::IntToValue( wxVariant& variant, int intVal, int argFlags ) const +bool wxEnumProperty::IntToValue( wxVariant& variant, int intVal, int argFlags ) const { return ValueFromInt_( variant, intVal, argFlags ); } -bool wxBaseEnumProperty::ValueFromString_( wxVariant& value, const wxString& text, int argFlags ) const +bool wxEnumProperty::ValueFromString_( wxVariant& value, const wxString& text, int argFlags ) const { - size_t i = 0; - const wxString* entryLabel; - int entryValue; int useIndex = -1; long useValue = 0; - entryLabel = GetEntry(i, &entryValue); - while ( entryLabel ) + for ( unsigned int i=0; iIsOk() ) - { - m_choices.Assign( *choicesCache ); - m_value = wxPGVariant_Zero; - } - else if ( labels ) - { - m_choices.Add(labels,values); - - if ( GetItemCount() ) - SetValue( (long)value ); - } -} - -wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, - const wxArrayString& labels, const wxArrayInt& values, int value ) : wxBaseEnumProperty(label,name) -{ - SetIndex(0); - - if ( &labels && labels.size() ) - { - m_choices.Set(labels, values); - - if ( GetItemCount() ) - SetValue( (long)value ); - } -} - -wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, - wxPGChoices& choices, int value ) - : wxBaseEnumProperty(label,name) -{ - m_choices.Assign( choices ); - - if ( GetItemCount() ) - SetValue( (long)value ); -} - -int wxEnumProperty::GetIndexForValue( int value ) const -{ - if ( !m_choices.IsOk() ) - return -1; - - int intVal = m_choices.Index(value); - if ( intVal >= 0 ) - return intVal; - - return value; -} - -wxEnumProperty::~wxEnumProperty () -{ -} - -const wxString* wxEnumProperty::GetEntry( size_t index, int* pvalue ) const -{ - if ( m_choices.IsOk() && index < m_choices.GetCount() ) - { - int value = m_choices.GetValue(index); - - if ( pvalue ) - *pvalue = value; - - return &m_choices.GetLabel(index); - } - return (const wxString*) NULL; -} - // ----------------------------------------------------------------------- // wxEditEnumProperty // -----------------------------------------------------------------------