]> git.saurik.com Git - wxWidgets.git/commitdiff
Added virtual wxPGProperty::ValueToString(). In derived property classes, now it...
authorJaakko Salli <jaakko.salli@dnainternet.net>
Thu, 16 Oct 2008 17:19:50 +0000 (17:19 +0000)
committerJaakko Salli <jaakko.salli@dnainternet.net>
Thu, 16 Oct 2008 17:19:50 +0000 (17:19 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56363 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

12 files changed:
include/wx/propgrid/advprops.h
include/wx/propgrid/property.h
include/wx/propgrid/propgriddefs.h
include/wx/propgrid/props.h
interface/wx/propgrid/property.h
samples/propgrid/propgrid.cpp
samples/propgrid/sampleprops.cpp
samples/propgrid/sampleprops.h
src/propgrid/advprops.cpp
src/propgrid/editors.cpp
src/propgrid/property.cpp
src/propgrid/props.cpp

index 042d6021ab9ff9afc1f54ca1976a512074f505c1..250acb8bb58d5cf5c085bd057b0e0fea2b520ac2 100644 (file)
@@ -180,7 +180,7 @@ public:
                    const wxFont& value = wxFont());
     virtual ~wxFontProperty();
     virtual void OnSetValue();
-    virtual wxString GetValueAsString( int argFlags = 0 ) const;
+    virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
     virtual bool OnEvent( wxPropertyGrid* propgrid,
                           wxWindow* primary, wxEvent& event );
     virtual void ChildChanged( wxVariant& thisValue,
@@ -231,7 +231,7 @@ public:
     */
     virtual int GetCustomColourIndex() const;
 
-    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;
@@ -292,7 +292,7 @@ public:
     virtual ~wxColourProperty();
 
 protected:
-    virtual wxString GetValueAsString( int argFlags ) const;
+    virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
     virtual wxColour GetColour( int index ) const;
     virtual wxVariant DoTranslateVal( wxColourPropertyValue& v ) const;
 
@@ -392,7 +392,7 @@ public:
     virtual ~wxMultiChoiceProperty();
 
     virtual void OnSetValue();
-    virtual wxString GetValueAsString( int flags = 0 ) const;
+    virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
     virtual bool StringToValue(wxVariant& variant,
                                const wxString& text,
                                int argFlags = 0) const;
@@ -406,7 +406,7 @@ public:
 
 protected:
 
-    void GenerateValueAsString();
+    void GenerateValueAsString( wxString* target ) const;
 
     // Returns translation of values into string indices.
     wxArrayInt GetValueAsIndices() const;
@@ -442,7 +442,7 @@ public:
                     const wxDateTime& value = wxDateTime() );
     virtual ~wxDateProperty();
 
-    virtual wxString GetValueAsString( int flags = 0 ) const;
+    virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
     virtual bool StringToValue(wxVariant& variant,
                                const wxString& text,
                                int argFlags = 0) const;
index 1d95ae5abba1924486c82bd77e32d5c80adf3195..13ba5c5be87438ef3789aca981defcadd127fccc 100644 (file)
@@ -1033,7 +1033,7 @@ public:
             If wxPG_FULL_VALUE is set, returns complete, storable value instead
             of displayable one (they may be different).
             If wxPG_COMPOSITE_FRAGMENT is set, text is interpreted as a part of
-            composite property string value (as generated by GetValueAsString()
+            composite property string value (as generated by ValueToString()
             called with this same flag).
 
         @return Returns @true if resulting wxVariant value was different.
@@ -1081,22 +1081,24 @@ public:
                              int number,
                              int argFlags = 0 ) const;
 #endif  // !defined(SWIG) || defined(CREATE_VCW)
+    /**
+        Converts property value into a text representation.
 
-public:
-    /** Returns text representation of property's value.
+        @param value
+            Value to be converted.
 
         @param argFlags
+            If 0 (default value), then displayed string is returned.
             If wxPG_FULL_VALUE is set, returns complete, storable string value
             instead of displayable. If wxPG_EDITABLE_VALUE is set, returns
             string value that must be editable in textctrl. If
             wxPG_COMPOSITE_FRAGMENT is set, returns text that is appropriate to
-            display as a part of composite property string value.
+            display as a part of string property's composite text
+            representation.
 
-        @remarks
-        Default implementation returns string composed from text
-        representations of child properties.
+        @remarks Default implementation calls GenerateComposedValue().
     */
-    virtual wxString GetValueAsString( int argFlags = 0 ) const;
+    virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
 
     /** Converts string to a value, and if successful, calls SetValue() on it.
         Default behavior is to do nothing.
@@ -1279,7 +1281,7 @@ public:
               colour) pen for drawing framing rectangle. It can be changed as
               well.
 
-        @see GetValueAsString()
+        @see ValueToString()
     */
     virtual void OnCustomPaint( wxDC& dc,
                                 const wxRect& rect,
@@ -1387,8 +1389,14 @@ public:
         else ClearFlag( wxPG_PROP_USES_COMMON_VALUE );
     }
 
-    /** Composes text from values of child properties. */
-    void GenerateComposedValue( wxString& text, int argFlags = 0 ) const;
+    /**
+        Composes text from values of child properties. You usually do not have
+        to care about arguments other than 'text'.
+    */
+    void GenerateComposedValue( wxString& text,
+                                int argFlags = wxPG_VALUE_IS_CURRENT,
+                                const wxVariantList* valueOverrides = NULL,
+                                wxPGHashMapS2S* childResults = NULL ) const;
 
     /** Returns property's label. */
     const wxString& GetLabel() const { return m_label; }
@@ -1435,11 +1443,31 @@ public:
     }
 #endif
 
-    /** To acquire property's value as string, you should use this
-         function (instead of GetValueAsString()), as it may produce
-         more accurate value in future versions.
+    /** Returns text representation of property's value.
+
+        @param argFlags
+            If 0 (default value), then displayed string is returned.
+            If wxPG_FULL_VALUE is set, returns complete, storable string value
+            instead of displayable. If wxPG_EDITABLE_VALUE is set, returns
+            string value that must be editable in textctrl. If
+            wxPG_COMPOSITE_FRAGMENT is set, returns text that is appropriate to
+            display as a part of string property's composite text
+            representation.
+
+        @remarks In older versions, this function used to be overridden to convert
+                 property's value into a string representation. This function is
+                 now handled by ValueToString(), and overriding this function now
+                 will result in run-time assertion failure.
+    */
+    virtual wxString GetValueAsString( int argFlags = 0 ) const;
+
+    /** Synonymous to GetValueAsString().
+
+        @deprecated Use GetValueAsString() instead.
+
+        @see GetValueAsString()
     */
-    wxString GetValueString( int argFlags = 0 ) const;
+    wxDEPRECATED( wxString GetValueString( int argFlags = 0 ) const );
 
     void UpdateControl( wxWindow* primary );
 
@@ -1460,7 +1488,7 @@ public:
 
     wxString GetDisplayedString() const
     {
-        return GetValueString(0);
+        return GetValueAsString(0);
     }
 
     /** Returns property grid where property lies. */
@@ -2183,7 +2211,7 @@ public:
     int GetTextExtent( const wxWindow* wnd, const wxFont& font ) const;
 
 protected:
-    virtual wxString GetValueAsString( int argFlags ) const;
+    virtual wxString ValueToString( wxVariant& value, int argFlags ) const;
 
     void SetTextColIndex( unsigned int colInd )
         { m_capFgColIndex = (wxByte) colInd; }
index ca0c5340bee57c9db467b37fca72d85eed6e5dac..98c339c062da99cc56d8a7ed04c955740fe30692 100644 (file)
 // (for tree buttons)
 //#undef wxPG_ICON_WIDTH
 
+#if WXWIN_COMPATIBILITY_2_6 || WXWIN_COMPATIBILITY_2_8
+    #define wxPG_COMPATIBILITY_1_4      1
+#else
+    #define wxPG_COMPATIBILITY_1_4      0
+#endif
+
 // Need to force disable tooltips?
 #if !wxUSE_TOOLTIPS
     #undef wxPG_SUPPORT_TOOLTIPS
@@ -332,7 +338,10 @@ WX_DECLARE_STRING_HASH_MAP_WITH_DECL(void*,
                                      wxPGHashMapS2P,
                                      class WXDLLIMPEXP_PROPGRID);
 
-
+WX_DECLARE_STRING_HASH_MAP_WITH_DECL(wxString,
+                                     wxPGHashMapS2S,
+                                     class WXDLLIMPEXP_PROPGRID);
 WX_DECLARE_VOIDPTR_HASH_MAP_WITH_DECL(void*,
                                       wxPGHashMapP2P,
                                       class WXDLLIMPEXP_PROPGRID);
@@ -392,7 +401,11 @@ enum wxPG_MISC_ARG_FLAGS
 
     // Means property for which final string value is for can not really be
     // edited.
-    wxPG_UNEDITABLE_COMPOSITE_FRAGMENT  = 0x00000020
+    wxPG_UNEDITABLE_COMPOSITE_FRAGMENT  = 0x00000020,
+
+    // ValueToString() called from GetValueAsString()
+    // (guarantees that input wxVariant value is current own value)
+    wxPG_VALUE_IS_CURRENT               = 0x00000040
 };
 
 // -----------------------------------------------------------------------
index 6609bdbb3aafdad19d2f42926434c2b6baa50e27..965de7dc7a963c11ddde4ef5f8c8cd09af2c96bb 100644 (file)
@@ -106,7 +106,7 @@ public:
                       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;
@@ -196,7 +196,7 @@ public:
     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;
@@ -250,7 +250,7 @@ public:
     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;
@@ -287,7 +287,7 @@ public:
                      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;
@@ -330,7 +330,7 @@ public:
                     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;
@@ -360,7 +360,7 @@ public:
                         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;
@@ -553,7 +553,7 @@ 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;
@@ -631,7 +631,7 @@ 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;
@@ -641,12 +641,16 @@ public:
     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
 };
 
@@ -682,7 +686,7 @@ 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;
@@ -761,7 +765,7 @@ public:
     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;
index 057154a0a62e759b37260cd701bb7663b7065c00..a9ca0b8b352dbfb710ebf85ae670be7d144ee62c 100644 (file)
                 return wxPGEditor_TextCtrl;
             }
 
-            virtual wxString GetValueAsString( int argFlags ) const
+            virtual wxString ValueToString( wxVariant& value,
+                                            int argFlags ) const
             {
-                // TODO: Return property value in string format
+                // TODO: Convert given property value to a string
             }
 
             virtual bool StringToValue( wxVariant& variant, const wxString& text, int argFlags )
@@ -542,7 +543,7 @@ public:
             If wxPG_FULL_VALUE is set, returns complete, storable value instead
             of displayable one (they may be different).
             If wxPG_COMPOSITE_FRAGMENT is set, text is interpreted as a part of
-            composite property string value (as generated by GetValueAsString()
+            composite property string value (as generated by ValueToString()
             called with this same flag).
 
         @return Returns @true if resulting wxVariant value was different.
@@ -587,19 +588,23 @@ public:
     virtual bool IntToValue( wxVariant& value, int number, int argFlags = 0 ) const;
 
     /**
-        Returns text representation of property's value.
+        Converts property value into a text representation.
+
+        @param value
+            Value to be converted.
 
         @param argFlags
-        If wxPG_FULL_VALUE is set, returns complete, storable string value instead of displayable.
-        If wxPG_EDITABLE_VALUE is set, returns string value that must be editable in textctrl.
-        If wxPG_COMPOSITE_FRAGMENT is set, returns text that is appropriate to display
-        as a part of composite property string value.
+            If 0 (default value), then displayed string is returned.
+            If wxPG_FULL_VALUE is set, returns complete, storable string value
+            instead of displayable. If wxPG_EDITABLE_VALUE is set, returns
+            string value that must be editable in textctrl. If
+            wxPG_COMPOSITE_FRAGMENT is set, returns text that is appropriate to
+            display as a part of string property's composite text
+            representation.
 
-        @remarks
-        Default implementation returns string composed from text representations of
-        child properties.
+        @remarks Default implementation calls GenerateComposedValue().
     */
-    virtual wxString GetValueAsString( int argFlags = 0 ) const;
+    virtual wxString ValueToString( wxVariant& value, int argFlags = 0 ) const;
 
     /**
         Converts string to a value, and if successful, calls SetValue() on it.
@@ -785,7 +790,7 @@ public:
             - Pen is guaranteed to be 1-wide 'black' (or whatever is the proper colour) pen for
               drawing framing rectangle. It can be changed as well.
 
-        @see GetValueAsString()
+        @see ValueToString()
     */
     virtual void OnCustomPaint( wxDC& dc, const wxRect& rect, wxPGPaintData& paintdata );
 
@@ -923,7 +928,10 @@ public:
     /** Deletes all child properties. */
     void Empty();
 
-    /** Composes text from values of child properties. */
+    /**
+        Composes text from values of child properties. You usually do not have
+        to care about arguments other than 'text'.
+    */
     void GenerateComposedValue( wxString& text, int argFlags = 0 ) const;
 
     /**
@@ -1099,14 +1107,31 @@ public:
     */
     wxBitmap* GetValueImage() const;
 
-    /**
-        To acquire property's value as string, you should use this
-        function (instead of GetValueAsString()), as it may produce
-        more accurate value in future versions.
+    /** Returns text representation of property's value.
+
+        @param argFlags
+            If 0 (default value), then displayed string is returned.
+            If wxPG_FULL_VALUE is set, returns complete, storable string value
+            instead of displayable. If wxPG_EDITABLE_VALUE is set, returns
+            string value that must be editable in textctrl. If
+            wxPG_COMPOSITE_FRAGMENT is set, returns text that is appropriate to
+            display as a part of string property's composite text
+            representation.
+
+        @remarks In older versions, this function used to be overridden to convert
+                 property's value into a string representation. This function is
+                 now handled by ValueToString(), and overriding this function now
+                 will result in run-time assertion failure.
+    */
+    virtual wxString GetValueAsString( int argFlags = 0 ) const;
+
+    /** Synonymous to GetValueAsString().
+
+        @deprecated Use GetValueAsString() instead.
 
         @see GetValueAsString()
     */
-    wxString GetValueString( int argFlags = 0 ) const;
+    wxDEPRECATED( wxString GetValueString( int argFlags = 0 ) const );
 
     /**
         Returns value type used by this property.
index b3552e617fcdf22a0a84e877ebed9b74cf94bd5e..4b3172ec747b547e7662ade78eddb60af27c8500 100644 (file)
@@ -287,6 +287,7 @@ void wxAdvImageFileProperty::OnSetValue()
 
     if ( imagename.length() )
     {
+        wxFileName filename = GetFileName();
         size_t prevCount = g_myImageArray.GetCount();
         int index = ms_choices.Index(imagename);
 
@@ -294,7 +295,7 @@ void wxAdvImageFileProperty::OnSetValue()
         if ( index == wxNOT_FOUND )
         {
             ms_choices.Add( imagename );
-            g_myImageArray.Add( new wxMyImageInfo( m_filename.GetFullPath() ) );
+            g_myImageArray.Add( new wxMyImageInfo( filename.GetFullPath() ) );
 
             index = g_myImageArray.GetCount() - 1;
         }
@@ -303,8 +304,8 @@ void wxAdvImageFileProperty::OnSetValue()
         if ( !g_myImageArray[index].m_pThumbnail2 )
         {
             // Load if file exists.
-            if ( m_filename.FileExists() )
-                m_pImage = new wxImage( m_filename.GetFullPath() );
+            if ( filename.FileExists() )
+                m_pImage = new wxImage( filename.GetFullPath() );
         }
 
         m_index = index;
@@ -365,9 +366,10 @@ void wxAdvImageFileProperty::LoadThumbnails( size_t index )
 
     if ( !mii.m_pThumbnail2 )
     {
+        wxFileName filename = GetFileName();
 
         if ( !m_pImage || !m_pImage->Ok() ||
-             m_filename != mii.m_path
+             filename != mii.m_path
            )
         {
             if ( m_pImage )
index 8216a7eb67bc78d3ef42a3f289277bf1ade6f5e1..5791ebae837293d458478d38d7bec75872f66dbe 100644 (file)
@@ -513,16 +513,29 @@ wxArrayDoubleProperty::~wxArrayDoubleProperty () { }
 
 void wxArrayDoubleProperty::OnSetValue()
 {
+    // Generate cached display string, to optimize grid drawing
     GenerateValueAsString( m_display, m_precision, true );
 }
 
-wxString wxArrayDoubleProperty::GetValueAsString( int arg_flags ) const
+wxString wxArrayDoubleProperty::ValueToString( wxVariant& value,
+                                               int argFlags ) const
 {
-    if ( !(arg_flags & wxPG_FULL_VALUE ))
-        return m_display;
-
     wxString s;
-    GenerateValueAsString(s,-1,false);
+
+    if ( argFlags & wxPG_FULL_VALUE )
+    {
+        GenerateValueAsString(s,-1,false);
+    }
+    else
+    {
+        //
+        // Display cached string only if value truly matches m_value
+        if ( value.GetData() == m_value.GetData() )
+            return m_display;
+        else
+            GenerateValueAsString( s, m_precision, true );
+    }
+
     return s;
 }
 
index 2f4045f06163aa409facacc199b297d62b3b67d3..3399ec8db8172ee167036e3b95ca56e3f1e4d8cf 100644 (file)
@@ -113,7 +113,7 @@ public:
     virtual ~wxArrayDoubleProperty ();
 
     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;
index 2e93e339f7373f45043b3bf19effbb6fd1dd6b2e..fb6a32b3ceab539f5fd89235119084719125eb88 100644 (file)
@@ -522,9 +522,10 @@ void wxFontProperty::OnSetValue()
     }
 }
 
-wxString wxFontProperty::GetValueAsString( int argFlags ) const
+wxString wxFontProperty::ValueToString( wxVariant& value,
+                                        int argFlags ) const
 {
-    return wxPGProperty::GetValueAsString(argFlags);
+    return wxPGProperty::ValueToString(value, argFlags);
 }
 
 bool wxFontProperty::OnEvent( wxPropertyGrid* propgrid, wxWindow* WXUNUSED(primary),
@@ -999,24 +1000,12 @@ wxString wxSystemColourProperty::ColourToString( const wxColour& col, int index
         return m_choices.GetLabel(index);
 }
 
-wxString wxSystemColourProperty::GetValueAsString( int argFlags ) const
+wxString wxSystemColourProperty::ValueToString( wxVariant& value,
+                                                int WXUNUSED(argFlags) ) const
 {
-    wxColourPropertyValue val = GetVal();
-
-    int ind = GetIndex();
-
-    // Always show custom colour for textctrl-editor
-    if ( val.m_type == wxPG_COLOUR_CUSTOM ||
-         ind == GetCustomColourIndex() ||
-         (argFlags & wxPG_PROPERTY_SPECIFIC) )
-    {
-        return ColourToString(val.m_colour, wxNOT_FOUND);
-    }
-
-    if ( ind == -1 )
-        return wxEmptyString;
+    wxColourPropertyValue val = GetVal(&value);
 
-    return ColourToString(val.m_colour, ind);
+    return ColourToString(val.m_colour, m_choices.Index(val.m_type));
 }
 
 
@@ -1392,7 +1381,8 @@ void wxColourProperty::Init( wxColour colour )
     SetIndex( ind );
 }
 
-wxString wxColourProperty::GetValueAsString( int argFlags ) const
+wxString wxColourProperty::ValueToString( wxVariant& value,
+                                          int argFlags ) const
 {
     const wxPGEditor* editor = GetEditorClass();
     if ( editor != wxPGEditor_Choice &&
@@ -1400,7 +1390,7 @@ wxString wxColourProperty::GetValueAsString( int argFlags ) const
          editor != wxPGEditor_ComboBox )
         argFlags |= wxPG_PROPERTY_SPECIFIC;
 
-    return wxSystemColourProperty::GetValueAsString(argFlags);
+    return wxSystemColourProperty::ValueToString(value, argFlags);
 }
 
 wxColour wxColourProperty::GetColour( int index ) const
@@ -1651,10 +1641,12 @@ void wxImageFileProperty::OnSetValue()
         m_pBitmap = NULL;
     }
 
+    wxFileName filename = GetFileName();
+
     // Create the image thumbnail
-    if ( m_filename.FileExists() )
+    if ( filename.FileExists() )
     {
-        m_pImage = new wxImage( m_filename.GetFullPath() );
+        m_pImage = new wxImage( filename.GetFullPath() );
     }
 }
 
@@ -1739,22 +1731,29 @@ wxMultiChoiceProperty::~wxMultiChoiceProperty()
 
 void wxMultiChoiceProperty::OnSetValue()
 {
-    GenerateValueAsString();
+    GenerateValueAsString(&m_display);
 }
 
-wxString wxMultiChoiceProperty::GetValueAsString( int ) const
+wxString wxMultiChoiceProperty::ValueToString( wxVariant& value,
+                                               int argFlags ) const
 {
-    return m_display;
+    // If possible, use cached string
+    if ( argFlags & wxPG_VALUE_IS_CURRENT )
+        return m_display;
+
+    wxString s;
+    GenerateValueAsString(&s);
+    return s;
 }
 
-void wxMultiChoiceProperty::GenerateValueAsString()
+void wxMultiChoiceProperty::GenerateValueAsString( wxString* target ) const
 {
     wxArrayString strings;
 
     if ( m_value.GetType() == wxPG_VARIANT_TYPE_ARRSTRING )
         strings = m_value.GetArrayString();
 
-    wxString& tempStr = m_display;
+    wxString& tempStr = *target;
     unsigned int i;
     unsigned int itemCount = strings.size();
 
@@ -1951,11 +1950,12 @@ bool wxDateProperty::StringToValue( wxVariant& variant, const wxString& text,
     return false;
 }
 
-wxString wxDateProperty::GetValueAsString( int argFlags ) const
+wxString wxDateProperty::ValueToString( wxVariant& value,
+                                        int argFlags ) const
 {
     const wxChar* format = (const wxChar*) NULL;
 
-    wxDateTime dateTime = m_value.GetDateTime();
+    wxDateTime dateTime = value.GetDateTime();
 
     if ( !dateTime.IsValid() )
         return wxT("Invalid");
index 54f02888b29da3f6541a98f62a189efbca7b75b2..e1b1e1373198a809bfbcadfbb4f08706de332d0a 100644 (file)
@@ -236,7 +236,8 @@ wxPGWindowList wxPGTextCtrlEditor::CreateControls( wxPropertyGrid* propGrid,
         return (wxWindow*) NULL;
 
     if ( !property->IsValueUnspecified() )
-        text = property->GetValueString(property->HasFlag(wxPG_PROP_READONLY)?0:wxPG_EDITABLE_VALUE);
+        text = property->GetValueAsString(property->HasFlag(wxPG_PROP_READONLY) ?
+                                            0 : wxPG_EDITABLE_VALUE);
 
     int flags = 0;
     if ( (property->GetFlags() & wxPG_PROP_PASSWORD) &&
@@ -620,7 +621,7 @@ void wxPropertyGrid::OnComboItemPaint( wxPGCustomComboControl* pCc,
         else
         {
             if ( !p->IsValueUnspecified() )
-                text = p->GetValueString(0);
+                text = p->GetValueAsString(0);
         }
     }
 
@@ -1020,7 +1021,7 @@ WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(ComboBox,
 void wxPGComboBoxEditor::UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const
 {
     wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
-    cb->SetValue(property->GetValueString(wxPG_EDITABLE_VALUE));
+    cb->SetValue(property->GetValueAsString(wxPG_EDITABLE_VALUE));
 
     // TODO: If string matches any selection, then select that.
 }
@@ -1801,7 +1802,7 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrlAndButton( const wxPoint& pos,
     wxString text;
 
     if ( !property->IsValueUnspecified() )
-        text = property->GetValueString(property->HasFlag(wxPG_PROP_READONLY)?0:wxPG_EDITABLE_VALUE);
+        text = property->GetValueAsString(property->HasFlag(wxPG_PROP_READONLY)?0:wxPG_EDITABLE_VALUE);
 
     return GenerateEditorTextCtrl(pos,sz,text,but,property->m_maxLen);
 }
index 7479aba04a9d03089c41ad6a5e1ce3a7e20541bc..d2ad9a372d8f024ca643c61a89170284135e85b0 100644 (file)
 
 #define PWC_CHILD_SUMMARY_CHAR_LIMIT    64 // Character limit of summary field when not editing
 
+#if wxPG_COMPATIBILITY_1_4
+
+// Used to establish backwards compatiblity
+const char* g_invalidStringContent = "@__TOTALLY_INVALID_STRING__@";
+
+#endif
 
 // -----------------------------------------------------------------------
 
@@ -220,7 +226,7 @@ void wxPGDefaultRenderer::Render( wxDC& dc, const wxRect& rect,
             if ( column == 0 )
                 text = property->GetLabel();
             else if ( column == 1 )
-                text = property->GetValueString();
+                text = property->GetValueAsString();
             else
                 text = wxEmptyString;
         }
@@ -274,7 +280,7 @@ void wxPGDefaultRenderer::Render( wxDC& dc, const wxRect& rect,
                 imageOffset = paintdata.m_drawnWidth;
             }
 
-            text = property->GetValueString();
+            text = property->GetValueAsString();
 
             // Add units string?
             if ( propertyGrid->GetColumnCount() <= 2 )
@@ -423,6 +429,13 @@ void wxPGProperty::InitAfterAdded( wxPropertyGridPageState* pageState,
 
     m_parentState = pageState;
 
+#if wxPG_COMPATIBILITY_1_4
+    // Make sure deprecated virtual functions are not implemented
+    wxString s = GetValueAsString( 0xFFFF );
+    wxASSERT_MSG( s == g_invalidStringContent,
+                  "Implement ValueToString() instead of GetValueAsString()" );
+#endif
+
     if ( !parentIsRoot )
     {
         m_bgColIndex = parent->m_bgColIndex;
@@ -651,7 +664,10 @@ wxString wxPGProperty::GetColumnText( unsigned int col ) const
     return wxEmptyString;
 }
 
-void wxPGProperty::GenerateComposedValue( wxString& text, int argFlags ) const
+void wxPGProperty::GenerateComposedValue( wxString& text,
+                                          int argFlags,
+                                          const wxVariantList* valueOverrides,
+                                          wxPGHashMapS2S* childResults ) const
 {
     int i;
     int iMax = m_children.size();
@@ -671,11 +687,64 @@ void wxPGProperty::GenerateComposedValue( wxString& text, int argFlags ) const
 
     wxPGProperty* curChild = m_children[0];
 
+    bool overridesLeft = false;
+    wxVariant overrideValue;
+    wxVariantList::const_iterator node;
+
+    if ( valueOverrides )
+    {
+        node = valueOverrides->begin();
+        if ( node != valueOverrides->end() )
+        {
+            overrideValue = *node;
+            overridesLeft = true;
+        }
+    }
+
     for ( i = 0; i < iMax; i++ )
     {
+        wxVariant childValue;
+
+        wxString childLabel = curChild->GetLabel();
+
+        // Check for value override
+        if ( overridesLeft && overrideValue.GetName() == childLabel )
+        {
+            if ( !overrideValue.IsNull() )
+                childValue = overrideValue;
+            else
+                childValue = curChild->GetValue();
+            node++;
+            if ( node != valueOverrides->end() )
+                overrideValue = *node;
+            else
+                overridesLeft = false;
+        }
+        else
+        {
+            childValue = curChild->GetValue();
+        }
+
         wxString s;
-        if ( !curChild->IsValueUnspecified() )
-            s = curChild->GetValueString(argFlags|wxPG_COMPOSITE_FRAGMENT);
+        if ( !childValue.IsNull() )
+        {
+            if ( overridesLeft &&
+                 curChild->HasFlag(wxPG_PROP_COMPOSED_VALUE) &&
+                 childValue.GetType() == wxPG_VARIANT_TYPE_LIST )
+            {
+                wxVariantList& childList = childValue.GetList();
+                GenerateComposedValue(s, argFlags|wxPG_COMPOSITE_FRAGMENT,
+                                      &childList, childResults);
+            }
+            else
+            {
+                s = curChild->ValueToString(childValue,
+                                            argFlags|wxPG_COMPOSITE_FRAGMENT);
+            }
+        }
+        if ( childResults && curChild->GetChildCount() )
+            (*childResults)[curChild->GetName()] = s;
 
         bool skip = false;
         if ( (argFlags & wxPG_UNEDITABLE_COMPOSITE_FRAGMENT) && !s.length() )
@@ -714,24 +783,45 @@ void wxPGProperty::GenerateComposedValue( wxString& text, int argFlags ) const
         text += wxS("; ...");
 }
 
-wxString wxPGProperty::GetValueAsString( int argFlags ) const
+wxString wxPGProperty::ValueToString( wxVariant& WXUNUSED(value),
+                                      int argFlags ) const
 {
     wxCHECK_MSG( GetChildCount() > 0,
                  wxString(),
-                 wxT("If user property does not have any children, it must override GetValueAsString") );
+                 "If user property does not have any children, it must "
+                 "override GetValueAsString" );
+
+    // FIXME: Currently code below only works if value is actually m_value
+    wxASSERT_MSG( argFlags & wxPG_VALUE_IS_CURRENT,
+                  "Sorry, currently default wxPGProperty::ValueToString() "
+                  "implementation only works if value is m_value." );
 
     wxString text;
     GenerateComposedValue(text, argFlags);
     return text;
 }
 
-wxString wxPGProperty::GetValueString( int argFlags ) const
+wxString wxPGProperty::GetValueAsString( int argFlags ) const
 {
+#if wxPG_COMPATIBILITY_1_4
+    // This is backwards compatibility test
+    // That is, to make sure this function is not overridden
+    // (instead, ValueToString() should be).
+    if ( argFlags == 0xFFFF )
+    {
+        // Do not override! (for backwards compliancy)
+        return g_invalidStringContent;
+    }
+#endif
+
     if ( IsValueUnspecified() )
         return wxEmptyString;
 
     if ( m_commonValue == -1 )
-        return GetValueAsString(argFlags);
+    {
+        wxVariant value(GetValue());
+        return ValueToString(value, argFlags|wxPG_VALUE_IS_CURRENT);
+    }
 
     //
     // Return common value's string representation
@@ -752,6 +842,11 @@ wxString wxPGProperty::GetValueString( int argFlags ) const
     }
 }
 
+wxString wxPGProperty::GetValueString( int argFlags ) const
+{
+    return GetValueAsString(argFlags);
+}
+
 bool wxPGProperty::IntToValue( wxVariant& variant, int number, int WXUNUSED(argFlags) ) const
 {
     variant = (long)number;
@@ -2020,7 +2115,7 @@ wxPGProperty* wxPGProperty::UpdateParentValues()
          !parent->IsCategory() && !parent->IsRoot() )
     {
         wxString s;
-        parent->GenerateComposedValue(s, 0);
+        parent->GenerateComposedValue(s);
         parent->m_value = s;
         return parent->UpdateParentValues();
     }
@@ -2134,7 +2229,8 @@ wxPropertyCategory::~wxPropertyCategory()
 }
 
 
-wxString wxPropertyCategory::GetValueAsString( int ) const
+wxString wxPropertyCategory::ValueToString( wxVariant& WXUNUSED(value),
+                                            int WXUNUSED(argFlags) ) const
 {
     return wxEmptyString;
 }
index ddf4d7ec05f60038dee20f6eb27354120014e81f..340d727a73df2e2295f27d420f9b16647ee4f93d 100644 (file)
@@ -79,22 +79,30 @@ void wxStringProperty::OnSetValue()
     if ( HasFlag(wxPG_PROP_COMPOSED_VALUE) )
     {
         wxString s;
-        GenerateComposedValue(s, 0);
+        GenerateComposedValue(s);
         m_value = s;
     }
 }
 
 wxStringProperty::~wxStringProperty() { }
 
-wxString wxStringProperty::GetValueAsString( int argFlags ) const
+wxString wxStringProperty::ValueToString( wxVariant& value,
+                                          int argFlags ) const
 {
-    wxString s = m_value.GetString();
+    wxString s = value.GetString();
 
     if ( GetChildCount() && HasFlag(wxPG_PROP_COMPOSED_VALUE) )
     {
         // Value stored in m_value is non-editable, non-full value
         if ( (argFlags & wxPG_FULL_VALUE) || (argFlags & wxPG_EDITABLE_VALUE) )
+        {
+            // Calling this under incorrect conditions will fail
+            wxASSERT_MSG( argFlags & wxPG_VALUE_IS_CURRENT,
+                          "Sorry, currently default wxPGProperty::ValueToString() "
+                          "implementation only works if value is m_value." );
+
             GenerateComposedValue(s, argFlags);
+        }
 
         return s;
     }
@@ -154,16 +162,17 @@ wxIntProperty::wxIntProperty( const wxString& label, const wxString& name,
 
 wxIntProperty::~wxIntProperty() { }
 
-wxString wxIntProperty::GetValueAsString( int ) const
+wxString wxIntProperty::ValueToString( wxVariant& value,
+                                       int WXUNUSED(argFlags) ) const
 {
-    if ( m_value.GetType() == wxPG_VARIANT_TYPE_LONG )
+    if ( value.GetType() == wxPG_VARIANT_TYPE_LONG )
     {
-        return wxString::Format(wxS("%li"),m_value.GetLong());
+        return wxString::Format(wxS("%li"),value.GetLong());
     }
-    else if ( m_value.GetType() == wxLongLong_VariantType )
+    else if ( value.GetType() == wxLongLong_VariantType )
     {
            wxLongLong ll;
-        ll << m_value;
+        ll << value;
            return ll.ToString();
     }
 
@@ -388,19 +397,20 @@ wxUIntProperty::wxUIntProperty( const wxString& label, const wxString& name,
 
 wxUIntProperty::~wxUIntProperty() { }
 
-wxString wxUIntProperty::GetValueAsString( int ) const
+wxString wxUIntProperty::ValueToString( wxVariant& value,
+                                        int WXUNUSED(argFlags) ) const
 {
     size_t index = m_base + m_prefix;
     if ( index >= wxPG_UINT_TEMPLATE_MAX )
         index = wxPG_BASE_DEC;
 
-    if ( m_value.GetType() == wxPG_VARIANT_TYPE_LONG )
+    if ( value.GetType() == wxPG_VARIANT_TYPE_LONG )
     {
-        return wxString::Format(gs_uintTemplates32[index], (unsigned long)m_value.GetLong());
+        return wxString::Format(gs_uintTemplates32[index], (unsigned long)value.GetLong());
     }
 
     wxULongLong ull;
-    ull << m_value;
+    ull << value;
 
     return wxString::Format(gs_uintTemplates64[index], ull.GetValue());
 }
@@ -612,13 +622,14 @@ void wxPropertyGrid::DoubleToString(wxString& target,
     }
 }
 
-wxString wxFloatProperty::GetValueAsString( int argFlags ) const
+wxString wxFloatProperty::ValueToString( wxVariant& value,
+                                         int argFlags ) const
 {
     wxString text;
-    if ( !m_value.IsNull() )
+    if ( !value.IsNull() )
     {
         wxPropertyGrid::DoubleToString(text,
-                                       m_value,
+                                       value,
                                        m_precision,
                                        !(argFlags & wxPG_FULL_VALUE),
                                        (wxString*) NULL);
@@ -766,15 +777,16 @@ wxBoolProperty::wxBoolProperty( const wxString& label, const wxString& name, boo
 
 wxBoolProperty::~wxBoolProperty() { }
 
-wxString wxBoolProperty::GetValueAsString( int argFlags ) const
+wxString wxBoolProperty::ValueToString( wxVariant& value,
+                                        int argFlags ) const
 {
-    bool value = m_value.GetBool();
+    bool boolValue = value.GetBool();
 
     // As a fragment of composite string value,
     // make it a little more readable.
     if ( argFlags & wxPG_COMPOSITE_FRAGMENT )
     {
-        if ( value )
+        if ( boolValue )
         {
             return m_label;
         }
@@ -795,12 +807,12 @@ wxString wxBoolProperty::GetValueAsString( int argFlags ) const
 
     if ( !(argFlags & wxPG_FULL_VALUE) )
     {
-        return wxPGGlobalVars->m_boolChoices[value?1:0].GetText();
+        return wxPGGlobalVars->m_boolChoices[boolValue?1:0].GetText();
     }
 
     wxString text;
 
-    if (value) text = wxS("true");
+    if ( boolValue ) text = wxS("true");
     else text = wxS("false");
 
     return text;
@@ -915,20 +927,17 @@ bool wxBaseEnumProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& WX
     return true;
 }
 
-wxString wxBaseEnumProperty::GetValueAsString( int ) const
+wxString wxBaseEnumProperty::ValueToString( wxVariant& value,
+                                            int WXUNUSED(argFlags) ) const
 {
-    if ( m_value.GetType() == wxPG_VARIANT_TYPE_STRING )
-        return m_value.GetString();
+    if ( value.GetType() == wxPG_VARIANT_TYPE_STRING )
+        return value.GetString();
 
-    if ( m_index >= 0 )
-    {
-        int unusedVal;
-        const wxString* pstr = GetEntry( m_index, &unusedVal );
+    int index = m_choices.Index(value.GetLong());
+    if ( index < 0 )
+        return wxEmptyString;
 
-        if ( pstr )
-            return *pstr;
-    }
-    return wxEmptyString;
+    return m_choices.GetLabel(index);
 }
 
 bool wxBaseEnumProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const
@@ -1407,14 +1416,15 @@ void wxFlagsProperty::OnSetValue()
     }
 }
 
-wxString wxFlagsProperty::GetValueAsString( int ) const
+wxString wxFlagsProperty::ValueToString( wxVariant& value,
+                                         int WXUNUSED(argFlags) ) const
 {
     wxString text;
 
     if ( !m_choices.IsOk() )
         return text;
 
-    long flags = m_value;
+    long flags = value;
     unsigned int i;
     const wxPGChoices& choices = m_choices;
 
@@ -1602,7 +1612,8 @@ bool wxPGFileDialogAdapter::DoShowDialog( wxPropertyGrid* propGrid, wxPGProperty
     if ( property->IsKindOf(CLASSINFO(wxFileProperty)) )
     {
         fileProp = ((wxFileProperty*)property);
-        path = fileProp->m_filename.GetPath();
+        wxFileName filename = fileProp->GetValue().GetString();
+        path = filename.GetPath();
         indFilter = fileProp->m_indFilter;
 
         if ( !path.length() && fileProp->m_basePath.length() )
@@ -1688,18 +1699,17 @@ void wxFileProperty::OnSetValue()
 {
     const wxString& fnstr = m_value.GetString();
 
-    m_filename = fnstr;
+    wxFileName filename = fnstr;
 
-    if ( !m_filename.HasName() )
+    if ( !filename.HasName() )
     {
         m_value = wxPGVariant_EmptyString;
-        m_filename.Clear();
     }
 
     // Find index for extension.
     if ( m_indFilter < 0 && fnstr.length() )
     {
-        wxString ext = m_filename.GetExt();
+        wxString ext = filename.GetExt();
         int curind = 0;
         size_t pos = 0;
         size_t len = m_wildcard.length();
@@ -1736,29 +1746,44 @@ void wxFileProperty::OnSetValue()
     }
 }
 
-wxString wxFileProperty::GetValueAsString( int argFlags ) const
+wxFileName wxFileProperty::GetFileName() const
 {
-    // Always return empty string when name component is empty
-    wxString fullName = m_filename.GetFullName();
+    wxFileName filename;
+
+    if ( !m_value.IsNull() )
+        filename = m_value.GetString();
+
+    return filename;
+}
+
+wxString wxFileProperty::ValueToString( wxVariant& value,
+                                        int argFlags ) const
+{
+    wxFileName filename = value.GetString();
+
+    if ( !filename.HasName() )
+        return wxEmptyString;
+
+    wxString fullName = filename.GetFullName();
     if ( !fullName.length() )
-        return fullName;
+        return wxEmptyString;
 
     if ( argFlags & wxPG_FULL_VALUE )
     {
-        return m_filename.GetFullPath();
+        return filename.GetFullPath();
     }
     else if ( m_flags & wxPG_PROP_SHOW_FULL_FILENAME )
     {
         if ( m_basePath.Length() )
         {
-            wxFileName fn2(m_filename);
+            wxFileName fn2(filename);
             fn2.MakeRelativeTo(m_basePath);
             return fn2.GetFullPath();
         }
-        return m_filename.GetFullPath();
+        return filename.GetFullPath();
     }
 
-    return m_filename.GetFullName();
+    return filename.GetFullName();
 }
 
 wxPGEditorDialogAdapter* wxFileProperty::GetEditorDialog() const
@@ -1768,9 +1793,11 @@ wxPGEditorDialogAdapter* wxFileProperty::GetEditorDialog() const
 
 bool wxFileProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const
 {
+    wxFileName filename = variant.GetString();
+
     if ( (m_flags & wxPG_PROP_SHOW_FULL_FILENAME) || (argFlags & wxPG_FULL_VALUE) )
     {
-        if ( m_filename != text )
+        if ( filename != text )
         {
             variant = text;
             return true;
@@ -1778,9 +1805,9 @@ bool wxFileProperty::StringToValue( wxVariant& variant, const wxString& text, in
     }
     else
     {
-        if ( m_filename.GetFullName() != text )
+        if ( filename.GetFullName() != text )
         {
-            wxFileName fn = m_filename;
+            wxFileName fn = filename;
             fn.SetFullName(text);
             variant = fn.GetFullPath();
             return true;
@@ -1873,9 +1900,10 @@ wxLongStringProperty::wxLongStringProperty( const wxString& label, const wxStrin
 
 wxLongStringProperty::~wxLongStringProperty() {}
 
-wxString wxLongStringProperty::GetValueAsString( int ) const
+wxString wxLongStringProperty::ValueToString( wxVariant& value,
+                                              int WXUNUSED(argFlags) ) const
 {
-    return m_value;
+    return value;
 }
 
 bool wxLongStringProperty::OnEvent( wxPropertyGrid* propGrid, wxWindow* WXUNUSED(primary),
@@ -2396,9 +2424,23 @@ void wxArrayStringProperty::OnSetValue()
     GenerateValueAsString();
 }
 
-wxString wxArrayStringProperty::GetValueAsString( int WXUNUSED(argFlags) ) const
+#define ARRSTRPROP_ARRAY_TO_STRING(STRING,ARRAY) \
+    wxPropertyGrid::ArrayStringToString(STRING,ARRAY,wxS('"'),wxS('"'),1)
+
+wxString wxArrayStringProperty::ValueToString( wxVariant& WXUNUSED(value),
+                                               int argFlags ) const
 {
-    return m_display;
+    //
+    // If this is called from GetValueAsString(), return cached string
+    if ( argFlags & wxPG_VALUE_IS_CURRENT )
+    {
+        return m_display;
+    }
+
+    wxArrayString arr = m_value.GetArrayString();
+    wxString s;
+    ARRSTRPROP_ARRAY_TO_STRING(s, arr);
+    return s;
 }
 
 // Converts wxArrayString to a string separated by delimeters and spaces.
@@ -2461,13 +2503,10 @@ void wxPropertyGrid::ArrayStringToString( wxString& dst, const wxArrayString& sr
     }
 }
 
-#define ARRSTRPROP_ARRAY_TO_STRING(STRING,ARRAY) \
-    wxPropertyGrid::ArrayStringToString(STRING,ARRAY,wxS('"'),wxS('"'),1);
-
 void wxArrayStringProperty::GenerateValueAsString()
 {
     wxArrayString arr = m_value.GetArrayString();
-    ARRSTRPROP_ARRAY_TO_STRING(m_display, arr)
+    ARRSTRPROP_ARRAY_TO_STRING(m_display, arr);
 }
 
 // Default implementation doesn't do anything.
@@ -2525,7 +2564,7 @@ bool wxArrayStringProperty::OnButtonClick( wxPropertyGrid* propGrid,
             {
                 wxArrayString actualValue = value.GetArrayString();
                 wxString tempStr;
-                ARRSTRPROP_ARRAY_TO_STRING(tempStr, actualValue)
+                ARRSTRPROP_ARRAY_TO_STRING(tempStr, actualValue);
             #if wxUSE_VALIDATORS
                 if ( dialogValidator.DoValidate( propGrid, validator, tempStr ) )
             #endif