diff --git a/include/wx/propgrid/property.h b/include/wx/propgrid/property.h index 46591191d6..82b5c3bb83 100644 --- a/include/wx/propgrid/property.h +++ b/include/wx/propgrid/property.h @@ -719,12 +719,23 @@ public: } // Constructor. - // labels - Labels for choices. + // count - Number of labels. + // labels - Labels themselves. + // values - Values for choices. If NULL, indexes are used. + wxPGChoices(size_t count, const wxString* labels, const long* values = NULL) + { + Init(); + Add(count, labels, values); + } + + // Constructor overload taking wxChar strings, provided mostly for + // compatibility. + // labels - Labels for choices, NULL-terminated. // values - Values for choices. If NULL, indexes are used. wxPGChoices( const wxChar* const* labels, const long* values = NULL ) { Init(); - Set(labels,values); + Add(labels,values); } // Constructor. @@ -734,7 +745,7 @@ public: const wxArrayInt& values = wxArrayInt() ) { Init(); - Set(labels,values); + Add(labels,values); } // Simple interface constructor. @@ -754,7 +765,10 @@ public: // Adds to current. // If did not have own copies, creates them now. If was empty, identical // to set except that creates copies. - // labels - Labels for added choices. + void Add(size_t count, const wxString* labels, const long* values = NULL); + + // Overload taking wxChar strings, provided mostly for compatibility. + // labels - Labels for added choices, NULL-terminated. // values - Values for added choices. If empty, relevant entry indexes are used. void Add( const wxChar* const* labels, const ValArrItem* values = NULL ); @@ -879,6 +893,12 @@ public: // Sets contents from lists of strings and values. // Does not create copies for itself. // TODO: Deprecate. + void Set(size_t count, const wxString* labels, const long* values = NULL) + { + Free(); + Add(count, labels, values); + } + void Set( const wxChar* const* labels, const long* values = NULL ) { Free(); diff --git a/interface/wx/propgrid/property.h b/interface/wx/propgrid/property.h index e12ad51e3f..e60002a638 100644 --- a/interface/wx/propgrid/property.h +++ b/interface/wx/propgrid/property.h @@ -2487,11 +2487,30 @@ public: /** Constructor. + @param count + Number of the strings in @a labels array. @param labels Labels for choices. + @param values + Values for choices. If @NULL, indexes are used. Otherwise must have + at least @a count elements. + + @since 3.1.2 + */ + wxPGChoices(size_t count, const wxString* labels, const long* values = NULL); + + /** + Constructor overload taking wxChar strings. + + This constructor is provided mostly for compatibility, prefer to use + one of the other constructor overloads in the new code. + + @param labels + Labels for choices, @NULL-terminated. @param values - Values for choices. If @NULL, indexes are used. + Values for choices. If @NULL, indexes are used. Otherwise must have + at least the same size as @a labels. */ wxPGChoices( const wxChar** labels, const long* values = NULL ); @@ -2502,7 +2521,8 @@ public: Labels for choices. @param values - Values for choices. If empty, indexes are used. + Values for choices. If empty, indexes are used. Otherwise must have + at least the same size as @a labels. */ wxPGChoices( const wxArrayString& labels, const wxArrayInt& values = wxArrayInt() ); @@ -2520,16 +2540,35 @@ public: Adds to current. If did not have own copies, creates them now. If was empty, identical to set except that creates copies. + @param count + Number of the strings in @a labels array. @param labels - Labels for added choices. - + Labels for choices. @param values - Values for added choices. If empty, relevant entry indexes are used. - */ - void Add( const wxChar** labels, const ValArrItem* values = NULL ); + Values for choices. If @NULL, indexes are used. Otherwise must have + at least @a count elements. + + @since 3.1.2 + */ + void Add(size_t count, const wxString* labels, const long* values = NULL); /** - Adds to current. Version that works with wxArrayString and wxArrayInt. + Adds to current. + + This overload is provided mostly for compatibility, prefer to use one + of the other ones in the new code. + + @param labels + Labels for added choices, @NULL-terminated. + + @param values + Values for added choices. If empty, relevant entry indexes are + used. Otherwise must have at least the same size as @a labels. + */ + void Add( const wxChar** labels, const long* values = NULL ); + + /** + @overload */ void Add( const wxArrayString& arr, const wxArrayInt& arrint ); @@ -2659,12 +2698,19 @@ public: /** Sets contents from lists of strings and values. + + This is similar to calling Clear() and the corresponding overload of Add(). */ + void Set(size_t count, const wxString* labels, const long* values = NULL); + + /** + @overload + */ void Set( const wxChar** labels, const long* values = NULL ); /** - Sets contents from lists of strings and values. - */ + @overload + */ void Set( const wxArrayString& labels, const wxArrayInt& values = wxArrayInt() ); /** diff --git a/src/propgrid/property.cpp b/src/propgrid/property.cpp index 281ed15d23..5cfa571546 100644 --- a/src/propgrid/property.cpp +++ b/src/propgrid/property.cpp @@ -3013,6 +3013,20 @@ wxPGChoiceEntry& wxPGChoices::AddAsSorted( const wxString& label, int value ) // ----------------------------------------------------------------------- +void wxPGChoices::Add(size_t count, const wxString* labels, const long* values) +{ + AllocExclusive(); + + for ( size_t i = 0; i < count; ++i ) + { + const int value = values ? values[i] : i; + wxPGChoiceEntry entry(labels[i], value); + m_data->Insert( i, entry ); + } +} + +// ----------------------------------------------------------------------- + void wxPGChoices::Add( const wxChar* const* labels, const ValArrItem* values ) { AllocExclusive();