X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f4bc1aa27cb33f679d7e9c1518a7855bbc1fa471..1237a25bc49396fa39516846a855bf3b0a4fe1f7:/include/wx/propgrid/props.h diff --git a/include/wx/propgrid/props.h b/include/wx/propgrid/props.h index 7e4dcb9dd0..eacb908f31 100644 --- a/include/wx/propgrid/props.h +++ b/include/wx/propgrid/props.h @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: 2007-03-28 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) Jaakko Salli // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// @@ -20,309 +20,38 @@ class wxArrayEditorDialog; #include "wx/propgrid/editors.h" -// ----------------------------------------------------------------------- +#include "wx/filename.h" +#include "wx/dialog.h" +#include "wx/textctrl.h" +#include "wx/button.h" +#include "wx/listbox.h" -// -// Additional property class declaration helper macros -// +// ----------------------------------------------------------------------- // // Property class implementation helper macros. // -#define WX_PG_DECLARE_BASIC_TYPE_METHODS() \ - virtual wxString GetValueAsString( int argFlags = 0 ) const; \ - virtual bool StringToValue( wxVariant& variant, \ - const wxString& text, \ - int argFlags = 0 ) const; - -#define WX_PG_DECLARE_CHOICE_METHODS() \ - virtual bool IntToValue( wxVariant& variant, \ - int number, int argFlags = 0 ) const; \ - virtual int GetChoiceInfo( wxPGChoiceInfo* choiceinfo ); - -#define WX_PG_DECLARE_EVENT_METHODS() \ - virtual bool OnEvent( wxPropertyGrid* propgrid, \ - wxWindow* primary, wxEvent& event ); - -#define WX_PG_DECLARE_PARENTAL_METHODS() \ - virtual void ChildChanged( wxVariant& thisValue, \ - int childIndex, wxVariant& childValue ) const; \ - virtual void RefreshChildren(); - -#define WX_PG_DECLARE_CUSTOM_PAINT_METHODS() \ - virtual wxSize OnMeasureImage( int item ) const; \ - virtual void OnCustomPaint( wxDC& dc, \ - const wxRect& rect, wxPGPaintData& paintdata ); - -#define WX_PG_DECLARE_ATTRIBUTE_METHODS() \ - virtual bool DoSetAttribute( const wxString& name, wxVariant& value ); - -#define WX_PG_DECLARE_VALIDATOR_METHODS() \ - virtual wxValidator* DoGetValidator() const; - -// 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 ); \ - WX_PG_DECLARE_VALIDATOR_METHODS() \ -}; - -#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) // ----------------------------------------------------------------------- // // These macros help creating DoGetValidator #define WX_PG_DOGETVALIDATOR_ENTRY() \ - static wxValidator* s_ptr = (wxValidator*) NULL; \ + static wxValidator* s_ptr = NULL; \ if ( s_ptr ) return s_ptr; // 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 - /** @class wxPGInDialogValidator @ingroup classes Creates and manages a temporary wxTextCtrl for validation purposes. @@ -350,8 +79,6 @@ private: wxTextCtrl* m_textCtrl; }; -#endif // SWIG - // ----------------------------------------------------------------------- // Property classes @@ -379,8 +106,12 @@ public: const wxString& value = wxEmptyString ); virtual ~wxStringProperty(); - WX_PG_DECLARE_BASIC_TYPE_METHODS() - WX_PG_DECLARE_ATTRIBUTE_METHODS() + virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const; + virtual bool StringToValue( wxVariant& variant, + const wxString& text, + int argFlags = 0 ) const; + + virtual bool DoSetAttribute( const wxString& name, wxVariant& value ); /** This is updated so "" special value can be handled. */ @@ -391,10 +122,9 @@ protected: // ----------------------------------------------------------------------- -#ifndef SWIG /** Constants used with DoValidation() methods. */ -enum +enum wxPGDoValidationConstants { /** Instead of modifying the value, show an error message. */ @@ -408,7 +138,6 @@ enum */ wxPG_PROPERTY_VALIDATION_WRAP = 2 }; -#endif // ----------------------------------------------------------------------- @@ -465,7 +194,10 @@ public: wxIntProperty( const wxString& label, const wxString& name, const wxLongLong& value ); - WX_PG_DECLARE_BASIC_TYPE_METHODS() + virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const; + virtual bool StringToValue( wxVariant& variant, + const wxString& text, + int argFlags = 0 ) const; virtual bool ValidateValue( wxVariant& value, wxPGValidationInfo& validationInfo ) const; virtual bool IntToValue( wxVariant& variant, @@ -516,8 +248,11 @@ public: wxUIntProperty( const wxString& label, const wxString& name, const wxULongLong& value ); - WX_PG_DECLARE_BASIC_TYPE_METHODS() - WX_PG_DECLARE_ATTRIBUTE_METHODS() + virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const; + virtual bool StringToValue( wxVariant& variant, + const wxString& text, + int argFlags = 0 ) const; + virtual bool DoSetAttribute( const wxString& name, wxVariant& value ); virtual bool ValidateValue( wxVariant& value, wxPGValidationInfo& validationInfo ) const; virtual bool IntToValue( wxVariant& variant, @@ -550,8 +285,11 @@ public: double value = 0.0 ); virtual ~wxFloatProperty(); - WX_PG_DECLARE_BASIC_TYPE_METHODS() - WX_PG_DECLARE_ATTRIBUTE_METHODS() + virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const; + virtual bool StringToValue( wxVariant& variant, + const wxString& text, + int argFlags = 0 ) const; + virtual bool DoSetAttribute( const wxString& name, wxVariant& value ); virtual bool ValidateValue( wxVariant& value, wxPGValidationInfo& validationInfo ) const; @@ -562,17 +300,14 @@ public: wxPGValidationInfo* pValidationInfo, int mode = wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE ); + virtual wxValidator* DoGetValidator () const; protected: int m_precision; - virtual wxValidator* DoGetValidator () const; }; // ----------------------------------------------------------------------- -// Exclude class from wxPython bindings -#ifndef SWIG - /** @class wxBoolProperty @ingroup classes Basic property with boolean value. @@ -590,82 +325,13 @@ public: bool value = false ); virtual ~wxBoolProperty(); - WX_PG_DECLARE_BASIC_TYPE_METHODS() - WX_PG_DECLARE_CHOICE_METHODS() - WX_PG_DECLARE_ATTRIBUTE_METHODS() -}; - -#endif // !SWIG - -// ----------------------------------------------------------------------- - -/** @class wxBaseEnumProperty - @ingroup classes - Derive dynamic custom properties with choices from this class. - - @remarks - - Updating private index is important. You can do this either by calling - SetIndex() in IntToValue, and then letting wxBaseEnumProperty::OnSetValue - 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 -{ -public: - wxBaseEnumProperty( const wxString& label = wxPG_LABEL, - const wxString& name = wxPG_LABEL ); - - 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; - virtual bool ValidateValue( wxVariant& value, - wxPGValidationInfo& validationInfo ) const; - - // If wxPG_FULL_VALUE is not set in flags, then the value is interpreted - // as index to choices list. Otherwise, it is actual value. virtual bool IntToValue( wxVariant& variant, - int number, - int argFlags = 0 ) const; - - // - // Additional virtuals - - // 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; - - int GetValueForIndex( size_t index ) const - { - int v; - GetEntry( index, &v ); - return v; - } - -protected: - - int GetIndex() const; - void SetIndex( int index ); - - bool ValueFromString_( wxVariant& value, - const wxString& text, - int argFlags ) const; - bool ValueFromInt_( wxVariant& value, int intVal, int argFlags ) const; - - static void ResetNextIndex() { ms_nextIndex = -2; } - -private: - // This is private so that classes are guaranteed to use GetIndex - // for up-to-date index value. - int m_index; - - // Relies on ValidateValue being called always before OnSetValue - static int ms_nextIndex; + int number, int argFlags = 0 ) const; + virtual bool DoSetAttribute( const wxString& name, wxVariant& value ); }; // ----------------------------------------------------------------------- @@ -678,8 +344,14 @@ private: @ingroup classes 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 + SetIndex() in IntToValue, and then letting wxBaseEnumProperty::OnSetValue + 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 wxEnumProperty : public wxBaseEnumProperty +class WXDLLIMPEXP_PROPGRID wxEnumProperty : public wxPGProperty { WX_PG_DECLARE_PROPERTY_CLASS(wxEnumProperty) public: @@ -687,7 +359,7 @@ public: #ifndef SWIG wxEnumProperty( const wxString& label = wxPG_LABEL, const wxString& name = wxPG_LABEL, - const wxChar** labels = NULL, + const wxChar* const* labels = NULL, const long* values = NULL, int value = 0 ); wxEnumProperty( const wxString& label, @@ -698,7 +370,7 @@ public: // Special constructor for caching choices (used by derived class) wxEnumProperty( const wxString& label, const wxString& name, - const wxChar** labels, + const wxChar* const* labels, const long* values, wxPGChoices* choicesCache, int value = 0 ); @@ -718,15 +390,54 @@ public: virtual ~wxEnumProperty(); - virtual int GetChoiceInfo( wxPGChoiceInfo* choiceinfo ); + size_t GetItemCount() const { return m_choices.GetCount(); } + + virtual void OnSetValue(); + virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const; + virtual bool StringToValue( wxVariant& variant, + const wxString& text, + int argFlags = 0 ) const; + virtual bool ValidateValue( wxVariant& value, + wxPGValidationInfo& validationInfo ) const; + + // If wxPG_FULL_VALUE is not set in flags, then the value is interpreted + // as index to choices list. Otherwise, it is actual value. + virtual bool IntToValue( wxVariant& variant, + int number, + int argFlags = 0 ) const; + + // + // Additional virtuals + + // This must be overridden to have non-index based value 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; } + // 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; } + + virtual void OnValidationFailure( wxVariant& pendingValue ); protected: - wxPGChoices m_choices; + + int GetIndex() const; + void SetIndex( int index ); + + bool ValueFromString_( wxVariant& value, + const wxString& text, + int argFlags ) const; + bool ValueFromInt_( wxVariant& value, int intVal, int argFlags ) const; + + static void ResetNextIndex() { ms_nextIndex = -2; } + +private: + // This is private so that classes are guaranteed to use GetIndex + // for up-to-date index value. + int m_index; + + // Relies on ValidateValue being called always before OnSetValue + static int ms_nextIndex; }; // ----------------------------------------------------------------------- @@ -746,7 +457,7 @@ public: wxEditEnumProperty( const wxString& label, const wxString& name, - const wxChar** labels, + const wxChar* const* labels, const long* values, const wxString& value ); wxEditEnumProperty( const wxString& label = wxPG_LABEL, @@ -762,7 +473,7 @@ public: // Special constructor for caching choices (used by derived class) wxEditEnumProperty( const wxString& label, const wxString& name, - const wxChar** labels, + const wxChar* const* labels, const long* values, wxPGChoices* choicesCache, const wxString& value ); @@ -792,7 +503,7 @@ public: #ifndef SWIG wxFlagsProperty( const wxString& label, const wxString& name, - const wxChar** labels, + const wxChar* const* labels, const long* values = NULL, long value = 0 ); wxFlagsProperty( const wxString& label, @@ -808,17 +519,19 @@ public: 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 void ChildChanged( wxVariant& thisValue, - int childIndex, - wxVariant& childValue ) const; + virtual wxVariant ChildChanged( wxVariant& thisValue, + int childIndex, + wxVariant& childValue ) const; virtual void RefreshChildren(); + virtual bool DoSetAttribute( const wxString& name, wxVariant& value ); - // this is necessary for conveying m_choices - virtual int GetChoiceInfo( wxPGChoiceInfo* choiceinfo ); + // GetChoiceSelection needs to overridden since m_choices is + // used and value is integer, but it is not index. + virtual int GetChoiceSelection() const { return wxNOT_FOUND; } // helpers size_t GetItemCount() const { return m_choices.GetCount(); } @@ -826,8 +539,6 @@ public: { return m_choices.GetLabel(ind); } protected: - wxPGChoices m_choices; - // Used to detect if choices have been changed wxPGChoicesData* m_oldChoicesData; @@ -856,8 +567,6 @@ public: // ----------------------------------------------------------------------- -#include "wx/filename.h" - // Indicates first bit useable by derived properties. #define wxPG_PROP_SHOW_FULL_FILENAME wxPG_PROP_CLASS_SPECIFIC_1 @@ -887,23 +596,26 @@ public: 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; virtual wxPGEditorDialogAdapter* GetEditorDialog() const; - - WX_PG_DECLARE_ATTRIBUTE_METHODS() + virtual bool DoSetAttribute( const wxString& name, wxVariant& value ); 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 }; @@ -939,12 +651,12 @@ public: 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; - - WX_PG_DECLARE_EVENT_METHODS() + virtual bool OnEvent( wxPropertyGrid* propgrid, + wxWindow* primary, wxEvent& event ); // Shows string editor dialog. Value to be edited should be read from // value, and if dialog is not cancelled, it should be stored back and true @@ -961,9 +673,6 @@ protected: // ----------------------------------------------------------------------- -// Exclude class from wxPython bindings -#ifndef SWIG - /** @class wxDirProperty @ingroup classes Like wxLongStringProperty, but the button triggers dir selector instead. @@ -973,17 +682,15 @@ protected: */ class WXDLLIMPEXP_PROPGRID wxDirProperty : public wxLongStringProperty { -#ifndef SWIG DECLARE_DYNAMIC_CLASS(wxDirProperty) -#endif public: wxDirProperty( const wxString& name = wxPG_LABEL, const wxString& label = wxPG_LABEL, const wxString& value = wxEmptyString ); virtual ~wxDirProperty(); - WX_PG_DECLARE_ATTRIBUTE_METHODS() - WX_PG_DECLARE_VALIDATOR_METHODS() + virtual bool DoSetAttribute( const wxString& name, wxVariant& value ); + virtual wxValidator* DoGetValidator() const; virtual bool OnButtonClick ( wxPropertyGrid* propGrid, wxString& value ); @@ -991,8 +698,6 @@ protected: wxString m_dlgMessage; }; -#endif // !SWIG - // ----------------------------------------------------------------------- // wxBoolProperty specific flags @@ -1018,8 +723,12 @@ public: virtual ~wxArrayStringProperty(); virtual void OnSetValue(); - WX_PG_DECLARE_BASIC_TYPE_METHODS() - WX_PG_DECLARE_EVENT_METHODS() + virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const; + virtual bool StringToValue( wxVariant& variant, + const wxString& text, + int argFlags = 0 ) const; + virtual bool OnEvent( wxPropertyGrid* propgrid, + wxWindow* primary, wxEvent& event ); virtual void GenerateValueAsString(); @@ -1033,10 +742,8 @@ public: wxWindow* primary, const wxChar* cbt ); -#ifndef SWIG // Creates wxArrayEditorDialog for string editing. Called in OnButtonClick. virtual wxArrayEditorDialog* CreateEditorDialog(); -#endif protected: wxString m_display; // Cache for displayed text. @@ -1060,7 +767,7 @@ public: \ virtual bool OnEvent( wxPropertyGrid* propgrid, \ wxWindow* primary, wxEvent& event ); \ virtual bool OnCustomStringEdit( wxWindow* parent, wxString& value ); \ - WX_PG_DECLARE_VALIDATOR_METHODS() \ + virtual wxValidator* DoGetValidator() const; \ }; #define WX_PG_DECLARE_ARRAYSTRING_PROPERTY_WITH_VALIDATOR(PROPNAM) \ @@ -1123,17 +830,13 @@ WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY_WITH_VALIDATOR(PROPNAME, \ DELIMCHAR, \ CUSTBUTTXT) \ wxValidator* PROPNAME::DoGetValidator () const \ -{ return (wxValidator*) NULL; } +{ return NULL; } // ----------------------------------------------------------------------- // wxArrayEditorDialog // ----------------------------------------------------------------------- -#include "wx/textctrl.h" -#include "wx/button.h" -#include "wx/listbox.h" - #define wxAEDIALOG_STYLE \ (wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxOK | wxCANCEL | wxCENTRE) @@ -1184,7 +887,7 @@ public: */ virtual wxValidator* GetTextCtrlValidator() const { - return (wxValidator*) NULL; + return NULL; } // Returns true if array was actually modified @@ -1231,10 +934,8 @@ protected: virtual void ArraySwap( size_t first, size_t second ) = 0; private: -#ifndef SWIG DECLARE_DYNAMIC_CLASS_NO_COPY(wxArrayEditorDialog) DECLARE_EVENT_TABLE() -#endif }; // ----------------------------------------------------------------------- @@ -1281,10 +982,8 @@ protected: virtual void ArraySwap( size_t first, size_t second ); private: -#ifndef SWIG DECLARE_DYNAMIC_CLASS_NO_COPY(wxPGArrayStringEditorDialog) DECLARE_EVENT_TABLE() -#endif }; // -----------------------------------------------------------------------