Index: src/include/propgrid/include/wx/propgrid/manager.h
===================================================================
--- src/include/propgrid/include/wx/propgrid/manager.h	(revision 4307)
+++ src/include/propgrid/include/wx/propgrid/manager.h	(working copy)
@@ -925,6 +925,8 @@
 #endif
     wxPG_IMPLEMENT_PGMAN_METHOD_NORET1_INBODY(SetPropertyValuePoint,const wxPoint&)
     wxPG_IMPLEMENT_PGMAN_METHOD_NORET1_INBODY(SetPropertyValueSize,const wxSize&)
+    wxPG_IMPLEMENT_PGMAN_METHOD_NORET1_INBODY(SetPropertyValueLongLong,const wxLongLong&)
+    wxPG_IMPLEMENT_PGMAN_METHOD_NORET1_INBODY(SetPropertyValueULongLong,const wxULongLong&)
 #ifdef __WXPYTHON__
     wxPG_IMPLEMENT_PGMAN_METHOD_NORET1_INBODY(SetPropertyValuePyObject,PyObject*)
 #endif
@@ -1228,7 +1230,7 @@
 
     void RefreshHelpBox( int new_splittery, int new_width, int new_height );
 
-    void RepaintSplitter( int new_splittery, int new_width, int new_height, bool desc_too );
+    void RepaintSplitter( wxDC& dc, int new_splittery, int new_width, int new_height, bool desc_too );
 
     void SetDescribedProperty( wxPGProperty* p );
 
Index: src/include/propgrid/include/wx/propgrid/odcombo.h
===================================================================
--- src/include/propgrid/include/wx/propgrid/odcombo.h	(revision 4307)
+++ src/include/propgrid/include/wx/propgrid/odcombo.h	(working copy)
@@ -924,7 +924,7 @@
     // helpers
     inline int GetItemAtPosition( const wxPoint& pos ) { return HitTest(pos); }
     inline wxCoord GetTotalHeight() const { return EstimateTotalHeight(); }
-    inline wxCoord GetLineHeight(int line) const { return OnGetLineHeight(line); }
+    inline wxCoord GetLineHeight(int line) const { return OnMeasureItem(line); }
 
 protected:
 
@@ -938,6 +938,8 @@
     // Re-calculates width for given item
     void CheckWidth( int pos );
 
+	virtual wxCoord OnGetRowHeight(size_t n) const { return OnMeasureItem(n); }
+
     // wxVListBox implementation
     virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const;
     virtual wxCoord OnMeasureItem(size_t n) const;
Index: src/include/propgrid/include/wx/propgrid/pg_dox_mainpage.h
===================================================================
--- src/include/propgrid/include/wx/propgrid/pg_dox_mainpage.h	(revision 4307)
+++ src/include/propgrid/include/wx/propgrid/pg_dox_mainpage.h	(working copy)
@@ -13,7 +13,7 @@
 #define __WX_PG_DOX_MAINPAGE_H__
 
 /**
-    \mainpage wxPropertyGrid 1.2.6 Overview
+    \mainpage wxPropertyGrid 1.2.8 Overview
 
       wxPropertyGrid is a specialized two-column grid for editing properties
     such as strings, numbers, flagsets, fonts, and colours. It allows hierarchial,
@@ -166,7 +166,7 @@
         pg->Append( wxFileProperty(wxT("FileProperty"), wxPG_LABEL, wxEmptyString) );
 
         // Extra: set wildcard for file property (format same as in wxFileDialog).
-        pg->SetPropertyAttribute(wxT("TextFile"),
+        pg->SetPropertyAttribute(wxT("FileProperty"),
                                  wxPG_FILE_WILDCARD,
                                  wxT("All files (*.*)|*.*"));
 
@@ -217,11 +217,12 @@
         // Set new label - we need to use the new name.
         pg->SetPropertyLabel( wxT("X"), wxT("New Label") );
 
-        // Disable the property. It's text will appear greyed.
-        // This is probably the closest you can get if you want
-        // a "read-only" property.
+        // Disable the property.
         pg->DisableProperty( MyPropertyId );
 
+        // Set property as read-only.
+        pg->SetPropertyReadOnly( MyPropertyId );
+
     \endcode
 
 
@@ -1593,7 +1594,8 @@
 
         #include <wx/propgrid/propdev.h>
 
-        WX_PG_IMPLEMENT_STRING_PROPERTY(PROPNAME,FLAGS)
+        // FLAGS can be wxPG_NO_ESCAPE if escape sequences shall not be expanded.
+        WX_PG_IMPLEMENT_STRING_PROPERTY(PROPNAME, FLAGS)
 
         bool PROPNAMEClass::OnButtonClick( wxPropertyGrid* propgrid, wxString& value )
         {
@@ -1615,7 +1617,7 @@
 
         #include <wx/propgrid/propdev.h>
 
-        WX_PG_IMPLEMENT_STRING_PROPERTY_WITH_VALIDATOR(PROPNAME)
+        WX_PG_IMPLEMENT_STRING_PROPERTY_WITH_VALIDATOR(PROPNAME, FLAGS)
 
         bool PROPNAMEClass::OnButtonClick( wxPropertyGrid* propgrid, wxString& value )
         {
Index: src/include/propgrid/include/wx/propgrid/propdev.h
===================================================================
--- src/include/propgrid/include/wx/propgrid/propdev.h	(revision 4307)
+++ src/include/propgrid/include/wx/propgrid/propdev.h	(working copy)
@@ -1669,14 +1669,11 @@
 protected:
 #ifndef SWIG
 
-    const wxString* m_str;
-    const wxChar*   m_curPos;
-#if wxUSE_STL
-    //wxString        m_buffer;
+    const wxString*             m_str;
+    wxString::const_iterator    m_curPos;
+    wxString                    m_readyToken;
+    wxUniChar                   m_delimeter;
 #endif
-    wxString        m_readyToken;
-    wxChar          m_delimeter;
-#endif
 };
 
 #define WX_PG_TOKENIZER2_BEGIN(WXSTRING,DELIMITER) \
Index: src/include/propgrid/include/wx/propgrid/propgrid.h
===================================================================
--- src/include/propgrid/include/wx/propgrid/propgrid.h	(revision 4307)
+++ src/include/propgrid/include/wx/propgrid/propgrid.h	(working copy)
@@ -19,10 +19,10 @@
 #include <wx/dynarray.h>
 #include <wx/hashmap.h>
 #include <wx/variant.h>
+#include <wx/longlong.h>
 #include <wx/tooltip.h>
 #include <wx/datetime.h>
 
-
 // NB: Do *NOT * remove this.
 #if defined(SWIG) || defined(SWIG_TYPE_TABLE)
     #ifndef __WXPYTHON__
@@ -76,7 +76,7 @@
 //    #define wxPG_ALLOW_WXADV
 
 #if defined(__WXPYTHON__)
-    #include <python.h>
+    #include <Python.h>
 
     #undef wxPG_ALLOW_WXADV
     #define wxPG_ALLOW_WXADV
@@ -95,7 +95,7 @@
 //     In fact, it will more likely be updated once a week or so
 //     (less often when releases are made more sparsely).
 //
-#define wxPG_VERSION        1260
+#define wxPG_VERSION        1280
 
 
 // -----------------------------------------------------------------------
@@ -244,6 +244,19 @@
 #endif
 
 
+#ifndef SWIG
+    #if !wxCHECK_VERSION(2,9,0)
+        #if !defined(wxUniChar)
+            #define wxUniChar   wxChar
+        #endif
+        //#define wxPGGetIterChar(str, i)  str[i]
+        #define wxPGGetIterChar(str, i)  *i
+    #else
+        #define wxPGGetIterChar(str, i)  *i
+    #endif
+#endif
+
+
 // -----------------------------------------------------------------------
 
 //
@@ -284,6 +297,8 @@
 #define SetPropertyValueArrint2     SetPropertyValue
 #define SetPropertyValueArrstr2     SetPropertyValue
 #define SetPropertyValueDatetime    SetPropertyValue
+#define SetPropertyValueLongLong    SetPropertyValue
+#define SetPropertyValueULongLong   SetPropertyValue
 
 #else
 
@@ -791,6 +806,11 @@
 */
 #define wxPG_PROP_CLASS_SPECIFIC_2  0x0080
 
+/** Property value cannot be modified. However, editor may be created
+    so that the value can be easily copied.
+*/
+#define wxPG_PROP_READONLY          0x0100
+
 /** @}
 */
 
@@ -1176,6 +1196,8 @@
     #define wxPGVariantToDateTime(A)        A.GetDateTime()
     #define wxPGVariantToWxPoint(A)         ((wxPGVariantDataPoint*)(A.GetData()))->GetValueRef()
     #define wxPGVariantToWxSize(A)          ((wxPGVariantDataSize*)(A.GetData()))->GetValueRef()
+    #define wxPGVariantToWxLongLong(A)      ((wxPGVariantDataLongLong*)(A.GetData()))->GetValueRef()
+    #define wxPGVariantToWxULongLong(A)     ((wxPGVariantDataULongLong*)(A.GetData()))->GetValueRef()
     #define wxPGVariantToArrayInt(A)        ((wxPGVariantDataArrayInt*)(A.GetData()))->GetValueRef()
     #define wxPGVariantToPyObject(A)        ((wxPGVariantDataPyObject*)(A.GetData()))->GetValue()
     #define wxPGVariantFromWxObject(A)      wxVariant((wxObject*)A)
@@ -1186,6 +1208,8 @@
     WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataPoint, wxPoint, WXDLLIMPEXP_PG)
     WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataSize, wxSize, WXDLLIMPEXP_PG)
     WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataArrayInt, wxArrayInt, WXDLLIMPEXP_PG)
+    WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataLongLong, wxLongLong, WXDLLIMPEXP_PG)
+    WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataULongLong, wxULongLong, WXDLLIMPEXP_PG)
    #ifdef __WXPYTHON__
     WX_PG_DECLARE_VARIANT_DATA_PTR(wxPGVariantDataPyObject, PyObject, WXDLLIMPEXP_PG)
    #endif
@@ -1210,6 +1234,8 @@
     inline wxVariant wxPGVariantCreator(const wxArrayInt& a) { return wxVariant(new wxPGVariantDataArrayInt(a)); }
     inline wxVariant wxPGVariantCreator(const wxPoint& a) { return wxVariant(new wxPGVariantDataPoint(a)); }
     inline wxVariant wxPGVariantCreator(const wxSize& a) { return wxVariant(new wxPGVariantDataSize(a)); }
+    inline wxVariant wxPGVariantCreator(const wxLongLong& a) { return wxVariant(new wxPGVariantDataLongLong(a)); }
+    inline wxVariant wxPGVariantCreator(const wxULongLong& a) { return wxVariant(new wxPGVariantDataULongLong(a)); }
    #ifdef __WXPYTHON__
     inline wxVariant wxPGVariantCreator(PyObject* a) { return wxVariant(new wxPGVariantDataPyObject(a)); }
    #endif
@@ -1287,6 +1313,16 @@
     {
         m_v.m_ptr = (void*)&v_ptr;
     }
+    /** Constructor for wxLongLong. */
+    wxPGVariant( const wxLongLong& v_ptr )
+    {
+        m_v.m_ptr = (void*)&v_ptr;
+    }
+    /** Constructor for wxULongLong. */
+    wxPGVariant( const wxULongLong& v_ptr )
+    {
+        m_v.m_ptr = (void*)&v_ptr;
+    }
     /** Constructor for wxObject&. */
     wxPGVariant( const wxObject& v_ptr )
     {
@@ -1385,6 +1421,8 @@
     #define wxPGVariantToDateTime(A)        *((wxDateTime*)A.GetVoidPtr())
     #define wxPGVariantToWxPoint(A)         *((wxPoint*)wxPGVariantToVoidPtr(A))
     #define wxPGVariantToWxSize(A)          *((wxSize*)wxPGVariantToVoidPtr(A))
+    #define wxPGVariantToWxLongLong(A)      *((wxLongLong*)wxPGVariantToVoidPtr(A))
+    #define wxPGVariantToWxULongLong(A)     *((wxULongLong*)wxPGVariantToVoidPtr(A))
     #define wxPGVariantToArrayInt(A)        *((wxArrayInt*)A.GetVoidPtr())
     #define wxPGVariantFromWxObject(A)      *((const wxObject*)A)
     #define wxPGVariantFromLong(A)          wxPGVariant(A)
@@ -1415,7 +1453,7 @@
 
 #define WX_PG_DECLARE_CLASSINFO() \
     WX_PG_DECLARE_GETCLASSNAME \
-    WX_PG_DECLARE_GETCLASSINFO \
+    WX_PG_DECLARE_GETCLASSINFO
 
 // We don't want to create SWIG interface for DoGetEditorClass (we'll use GetEditor instead)
 #ifndef SWIG
@@ -1920,7 +1958,9 @@
         return (( m_y >= -1 )?true:false);
     }
 
-    inline bool IsFlagSet( unsigned char flag ) const
+	typedef short FlagType;
+
+    inline bool IsFlagSet( FlagType flag ) const
     {
         return ( m_flags & flag ) ? true : false;
     }
@@ -1930,7 +1970,7 @@
         return ( m_flags & wxPG_PROP_UNSPECIFIED ) ? true : false;
     }
 
-    inline bool HasFlag( unsigned char flag ) const
+    bool HasFlag( FlagType flag ) const
     {
         return ( m_flags & flag ) ? true : false;
     }
@@ -1950,7 +1990,7 @@
     /** Returns property's data extension (NULL if none). */
     inline wxPGPropertyDataExt* GetDataExt() { return m_dataExt; }
 
-    inline unsigned int GetFlags() const
+    unsigned int GetFlags() const
     {
         return (unsigned int)m_flags;
     }
@@ -2078,7 +2118,7 @@
     */
     void SetChoicesExclusive();
 
-    inline void SetFlag( unsigned char flag ) { m_flags |= flag; }
+    void SetFlag( FlagType flag ) { m_flags |= flag; }
 
     inline void SetHelpString( const wxString& helpString )
     {
@@ -2163,7 +2203,7 @@
         return wxEmptyString;
     }
 
-    inline void ClearFlag( unsigned char flag ) { m_flags &= ~(flag); }
+    void ClearFlag( FlagType flag ) { m_flags &= ~(flag); }
 
     // Use, for example, to detect if item is inside collapsed section.
     bool IsSomeParent( wxPGProperty* candidate_parent ) const;
@@ -2198,7 +2238,7 @@
                                           // Anyway, we had 3 excess bytes to use so short int will fit in
                                           // just fine.
 
-    unsigned char               m_flags; // This could be short int for increased flag capacity.
+    FlagType                    m_flags;
 
     // 1 = category
     // 0 = no children
@@ -3076,6 +3116,18 @@
         SetPropertyValue( p, wxPG_VALUETYPE(PyObject), wxPGVariantCreator(value) );
     }
 #endif
+    /** Sets value (wxLongLong&) of a property. */
+    inline void SetPropertyValueLongLong( wxPGProperty* p, const wxLongLong& value )
+    {
+        wxASSERT(p);
+        SetPropertyValue( p, wxT("wxLongLong"), wxPGVariantCreator(value) );
+    }
+    /** Sets value (wxULongLong&) of a property. */
+    inline void SetPropertyValueULongLong( wxPGProperty* p, const wxULongLong& value )
+    {
+        wxASSERT(p);
+        SetPropertyValue( p, wxT("wxULongLong"), wxPGVariantCreator(value) );
+    }
 
     void SetPropertyValues( const wxList& list, wxPGId default_category );
 
@@ -3204,6 +3256,25 @@
         AddPropertyChoice(wxPGIdGen(p),label,value);
     }
 
+    /** Inorder to add new items into a property with fixed children (for instance, wxFlagsProperty),
+        you need to call this method. After populating has been finished, you need to call EndAddChildren.
+    */
+    void BeginAddChildren( wxPGId id );
+    inline void BeginAddChildren( wxPGPropNameStr name )
+    {
+        wxPG_PROP_NAME_CALL_PROLOG()
+        BeginAddChildren(wxPGIdGen(p));
+    }
+
+    /** Called after population of property with fixed children has finished.
+    */
+    void EndAddChildren( wxPGId id );
+    inline void EndAddChildren( wxPGPropNameStr name )
+    {
+        wxPG_PROP_NAME_CALL_PROLOG()
+        EndAddChildren(wxPGIdGen(p));
+    }
+
     /** Inserts choice to a property that can accept one.
 
         See AddPropertyChoice for more details.
@@ -3593,6 +3664,34 @@
 #endif
 
 #if !wxPG_PGVARIANT_IS_VARIANT
+    wxPG_PYTHON_STATIC inline const wxLongLong& GetPropertyValueAsLongLong( wxPGId id ) wxPG_GETVALUE_CONST
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxLongLong"), *((const wxLongLong*)NULL))
+        return wxPGVariantToWxLongLong(p->DoGetValue());
+    }
+#else
+    wxPG_PYTHON_STATIC inline wxLongLong GetPropertyValueAsLongLong( wxPGId id ) wxPG_GETVALUE_CONST
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxLongLong"), wxLongLong())
+        return wxPGVariantToWxLongLong(p->DoGetValue());
+    }
+#endif
+
+#if !wxPG_PGVARIANT_IS_VARIANT
+    wxPG_PYTHON_STATIC inline const wxULongLong& GetPropertyValueAsULongLong( wxPGId id ) wxPG_GETVALUE_CONST
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxULongLong"), *((const wxULongLong*)NULL))
+        return wxPGVariantToWxULongLong(p->DoGetValue());
+    }
+#else
+    wxPG_PYTHON_STATIC inline wxULongLong GetPropertyValueAsULongLong( wxPGId id ) wxPG_GETVALUE_CONST
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxULongLong"), wxULongLong())
+        return wxPGVariantToWxULongLong(p->DoGetValue());
+    }
+#endif
+
+#if !wxPG_PGVARIANT_IS_VARIANT
     wxPG_PYTHON_STATIC inline const wxArrayInt& GetPropertyValueAsArrayInt( wxPGId id ) wxPG_GETVALUE_CONST
     {
         wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxArrayInt"), wxPG_EMPTY_ARRAYINT)
@@ -3978,25 +4077,8 @@
         \endcode
         For more info, see wxPropertyGrid::Insert.
     */
-    inline wxPGId ReplaceProperty( wxPGId id, wxPGProperty* property )
-    {
-        wxPG_PROP_ID_CALL_PROLOG_RETVAL(wxNullProperty)
+    wxPGId ReplaceProperty( wxPGId id, wxPGProperty* property );
 
-        wxPGProperty* replaced = wxPGIdToPtr(id);
-        wxASSERT( replaced && property );
-        wxASSERT( replaced->GetParentingType() == 0 || replaced->GetParentingType() == -1 );
-        wxASSERT( !m_pState->IsInNonCatMode() );
-
-        // Get address to the slot
-        wxPGPropertyWithChildren* parent = replaced->GetParent();
-        int ind = replaced->GetIndexInParent();
-
-        wxPropertyGridState* state = replaced->GetParentState();
-        Delete(replaced); // Must use generic Delete
-        state->DoInsert(parent,ind,property);
-
-        return wxPGIdGen(property);
-    }
     inline wxPGId ReplaceProperty( wxPGPropNameStr name, wxPGProperty* property )
     {
         wxPG_PROP_NAME_CALL_PROLOG_RETVAL(wxNullProperty)
@@ -4371,6 +4453,10 @@
                         setter = cls.SetPropertyValuePoint
                     elif vtn == 'wxSize':
                         setter = cls.SetPropertyValueSize
+                    elif vtn == 'wxLongLong':
+                        setter = cls.SetPropertyValueLongLong
+                    elif vtn == 'wxULongLong':
+                        setter = cls.SetPropertyValueULongLong
                     elif vtn.startswith('wx'):
                         setter = cls.SetPropertyValueWxObjectPtr
                     elif not vtn:
@@ -4575,6 +4661,30 @@
     }
 #endif
 
+	/** Sets property as read-only. It's value cannot be changed by the user, but the
+	    editor may still be created for copying purposes.
+	*/
+	void SetPropertyReadOnly( wxPGId id, bool readOnly = true )
+	{
+        wxPG_PROP_ID_CALL_PROLOG()
+		if ( readOnly )
+			p->SetFlag(wxPG_PROP_READONLY);
+		else
+			p->ClearFlag(wxPG_PROP_READONLY);
+	}
+
+	/** Sets property as read-only. It's value cannot be changed by the user, but the
+	    editor may still be created for copying purposes.
+	*/
+	void SetPropertyReadOnly( wxPGPropNameStr name, bool readOnly = true )
+	{
+        wxPG_PROP_NAME_CALL_PROLOG()
+		if ( readOnly )
+			p->SetFlag(wxPG_PROP_READONLY);
+		else
+			p->ClearFlag(wxPG_PROP_READONLY);
+	}
+
     // GetPropertyByNameI With nice assertion error message.
     wxPGId GetPropertyByNameA( wxPGPropNameStr name ) const;
 
@@ -5753,6 +5863,18 @@
     {
         SetPropertyValue( id, wxT("wxSize"), wxPGVariantCreator(value) );
     }
+    /** Sets value (wxLongLong&) of a property.
+    */
+    inline void SetPropertyValueLongLong( wxPGId id, const wxLongLong& value )
+    {
+        SetPropertyValue( id, wxT("wxLongLong"), wxPGVariantCreator(value) );
+    }
+    /** Sets value (wxULongLong&) of a property.
+    */
+    inline void SetPropertyValueULongLong( wxPGId id, const wxULongLong& value )
+    {
+        SetPropertyValue( id, wxT("wxULongLong"), wxPGVariantCreator(value) );
+    }
     /** Sets value (wxArrayInt&) of a property.
     */
     inline void SetPropertyValueArrint2( wxPGId id, const wxArrayInt& value )
@@ -5887,6 +6009,20 @@
         wxPG_PROP_NAME_CALL_PROLOG()
         SetPropertyValueSize( wxPGIdGen(p), value );
     }
+    /** Sets value (wxLongLong&) of a property.
+    */
+    inline void SetPropertyValueLongLong( wxPGPropNameStr name, const wxLongLong& value )
+    {
+        wxPG_PROP_NAME_CALL_PROLOG()
+        SetPropertyValueLongLong( wxPGIdGen(p), value );
+    }
+    /** Sets value (wxULongLong&) of a property.
+    */
+    inline void SetPropertyValueULongLong( wxPGPropNameStr name, const wxULongLong& value )
+    {
+        wxPG_PROP_NAME_CALL_PROLOG()
+        SetPropertyValueULongLong( wxPGIdGen(p), value );
+    }
 #ifdef __WXPYTHON__
     inline void SetPropertyValuePyObject( wxPGPropNameStr name, PyObject* value )
     {
@@ -6245,6 +6381,8 @@
     wxBitmap            *m_doubleBuffer;
 #endif
 
+    wxArrayPtrVoid      *m_windowsToDelete;
+
     /** Local time ms when control was created. */
     wxLongLong          m_timeCreated;
 
Index: src/sdk/propgrid/CHANGES-propgrid.txt
===================================================================
--- src/sdk/propgrid/CHANGES-propgrid.txt	(revision 4307)
+++ src/sdk/propgrid/CHANGES-propgrid.txt	(working copy)
@@ -1,4 +1,98 @@
 
+Version 1.2.8 ( Jul-09-2007 )
+
+  New:
+
+  - Read-only flag added for properties (you can use SetPropertyReadOnly
+    method; patch #1747422 by Chris Edwards).
+
+  - Added makefiles for wxWidgets 2.8.4.
+
+  - Heavily updated wxPython build scripts (see readme in the Python
+    source package for details).
+
+
+  Bugs Fixed:
+
+  - Failure of make install to copy include files to correct location
+    should now finally be fixed (bug #1604887).
+
+  - wxPropertyGrid::Delete() crashed in various (uncommon) situations
+    (such as when deleting nested categories).
+
+  - Compile error in some ANSI builds.
+
+  - Compile error with GCC 4.1 or later.
+
+  - Compile and combo box errors with SVN trunk (ie. wxWidgets 2.9).
+
+  - Crash was likely if a property was de-selected when handling event from
+    an editor control.
+
+  - Applied various fixes for compiling for wxPython under POSIX system
+    (thanks Tijs Michels).
+
+
+
+Version 1.2.7 ( Mar-24-2007 )
+
+  New:
+
+  - SetPropertyValue and GetPropertyValue methods for wxLongLong and
+    wxULongLong. In addition, added wxLongLongProperty to sampleprops.cpp.
+
+  - Makefiles for wxWidgets 2.8.3, 2.6.4 and CVS (2.9.0).
+
+
+  Changed:
+
+  - Previously it was possible to create a property with fixed
+    children (such as wxFlagsProperty) with no children initially, and then
+    populate it afterwards. For improved consistency, this can no longer
+    be done in the same way. Instead, you need to call BeginAddChilren just
+    prior to starting to add children, and EndAddChildren after populating
+    has finished.
+
+
+  Bugs Fixed:
+
+  - Applied following Mac OS X fixes by Julian Smart:
+    * Improved placement of text control editor.
+    * Improved placement of editor button.
+    * Editor controls were larger than intended.
+    * There was flicker on resize.
+
+  - On GTK, toolbar height was incorrect.
+
+  - Fixed regression which caused spinctrl editor on GTK to crash on arrow
+    click.
+
+  - Fixed regression which caused Freeze/Thaw to work incorrectly.
+
+  - Makefile.in did not have UNIX line endings.
+
+  - In certain rare conditions, wxPropertyGrid could crash when being created
+    (patch #1645322 by rjmyst3).
+
+  - Dialog editor of string properties could not set an empty string
+    (patch #1672748 by b_betts).
+
+  - NULL pointers of focus events were not handled correctly
+    (patch #1675902 by rjmyst3).
+
+  - wxFlagsProperty with zero children could not be replaced (#bug 1675077).
+
+  - String handling code has been modified for wxWidgets CVS (2.9.0) and STL-
+    friendliness.
+
+  - Compile problem with wxWidgets 2.6.1 on wxMSW (patch #1671422 by
+    Tim Stahlhut).
+
+  - Compile problem in sample if WXWIN_COMPATIBILITY_2_6 was not used with
+    wxWidgets 2.8 (bug #1647725).
+
+
+
 Version 1.2.6 ( Jan-21-2007 )
 
   New:
@@ -900,1762 +994,12 @@
 
 
 
-Version 1.0.6.1 ( Dec-02-2005 )
-
-   Tweaks:
-
-   - wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING (wxBoolProperty attribute to allow
-     value cycling with double-click) has been improved considerably.
-     Focusing to the combo box is now detected as the first click, so
-     behaviour will be much smoother than before.
-
-
-   Bugs Fixed:
-
-   - ComboBox control crashed often (for instance, when the dropdown button
-     was pressed many times in a row).
-
-   - In some cases wxPropertyGrid stole keyboard focus.
-
-
-
-Version 1.0.6 ( Sep-21-2005 )
-
-  Minor Features:
-
-  - Initial Mac OS X compatibility has been reported (should build and run -
-    thanks to Jan-Friso Schipper for working it out).
-
-    NOTE: wxPropertyGrid::SetFont is reported to crash, so offending code in it
-    has been commented out. However, if you are willing to debug the issue, you
-    can replace line '#if !defined(__WXMAC__)' with line '#if 1' in propgrid.cpp:
-    wxPropertyGrid::SetFont.
-
-  - wxWidgets 2.6.2 makefiles.
-
-
-  Bugs Fixed:
-
-  - wxFloatProperty and sample's wxArrayDoubleProperty had problems when
-    locale was set to one using comma as decimal point.
-
-  - wxUIntProperty did not render its value unless base or prefix was
-    explicitly set (via SetPropertyAttribute).
-
-  - WinXP/Win2K, wxWidgets 2.6.1+: Improved indentation fix.
-
-  - When mouse was leaving "slowly" via right edge through active editor
-    control, correct mouse leave event was not triggered resulting in
-    latest changes not being committed (though there was error notification
-    in debug build).
-
-
-
 Version 1.0.5 ( Jun-06-2005 )
 
-  Minor Features:
+  See CHANGES-propgrid.txt of versions earlier than 1.1.3.
 
-  - Added wxPropertyGrid::ReplaceProperty(id/name,newproperty).
 
-  - Added flags argument default value (0) for wxPGProperty's GetValueAsString,
-    SetValueFromString, and SetValueFromInt methods.
 
-  - wxWidgets 2.6.1 makefiles.
+Version 0.9.9.2 and earlier
 
-
-  Bugs Fixed:
-
-  - WinXP/Win2K, wxWidgets 2.6.1: Indentation in wxTextCtrl based property
-    editor was incorrect (due to change in default font face: previously
-    "MS Shell Dlg", now "MS Shell Dlg 2").
-
-  - wxGTK: Virtual size was sometimes skewed.
-
-  - When a property with children was expanded or collapsed, and current
-    selection was outside the visible area, then the grid was inadvertedly
-    scrolled to the selection.
-
-
-
-Version 1.0.4 ( May-21-2005 )
-
-  Changes and Minor Features:
-
-  - Colour scheme generator is now smarter and should be considerably
-    better for various Windows themes. If you do not like how it looks,
-    edit contrib/include/wx/propgrid/propgrid.h and change define
-    wxPG_NEW_COLOUR_SCHEME to 0.
-
-  - wxUIntProperty for representing unsigned integers. You can change
-    base (default is decimal) and prefix by manipulating wxPG_UINT_BASE
-    and wxPG_UINT_PREFIX attributes. See Attribute Identifiers module
-    in the documentation for more info.
-
-  - Added wxPropertyGridManager::ClearPage(page) to delete all
-    properties on given page.
-
-
-  Bug Fixes:
-
-  - If value in textctrl editor was edited, and splitter was subsequently
-    moved, then the corresponding wxPG_EVT_CHANGED was not sent.
-
-  - Windows 2000: Pressing ALT + some key that isn't actually bound
-    to a shortcut caused program to hang (thanks Bernard Duggan).
-
-  - WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY and
-    WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR did not compile
-    (and neither did their declare counterparts).
-
-  - wxFontProperty: setting invalid Family, Style, or Weight caused a crash
-    (assertion failure in debug build).
-
-  - Giving -1/wxID_ANY as id to wxPropertyGridManager resulted in an
-    assertion failure.
-
-  - Description box or status bar were not cleared consistently when
-    Thaw() and Freeze() were used when deleting items.
-
-  - wxPropertyGrid::SetPropertyValueUnspecified(name) had typo in its
-    name (Value was missing).
-
-
-
-Version 1.0.3 ( May-13-2005 )
-
-  Bug Fixes:
-
-  - Changes were not copied (and wxEVT_PG_CHANGED event was not sent)
-    from wxTextCtrl based editor when focusing out of the property grid,
-    or when the grid was being destroyed. This is now solved by committing
-    changes and sending the event when focus or mouse moves leaves the
-    property grid and when special key (alt,ctrl,meta - which are connected
-    to closing the app via keyboard) is pressed while text is being edited.
-    If this fails to work, *error message will be shown on grid deletion*.
-
-  - Keyboard navigation code has been overhauled. Fixes include:
-    * Keyboard navigation in wxPropertyGrid placed in wxDialog or wxPanel
-      was seriously skewed.
-    * Keyboard navigating upwards (and sometimes downwards as well)
-      did not scroll to navigated property.
-    * It was possible to navigate out with arrow keys.
-    * Changing mode in wxPropertyGridManager stopped keyboard navigation
-      from working.
-    * Now, when there is no selection, first non-tab, non-esc key down event
-      will select the topmost property.
-    Known things that don't work yet:
-    * wxGTK: Pressing ESC in property editor does not unfocus it correctly.
-
-  - Right-clicking now selects the property underneath.
-
-  - ClientData methods were not enabled by the default, and if they
-    were manually enabled, there were compile errors
-    (thanks Bernard Duggan).
-
-  - wxPropertyGridManager::SetWindowStyleFlag was seriously flawed.
-
-  - Few ignorable but rare assertion failures removed.
-
-  - Sample app incorrectly placed multiple controls on plain wxFrame
-    (which is apparently a no-no).
-
-  - Another Borland C++ fix (hopefully its now fine, thanks Luigi Bianchi).
-
-  - Flag indicating read-only editor was not inherited by fixed sub-properties.
-
-
-
-Version 1.0.2 ( May-03-2005 )
-
-  Changes:
-
-  - wxParentProperty has been re-implemented (I thought wxCustomProperty
-    could replace it but that turned out not to be practical). Added
-    section on docs main page as well.
-
-  - It is now possible to have nested properties that use the default
-    SetValueFromString/GetValueAsString (which prints something like
-    "child value 1; child value2; ...etc..."). Children with sub-items
-    of their own are separated by brackets. For example:
-      Property              Value
-      --------------------  ------------------------
-      TopProperty           "1; [2a; 2b]; 3"
-        First Child         "1"
-        Second Child        "2a; 2b"
-          First Sub-Child   "2a"
-          Second Sub-Child  "2b"
-        Third Child         "3"
-
-    As an example of this, I have added a property labeled "3D Object" to the
-    third page in the sample app.
-
-
-  Bugs Fixed:
-
-  - Attribute wxPG_FILE_WILDCARD did not work.
-
-  - Various bugs with nested properties.
-
-  - Did not compile with wxUSE_UNICODE=0 + wxUSE_STL=1
-    (thanks Joachim Hönig).
-
-  - wxPropertyGridManager: wxPG_AUTO_SORT was forced.
-
-  - wxPropertyGridManager: selections were not retained.
-
-  - Windows XP: Drew corrupted drop button with some themes.
-
-
-
-Version 1.0.1 ( April-24-2005 )
-
-  Changes:
-
-  - More consistent positions for wxTextCtrl-based editors.
-
-  - wxGTK2 wxTextCtrl based editor now uses clipper window to remove its
-    borders. Previously only wxNO_BORDER flag was used (similar to wxMSW),
-    but it was not sufficient for all GUI themes.
-
-
-  Bugs Fixed:
-
-  - Category with zero children caused a graphics glitch.
-
-  - If mouse in editor was dragged outside on to the splitter, control's
-    cursor was changed to double arrow.
-
-  - Editor control's keyboard focus was not detected correctly if it used a
-    clipper window.
-
-  - Borland C++ compile error.
-
-
-
-Version 1.0.0 ( Apr-14-2005 )
-
-  Note: There are still few known bugs left. I have tried to compile a
-    more-or-less complete list, which can be found on the docs main page.
-
-  New Features:
-
-  - wxWidgets 2.6.0 compatibility.
-
-  - wxCustomProperty. This is a property class that can be, using
-    SetPropertyAttribute, customized for various needs. It can also have
-    children. Note that its value type is string, and this cannot be
-    (and should not be) currently modified.
-
-    See docs main page, section "Custom User Properties (using
-    wxCustomProperty)" for more information.
-
-
-  Changes and Minor Additions:
-
-  - wxParentProperty is removed (use wxCustomProperty instead).
-
-  - Moved class definitions of following property classes to propdev.h or
-    advprops.h (so they can now be inherited from):
-      wxImageFilePropertyClass, wxCursorPropertyClass,
-      wxMultiChoicePropertyClass.
-
-  - Expander button is no longer drawn for parent properties when they
-    have no children.
-
-  - Added wxPropertyGridPopulator pseudo-code sample to the documentation.
-
-  - New method: SetPropertyChoices(id/name,wxPGConstants)
-    Preferred way to override the entire set of choices for a property.
-
-  - Added some missing wxPropertyGridManager methods:
-      SetPropertyLabel
-
-  - Modified wxPropertyGrid::GetImageSize so that it can return image size
-    of a specified property. If no argument is given, it works as before.
-
-
-  Bugs Fixed:
-
-  - Graphics glitch when deleting a property.
-
-  - Active editor misplacement on Compact.
-
-  - Garbage between textctrl and button after splitter movement.
-
-  - Expander icon clickable area was slightly less than the entire icon.
-
-  - GCC 4.x compile problem.
-
-  - If grid was resized so that the scrolled position changed and there
-    was an editor control which position or size had to be changed, then
-    the final control position was skewed.
-
-
-
-Version 1.0.0 RC1 ( Mar-30-2005 )
-
-  New Features:
-
-  - wxWidgets 2.5.5 compatibility.
-
-  - wxPropertyGridPopulator class.
-    Allows populating wxPropertyGrid from an arbitrary text source.
-    For a practical example, see propgridsample.cpp's functions
-      FormMain::OnSaveToFileClick
-      FormMain::OnLoadFromFileClick
-
-    NOTES:
-      * wxParentProperty is not supported yet.
-      * As currently there is no GetPropertyAttribute, property
-        attributes cannot be stored.
-
-  - wxEnumProperty and all custom properties derived from them
-    now have dynamic label and value storage (called "choices" storage).
-    Arrays given on creation are only initial and can be modified. Note
-    that they are cached per-pointer, so two properties which are given
-    same static arrays use the same dynamic storage. Thus, adding a choice
-    to one property adds the same choice to all other properties using the
-    same choice storage. However, there is a method to create private copy
-    of choices for a property.
-
-    Methods of note:
-      wxPGConstants& GetPropertyChoices(id/name). Returns
-        writable reference to the choices of a wxEnumProperty or
-        derivative (and some others, such as wxMultiChoiceProperty,
-        as well). Can be modified or given to another property in
-        constructor function.
-
-      AddPropertyChoice(id/name,label[,value]). Appends entry to
-        the choices storage of a property.
-
-      SetPropertyChoicesPrivate(id/name). If property's set of choices
-        if shared with other properties, a private copy of it will be
-        created for this property.
-
-  - wxGTK 1.2 port is now almost usable. Problems remain in refreshing
-    editor controls (try expanding/collapsing font property while its
-    selected) and also there is a strange problem with wxMultiChoiceProperty
-    (dialog's list box doesn't get correct selection). Note that this
-    port also no longer uses custom controls.
-
-
-  Changes and Minor Features:
-
-  - Margin no longer uses background colour - use new SetMarginColour
-    and GetMarginColour instead.
-
-  - wxOwnerDrawnComboBox now allows "fake" popup window (i.e. wxWindow
-    instead of wxPopupWindow) whenever possible. This reduces number
-    of bugs experienced (wxPopupWindow is not perfect yet). To make
-    best use of this "feature", use vertically large wxPropertyGrid
-    (common in typical applications).
-
-  - wxOwnerDrawnComboBox now extends the popup to always be wide
-    enough to accommodate widest item in list.
-
-  - IsModified is deprecated. Use IsPropertyModified and
-    IsAnyModified instead.
-
-  - GetFirstChild now only returns first child of root and
-    category (you should not have need for easy sub-property access).
-
-  - Using better Doxygen configuration (member sorting, no brief
-    in member list).
-
-  - Removed option to use .NET icons on toolbar.
-
-  - ChoiceAndButton editor's button is now of same height
-    as choice's dropbutton.
-
-  - Precision handling of wxFloatProperty and wxArrayDoubleProperty
-    have been improved. Precision of -1, which is now default, indicates
-    use of default printf precision. Also, excess zeroes are now
-    removed from displayed strings. Note that wxArrayDoubleEditorDialog
-    was also modified.
-
-  - Some new methods:
-      wxPGProperty* wxPropertyGrid::CreatePropertyByClass
-      (classname,name,label)
-          Creates new property according to given classname (for
-          example, "wxStringProperty" or "String"). Name and label are
-          same as usual.
-
-      wxPGProperty* wxPropertyGrid::CreatePropertyByType
-      (valuetype,name,label)
-          Like CreatePropertyByClass but creates from a name of
-          valuetype (i.e. "string", "long", or any returned by
-          wxVariant::GetType, wxPGProperty::GetType or
-          wxPGValueType::GetType).
-
-      size_t wxPGProperty::SetChoices(size_t id,labels,values)
-          If id is non-zero and found, then set property's choices to
-          refer to that. If not, then creates new set of choices with
-          given id (or generated if that is zero). Returns final id.
-
-
-  Changes to Custom Property Creation:
-
-  - Added m_constants member to wxPGChoiceInfo (which is then
-    filled by GetChoiceInfo if dynamic modification of property's
-    choices is desired).
-
-  - New wxBaseEnumPropertyClass for creating enum props which have
-    totally custom label and value storage (see propdev.h for
-    details).
-
-  - wxPGProperty::PrepareValueForDialogEditing. See documentation
-    on when to use (and what existing code it should replace...).
-
-  - As a rule, properties must now be able to cope with NULL
-    initial value (if its given as pointer or reference).
-
-
-  Bugs Fixed:
-
-  - Some properties with wxTextCtrl based editor could not sustain
-    unspecified value.
-
-  - Did not compile without wxWidgets 2.4 compatibility flag
-    (thanks Luigi Bianchi).
-
-  - If dialog-editable property was set with unspecified value,
-    the dialog usually showed the value prior it was set to
-    unspecified. Now dialog should show default value instead.
-
-  - wxPropertyGrid::SetFont crashed if called before control was
-    fully created (thanks Tyler Edwards).
-
-  - wxOwnerDrawnComboBox's popup was not always closed when mouse
-    was clicked over the grid.
-
-
-
-Version 1.0.0 BETA 4 ( Mar-19-2005 )
-
-  This is an intermediate bug fix release.
-
-  Bugs Fixed:
-
-  - wxMSW: Excess flicker on Refresh resolved.
-
-  - wxGTK: wxOwnerDrawnComboBox popup window border problems solved.
-
-  - wxPropertyGridManager's header didn't compile
-    properly.
-
-  - ClearSelection did not clear page's selection.
-
-  - Potential freezing due to mouse capture not releasing.
-
-  - In wxArrayDoublePropertyClass, m_precision member was
-    used before it was initialized (Matthew Christie).
-
-
-
-Version 1.0.0 BETA 3 ( Mar-10-2005 )
-
-  NOTE: If you are upgrading from 0.9.9.x or earlier, then please
-    read the 1.0.0 BETA 1 section below.
-
-  New Features:
-
-  - NSIS-based installer executable (for Windows). Will try to
-    auto-detect wxWidgets dir and version, and copies makefiles
-    accordingly (thanks to Dave Moor for help in testing it).
-
-  - Added per-property client data. Use
-
-    void wxPropertyGrid::SetPropertyClientData(id/name,void*)
-
-    to set it and
-
-    void* wxPropertyGrid::GetPropertyClientData(id/name)
-
-    to get it. There is also wxPropertyGridEvent::GetPropertyClientData.
-
-  - Added specific background colour for category captions. Use
-    wxPropertyGrid::SetCaptionBackgroundColour and
-    wxPropertyGrid::GetCaptionBackgroundColour to use it. In the
-    sample application, this feature can be demonstrated by setting
-    the White Colour Scheme.
-
-  - Added to sample a wxArrayDoubleProperty - an example of
-    array property of non-string values.
-
-  - Preliminary wxUSE_STL=1 compatibility (not yet in custom
-    controls mode - if you really need this, then make a feature
-    request).
-
-
-  Changes and minor features:
-
-  - Loads of restructuring and additions to the documentation main page.
-
-  - Added wxPropertyGrid::ShowPropertyError(id/name,msg). It shows
-    an error message that is related to a single property. Useful
-    if you want to do custom checking in OnPropertyChanged handler
-    and tell the user if he fumbled (currently message is not
-    shown that well - probably improved in future).
-
-  - There is now abstract wxArrayEditorDialog class declared in
-    propdev.h. It can be derived to create editor dialog for
-    any type of array. See wxArrayDoubleEditorDialog in the
-    sample app for an example of how to do it.
-
-  - wxBoolProperty has now wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING
-    attribute. Set it to 1 to enable value cycling on double-click.
-
-  - wxGetVariantCast(var,classname) is now redefined in propgrid.h
-    to also take in account wxPropertyGrid-generated variants
-    (normally the macro in question only works with regular
-    wxObject-variants). Effectively makes WX_PG_VARIANT_TO_WXOBJECT
-    obsolete.
-
-  - wxPropertyGrid::Enable(property,bool) is now deprecated. Use
-    wxPropertyGrid::EnableProperty instead.
-
-  - Added wxBoolProperty related section to documentation main page
-    (due to all special stuff now going on with it).
-
-  - wxPropertyGrid::SetPropertyAttribute(id/name,wxPGVariant) is now
-    SetPropertyAttribute(id/name,wxVariant) due to STL compatibility
-    issues. There is no int-based constructor for wxVariant (as of
-    2.5.4), so you need to cast constant ints to longs!
-
-  - Similarly, wxPGProperty::SetAttribute(id,wxPGVariant) is now
-    wxPGProperty::SetAttribute(id,wxVariant).
-
-  - Added bool wxPGProperty::StdValidationProcedure(value) which
-    can be used instead of common "DoSetValue(value); return TRUE;"
-    sequence in propertyclass::SetValueFromString in order to
-    automatically use any future validator code (ok for simple
-    properties such as wxStringProperty and wxIntProperty,
-    but not for wxArrayXXXProperty).
-
-
-  Bugs Fixed:
-
-  - Crash may occur some time after Clear (selection was not nulled properly).
-
-  - Numerous compiler warnings and errors resolved for Borland C++
-    (thanks to Dave Moor for reporting them).
-
-  - wxOwnerDrawnComboBox's popup now closes on menu events and propertygrid
-    scrolling as well.
-
-  - There was no proper unspecified value support in wxOwnerDrawnComboBox.
-
-  - Changes in splitter centering code may have solved various issues.
-
-  - There was wxWidgets dir detection bug in POSIX installation script.
-
-
-
-Version 1.0.0 BETA 2 ( Feb-20-2005 )
-
-  NOTE: If you are upgrading from 0.9.9.x or earlier, then please
-    read the 1.0.0 BETA 1 section below.
-
-  New Features:
-
-  - wxOwnerDrawnComboBox: A customizable generic combobox to be
-    used with native controls. It allows custom painting popup
-    items and even a completely custom popup. If you want to
-    see how it behaves as a standalone control, use Custom Combo
-    Sample item in Try These! menu.
-
-    Sorry, no "double-click cycles" behaviour (yet).
-
-    Sorry, no docs. See odcombo.h and propgridsample.cpp (end of
-    the file) for some details.
-
-  - 2.5.4 compatibility.
-
-
-  Changes:
-
-  - Native controls are now default. Added compiling section to
-    the documentation to clarify how to revert to custom controls
-    if so desired.
-
-  - wxArrayString editor dialog now has different set of buttons
-    enabled/disabled depending on whether the textctrl or the listbox
-    is focused. This should improve its usability (but it could
-    still be better - suggestions are welcome).
-
-  - Added wxPropertyGridManager::SetDescription(label,content) to
-    set custom content for description text box.
-
-  - Added wxPropertyGrid::GetImageSize(). It returns size of the
-    image custom paint in front of (some) properties.
-
-  - UNIX install script is now able to auto-detect wxWidgets version.
-    It also now has extra safety checks.
-
-
-  Internal Property API Changes:
-
-  - Added wxPGEditor::CanContainCustomImage. Returns TRUE if the actual
-    control can contain the property's custom image. Base implementation
-    returns FALSE.
-
-
-  Bugs Fixed:
-
-  - GetPropertyValues would crash with combination of NULL base parent
-    and wxKEEP_STRUCTURE flag (now NULL will indicate usage of root
-    property, as used in the sample app).
-
-  - Type 2 tokenizer (used by the normal wxArrayStringProperty, for example)
-    caused memory leak on unfinished token.
-
-  - Massive amounts (100+) of category adding and removal was problematic.
-
-  - wxMSW: Previously what was supposed to be dotted line was
-    short dash instead.
-
-  - wxGTK: Native controls were not always properly refreshed after
-    their value was changed.
-
-  - Few graphics glitches with check box editor (rect filled with
-    background colour was lacking one pixel in width, focused item
-    was not properly repainted on resize).
-
-
-
-Version 1.0.0 BETA 1 ( Jan-24-2005 )
-
-  SIGNIFICANT CHANGES! PLEASE READ CAREFULLY!
-
-  To improve compile times, there has been a significant change to how
-  new instances of property classes are created. Since now
-  classes themselves are no longer global, a constructor function must
-  be called instead of a standard constructor.
-
-  Previously one would call:
-
-    pg->Append( new wxIntProperty(wxT("Label"), wxT("name"), 0) );
-
-  Now this would be used instead:
-
-    pg->Append( wxIntProperty(wxT("Label"), wxT("name"), 0) );
-
-  The only visible difference is the lack of keyword "new".
-
-  As a consequence, actual classes had to be renamed. They
-  now have "Class" appended to their names. However, only those
-  who have created custom properties should really have to worry about
-  this.
-
-  See below for complete summary of changes in creating custom
-  user properties.
-
-
-  API and File Organization Changes (vs 0.9.9.x):
-
-  - Project is now "propgrid" instead of "propertygrid". This changes
-    include path as well ( "wx/propertygrid/xxx.h" -> "wx/propgrid/xxx.h" )
-
-  - Header file name changes:
-    "propertygrid.h" -> "propgrid.h"
-    "propgext.h" -> "propdev.h"
-
-  - wxPropertyGridManager got its own header file "manager.h".
-
-  - Window style changes:
-    wxPG_AUTOSORT -> wxPG_AUTO_SORT
-    wxPG_NOCATEGORIES -> wxPG_HIDE_CATEGORIES
-    wxPG_BOLDMODIFIED -> wxPG_BOLD_MODIFIED
-    wxPG_SPLITTERAUTOCENTER -> wxPG_SPLITTER_AUTO_CENTER
-
-  - wxVariant storage system changed a bit. Now for each value type which
-    data type is not directly supported in wxVariant there is wxVariantData
-    class. This allows pretty much flawless GetPropertyValues and
-    SetPropertyValues. However, this comes at some price in executable
-    size ( < 10k ) and that wxVariant::GetWxObjectPtr doesn't work any
-    longer on those properties. Instead, you need to use this macro
-    (similar to wxDynamicCast):
-
-    WX_PG_VARIANT_TO_WXOBJECT(variant,targetclass)
-
-    This should be considered a temporary solution (wxWidgets variant system
-    needs fixing).
-
-  - SetSelection -> SelectProperty, SelectPage (as appropriate).
-    SelectProperty added to wxPropertyGridManager.
-    ClearSelection added to wxPropertyGridManager.
-    GetPropertyName added to wxPropertyGridManager.
-
-  - wxALSO_CHILDREN flag (used by SetPropertyAttribute) was renamed to
-    wxRECURSE.
-
-  - wxPG_EX_FLAT_TOOLBAR is now default. Use wxPG_EX_NO_FLAT_TOOLBAR
-    to disable it.
-
-
-  New Features:
-
-  - ChoiceAndButton editor class. Used by a new example, AdvImageFile
-    property (its on first page in the app). It works like ImageFile
-    property, but also has dropdown list of all tried image files
-    (with thumbnails, too).
-
-  - New property generator macro pair:
-    WX_PG_DECLARE_ARRAYSTRING_PROPERTY(PROPNAME)
-    WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY(PROPNAME,DELIMITER,CUSTBUTTXT)
-
-    Creates a wxArrayStringProperty derivative which allows a custom
-    string list delimiter and setting a custom editor action into
-    the string editor dialog.
-
-    PROPNAME = As usual.
-    DELIMITER = wxT('"') for "str1" "str2" style and anything else for
-      str1<DELIMETER> str2 style.
-    CUSTBUTTXT = A const wxChar* text for a button label. NULL for no
-      custom button.
-
-    Also, you must implement the custom button method
-
-    bool PROPNAMEClass::OnCustomStringEdit ( wxWindow* parent, wxString& value )
-
-    even if you used NULL as CUSTBUTTXT.
-
-    Included in the sample is wxDirsProperty as an example of using
-    these macros.
-
-
-  Summary of Other Changes in Creating User Custom Properties (vs 0.9.9.x):
-
-  - Main change with macros is that they are always preceded by "WX_PG_"
-    instead of nothing or "wxPG_", and that they generally accept
-    property names (wxStringProperty is a property name,
-    wxStringPropertyClass is property class name). Thus, first
-    argument for IMPLEMENT macros should stay the same.
-
-    Apart from the additon of prefix, easy-property macros such
-    as DECLARE_STRING_PROPERTY and IMPLEMENT_CUSTOM_FLAGS_PROPERTY
-    remain unchanged.
-
-  - Since property classes are now generally hidden,
-    WX_PG_DECLARE_PROPERTY(PROPNAME,TYPE_AS_ARG,DEFVAL)
-    macro is used to declare a constructor function for them
-    (instead of putting the class declaration into a header file).
-
-    Example of use:
-
-    WX_PG_DECLARE_PROPERTY(wxRealPointProperty,const wxRealPoint&,RealPoint())
-
-    As always, there is also _WITH_DECL variant that takes an additional
-    declaration argument (such as export).
-
-  - DECLARE_PROPERTY_CLASS (now WX_PG_DECLARE_PROPERTY_CLASS), which
-    was used inside a property class declaration, no longer has an argument
-    (previously it had class name as argument).
-
-  - IMPLEMENT_PROPERTY_CLASS(CLASSNAME,PARENTCLASS,VALUETYPE,EDITORCLASS)
-    got rid of PARENTCLASS argument and got a TYPE_AS_ARG argument (same use
-    as in WX_PG_DECLARE_PROPERTY), so it is now:
-
-    WX_PG_IMPLEMENT_PROPERTY_CLASS(PROPNAME,VALUETYPE,TYPE_AS_ARG,EDITORCLASS)
-
-    So for example:
-    IMPLEMENT_PROPERTY_CLASS(wxFontDataProperty,wxFontProperty,
-                             wxFontData,TextCtrlAndButton)
-
-    is now:
-
-    WX_PG_IMPLEMENT_PROPERTY_CLASS(wxFontDataProperty,wxFontData,
-                                   const wxFontData&,TextCtrlAndButton)
-
-  - To sum things up in an example...
-
-
-      //* BEFORE *//
-
-      // Header:
-
-      class wxMyCustomProperty : public wxPGProperty
-      {
-          DECLARE_PROPERTY_CLASS(wxMyCustomProperty)
-      public:
-          ...
-      };
-
-      // Source:
-
-      IMPLEMENT_PROPERTY_CLASS(wxMyCustomProperty,wxPGProperty,
-                               MyValueClass,TextCtrl)
-
-
-      //* NOW *//
-
-      // Header:
-
-      WX_PG_DECLARE_PROPERTY(wxMyCustomProperty,const MyValueClass&,MyValueClass())
-
-      // Source:
-      class wxMyCustomPropertyClass : public wxPGProperty
-      {
-          WX_PG_DECLARE_PROPERTY_CLASS()
-      public:
-          ...
-      };
-
-      WX_PG_IMPLEMENT_PROPERTY_CLASS(wxMyCustomProperty,MyValueClass,
-                                     const MyValueClass&,TextCtrl)
-
-  - wxPGProperty::GetValue
-    is now
-    wxPGProperty::DoGetValue
-
-  - void wxPGProperty::GetValueAsString(wxString& str,bool fullvalue)
-    is now
-    wxString wxPGProperty::GetValueAsString(int argflags)
-    So it now just returns the string instead of adding to the
-    one given as argument. Also, previous (fullvalue == TRUE) test
-    is now (argflags & wxPG_FULL_VALUE), but this is really only
-    important for those rare properties that different stored/
-    displayed value (wxPG_FULL_VALUE is set if true value should
-    be returned instead of displayed one).
-
-  - wxPGProperty::DoSetValueFromInt
-    is now
-    SetValueFromInt.
-
-  - Changed flags arguments in wxPGProperty methods from long to int
-    (affects SetValueFromString and SetValueFromInt).
-
-  - In future, it is preferable to use WX_PG_DECLARE_XXX_METHODS()
-    macros to declare overridden methods in property class declaration.
-    This causes compile time failure if method specifications
-    change, potentially saving debugging time.
-      WX_PG_DECLARE_BASIC_TYPE_METHODS(): Declares
-        GetValue, DoSetValue, GetValueAsString, SetValueFromString.
-      WX_PG_DECLARE_PARENTAL_TYPE_METHODS(): Declares
-        GetValue, DoSetValue.
-      WX_PG_DECLARE_EVENT_METHODS(): Declares OnEvent.
-      WX_PG_DECLARE_CHOICE_METHODS(): Declares GetChoiceInfo,
-        SetValueFromInt.
-      WX_PG_DECLARE_PARENTAL_METHODS(): Declares ChildChanged,
-        RefreshChildren.
-      WX_PG_DECLARE_CUSTOM_PAINT_METHODS(): Declares GetImageSize,
-        OnCustomPaint.
-
-  - WX_PG_DECLARE_VALUE_TYPE_VOIDP:
-    Use this to declare value types implemented with
-    WX_PG_IMPLEMENT_VALUE_TYPE_VOIDP (see below).
-
-  - WX_PG_IMPLEMENT_VALUE_TYPE_VOIDP: Generates a wxVariantData class
-    as well. This is necessary if you want a wxVariant list (acquired,
-    for example, with GetPropertyValues) to own a copy of an object
-    of the type (instead of holding just the pointer to the value stored
-    in the property). wxVariantData_TYPENAME class is made globally
-    accessible by WX_PG_DECLARE_VALUE_TYPE_VOIDP.
-
-  - Old wxPG_IMPLEMENT_VALUE_TYPE_VOIDP is now
-    WX_PG_IMPLEMENT_VALUE_TYPE_VOIDP_SIMPLE.
-
-  - WX_PG_IMPLEMENT_VALUE_TYPE_VOIDP_CVD: Like, but instead of
-    implementing own wxVariantData class, uses an app-provided one
-    (there is extra argument for that purpose). Also, you need to use
-    regular WX_PG_DECLARE_VALUE_TYPE with this implement macro.
-    NOTE: wxVariantData class must have constructor that accepts
-    a reference to the data type class and creates a copy of it.
-
-  - wxPGProperty::UpdateControl(ctrl) added. It calls, if ctrl
-    is valid, UpdateControl of the editor class. It is used
-    in almost every propertyclass::OnEvent.
-
-  - wxPGPaintData: m_choiceitem is now m_choiceItem.
-
-  - Method generator macros (wxPG_IMPLEMENT_SETVALUE etc.) removed.
-    Using them just made the code less clear.
-
-  - Added specs for variable height image support in a choice editor
-    drop-down.
-    - GetImageSize must return wxPG_FLEXIBLE_SIZE(W,H) where W and H
-      are Width and Height of preferred custom image size (both must
-      be > 1).
-    - When OnCustomPaint receives a call with rect.x < 0, then it
-      is a measure item call that should return pd.m_choiceItem's
-      height in pd.m_drawnHeight.
-
-  - wxPGPaintData got m_drawnWidth member, which should be filled by
-    OnCustomPaint if it infact painted wider or thinner image than
-    it should.
-
-  - wxPGProperty from wxObject inheritance option is no longer
-    supported (allows simpler WX_PG_IMPLEMENT_PROPERTY_CLASS and
-    WX_PG_DECLARE_PROPERTY_CLASS macro).
-
-  - wxLongStringProperty's static functions ExpandEscapeSequences and
-    CreateEscapeSequences moved to wxPropertyGrid.
-
-
-  Other Changes:
-
-  - Supplied bakefile generated makefiles for wxWidgets 2.5.2.
-    Unix install script now asks which version you got and copies
-    the apropriate makefile (in Windows you have to copy the
-    required file manually).
-
-  - wxCCustomComboBox: Now accepts left, right, pgup and pgdn
-    keys (when popup not displayed).
-
-  - wxPG_EX_NO_MODE_BUTTONS allows hiding categoric/alphabetic
-    mode buttons from wxPropertyGridManager's toolbar.
-
-  - If property grid's frame has status bar, then any property
-    specific errors are shown there (instead of using wxLogError).
-
-  - wxFileProperty etc. use proper Editor Class calls instead
-    of assuming anything about the editor control used.
-
-  - Added SetPropertyValue(id/name,wxObject&) to both wxPropertyGrid
-    and wxPropertyGridManager. Previously there only was a version
-    that accepted a wxObject*.
-
-  - GetPropertyClassName now returns constructor function name
-    (i.e. property name) instead of actual class name. Thus, string
-    returned is the same as in previous versions.
-
-  - wxPGEditor::SetControlValue -> UpdateControl
-
-  - Added wxPGEditor::AppendItem for adding items for controls
-    with children.
-
-  - Added wxPGEditor::SetControlStringValue for setting string value
-    specifically.
-
-  - Added wxPGEditor::SetControlIntValue for setting int value
-    (choice index etc.) specifically.
-
-
-  Bugs Fixed:
-
-  - There was crash if top-level (i.e. had root as parent)
-    properties were used (needed to add m_bgColIndex = 0
-    to wxPGProperty::Init).
-
-  - wxPropertyGrid::Collapse and Expand: Attempted visible
-    changes for categories in non-categoric mode.
-
-  - Right click on custom control did not properly produce
-    property right click event.
-
-  - SetPropertyValues: If property/parent with list's name
-    already existed, then list's contents was skipped.
-
-  - GetPropertyValues: Names of list variants was extracted
-    from property's label instead of name.
-
-  - GetPropertyByLabel: Resulted in infinite loop.
-
-  - GetFirstCategory and GetNextCategory did not work in
-    non-categoric mode.
-
-  - Tab, Shift-Tab, and Escape based property traversal
-    worked even when wxTAB_TRAVERSAL was not specified.
-
-  - Changed properties with children did not get properly
-    repainted in all cases.
-
-  - If SetPropertyValues was called with selected being
-    a sub-property, then that selected property's editor
-    control was not properly refreshed (now editor of
-    selected is always refreshed in SetPropertyValues).
-
-  - wxPropertyGridManager: Did not correctly get various flags
-    (namely wxPG_HIDE_CATEGORIES). Changes in OnToolBarClick and
-    SetWindowStyleFlag.
-
-  - wxPropertyGridManager: Proper Refresh method was missing.
-
-  - wxFontDataProperty: Did not check if editor control was NULL.
-
-  - Choice editor didn't accept zero length string arrays.
-
-  - Various bugs that may have existed in older releases.
-
-
-
-Version 0.9.9.2 ( Jan-14-2005 )
-
-  Changes:
-
-  - wxGTK wxCCustomButton: gtk_paint_box and gtk_paint_arrow are now
-    employed to draw real GTK buttons.
-
-  - wxMSW wxCCustomButton: wxUxTheme is now used to draw real XP buttons.
-
-  - wxCCustomComboBox: Popup now uses wxPopupWindow where available. With
-    wxGTK this is currently disabled because it doesn't have proper border
-    support for this type of window (as it would seem).
-
-  - wxCCustomComboBox: When popup is open, background of text in the actual
-    control is reverted to the standard colour (similar to Windows read-only
-    combo).
-
-  - wxCCustomTextCtrl: Double-clicking selects the word under cursor. This is
-    done slightly differently under Windows and GTK, according to their native
-    textctrl behaviour.
-
-  - Added following methods, previously only available in wxPropertyGrid,
-    to wxPropertyGridManager as well: GetPropertyByLabel.
-
-  - Small section removed from wxFontDataProperty example (OnEvent's first
-    conditional block; it is unnecessary and currently produces compilation
-    error).
-
-
-  Bugs Fixed:
-
-  - Following properties crashed when running their dialogs when using
-    limited editing option: wxLongStringProperty, wxDirProperty, wxFontProperty,
-    wxFileProperty, wxImageFileProperty.
-
-  - Native controls: When editor class did not create a control (in case of
-    limited editing, for example), there would always be a crash.
-
-  - Since native wxTextCtrl::SetValue generates change event, setting value to
-    unspecified cleared property's value and sent property change event.
-
-  - wxGTK wxCCustomButton: Moving mouse cursor from combo button to combo popup
-    didn't remove hilighted status of that button.
-
-  - wxFileProperty: Default file was unintentionally set to "*.XXX"
-    (Chris Garrett).
-
-  - wxFontDataProperty: When changing colour directly in the textctrl editor,
-    colour value was not assigned correctly (resulted in assertion failure).
-
-  - Graphics glitch involving a property with a button in limited editing mode.
-
-
-
-Version 0.9.9.1 ( Jan-11-2005 )
-
-  Changes:
-
-  - Checkbox: wxDC::DrawCheckMark is now used to render much better check mark
-    graphics.
-
-  - Checkbox: An extra surrounding rectangle is drawn with wxDOT style to
-    indicate when it is focused (this looks like a short dash on wxMSW - if
-    anyone knows why, please tell me).
-
-  - Checkbox: When property value is modified (and wxPG_BOLD_MODIFIED style is
-    used), control's rectangle surrounding the check mark is drawn with 2-pixel
-    wide line.
-
-
-  Bugs Fixed:
-
-  - wxEVT_KEY_XXX were not properly skipped, causing wxEVT_CHAR not to trigger.
-    This meant it was impossible to write any text in wxCCustomTextCtrl
-    (Vladimir Vainer).
-
-  - In various places in code, calls to Editor->SetControlValue did not check
-    for NULL editor control. This meant horrible amount of crashes in some
-    scenarios (Vladimir Vainer).
-
-  - wxEVT_PG_CHANGED did not usually occur when changing value of an
-    unspecified property for the first time.
-
-
-
-Version 0.9.9 ( Jan-10-2005 )
-
-  New Features:
-
-  - Unspecified values are now supported. This is a virtual system only, so
-    internally the value stays the same. Only the displayed value is different.
-    Use new methods listed below (thanks to Andrew B for suggesting this feature).
-
-  - Property specific background colours are now supported. Use new methods listed
-    below. Also note that SetCategoryColour/GetCategoryColour are removed, but
-    identical results can be obtained by using new methods.
-
-  - CheckBox editor class, as an alternate to Choice used with wxBoolProperty.
-    Use SetPropertyAttribute(id/name,wxPG_BOOL_USE_CHECKBOX,1) to enable it
-    for a single property. Set optional flags argument to wxALSO_CHILDREN
-    for all child bool properties to use it as well.
-
-  - Native control support is back, better than ever! Custom controls are still
-    used by the default, but that should change by setting define
-    wxPG_USE_CUSTOM_CONTROLS=0 in the library project settings.
-
-  NOTE: There are changes to property class system (including implementation of
-    wxFontDataProperty, wxSizeProperty and wxPointProperty examples). See
-    "Internal changes of note" below for details.
-
-  GTK NOTE: If using native controls with wxGTK <= 2.5.3, then please apply the
-    following patch. If not, then controls will have excess border and due to
-    that potentially alignment problems.
-
-    https://sourceforge.net/tracker/index.php?func=detail&aid=1098374&group_id=9863&atid=309863
-
-
-  New Methods:
-
-  - SetPropertyValueUnspecified(id/name): Sets value of property to "unspecified".
-    Children are processed too, so to set everything call with GetRoot() as arg.
-    Internally value is not modified, but for the user it should seem like nothing
-    is set.
-
-  - IsPropertyValueUnspecified(id/name): Returns TRUE if property's value was
-    set to "unspecified".
-
-  - SetPropertyColour(id/name,wxcolour): Sets custom background colour to a property
-    and all of its children. Can be used on categories as well.
-
-  - GetPropertyColour(id/name): Returns background colour of a property.
-
-  - SetPropertyColourToDefault(id/name): Reverts colour of property and its children
-    to the current default cell background colour (set using SetCellBackgroundColour).
-
-  - SetPropertyAttribute(id/name,attrid,value,[flags]): Sets a property class/instance
-    specific attribute, such as wxFloatProperty precision. Flags can be wxALSO_CHILDREN
-    which causes attribute to be set to all children as well.
-
-  - wxPropertyGrid::GetFontHeight(): Returns maximum vertical extent used by
-    the current font.
-
-
-  Name Changes:
-
-  - SetCategoryColour -> SetPropertyColour
-  - SetCategoryColourToDefault -> SetPropertyColourToDefault
-  - GetCategoryColour -> GetPropertyColour
-
-
-  Other Changes:
-
-  - Added following methods, previously only available in wxPropertyGrid,
-    to wxPropertyGridManager as well: EnableCategories, EnsureVisible, GetFirst,
-    GetLastChild, GetPrevSibling, GetPropertyClassName, GetPropertyHelpString,
-    GetPropertyValueType, InitAllTypeHandlers, IsPropertyValueType, Sort.
-
-  - Native controls that had borders even when wxNO_BORDER style was used
-    now use another wxWindow to clip them (thanks to Vadim Zeitlin for suggesting this).
-
-  - Custom choice selection "marker" changed to better mimic the native control
-    (i.e. now blue background when selected, instead of black rectangle drawn
-     with wxDOT pen style).
-
-  - wxCCustomTextCtrl: HitTest performance and accuracy significantly improved.
-
-  - wxGTK: Custom button pressed state colour corrected. Also added more
-    authentic drop-down arrow.
-
-  - wxPropertyGridManager: Changed the built-in icons. Define wxPG_USE_DOTNET_ICONS=1
-    inorder use the original ones.
-
-  - SetBackgroundColour() now mimics SetOwnBackgroundColour's behaviour.
-
-  - Custom Controls: Mousewheel events now properly skipped (except for the popup).
-
-
-  Internal changes of note:
-
-  - Editor class system. Each property class got GetEditorClass method which is
-    automatically generated with DECLARE_PROPERTY_CLASS and IMPLEMENT_PROPERTY_CLASS
-    macros. IMPLEMENT_PROPERTY_CLASS now requires an extra argument which tells
-    the editor class type. Builtin class symbols are TextCtrl, Choice, TextCtrlAndButton,
-    and CheckBox.
-
-  - DoSetValue(value,ctrl) is now DoSetValue(value). Accordingly, setting value
-    to control must now be omitted from implementations of this method.
-
-  - DoSetValueFromString(value,ctrl,flags) is now DoSetValueFromString(value,flags)
-
-  - New wxPGProperty virtual method: GetImageSize. If property has custom image,
-    override this to return size of that.
-    Also, properties no longer have to set wxPG_PROP_CUSTOMIMAGE themselves.
-
-  - New wxPGProperty virtual method: SetAttribute. This is the future preferred
-    way to set specific property class values (for example, wxFloatProperty precision
-    and wxBoolProperty editor class type).
-
-  - New wxPGProperty virtual method: GetChoiceInfo. If property uses Choice editor
-    class (or something similar), and it doesn't inherit from a class that
-    already properly implements it (wxBoolProperty and wxEnumProperty do), it
-    must be overridden. See header and source files for details.
-
-  - New wxPGProperty virtual method: DoSetValueFromInt. Same rule of importance
-    as for GetChoiceInfo.
-
-  - Custom controls: wxCustomXXX renamed to wxCCustomXXX to mark them different
-    from potential wxWindow based "true" custom controls.
-
-
-  Bugs Fixed:
-
-  - Didn't compile in 2.5.2.
-
-  - Right click on image didn't necessarily produce a right click event.
-
-  - Properties derived from wxEnumProperty that used the same value type (long),
-    and didn't set valid index for value 0, caused crash in ClearPropertyValue
-    (wxCursorProperty, for example, suffered from this symptom).
-
-  - Settings window style flags to wxPropertyGridManager unintentionally
-    removed some flags used in the underlying wxPropertyGrid.
-
-  - wxGTK: Native editor controls were not repainted after collapse or expand.
-
-  - Native controls: In one occasion, mouse events detected position of editor
-    control incorrectly. Resulting was that, for example, right-click event
-    did not always occur as expected.
-
-  - Native controls: Right click didn't work on controls (now it works
-    that way in wxMSW).
-
-
-
-Version 0.9.8 ( Dec-30-2004 )
-
-  New Features:
-
-  - EVT_PG_PAGE_CHANGED: Handles wxEVT_PG_PAGE_CHANGED type events which occur
-    when propertygridmanager page has changed. Use wxPropertyGridManager::GetSelectedPage
-    to obtain page that was switched to. This event always has invalid property
-    associated with it.
-
-  Name Changes:
-
-  - IsCategory -> IsPropertyCategory
-  - IsSelected -> IsPropertySelected
-  - IsExpanded -> IsPropertyExpanded
-
-  New Methods:
-
-  - SetPropertyValue(id/name,wxArrayInt): for wxMultiChoiceProperty.
-  - GetPropertyValueAsArrayInt(id/name): for wxMultiChoiceProperty.
-  - IsPropertyModified: new, proper name for IsModified (which may
-    be removed at some point).
-  - wxPropertyGridManager::SetDescBoxHeight: sets the height of the
-    description text box.
-  - wxPropertyGridManager::GetPageName: returns name/label of given page.
-  - IsAnyModified: returns TRUE if any property in grid/manager
-    was modified.
-  - wxPropertyGridManager::IsPageModified(index): returns TRUE
-    if any property on given page was modified.
-  - wxPropertyGridManager::GetSelectedProperty(): shortcut
-    for GetGrid->GetSelection().
-
-  Other Changes:
-
-  - wxCustomTextCtrl: HitTest further improved. Caret moved to the
-    empty space between characters.
-  - Added following methods, previously only available in wxPropertyGrid,
-    to wxPropertyGridManager as well: SetBoolChoices, Collapse, Expand,
-    GetNextSibling, GetPropertyCategory, IsPropertyCategory.
-  - wxPG_CLASSIC_SPACING moved to extra styles (it is now wxPG_EX_CLASSIC_SPACING).
-  - DoGetBestSize() now returns a much smaller area (still, right now I can't get it
-    to work as good as I want).
-  - wxPropertyGridManager's description text box no longer overlaps
-    with its minimum size wxPropertyGrid.
-  - Splitter is no longer automatically resized when only a scrollbar
-    (dis)appearance was detected.
-  - Method PropertyHasCategory removed (use GetPropertyParent and
-    IsPropertyCategory combination instead).
-  - Method PropertyHasSubProperties removed (use GetFirstChild and
-    IsPropertyCategory combination instead).
-  - Method IsSubProperty removed (use GetPropertyParent and
-    IsPropertyCategory combination instead).
-  - Height change treshold which triggers Refresh instead of RedrawAllVisible
-    changed to 100 (it was 10). This reduces flicker but should not reintroduce
-    graphics glitches due to some fixes in few previous releases.
-  - Added tests to sample application.
-
-  Internal changes of note:
-
-  - To fix things, bool value type's TypeName is now "long" to allow
-    assigning longs to it (no cast to bool necessary in SetPropertyValue).
-    Its CustomTypeName is still "bool" to allow auto-creating wxBoolProperty
-    instead of wxIntProperty for it.
-  - Custom controls: wxCustomXXXData classes renamed to wxCustomXXXHandler
-    (wxCustomXXXComponent would have been another appropriate name).
-  - wxCustomComboBox changed so that it allows any types of popups, not
-    just simple lists (90% complete, not documented in any manner yet).
-  - Added wxPG_IMPLEMENT_VALUE_TYPE_WXOBJ_OWNDEFAULT macro that holds
-    default value in itself, instead of returning a reference to a
-    value stored elsewhere.
-
-  Bugs Fixed:
-
-  - SetPropertyValue(id,bool) was missing.
-  - GetPropertyValueAsBool did not work.
-  - Const wxChar*'s get cast to void* instead of wxString ( there is now
-    an additional inline SetPropertyValue wrapper for that particular case).
-  - wxPG_EX_FLAT_TOOLBAR did not work.
-  - wxColourProperty's custom-to-listed translation did not always work.
-  - wxCustomTextCtrl: pressing HOME, END, LEFT or RIGHT when all selected did
-    not necessarily reset the selection.
-  - wxGetNextProperty did not go into child categories.
-  - Default value of wxFontDataProperty (in sample application) did not
-    work, causing ClearPropertyValue to crash (Vladimir Vainer).
-  - wxPGValueType was missing a virtual destructor.
-  - wxLongStringProperty's ExpandEscapeSequences and CreateEscapeSequences
-    did not check for zero-length string (Vladimir Vainer).
-  - Few stupid crashes in the sample.
-
-
-Version 0.9.7 ( Dec-20-2004 )
-
-  New Features:
-
-  - wxMultiChoiceProperty: Property that embeds wxMultiChoiceDialog
-    as transparently as possible. Thus, strings are given as
-    wxArrayString and value as wxArrayInt.
-
-  Other Changes:
-
-  - wxPG_INIT_NOCAT moved to extra styles (it is now wxPG_EX_INIT_NOCAT).
-  - Added simple scrollbar detection code to SizeEvent handler resolve
-    few graphics glitches and fix a hack used with wxGTK.
-  - Description box got proper borders.
-  - wxColourProperty: When custom colour given as value, colour list
-    is examined, and if match is found, then that specific "labeled"
-    colour is selected instead. Note that right now this is not used in
-    wxSystemColourProperty.
-  - wxFileProperty: Searches for best default filter index when value is
-    given the first time.
-  - wxCustomChoice now handles mousewheel events.
-  - wxCustomTextCtrl: now handles events when dragging and mouse
-    cursor is outside the rect (which is correct behaviour).
-  - wxCustomTextCtrl: last visible character is now shown
-    more consistently.
-
-  Bugs Fixed:
-
-  - Description box not correctly refreshed on page change.
-  - wxGTK: Skewed virtual size at startup.
-  - Graphics glitches with Delete (it now does full refresh).
-  - wxArrayStringProperty event handler destroyed dialog prior to calling
-    its GetStrings method.
-  - SetPropertyLabel did not refresh properly when auto sorting enabled.
-
-
-Version 0.9.6 ( Dec-17-2004 )
-
-  New Features:
-
-  - wxPropertyGridManager: Embeds wxPropertyGrid, and optionally toolbar,
-    adjustable description box, and a compactor button. Automatically
-    manages multiple pages of properties, and mirrors many (eventually
-    most) of the wxPropertyGrid's methods. See documentation ( section
-    Using wxPropertyGridManager on main page) for details.
-
-  - Added following custom property examples to the sample application:
-      wxFontDataProperty: Extends wxFontProperty with a colour subproperty.
-          Value type is wxFontData (which is used with wxFontDialog).
-      wxPointProperty: A simple property for wxPoint class.
-          Has two children, "X" and "Y".
-      wxSizeProperty: A simple property for wxSize class.
-          Has two children, "Width" and "Height".
-
-  - wxPG_LIMITED_EDITING window style flag: disables textctrl based editors
-    for properties which can be edited in another way. Equals calling
-    wxPropertyGrid::LimitPropertyEditing for all added properties.
-
-  - EVT_PG_RIGHT_CLICK event: handles wxEVT_PG_RIGHT_CLICK, which
-    occurs when a property is right clicked. For consistency, also occurs
-    when clicking outside property area, but with invalid property id.
-
-  Name Changes:
-
-  - Value type implementor macro names made more consistent:
-    wxPG_IMPLEMENT_WXOBJECT_TYPE -> wxPG_IMPLEMENT_VALUE_TYPE_WXOBJ
-    wxPG_IMPLEMENT_TYPE -> wxPG_IMPLEMENT_VALUE_TYPE
-  - wxPG_NOCATINIT -> wxPG_INIT_NOCAT. Other window style name changes
-    also pending.
-  - IsEnabled() -> IsPropertyEnabled(). IsEnabled conflicted with
-    wxWindow::IsEnabled.
-
-  New Methods:
-
-  - ExpandAll: Expands all items that can be expanded.
-  - GetRowHeight: Returns height of a grid row in pixels.
-  - SetPropertyValue(id/name,void*): Sets property's value, incase value type is void*
-  - GetPropertyValueAsVoidPtr(id/name): Gets value from property, incase value
-    type is void*
-  - SetBoolChoices(truestr,falsestr): Static method that allows changing choice
-    strings for wxBoolProperty.
-  - GetPropertyValueAsSize(id/name): Returns value as wxSize. Does type checking.
-    Fully inline since wxSizeProperty is not in the library.
-  - SetPropertyValue(id/name,wxSize): Sets value from wxSize. Does type checking.
-    Fully inline since wxSizeProperty is not in the library.
-  - GetPropertyValueAsPoint(id/name): Returns value as wxPoint. Does type checking.
-    Fully inline since wxPointProperty is not in the library.
-  - SetPropertyValue(id/name,wxPoint): Sets value from wxPoint. Does type checking.
-    Fully inline since wxPointProperty is not in the library.
-  - GetPropertyIndex: returns property's position under its parent.
-  - wxPropertyGridEvent::EnableProperty: Enables property.
-  - wxPropertyGridEvent::DisableProperty: Disables property.
-  - wxPropertyGridEvent::IsPropertyEnabled: Returns TRUE if property is enabled.
-
-  Other Changes:
-
-  - Categories can now be added in non-categoric mode as well. However, if adding
-    to root, the index, in case of Insert, is ignored and the category is appended
-    instead.
-  - wxColourProperty etc: Custom colour is now indicated with "(R,G,B)" instead
-    of "Custom (R,G,B)" for saving screen real-estate.
-  - wxColourProperty: Colour list should now have same colours as Windows
-    font dialog colour selector. Order is similarly from dark to light.
-  - GetPropertyValues: added two arguments, baseparent and flags. baseparent is the
-    item under which the properties are got (default is root). Flags can be
-    wxKEEP_STRUCTURE if each sub-category is read into a separate wxVariant list.
-  - SetPropertyValues: now handles list variants, creating a new sub-category for each.
-  - void* type is back. Its typename is "void*", as in wxVariant.
-  - Added style wxPG_ALPHABETIC_MODE as a combination of wxPG_NOCATEGORIES and wxPG_AUTOSORT.
-  - GetPropertyValueAsXXX(id) methods are now static.
-  - Currently, Append is commented out and Insert is used instead. Less code to worry about.
-  - Sample's standard items page is now split into two. The new page has example
-    sections.
-
-  Property System Changes (important if you have made custom property classes):
-
-  - wxPGPropertyWithChildren now has virtual RefreshChildren.
-  - wxPG_SetVariantWxObjectValue macro no longer gets a value argument. Now it
-    uses GetValue automatically (increases tolerance for inheriting).
-  - wxPG_SetVariantVoidPtrValue() macro for void* value types.
-  - wxPG_IMPLEMENT_VALUE_TYPE_VOIDP(CLASSNAME,TYPE,DEFVAL) for non-wxObject
-    classes.
-
-  Bugs Fixed:
-
-  - Placing wxPropertyGrid at a high enough y position could cause its
-    visibility cache recalculation to fail.
-  - Default values of derived value types did not work at all (this included
-    default values of custom flags and enum properties that could be generated
-    via macro pairs).
-  - Using wxPG_NOCATINIT style should have resulted into crash or strange behaviour.
-  - wxCustomChoice drop-down placement calculation used logical coordinates
-    instead of physical.
-  - Window style flags were at 0x0001 -> 0x0800 range instead of correct
-    (according to wxToolbar's headers) 0x0010 -> 0x8000 range.
-  - LimitPropertyEditing caused graphics glitches with some properties (atleast
-    wxFontProperty).
-  - wxPGPropertyWithChildren default GetValueAsString added an extra "; "
-    at the end of the list of child values.
-  - wxFontProperty's text in editor was not correctly refreshed after font
-    dialog was closed.
-
-
-Version 0.9.5 ( Dec-08-2004 )
-
-  New Features:
-
-  - The old wxColourProperty is now wxSystemColourProperty. The new wxColourProperty
-    is simpler, equipped with wxColour as value type, and only has some some basic
-    colours in its drop-down selection. Note that wxColourPropertyValue's name is left
-    intact. wxSystemColourProperty's original constructor (with initial value
-    given as two distinct arguments) is removed; instead, now it has (label,name,
-    wxcolourpropertyvalue) and (labe,name,wxcolour) constructors.
-
-  - Four types of user properties can now be quickly created using
-    DECLARE/IMPLEMENT macro pairs. Here's brief descriptions:
-
-        A) StringProperty with button which function is specified.
-
-        B) wxFlagsProperty with custom default value and built-in labels and values.
-
-        C) wxEnumProperty with custom default value and built-in labels and values.
-
-        D) wxColourProperty with custom colour drop-down.
-
-    Documentation main page has now much better "Creating New Properties"
-    section, including instructions how use macros to implement those
-    types of properties mentioned above.
-
-  - Help strings can now be associated with properties using SetPropertyHelpString().
-    Right now they will be shown in status bar (if any) when property is selected.
-
-  Name Changes:
-
-  - wxColourProperty -> wxSystemColourProperty.
-  - GetAllValues -> GetPropertyValues.
-
-  New Methods:
-
-  - SetPropertyValues: sets property values from wxVariant list. List items that
-    do not have corresping properties will be created using new NewProperty method.
-  - SetPropertyHelpString: associates a help string with a property.
-  - GetPropertyHelpString: returns associated help string.
-  - CollapseAll: as the name says, this collapses all collapsible items.
-  - GetPropertyClassName: returns class name of a property. If wxPGProperty is derived
-    from wxObject (or wxVariant) then it uses GetClassInfo()->GetClassName(), otherwise
-    a builtin (more lightweight) alternative.
-  - InitAllTypeHandlers: initializes all built-in types. As a side effect, creates
-    references to most built-in property classes, thus possibly increasing executable size
-    when using static library. Mainly useful with SetPropertyValues.
-  - NewProperty(label,name,variant): creates new property instance, determining class
-    and initial value from third argument (which is a reference to wxVariant).
-
-  Other Changes:
-
-  - Moved wxArrayStringProperty to core properties.
-  - All base property classes are now abstract.
-  - wxCustomComboBox and wxCustomChoice dropdown now have keyboard control.
-  - More consistent visibility cache updating to reduce problems in a
-    few complicated situations.
-  - If option to inherit from wxVariant or wxObject is not used (as is the default),
-    virtual function to return property class name is generated by the IMPLEMENT_XXX
-    macro.
-  - wxLongStringProperty and all classes created with IMPLEMENT_STRING_PROPERTY
-    now convert newlines and tabs into escape sequences when shown/edited in textctrl.
-  - Add removed since there are already too many Append overloads.
-  - wxSystemColourProperty now has two new constructors: One that accepts
-    wxColourPropertyValue reference and other that accepts wxColour.
-  - wxMSW: wxCustomComboBox focus indicator rectangle should now have black colour
-    (but I think the wxDOT style still doesn't show right).
-
-  Property System Changes (important if you have made custom property classes):
-
-  - wxPG_IMPLEMENT_TYPE etc. macro usage changed. They now have new argument, at the third
-    slot, which is the default property class for that type.
-  - New wxPGValueType for bool (before, long type was used for bool as well, but now
-    we need a bit more type accuracy).
-  - DECLARE_PROPERTY_CLASS etc. macros now contain GetValueType() method declaration
-    when necessary.
-  - GenerateChildren method removed. Instead, children are now generated
-    in the constructor.
-
-  Bugs Fixed:
-
-  - WXK_BACKSPACE processing in wxCustomTextCtrl did not take selection into account.
-
-
-Version 0.9.4 ( Nov-29-2004 )
-
-  New Features:
-
-  - Categories can now be inserted under other categories. In non-categoric mode, items
-    of all categories are shown at top level, regardless of their depth in categoric mode.
-  - wxParentProperty - only property which can have a custom selection of sub-properties
-    (of which any can be wxParentProperty themselves). Has textctrl which edits the values
-    similar as with wxFontProperty. When iterating through properties (GetNextProperty etc.),
-    wxParentProperty is ignored, but its children are not.
-  - wxPG_HIDE_MARGIN style hides margin and prevents user from expanding/collapsing anything.
-    Default state of all collapsible items becomes expanded.
-  - wxPG_STATIC_SPLITTER style prevents user from moving the splitter.
-  - wxPG_STATIC_LAYOUT combines wxPG_HIDE_MARGIN and wxPG_STATIC_SPLITTER. Sample can demonstrate
-    use of this combination.
-  - Sample application can now be used to browse some of the used wxWidgets library configuration.
-
-  New Methods:
-
-  - Append(prop) and Insert(parent,index,prop) have overloaded versions that allow adding
-    simple type variables easier. For example Append(name,label,string) automatically adds
-    a wxStringProperty.
-  - AppendIn does exactly the same as append, but first argument is id or name to a parent
-    under which the newly created property is added.
-  - ClearPropertyValue method allows resetting value of a property to the type default.
-  - GetPropertyValueAsXXX methods for value acquisition. GetPropertyValueAsString() returns
-    full text representation of the property value, regardless of the actual value type of
-    that property.
-  - IsPropertyValueType methods allow direct checking whether property's value type matches
-    a given string (as a value type name) or pointer to value type directly.
-  - SetCurrentCategory method allows setting category under which Append adds properties.
-
-  Changes:
-
-  - wxColourProperty now displays correct text all the time (i.e. with custom colour, always
-    Custom(R,G,B) instead of just Custom).
-  - Initial changes to improve conformance to wx coding standards.
-  - GetPropertyValue() returns now wxVariant instead of wxPGVariant.
-  - By the default, expand/collapse buttons are now vertically centered. Use wxPG_CLASSIC_SPACING
-    style to enforce original spacing.
-  - wxPropertyGridEvent methods now have "Property" in their names (for example, GetPropertyValue
-    instead GetValue).
-  - wxPGId now has comparison operators for wxPGId, wxString(as property name) and const wxChar*
-    (also as property name).
-  - Part of the propertygrid.h moves to propgext.h, which should be included by user sources
-    when they define new property classes.
-  - Default name for a property is now it's label instead of wxEmptyString.
-  - wxFloatProperty now uses double and value is pointer to it.
-  - SetPropertyValueAsFloat() method no longer required. Just use SetPropertyValue() instead
-    and cast when you encounter an ambiguity (should now be issue with longs only, not ints).
-  - Main property draw function somewhat optimized.
-  - Small improvement for OnResize Refresh handling.
-  - Sub-properties can now themselves be parents for sub-properties (altough don't expect
-    you can add anything to likes of wxFontProperty or wxFlagsProperty).
-  - Documentation: Stripped a lot of the "Creating New Properties" section. Mostly obsolete
-    stuff that I don't want to keep up-to-date right now.
-  - Documentation: Examples should now reflect the significant API changes.
-
-  Property System Changes (important if you have made custom property classes):
-
-  - Value type system.
-  - OnEvent's event arg is now wxEvent& instead of wxEvent*.
-  - SetValue is now DoSetValue.
-  - DoSetValue methods should now include wxPG_SetVariantValue(value) style line.
-  - DoSetValue methods' value argument is now of type wxPGVariant instead of void*.
-  - GenerateEditorWidgetXXX methods are now GenerateEditorXXX methods.
-  - New GenerateEditorTextCtrlAndButton method.
-  - GenerateEditorChoice now embeds string array re-allocation (SLAlloc etc.) code.
-  - GenerateEditorChoice now uses wx(Custom)ComboBox with wxCB_READONLY to allow
-    displaying custom text instad of value label.
-  - Choice editor generation simplified - see wxEnumProperty etc. for details.
-  - GetValue method is now const.
-  - GenerateChild replaced with GenerateChildren.
-  - GetValueAsString got second bool argument which, when set to TRUE generates
-    complete value (pseudo-storable kind) instead of displayed value.
-  - SetValueFromString bool argument is now long flags style argument that can have
-    wxPG_REPORT_ERROR (function of old bool) and wxPG_FULL_VALUE flags.
-
-  Bugs Fixed:
-
-  - wxPGPropertyWithChildren::SetValueFromString() could not detect zero-length tokens.
-  - Category could not be properly selected by clicking on its text if splitter was at
-    farther left position.
-  - Internal flags distorting bug in SetDefaultPriority method.
-  - A small graphics glitch related to custom controls and properties with an image.
-
-
-Version 0.9.3 ( Nov-21-2004 )
-
-  New Features:
-
-  - wxArrayStringProperty - for editing a list of strings.
-  - wxImageFileProperty - like wxFileProperty, but has thumbnail of the image in front of
-    the filename and autogenerates wildcard from available image handlers (buggy under
-    wxGTK - most image handler extensions only have the first character).
-  - wxCursorProperty - allows selecting one of the common (non-platform specific) cursors.
-    Under Windows shows cursor images in the drop-down list (under GTK this isn't easy
-    since there doesn't seem to be a function to do it nor is there a way to directly access
-    the cursor pixmap).
-  - Compact mode where low-priority properties are hidden. Preferred way is to call
-    SetDefaultPriority(wxPG_LOW) before starting to add low-priority ones and
-    ResetDefaultPriority() when done, altough individual properties can be set with
-    SetPropertyPriority(id,priority). Then Compact( TRUE/FALSE ) calls will trigger whether
-    low-priority properties are hidden or not. Sample now has checkable Compact item in
-    "Try These" menu that will demonstrate this feature.
-  - wxCustomButton now has wxGTK native rendering (other platforms still use wxMSW rendering).
-
-  Changes:
-
-  - wxFlagsProperty items must now be separated by commas (semicolons are *not* ok anymore).
-  - For consistency, GetNext() and GetPrev() are now GetNextProperty() and GetPrevProperty()
-    (original versions are removed and reserved for later reintroduction for iterating over
-    any items).
-  - SetPropertyValueAsFloat() method for setting values to wxFloatProperties.
-  - SetPropertyValue method that accepts a wxString value now uses property's SetValueFromString
-    method (so it can be used with all kinds of properties, not just those with string type).
-  - wxPGPropertyWithChildren (including wxFontProperty which is derived from it) now gets
-    wxTextCtrl editor - it is important that the items are separated by semicolons.
-  - List of visible items is cached to make GetItemAtY calls (and, to a lesser degree, few
-    other things) a lot faster.
-  - New LimitPropertyEditing() method disables wxTextCtrl of the property (if any), if it
-    also has another way to edit the property (usually a button that triggers a dialog).
-  - New GetFirst() method returns first item, whether it is property or category.
-  - New GetFirstVisible() method does the same thing, but not being hidden is a requisite.
-  - New GetItemAtY() method returns property or category at given coordinate.
-  - wxCustomTextCtrl's HitTest is now accurate (and faster due to extent caching).
-  - wxFileProperty remembers filter index across dialog displays.
-  - Change to Append: When adding a category with name identical to a category already in the
-    wxPropertyGrid, then newly created category is deleted, and most recently added category
-    (under which properties are appended) is set to the one with same name. This allows easier
-    adding of items to same categories in multiple passes.
-  - EnableProperty and DisableProperty are now aliases for Enable and Disable (property, not
-    wxWindow versions) respectively.
-  - Tooltips disabled in sample application.
-
-  Internal Changes to Properties:
-
-  - All properties now have SetValueFromString() method which allows wxPGPropertyWithChildren
-    editing feature. This method basicly now gets most code from CopyValueFromControl()
-    methods of wxTextCtrl edited properties.
-  - Instead of returning TRUE with GetValueAsString() method, usage of custom image is now
-    signaled by setting wxPG_PROP_CUSTOMIMAGE flag in the constructor.
-  - Following property methods are now const: GetValueType.
-
-  Bugs Fixed:
-
-  - When category was disabled, its children were not (Vladimir Vainer).
-  - wxCustomChoice's button was not released correctly in all cases.
-
-
-Version 0.9.2 ( Nov-10-2004 )
-
-  New Features:
-
-  - Tooltips show labels and values that do not fit completely to a cell (use new wxPG_TOOLTIPS style).
-  - wxFloatProperty - like wxIntProperty but value is a Floating Point number.
-  - wxFlagsProperty has textctrl based editor in addition to the child properties.
-  - wxCustomTextCtrl supports Cut, Copy and Paste.
-  - wxEVT_PG_HIGHLIGHTED event that occurs when mouse hovers over another property.
-  - Added documentation: 'Using wxPropertyGrid' (or how wxPropertyGrid should behave) section.
-
-  Changes:
-
-  - Scrollbar unit height now equals item height.
-  - Splitter dragging is now relative (looks a bit nicer).
-  - All controls should now get modified status only after their value truly gets modified
-    (earlier it was acceptable that they sometimes got modified status accidentally).
-  - OnResize() now uses plain Refresh() instead of RedrawAll() when height changes a lot (by more than
-    10). This should fix 95% of the OnResize() based graphics distortion issues, but causes some
-    visible flickering.
-
-  Internal Changes to Properties:
-
-  - wxPGProperty has new method CopyValueFromControl, which allows other changes listed below.
-  - wxPGProperty's base behaviour for CreateEditor method is now to create a textctrl
-    (earlier it didn't do anything). This allows removing of many identical methods from derived
-    property classes.
-  - wxPGProperty's base behaviour for OnEvent method is now to handle events typical to both
-    textctrls and choices (earlier it didn't do anything).  This allows removing of many
-    identical methods from derived property classes.
-  - Following property methods are now const: GetValueAsString.
-
-  Bugs Fixed:
-
-  - wxCustomTextCtrl's caret behaved wildly.
-  - wxCustomChoice popup was not adjusted to fit the window when there was too little space.
-  - DrawItemAndChildren method overdrew the double buffer.
-  - wxCustomButton did not recognize a double click as a click.
-  - wxCustomTextCtrl crashed when its right edge was clicked.
-
-
-Version 0.9.1 ( Nov-06-2004 )
-
-  New Features:
-
-  - Custom editor controls for more consistent look and behaviour
-    (sort-of experimental; there is a lot of room for improvement here).
-  - Keyboard Support: Arrows navigate while editor control unfocused,
-    Tab/Shift-Tab when focused.
-  - Custom wxChoice: double clicking cycles the item.
-  - Double-clicking splitter centers it (and re-enables automatic centering).
-  - wxFileProperty now has wxTextCtrl.
-  - wxFileProperty constructor has a new argument (placed before value)
-    that, when set to TRUE, allows full path to be shown/edited (instead
-    of only full filename as before).
-  - EnsureVisible method (like wxTreeCtrl's).
-  - Add method is now an alias for Append.
-
-  Changes:
-
-  - Advprops.cpp integrated into the library.
-  - Simplified file structure of the sample application.
-  - Improved the 'grey colour scheme' option in sample application.
-  - POSIX setup script can now compile library and sample for you as well.
-
-  Internal Changes to Properties:
-
-  - OnCustomPaint now only paints a small image, not the entire cell.
-
-  Bugs Fixed:
-
-  - wxMSW: When category was collapsed with scrollbar visible and in
-    scrolled position, there was graphics distortion.
-  - SetSplitterPos() did not adjust editor control properly.
-  - Selecting same item in wxEnumProperty and derivates marked it
-    as modified.
-  - Pressing enter in wxDirProperty and wxLongStringProperty marked
-    it as modified.
-  - Path for wxFileProperty was not translated correctly from the
-    wxFileDialog.
+  See CHANGES-propgrid.txt of versions earlier than 1.1.0.
Index: src/sdk/propgrid/readme-propgrid.txt
===================================================================
--- src/sdk/propgrid/readme-propgrid.txt	(revision 4307)
+++ src/sdk/propgrid/readme-propgrid.txt	(working copy)
@@ -4,15 +4,15 @@
     wxPropertyGrid
 
       By Jaakko Salli (jmsalli79@hotmail.com)
-                      (jaakko.salli@pp.inet.fi)
+                      (jaakko.salli@users.sourceforge.net)
 
   ************************************************
 
-    Version:   1.0.6.1
-    Requires:  wxWidgets 2.5.2 or later
-    Platforms: Windows - OK; Linux GTK 2.0 - OK; Linux GTK 1.2 - 95% OK;
-               Mac OS X - Reported to build and run without huge problems;
-               other platforms remain untested.
+    Version:   1.2.8
+    Requires:  wxWidgets 2.6.0 or later
+               ( 1.0.x branch is also compatible with wxWidgets 2.5.2 - 2.6.2 )
+    Platforms: Windows - OK; Linux GTK 2.0 - OK;
+               Linux GTK 1.2, Mac OS X, Windows CE - builds and runs. Other platforms remain untested.
     License:   wxWidgets license
 
     Home Pages:     http://wxpropgrid.sourceforge.net/
@@ -32,44 +32,77 @@
   HOW TO INSTALL AND BUILD
   ------------------------
 
+  NOTE: For wxPython instructions and notes, see README-propgrid-wxPython.txt.
+
   WINDOWS
 
-  Run the installer :) wxPropertyGrid will be installed as a contrib.
+  Run the installer. wxPropertyGrid will be installed as a contrib.
 
   Installer uses the NSIS-system (by Nullsoft) and it is able to auto-detect wxWidgets
   dir from WXWIN and WXDIR environment variables, plus from dir stored to registry by
-  wxWidgets 2.5.4 installer. wxWidgets version is auto-detected from /include/wx/version.h
+  wxWidgets installer. wxWidgets version is auto-detected from include/wx/version.h
   and only the relevant makefiles are copied.
 
   Altough I have tried to test the installer well enough, there may still be problems
   at this point. If you find any, then please report them.
 
 
-  POSIX SYSTEMS (Linux, OS X, mingw+msys etc.)
+  !!! COMPILER SPECIFIC NOTES !!!
 
-  Extract the archive to a temporary directory and run install-propgrid.sh.
+  MINGW. Using configure to build is recommened over using makefile.gcc directly
+    (see wxWidgets install.txt file for details).
 
+  VISUAL STUDIO 2005 (VC8). Various problems have been reported with this IDE.
+     Here are potential solutions to some of them.
+
+     Problem: File XXX.pch is missing.
+     Fix:     Change the "Use precompiled header" option to
+              "Create precompiled header" and build the solution.
+
+     Problem: Where did the lib file go? It's not in wxWidgets\lib.
+     Fix:     Try C:\lib\vc_lib. If it cannot found from there, you can of course
+              search your file system.
+
+
+  POSIX SYSTEMS (Linux, OS X, MingW+MSys, etc.)
+
+  Extract the tar.gz archive to a temporary directory and run install-propgrid.sh.
+  Note that you need to have setup wxWidgets using configure.
+
   For example:
 
   > cd <dir-where-you-downloaded-the-source-archive>
-  > tar zxf wxpropgrid-1.0.6.1-src.tar.gz -C /tmp
-  > cd /tmp
-  > sh install-propgrid.sh
+  > tar zxf wxpropgrid-1.2.8-src.tar.gz -C ~/tmp
+  > cd ~/tmp
+  > bash install-propgrid.sh
+    - OR -
+  > bash install-propgrid.sh WXDIR BUILDSUBDIR
 
   As a result:
 
-  "$WXWIN/contrib/src/propgrid" has library Makefile.in and
-  "$WXWIN/contrib/samples/propgrid" has sample app Makefile.in
+  "$WXDIR/$BUILDSUBDIR/contrib/src/propgrid" has library Makefile
+  "$WXDIR/$BUILDSUBDIR/contrib/samples/propgrid" has sample app Makefile
 
-  NOTE: You may want to add propgrid to CONTRIB_SUBDIRS list in
-  "$WXWIN/contrib/src/Makefile.in" and
-  "$WXWIN/contrib/samples/Makefile.in"
+  NOTE: Install script should be compatible with ash as well as bash, but
+    still I recommend using bash where possible.
 
+  NOTE: If you encounter "lone zero block" error when extracting files
+    with tar, then be aware that it is actually only a warning and doesn't
+    mean that the archive is corrupt.
 
+  NOTE: "make install" may copy propgrid include files to include/wx instead
+    of include/wx/propgrid. Right now you will have to manually copy the
+    files to the correct location.
+
+  NOTE: You may want to manually add propgrid to CONTRIB_SUBDIRS list in
+  "$WXDIR/contrib/src/Makefile.in" and
+  "$WXDIR/contrib/samples/Makefile.in"
+
+
   DOCUMENTATION
   -------------
 
-  See /contrib/docs/html/propgrid/index.htm
+  See contrib/docs/html/propgrid/index.htm
 
   for documentation generated with doxygen. There should also be a shortcut
   index-propgrid.html at $WXDIR/contrib.
Index: src/sdk/propgrid/src/propgrid/advprops.cpp
===================================================================
--- src/sdk/propgrid/src/propgrid/advprops.cpp	(revision 4307)
+++ src/sdk/propgrid/src/propgrid/advprops.cpp	(working copy)
@@ -240,7 +240,8 @@
     if ( evtType == wxEVT_SCROLL_LINEUP || evtType == wxEVT_SCROLL_LINEDOWN )
     {
         wxString s;
-        wxTextCtrl* tc = (wxTextCtrl*) wnd;
+        // Can't use wnd since it might be clipper window
+        wxTextCtrl* tc = wxDynamicCast(propgrid->GetEditorControl(), wxTextCtrl);
 
         if ( tc )
             s = tc->GetValue();
@@ -327,7 +328,7 @@
     wxPG_DECLARE_CREATECONTROLS
 
     virtual void UpdateControl( wxPGProperty* property, wxWindow* wnd ) const;
-    virtual bool wxPGDatePickerCtrlEditor::OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
+    virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
         wxWindow* wnd, wxEvent& event ) const;
     virtual bool CopyValueFromControl( wxPGProperty* property, wxWindow* wnd ) const;
     virtual void SetValueToUnspecified( wxWindow* wnd ) const;
Index: src/sdk/propgrid/src/propgrid/manager.cpp
===================================================================
--- src/sdk/propgrid/src/propgrid/manager.cpp	(revision 4307)
+++ src/sdk/propgrid/src/propgrid/manager.cpp	(working copy)
@@ -462,6 +462,11 @@
     if ( baseId < 0 )
         baseId = wxPG_MAN_ALTERNATE_BASE_ID;
 
+#ifdef __WXMAC__
+   // Smaller controls on Mac
+   SetWindowVariant(wxWINDOW_VARIANT_SMALL);
+#endif
+
     // Create propertygrid.
     m_pPropGrid->Create(this,baseId,wxPoint(0,0),csz,
                         (m_windowStyle&wxPG_MAN_PASS_FLAGS_MASK)
@@ -1039,11 +1044,9 @@
 
 // -----------------------------------------------------------------------
 
-void wxPropertyGridManager::RepaintSplitter( int new_splittery, int new_width, int new_height,
-                                             bool desc_too )
+void wxPropertyGridManager::RepaintSplitter( wxDC& dc, int new_splittery, int new_width,
+                                             int new_height, bool desc_too )
 {
-    wxClientDC dc(this);
-
     int use_hei = new_height;
     if ( m_pButCompactor )
         use_hei = m_pButCompactor->GetPosition().y;
@@ -1114,7 +1117,8 @@
         }
     }
 
-    RepaintSplitter ( new_splittery, new_width, new_height, true );
+    wxClientDC dc(this);
+    RepaintSplitter( dc, new_splittery, new_width, new_height, true );
 
     m_splitterY = new_splittery;
 
@@ -1142,7 +1146,7 @@
         #if defined(__WXMSW__)
             tbHeight = 24;
         #elif defined(__WXGTK__)
-            tbHeight = 22;
+            tbHeight = -1; // 22;
         #elif defined(__WXMAC__)
             tbHeight = 22;
         #else
@@ -1240,7 +1244,7 @@
     int r_bottom = r.y + r.height;
     int splitter_bottom = m_splitterY + m_splitterHeight;
     if ( r.y < splitter_bottom && r_bottom >= m_splitterY )
-        RepaintSplitter ( m_splitterY, m_width, m_height, false );
+        RepaintSplitter( dc, m_splitterY, m_width, m_height, false );
 }
 
 // -----------------------------------------------------------------------
Index: src/sdk/propgrid/src/propgrid/odcombo.cpp
===================================================================
--- src/sdk/propgrid/src/propgrid/odcombo.cpp	(revision 4307)
+++ src/sdk/propgrid/src/propgrid/odcombo.cpp	(working copy)
@@ -30,6 +30,7 @@
 #if wxUSE_COMBOBOX
 
 #ifndef WX_PRECOMP
+    #include "wx/app.h"
     #include "wx/log.h"
 
     #include "wx/button.h"
@@ -2198,7 +2199,7 @@
     }
 
     // This must be after creation
-    if ( m_valueString )
+    if ( m_valueString.length() )
         iface->SetStringValue(m_valueString);
 
 }
@@ -3091,7 +3092,13 @@
 
     if ( theme )
     {
+#if wxCHECK_VERSION(2, 8, 0)
         const bool isVista = (::wxGetWinVersion() >= wxWinVersion_6);
+#else
+        int Major = 0;
+        int family = wxGetOsVersion(&Major, NULL);
+        const bool isVista = ((family == wxWINDOWS_NT) && (Major >= 6));
+#endif
 
         if ( isVista )
             m_iFlags |= wxPGCC_BUTTON_STAYS_DOWN;
@@ -3354,7 +3361,13 @@
 
     if ( hTheme )
     {
-        const bool useVistaComboBox = ::wxGetWinVersion() >= wxWinVersion_6;
+#if wxCHECK_VERSION(2, 8, 0)
+        const bool useVistaComboBox = (::wxGetWinVersion() >= wxWinVersion_6);
+#else
+        int Major = 0;
+        int family = wxGetOsVersion(&Major, NULL);
+        const bool useVistaComboBox = ((family == wxWINDOWS_NT) && (Major >= 6));
+#endif
 
         RECT rFull;
         wxCopyRectToRECT(borderRect, rFull);
Index: src/sdk/propgrid/src/propgrid/propgrid.cpp
===================================================================
--- src/sdk/propgrid/src/propgrid/propgrid.cpp	(revision 4307)
+++ src/sdk/propgrid/src/propgrid/propgrid.cpp	(working copy)
@@ -307,8 +307,12 @@
 // Use this macro to generate standard custom image height from
 #define wxPG_STD_CUST_IMAGE_HEIGHT(LINEHEIGHT)  (LINEHEIGHT-3)
 
-// How many pixels between textctrl and button (not used by custom controls)
-#define wxPG_TEXTCTRL_AND_BUTTON_SPACING        2
+// How many pixels between textctrl and button
+#ifdef __WXMAC__
+    #define wxPG_TEXTCTRL_AND_BUTTON_SPACING        8
+#else
+    #define wxPG_TEXTCTRL_AND_BUTTON_SPACING        2
+#endif
 
 #define wxPG_HIDER_BUTTON_HEIGHT        25
 
@@ -337,7 +341,7 @@
 enum
 {
     PT_CUSTOMPROPERTY           = -2,
-    PT_SUBPROPERTY              = -1,
+    PT_FIXEDCHILDREN              = -1,
     PT_NONE                     = 0,
     PT_CAPTION                  = 1,
     PT_ROOT                     = 2
@@ -479,158 +483,9 @@
 
 //
 // For Next Release:
-// * Third "unspecified" state to bool properties.
+// * Fix NULL(?) focus after odcombo closed.
 //
-// Maybe later:
-// * Fix MSW spinctrl indentation (using old tc indent fix)?
-// * IntProperty min/max (automatic use: validator, spinctrl).
-// * Python: Proper refcounting hack (regarding double incref)?
-// * Python: Crash if not imported in global scope?
-// * GetPropertyValue() to return Null wxVariant if the property value is
-//   unspecified (uncomment code in GetValueAsVariant).
-// * Key interceptor docs (remember GetGrid!).
-// * Traditional wxValidator mode?.
-// * wxPG_EX_ALTERNATE_KEYS?
-// * Make various wxPropertyGridState methods virtual (SetPropertyValues).
-// * Add pImpl.
-// * GetPropertyAttribute
-// * Fix Python SetValues Freeze-Thaw (regarding autofill=True).
-// * Double-buffering to checkbox.
-// * Increase consistency of OnResize (need better testing code/procedure).
-//   One potential solution is to use, as someone suggested, a large panel on
-//   wxScrolledWindow.
-// * If wxParentProperty is loaded from a text source, its value should
-//   be set *after* all children are inserted.
-// * Enable font images?
-// * After 1.0.x compatibility removed, drop itemcount argument support.
-//
-// 1.3 Branch:
-// * Maybe have wxPG_EX_PROCESS_EVENTS_IMMEDIATELY behaviour as default (and non-
-//   optional).
-// * Move to different directory style to enable CVS usage.
-// * Integrate the flexible MVC grid backend.
-// * wxPGId == wxPGProperty*
-// * wxSize, wxDateTime, wxPoint returned as values instead of const Foo&
-//   (so that empty values can be returned on invalid property).
-// * Get rid of wxPG_COMPATIBILITY_1_0_0s.
-// * Classnames = property names
-//   Construction requires new then probably. The only way around
-//   this would be a way too messy copying system.
-// * IsPropertyXXX to const?
-// * If child changed, send changed events for all related parents *as well*.
-// * wxPGNameStr -> const wxString& (but retain typedef).
-// * wxPGId -> wxPGProperty* (but retain typedef).
-// * Change wxPG_SUBID1 etc to 1,2,3...
-// * Have wxPG_EX_GREY_LABEL_WHEN_DISABLED as default.
-// * wxVariant values.
-//   * Would not eliminate need for DoSetValue and GetValue in
-//     all cases (but would in most).
-//   * Value type would do ValueToString and ValueToInt conversion.
-//     Property ptr would be given as arg, so that int value type
-//     could convert itself into a choice string at value's index.
-// * Images in front of labels.
-// * SetPropertyBackgroundColour instead of SetPropertyColour.
-// * Replace SetAttribute with DoSetAttribute, and add SetAttribute as
-//   user-usable method (currently there is only SetAttrib).
-// * Get rid of priority system/compactor button (with compatibility defines,
-//   however).
-// * Real property attribute system.
-// * String attribute names (old defines can be set to strings, so the
-//   compatibility is kept).
-// * Deprecate IsModified (in favour of IsPropertyModified).
-// * Deprecate Disable.
-// * HitTest.
-// * SetPropertyTextColour.
-// * Abstract wxPGEditorDialog scheme (longstringproperty and arraystringproperty
-//   to support it, at the least). Probably needs an adapter class
-//   (for validator support and such).
-// * Replace FROM_STATE macros (but remember, it is redefined just prior to
-//   state methods!!!).
-// * wxPG_INVALID_VALUE to equal INT_MIN. Or not? Does it matter?
-//
-// High Priority but Difficult to implement or justify:
-// * TAB should visit trigger buttons as well (but requires that wxButton or
-//   its usage is properly fixed to support key event tracking.
-// * Put kbd focus rectangle to check box, but only when focus really comes
-//   from kbd.
-// * Child priority system more consistent (ie. wxPGPWC vs wxPP vs wxCP)
-// * Consider: move (some of the) example properties to headers.
-// * Finalize: Font property images (drop down could use them as well, and even
-//   in more useful manner).
-// * wxMSW: Scrollbar freeze after mode switch (did resizing before that).
-//
-// For Some of the Next Releases:
-// * Consider: Semi-unfocus on when clicking (l+r) on empty space.
-// * Consider: Match system font size in grid.
-//   Problem: There is no preferred font point size detection.
-// * Multiple delimiters for string tokenizers (e.g. ';' in addition to ',').
-// * Temporary object file etc folder and file removal on install and uninstall.
-// * Consider: Further additions to wxPropertyContainerMethods
-//   (virtual Insert, Delete and DrawItemAndChildren, and then methods
-//   that need them). This could reduce size of wxPropertyGridManager
-//   code.
-// * Consider: three-argument wxEnumProperty (choices would be added
-//     with AddPropertyChoice). Already has this, but with docs too.
-// * Error/Warning popups (preferably a balloon tooltip on WinNT-based OS).
-// * Consider adding optional images in front of property label.
-// * Improve string editor dialog (but how?).
-//
-// Bug Fixes:
-// * wxGTK, no cc: Right-click doesn't occur if right-clicked on control.
-// * wxGTK, no cc: TAB-based editor browsing ceases sometimes (try 2nd page, until
-//   two disabled boolprops).
-//
-// Medium Priority:
-// * wxPropertyGridManager's missing methods:
-//   GetLastProperty.
-// * Adding items when focused is no-no.
-// * Properly fix DoGetBestSize (both controls). How? It is called but
-//   result is probably somehow interpreted incorrectly.
-//
-// To Consider:
-// * Simple checkbox: Background clear unaligned (see with grey colour scheme).
-//   Problem: It is caused by the MSW checkmark drawing background clear.
-// * Remove hover support to lighten some code (no tooltips, then).
-//   Would basicly eliminate need for visibility cache (get first visible
-//   instead viscache refresh and find items around it).
-// * Custom image horizontal size increment in relation to line height.
-//   Feb-13-2005: Only real help if people use really big ( ptsz>12 ) fonts.
-//   So this is real low priority.
-// * At some occasions, maybe use FindOrCreatePen and FindOrCreateBrush.
-//   Feb-13-2005: More bloat for marginal gains.
-// * Key event forwarding (use ex flag to mark that).
-//   Feb-13-2005: Really needed?
-// * Visual state saving (which items are expanded and which collapsed,
-//   which mode is selected).
-//   Feb-13-2005: More bloat?
-// * Manager: SetCustomModeBitmaps. Call before toolbar is actually created.
-//   Feb-13-2005: More bloat?
-// * More drop-down editors (for wxLongStringProperty etc.) instead of modal dialogs.
-//   Problem: complex, multi-sub-control popups do not work yet (will they ever work?).
-//
-// Low Priority:
-// * wxPropertyGridManager::SetFont.
-// * Basic context menu with Reset() and checkable Show Description that toggle the help box.
-// * wxCustomEnumProperty - Allows user to set the image as well.
-// * GetItemAtY() to use binary search.
-// * Preparations for wxPGProperty direct usage.
-// * Refine dialog-position auto-generator.
-// * Maybe different colour lines between categories (like light grey ones in .NET).
-//   (though I don't think its that elegant).
-// * wxGTK1: Multichoice can't get value correctly.
-// * wxGTK1: Control(s) disapper after:
-//     Splitter centering.
-//     Collapse expand.
-//     - Refresh is not enough?
-//
 
-//
-// Documentation Todo:
-// * Set/GetPropertyValue: Strings work for all value types.
-// * SetPropertyAttribute.
-// * Having graphics glitches? Use Freeze and Thaw - they have extended functionaly in PG.
-//
-
 // -----------------------------------------------------------------------
 
 const wxChar *wxPropertyGridNameStr = wxT("wxPropertyGrid");
@@ -1201,17 +1056,24 @@
 
 const wxPGEditor* wxPGProperty::GetEditorClass() const
 {
+	const wxPGEditor* editor;
+
     if ( !m_dataExt || !m_dataExt->m_customEditor )
     {
 #ifdef __WXPYTHON__
         wxString editorName = GetEditor();
         if ( editorName.length() )
-            return wxPropertyContainerMethods::GetEditorByName(editorName);
+            editor = wxPropertyContainerMethods::GetEditorByName(editorName);
+		else
 #endif
-        return DoGetEditorClass();
+			editor = DoGetEditorClass();
     }
+	else
+	{
+		editor = m_dataExt->m_customEditor;
+	}
 
-    return m_dataExt->m_customEditor;
+    return editor;
 }
 
 
@@ -1782,7 +1644,7 @@
 
 wxPGProperty* wxParentProperty( const wxString& label, const wxString& name )
 {
-    return new wxParentPropertyClass (label,name);
+    return new wxParentPropertyClass(label,name);
 }
 
 
@@ -1842,9 +1704,9 @@
 wxPGRootPropertyClass::wxPGRootPropertyClass()
     : wxPGPropertyWithChildren()
 {
-    m_parentingType = 2; // this was 1 in <= 1.1.6, but changed
-                         // so the depth calculations can become
-                         // more consistent.
+    m_parentingType = PT_ROOT; // this was PT_CAPTION in <= 1.1.6, but changed
+                               // so the depth calculations can become
+                               // more consistent.
     m_depth = 0;
 }
 
@@ -2124,6 +1986,19 @@
 
 #endif // wxPG_ENABLE_CLIPPER_WINDOW
 
+/*wxWindow* wxPropertyGrid::GetActualEditorControl( wxWindow* ctrl )
+{
+#if wxPG_ENABLE_CLIPPER_WINDOW
+    // Pass real control instead of clipper window
+    if ( ctrl->IsKindOf(CLASSINFO(wxPGClipperWindow)) )
+    {
+        return ((wxPGClipperWindow*)ctrl)->GetControl();
+    }
+#else
+    return ctrl;
+#endif
+}*/
+
 // -----------------------------------------------------------------------
 // wxPGTextCtrlEditor
 // -----------------------------------------------------------------------
@@ -2751,6 +2626,9 @@
     else
         cb->SetSelection( -1 );
 
+	if ( property->HasFlag(wxPG_PROP_READONLY) )
+		cb->Disable();
+
 #ifdef __WXMSW__
     cb->Show();
 #endif
@@ -3668,6 +3546,8 @@
     m_doubleBuffer = (wxBitmap*) NULL;
 #endif
 
+    m_windowsToDelete = NULL;
+
 #ifndef wxPG_ICON_WIDTH
 	m_expandbmp = NULL;
 	m_collbmp = NULL;
@@ -3716,6 +3596,11 @@
 {
     wxASSERT( !(m_iFlags & wxPG_FL_INITIALIZED ) );
 
+#ifdef __WXMAC__
+   // Smaller controls on Mac
+   SetWindowVariant(wxWINDOW_VARIANT_SMALL);
+#endif
+
     // Now create state, if one didn't exist already
     // (wxPropertyGridManager might have created it for us).
     if ( !m_pState )
@@ -3806,6 +3691,8 @@
 {
     size_t i;
 
+    DoSelectProperty(NULL);
+
     // This should do prevent things from going too badly wrong
     m_iFlags &= ~(wxPG_FL_INITIALIZED);
 
@@ -3826,6 +3713,8 @@
         delete m_doubleBuffer;
 #endif
 
+    delete m_windowsToDelete;
+
     m_selected = (wxPGProperty*) NULL;
 
     if ( m_iFlags & wxPG_FL_CREATEDSTATE )
@@ -4580,6 +4469,34 @@
 
 // -----------------------------------------------------------------------
 
+wxPGId wxPropertyContainerMethods::ReplaceProperty( wxPGId id, wxPGProperty* property )
+{
+    wxPG_PROP_ID_CALL_PROLOG_RETVAL(wxNullProperty)
+
+    wxPGProperty* replaced = wxPGIdToPtr(id);
+    wxCHECK_MSG( replaced && property,
+                 wxNullProperty,
+                 wxT("NULL property") );
+    wxCHECK_MSG( replaced->GetParentingType() == 0 || replaced->GetParentingType() == -1,
+                 wxNullProperty,
+                 wxT("cannot replace this type of property") );
+    wxCHECK_MSG( !m_pState->IsInNonCatMode(),
+                 wxNullProperty,
+                 wxT("cannot replace properties in alphabetic mode") );
+
+    // Get address to the slot
+    wxPGPropertyWithChildren* parent = replaced->GetParent();
+    int ind = replaced->GetIndexInParent();
+
+    wxPropertyGridState* state = replaced->GetParentState();
+    Delete(replaced); // Must use generic Delete
+    state->DoInsert(parent,ind,property);
+
+    return wxPGIdGen(property);
+}
+
+// -----------------------------------------------------------------------
+
 void wxPropertyGrid::PrepareAfterItemsAdded()
 {
 
@@ -4705,7 +4622,7 @@
     DrawItemAndChildren(p);
 
     wxPGPropertyWithChildren* parent = p->GetParent();
-    while ( parent->GetParentingType() <= PT_SUBPROPERTY )
+    while ( parent->GetParentingType() <= PT_FIXEDCHILDREN )
     {
         DrawItem(parent);
         parent = parent->GetParent();
@@ -4915,10 +4832,18 @@
 {
     int tcFlags = wxTE_PROCESS_ENTER | extraStyle;
 
+	if ( m_selected->HasFlag(wxPG_PROP_READONLY) )
+		tcFlags |= wxTE_READONLY;
+
     wxPoint p(pos.x,pos.y);
     wxSize s(sz.x,sz.y);
 
-    // Take button into acccount
+   // Need to reduce width of text control on Mac
+#if defined(__WXMAC__)
+   s.x -= 8;
+#endif
+
+     // Take button into acccount
     if ( secondary )
     {
         s.x -= (secondary->GetSize().x + wxPG_TEXTCTRL_AND_BUTTON_SPACING);
@@ -4992,6 +4917,22 @@
 
 wxWindow* wxPropertyGrid::GenerateEditorButton( const wxPoint& pos, const wxSize& sz )
 {
+#ifdef __WXMAC__
+   // Decorations are chunky on Mac, and we can't make the button square, so
+   // do things a bit differently on this platform.
+
+   wxPoint p(pos.x+sz.x,
+             pos.y+wxPG_BUTTON_SIZEDEC-wxPG_NAT_BUTTON_BORDER_Y);
+   wxSize s(25, -1);
+
+   wxButton* but = new wxButton();
+   but->Create(this,wxPG_SUBID2,wxT("..."),p,s,wxWANTS_CHARS);
+
+   // Now that we know the size, move to the correct position
+   p.x = pos.x + sz.x - but->GetSize().x - 2;
+   but->Move(p);
+
+#else
     wxSize s(sz.y-(wxPG_BUTTON_SIZEDEC*2)+(wxPG_NAT_BUTTON_BORDER_Y*2),
         sz.y-(wxPG_BUTTON_SIZEDEC*2)+(wxPG_NAT_BUTTON_BORDER_Y*2));
 
@@ -5009,7 +4950,11 @@
     but->Create(this,wxPG_SUBID2,wxT("..."),p,s,wxWANTS_CHARS);
 
     but->SetFont( m_captionFont );
+#endif
 
+	if ( m_selected->HasFlag(wxPG_PROP_READONLY) )
+		but->Disable();
+
     return but;
 }
 
@@ -5112,52 +5057,52 @@
 
 wxString& wxPropertyGrid::ExpandEscapeSequences( wxString& dst_str, wxString& src_str )
 {
-    if ( src_str.length() < 1 )
+    if ( src_str.length() == 0 )
+    {
+        dst_str = src_str;
         return src_str;
+    }
 
-    const wxChar* src = src_str.c_str();
-    wxChar* dst;
-    wxStringBuffer strbuf(dst_str,src_str.length());
-    dst = strbuf;
     bool prev_is_slash = false;
 
-    wxChar a = *src;
-    while ( a )
+    wxString::const_iterator i = src_str.begin();
+
+    dst_str.clear();
+
+    for ( ; i != src_str.end(); i++ )
     {
-        src++;
+        wxUniChar a = wxPGGetIterChar(src_str, i);
 
         if ( a != wxT('\\') )
         {
             if ( !prev_is_slash )
             {
-                *dst = a;
+                dst_str << a;
             }
             else
             {
                 if ( a == wxT('n') )
                 {
             #ifdef __WXMSW__
-                    *dst = 13;
-                    dst++;
-                    *dst = 10;
+                    dst_str << wxT('\n');
+                    //dst_str << wxT('\10');
             #else
-                    *dst = 10;
+                    dst_str << wxT('\n');
+                    //dst_str << 10;
             #endif
                 }
                 else if ( a == wxT('t') )
-                    *dst = 9;
+                    dst_str << wxT('\t');
                 else
-                    *dst = a;
+                    dst_str << a;
             }
-            dst++;
             prev_is_slash = false;
         }
         else
         {
             if ( prev_is_slash )
             {
-                *dst = wxT('\\');
-                dst++;
+                dst_str << wxT('\\');
                 prev_is_slash = false;
             }
             else
@@ -5165,29 +5110,28 @@
                 prev_is_slash = true;
             }
         }
-
-        a = *src;
     }
-    *dst = 0;
     return dst_str;
 }
 
 // -----------------------------------------------------------------------
 
-wxString& wxPropertyGrid::CreateEscapeSequences ( wxString& dst_str, wxString& src_str )
+wxString& wxPropertyGrid::CreateEscapeSequences( wxString& dst_str, wxString& src_str )
 {
-    if ( src_str.length() < 1 )
+    if ( src_str.length() == 0 )
+    {
+        dst_str = src_str;
         return src_str;
+    }
 
-    const wxChar* src = src_str.c_str();
-    wxChar* dst;
-    wxStringBuffer strbuf(dst_str,src_str.length()*2);
-    dst = strbuf;
+    wxString::const_iterator i = src_str.begin();
+    wxChar prev_a = wxT('\0');
 
-    wxChar a = *src;
-    while ( a )
+    dst_str.clear();
+
+    for ( ; i != src_str.end(); i++ )
     {
-        src++;
+        wxChar a = wxPGGetIterChar(src_str, i);
 
         if ( a >= wxT(' ')
         #if !wxUSE_UNICODE
@@ -5196,40 +5140,34 @@
            )
         {
             // This surely is not something that requires an escape sequence.
-            *dst = a;
-            dst++;
+            dst_str << a;
         }
         else
         {
-            *dst = wxT('\\');
-            dst++;
-
             // This might need...
-            if ( a == 13 && *src == 10 )
+            if ( a == wxT('\r')  )
             {
                 // DOS style line end.
-                *dst = wxT('n');
-                src++;
+                // Already taken care below
+                //dst_str = wxT("\\n");
+                //src++;
             }
-            else if ( a == 10 )
+            else if ( a == wxT('\n') )
                 // UNIX style line end.
-                *dst = wxT('n');
-            else if ( a == 9 )
+                dst_str << wxT("\\n");
+            else if ( a == wxT('\t') )
                 // Tab.
-                *dst = wxT('t');
+                dst_str << wxT('\t');
             else
             {
-                wxLogDebug(wxT("WARNING: Could not create escape sequence for character #%i"),(int)a);
-                dst-=2; // Compensate.
+                //wxLogDebug(wxT("WARNING: Could not create escape sequence for character #%i"),(int)a);
+                dst_str << a;
             }
-            dst++;
         }
 
-        a = *src;
+        prev_a = a;
     }
-    *dst = 0;
     return dst_str;
-
 }
 
 // -----------------------------------------------------------------------
@@ -5531,8 +5469,6 @@
 // Call when scroll position changes. Do not pre-fill m_prevVY.
 void wxPropertyGrid::CalculateVisibles( int vy, bool full_recalc )
 {
-    //int prevVY = m_prevVY;
-
     if ( vy < 0 )
     {
         int vx;
@@ -5546,14 +5482,13 @@
     if ( vy >= (int)m_bottomy )
         return;
 
-//    m_iFlags |= wxPG_FL_CHANGED;
+    if ( m_height < 0 )
+        return;
 
     // Hide popup
-    // FIXME: Delete after transient popup support added
+    // FIXME: Delete after transient popup support fully added
     if ( m_wndPrimary && m_wndPrimary->IsKindOf(CLASSINFO(wxPGOwnerDrawnComboBox)) )
-    {
         ((wxPGOwnerDrawnComboBox*)m_wndPrimary)->HidePopup();
-    }
 
     int vy2 = vy + m_height;
 
@@ -6206,6 +6141,9 @@
 
         wxPGPropertyWithChildren* parent = p->GetParent();
 
+        // Should not happen (but this is better than a crash)...
+        wxCHECK_RET( parent, wxT("NULL parent") );
+
         // Does this wireframe end?
         // Conditions:
         // A) This is last item within its parent, and parent is category.
@@ -6973,12 +6911,12 @@
 
 void wxPropertyGrid::DrawItems( const wxPGProperty* p1, const wxPGProperty* p2 )
 {
+    if ( m_frozen )
+        return;
+
     if ( FROM_STATE(m_itemsAdded) )
         PrepareAfterItemsAdded();
 
-    if ( m_frozen )
-        return;
-
     wxRect r = GetPropertyRect(p1, p2);
     if ( r.width > 0 )
         RefreshRect(r);
@@ -7676,7 +7614,7 @@
         wxPGProperty* changedProperty;
 
         // Call wx event handler for property (or its topmost parent, but only
-        // when dealign with legitemate sub-properties - see above).
+        // when dealing with legitemate sub-properties - see above).
         if ( curChild->GetParentingType() != PT_CUSTOMPROPERTY )
             changedProperty = curChild;
         else
@@ -8136,16 +8074,40 @@
 
 void wxPropertyGrid::FreeEditors()
 {
-    if ( m_wndSecondary )
+    if ( m_processingEvent )
     {
-        m_wndSecondary->Destroy();
-        m_wndSecondary = (wxWindow*) NULL;
+        // Do not free editors immediately if processing events
+        if ( !m_windowsToDelete )
+            m_windowsToDelete = new wxArrayPtrVoid;
+
+        if ( m_wndSecondary )
+        {
+            m_windowsToDelete->push_back(m_wndSecondary);
+            m_wndSecondary->Hide();
+            m_wndSecondary = (wxWindow*) NULL;
+        }
+
+        if ( m_wndPrimary )
+        {
+            m_windowsToDelete->push_back(m_wndPrimary);
+            m_wndPrimary->Hide();
+            m_wndPrimary = (wxWindow*) NULL;
+        }
     }
+    else
+    {
 
-    if ( m_wndPrimary )
-    {
-        m_wndPrimary->Destroy();
-        m_wndPrimary = (wxWindow*) NULL;
+        if ( m_wndSecondary )
+        {
+            m_wndSecondary->Destroy();
+            m_wndSecondary = (wxWindow*) NULL;
+        }
+
+        if ( m_wndPrimary )
+        {
+            m_wndPrimary->Destroy();
+            m_wndPrimary = (wxWindow*) NULL;
+        }
     }
 }
 
@@ -8161,6 +8123,18 @@
         wxLogDebug(wxT("SelectProperty( NULL, -1 )"));
 #endif
 
+    //
+    // Delete windows pending for deletion
+    if ( m_windowsToDelete && !m_processingEvent && m_windowsToDelete->size() )
+    {
+        unsigned int i;
+
+        for ( i=0; i<m_windowsToDelete->size(); i++ )
+            delete ((wxWindow*)((*m_windowsToDelete)[i]));
+
+        m_windowsToDelete->clear();
+    }
+
     wxPGProperty* prev = m_selected;
 
     //
@@ -10283,7 +10257,9 @@
 #if 1
     if ( event.GetEventType() == wxEVT_SET_FOCUS )
         HandleFocusChange((wxWindow*)event.GetEventObject());
-    else if ( event.GetWindow() )
+    // Line changed to "else" when applying patch #1675902
+    //else if ( event.GetWindow() )
+    else
         HandleFocusChange(event.GetWindow());
 
     event.Skip();
@@ -10514,6 +10490,8 @@
 IMPLEMENT_DYNAMIC_CLASS(wxPGVariantDataPoint, wxVariantData)
 IMPLEMENT_DYNAMIC_CLASS(wxPGVariantDataSize, wxVariantData)
 IMPLEMENT_DYNAMIC_CLASS(wxPGVariantDataArrayInt, wxVariantData)
+IMPLEMENT_DYNAMIC_CLASS(wxPGVariantDataLongLong, wxVariantData)
+IMPLEMENT_DYNAMIC_CLASS(wxPGVariantDataULongLong, wxVariantData)
 #ifdef __WXPYTHON__
     IMPLEMENT_DYNAMIC_CLASS(wxPGVariantDataPyObject, wxVariantData)
 #endif
@@ -10776,10 +10754,8 @@
 // -----------------------------------------------------------------------
 
 wxPGStringTokenizer::wxPGStringTokenizer( const wxString& str, wxChar delimeter )
+    : m_str(&str), m_curPos(str.begin()), m_delimeter(delimeter)
 {
-    m_str = &str;
-    m_curPos = str.c_str();
-    m_delimeter = delimeter;
 }
 
 wxPGStringTokenizer::~wxPGStringTokenizer()
@@ -10788,8 +10764,65 @@
 
 bool wxPGStringTokenizer::HasMoreTokens()
 {
-    wxASSERT_MSG( m_curPos, wxT("Do not call wxPGStringTokenizer methods after HasMoreTokens has returned false."));
+    const wxString& str = *m_str;
 
+    //wxASSERT_MSG( m_curPos != str.end(), wxT("Do not call wxPGStringTokenizer methods after HasMoreTokens has returned false."));
+
+    wxString::const_iterator i = m_curPos;
+
+    wxUniChar delim = m_delimeter;
+    wxUniChar a;
+    wxUniChar prev_a = wxT('\0');
+
+    bool inToken = false;
+
+    while ( i != str.end() )
+    {
+        a = wxPGGetIterChar(str, i);
+
+        if ( !inToken )
+        {
+            if ( a == delim )
+            {
+                inToken = true;
+                m_readyToken.clear();
+            }
+        }
+        else
+        {
+            if ( prev_a != wxT('\\') )
+            {
+                if ( a != delim )
+                {
+                    if ( a != wxT('\\') )
+                        m_readyToken << a;
+                }
+                else
+                {
+                    //wxLogDebug(m_readyToken);
+                    i++;
+                    m_curPos = i;
+                    return true;
+                }
+                prev_a = a;
+            }
+            else
+            {
+                m_readyToken << a;
+                prev_a = wxT('\0');
+            }
+        }
+        i++;
+    }
+
+    m_curPos = str.end();
+
+    if ( inToken )
+        return true;
+
+    return false;
+
+/*
     const wxChar* ptr = m_curPos;
     const wxChar* ptr_end = &m_str->c_str()[m_str->length()];
 
@@ -10814,7 +10847,7 @@
                 if ( m_readyToken.length() < req_len )
                     m_readyToken.resize( req_len, wxT(' ') );
             #else
-                store_ptr_base = m_readyToken.GetWriteBuf ( req_len );
+                store_ptr_base = m_readyToken.GetWriteBuf( req_len );
             #endif
                 store_index = 0;
                 prev_a = 0;
@@ -10843,7 +10876,7 @@
                     m_readyToken.resize(store_index,wxT(' '));
                 #else
                     store_ptr_base[store_index] = 0;
-                    m_readyToken.UngetWriteBuf ( store_index );
+                    m_readyToken.UngetWriteBuf( store_index );
                 #endif
                     m_curPos = ptr+1;
                     return true;
@@ -10866,15 +10899,16 @@
     }
 #if !wxUSE_STL
     if ( store_index != 0xFFFFFFFF )
-        m_readyToken.UngetWriteBuf ( store_index );
+        m_readyToken.UngetWriteBuf( store_index );
 #endif
     m_curPos = (const wxChar*) NULL;
     return false;
+*/
 }
 
 wxString wxPGStringTokenizer::GetNextToken()
 {
-    wxASSERT_MSG( m_curPos, wxT("Do not call wxPGStringTokenizer methods after HasMoreTokens has returned false."));
+    //wxASSERT_MSG( m_curPos != m_str->end(), wxT("Do not call wxPGStringTokenizer methods after HasMoreTokens has returned false."));
     return m_readyToken;
 }
 
@@ -11546,7 +11580,7 @@
 
     // If it's category or parentproperty, then go recursive
     parenting = pwc->GetParentingType();
-    if ( parenting > 0 /*|| parenting == -2*/ )
+    if ( parenting > PT_NONE )
         return GetNextProperty( wxPGIdGen(pwc) );
 
     return wxPGIdGen(pwc);
@@ -11593,7 +11627,7 @@
         int parenting = p2->GetParentingType();
 
         // Do we return it's last child?
-        while ( (parenting > 0 || parenting == -2) && p2->GetCount() )
+        while ( (parenting > 0 || parenting == PT_CUSTOMPROPERTY) && p2->GetCount() )
         {
             p2 = (wxPGPropertyWithChildren*)p2->Last();
             parenting = p2->GetParentingType();
@@ -11607,7 +11641,7 @@
 
     // Skip category and parentproperty.
     int parenting = p2->GetParentingType();
-    if ( parenting > 0 /*|| parenting == -2*/ )
+    if ( parenting > PT_NONE )
         return GetPrevProperty ( wxPGIdGen(p2) );
 
     return wxPGIdGen(p2);
@@ -11808,7 +11842,7 @@
 {
     wxPGProperty *pp1 = *((wxPGProperty**)p1);
     wxPGProperty *pp2 = *((wxPGProperty**)p2);
-    return pp1->GetLabel().Cmp ( pp2->GetLabel().c_str() );
+    return pp1->GetLabel().compare( pp2->GetLabel() );
 }
 
 void wxPropertyGridState::Sort( wxPGProperty* p )
@@ -12332,9 +12366,9 @@
         ITEM_ITERATION_DCAE_ISP_LOOP_BEGIN
 
             // Use a trick to ignore wxParentProperty itself, but not its sub-properties.
-            if ( parenting == -2 )
+            if ( parenting == PT_CUSTOMPROPERTY )
             {
-                parenting = 1;
+                parenting = PT_CAPTION;
             }
             else if ( parenting <= 0 )
             {
@@ -12403,8 +12437,11 @@
                         wxLogDebug(wxT("wxPropertyGridState::SetPropertyValues Warning: Setting value of property \"%s\" from variant"),
                             p->m_name.c_str());
                         wxLogDebug(wxT("    but variant's type name (%s) doesn't match either base type name (%s) nor custom type name (%s)."),
-                            current->GetType().c_str(),vtype->GetTypeName(),
-                            vtype->GetCustomTypeName());
+					#ifndef __WXPYTHON__
+                            current->GetType().c_str(),vtype->GetTypeName(),vtype->GetCustomTypeName());
+					#else
+                            current->GetType().c_str(),vtype->GetTypeName().c_str(),vtype->GetCustomTypeName().c_str());
+					#endif
                     }
             #endif
 
@@ -12679,7 +12716,7 @@
         property->m_depthBgCol = greyDepth;
 
         // Add children to propertywithchildren.
-        if ( parenting < 0 )
+        if ( parenting < PT_NONE )
         {
             wxPGPropertyWithChildren* pwc = (wxPGPropertyWithChildren*)property;
 
@@ -12689,21 +12726,24 @@
             if ( propGrid && propGrid->GetWindowStyleFlag() & wxPG_HIDE_MARGIN )
                 pwc->m_expanded = 1; // ...unless it cannot not be expanded.
 
+            if ( pwc->GetCount() )
+            {
+                pwc->PrepareSubProperties();
+            }
+
             //
             // If children were added prior to append, then this is considered
-            // a "fixed" parent (otherwise the -2 is set, see below, to mark
-            // its customizable).
-            if ( pwc->GetCount() )
+            // a "fixed" parent (otherwise the PT_CUSTOMPROPERTY is set, see below,
+            // to mark it as customizable).
+            /*if ( pwc->GetCount() )
             {
                 pwc->PrepareSubProperties();
             }
             else
             {
-                pwc->m_parentingType = -2;
-            }
-
+                pwc->m_parentingType = PT_CUSTOMPROPERTY;
+            }*/
         }
-
     }
     else
     {
@@ -12725,7 +12765,6 @@
 
         // Calculate text extent for caption item.
         pc->CalculateTextExtent(propGrid,propGrid->GetCaptionFont());
-
     }
 
     return parenting;
@@ -12733,6 +12772,26 @@
 
 // -----------------------------------------------------------------------
 
+void wxPropertyContainerMethods::BeginAddChildren( wxPGId id )
+{
+    wxPGPropertyWithChildren* pwc = (wxPGPropertyWithChildren*) wxPGIdToPtr(id);
+    wxCHECK_RET( pwc, wxT("NULL property") );
+    wxCHECK_RET( pwc->GetParentingType() == PT_FIXEDCHILDREN, wxT("only call on properties with fixed children") );
+    pwc->m_parentingType = PT_CUSTOMPROPERTY;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyContainerMethods::EndAddChildren( wxPGId id )
+{
+    wxPGPropertyWithChildren* pwc = (wxPGPropertyWithChildren*) wxPGIdToPtr(id);
+    wxCHECK_RET( pwc, wxT("NULL property") );
+    wxCHECK_RET( pwc->GetParentingType() == PT_CUSTOMPROPERTY, wxT("only call on properties for which BeginAddChildren was called prior") );
+    pwc->m_parentingType = PT_FIXEDCHILDREN;
+}
+
+// -----------------------------------------------------------------------
+
 wxPGId wxPropertyGridState::Append( wxPGProperty* property )
 {
     wxPropertyCategoryClass* cur_cat = m_currentCategory;
@@ -12751,19 +12810,19 @@
 
     wxPropertyGrid* propGrid = m_pPropGrid;
 
-    wxCHECK_MSG( parent->GetParentingType() != 0,
+    wxCHECK_MSG( parent->GetParentingType() != PT_NONE,
                  wxNullProperty,
-                 wxT("wxPropertyGrid: Invalid parent") );
+                 wxT("this parent cannot accomodate children") );
 
-    wxCHECK_MSG( (parent->GetParentingType() != -1),
+    wxCHECK_MSG( parent->GetParentingType() != PT_FIXEDCHILDREN,
                  wxNullProperty,
-                 wxT("wxPropertyGrid: Do not attempt to insert items under fixed parents.") );
+                 wxT("when adding properties to fixed parents, use BeginAddChildren and EndAddChildren.") );
 
     int parenting = PrepareToAddItem( property, (wxPropertyCategoryClass*)parent );
 
     // This type of invalid parenting value indicates we should exit now, returning
     // id of most recent category.
-    if ( parenting > 1 )
+    if ( parenting > PT_CAPTION )
         return wxPGIdGen(m_currentCategory);
 
     // Note that item must be added into current mode later.
@@ -12818,16 +12877,16 @@
     }
 
     // category stuff
-    if ( parenting > 0 )
+    if ( parenting > PT_NONE )
     {
-    // This is a category caption item.
+        // This is a category caption item.
 
         // Last caption is not the bottom one (this info required by append)
         m_lastCaptionBottomnest = 0;
     }
 
     // Only add name to hashmap if parent is root or category
-    if ( parent->GetParentingType() >= 1 && property->m_name.length() )
+    if ( parent->GetParentingType() >= PT_CAPTION && property->m_name.length() )
         m_dictName[property->m_name] = (void*) property;
 
     m_itemsAdded = 1;
@@ -12893,7 +12952,8 @@
             {
                 wxPGProperty * p = pwc->Item( i );
                 wxASSERT( p != NULL );
-                m_abcArray->m_children.Remove( (void*)p );
+                if ( p->GetParentingType() <= PT_NONE )
+                    m_abcArray->m_children.Remove( (void*)p );
             }
 
             if ( IsInNonCatMode() )
@@ -12904,12 +12964,13 @@
     if ( !IsInNonCatMode() )
     {
         // categorized mode - non-categorized array
-        if ( parenting <= 0 )
+
+        // Remove from non-cat array, but only if parent is in it
+        if ( parenting <= 0 && item->GetParent()->GetParentingType() == PT_CAPTION )
         {
             if ( m_abcArray )
             {
                 m_abcArray->m_children.Remove( item );
-                m_abcArray->FixIndexesOfChildren();
             }
         }
 
@@ -12956,7 +13017,7 @@
 #ifdef __WXPYTHON__
     // For some reason, Py_DECREF always crashes, even though we make
     // matching Py_INCREF call in propgrid_cbacks.cpp. Maybe refcount is decremented
-    // somewhere automatically? Unlikely...
+    // somewhere automatically? Unlikely though...
     //if ( item->m_scriptObject )
     //    Py_DECREF( item->m_scriptObject );
 #endif
Index: src/sdk/propgrid/src/propgrid/props.cpp
===================================================================
--- src/sdk/propgrid/src/propgrid/props.cpp	(revision 4307)
+++ src/sdk/propgrid/src/propgrid/props.cpp	(working copy)
@@ -271,8 +271,8 @@
 
 bool wxUIntPropertyClass::SetValueFromString( const wxString& text, int WXUNUSED(argFlags) )
 {
-    wxString s;
-    long value = 0;
+    //wxString s;
+    long unsigned value = 0;
 
     if ( text.length() == 0 )
     {
@@ -280,16 +280,19 @@
         return true;
     }
 
-    const wxChar *start = text.c_str();
-    if ( text[0] && !wxIsalnum(text[0]) )
+    size_t start = 0;
+    if ( text.length() > 0 && !wxIsalnum(text[0]) )
         start++;
 
-    wxChar *end;
-    value = wxStrtoul(start, &end, (unsigned int)m_realBase);
+    wxString s = text.substr(start, text.length() - start);
+    bool res = s.ToULong(&value, (unsigned int)m_realBase);
 
-    if ( m_value != value )
+    //wxChar *end;
+    //value = wxStrtoul(text.c_str() + ((size_t)start), &end, (unsigned int)m_realBase);
+
+    if ( res && m_value != (long)value )
     {
-        return StdValidationProcedure(value);
+        return StdValidationProcedure((long)value);
     }
     /*}
     else if ( argFlags & wxPG_REPORT_ERROR )
@@ -405,10 +408,28 @@
     {
         // Remove excess zeroes (do not remove this code just yet,
         // since sprintf can't do the same consistently across platforms).
+        wxString::const_iterator i = target.end() - 1;
+        size_t new_len = target.length() - 1;
+
+        for ( ; i != target.begin(); i-- )
+        {
+            if ( wxPGGetIterChar(target, i) != wxT('0') )
+                break;
+            new_len--;
+        }
+
+        wxChar cur_char = wxPGGetIterChar(target, i);
+        if ( cur_char != wxT('.') && cur_char != wxT(',') )
+            new_len++;
+
+        if ( new_len != target.length() )
+            target.resize(new_len);
+
+        /*
         unsigned int cur_pos = target.length() - 1;
         wxChar a;
         a = target.GetChar( cur_pos );
-        while ( a == '0' && cur_pos > 0 )
+        while ( a == wxT('0') && cur_pos > 0 )
         {
             cur_pos--;
             a = target.GetChar( cur_pos );
@@ -420,6 +441,7 @@
 
         if ( cur_pos < target.length() )
             target.Truncate( cur_pos );
+        */
     }
 }
 
@@ -1528,13 +1550,49 @@
     // Find index for extension.
     if ( m_indFilter < 0 && m_fnstr.length() )
     {
+        wxString ext = m_filename.GetExt();
+        int curind = 0;
+        size_t pos = 0;
+        size_t len = m_wildcard.length();
+
+        pos = m_wildcard.find(wxT("|"), pos);
+        while ( pos != wxString::npos && pos < (len-3) )
+        {
+            size_t ext_begin = pos + 3;
+
+            pos = m_wildcard.find(wxT("|"), ext_begin);
+            if ( pos == wxString::npos )
+                pos = len;
+            wxString found_ext = m_wildcard.substr(ext_begin, pos-ext_begin);
+
+            if ( found_ext.length() > 0 )
+            {
+                if ( found_ext[0] == wxT('*') )
+                {
+                    m_indFilter = curind;
+                    break;
+                }
+                if ( ext.CmpNoCase(found_ext) == 0 )
+                {
+                    m_indFilter = curind;
+                    break;
+                }
+            }
+
+            if ( pos != len )
+                pos = m_wildcard.find(wxT("|"), pos+1);
+
+            curind++;
+        }
+
+        /*
         wxChar a = wxT(' ');
         const wxChar* p = m_wildcard.c_str();
         wxString ext = m_filename.GetExt();
         int curind = 0;
         do
         {
-            while ( a && a != '|' ) { a = *p; p++; }
+            while ( a && a != wxT('|') ) { a = *p; p++; }
             if ( !a ) break;
 
             a = *p;
@@ -1571,6 +1629,7 @@
             curind++;
 
         } while ( a );
+        */
     }
 }
 
@@ -2348,12 +2407,12 @@
 
         if ( i < (itemCount-1) )
         {
-            dst.append ( postDelim );
-            dst.append ( wxT(" ") );
-            dst.append ( preas );
+            dst.append( wxString(postDelim) );
+            dst.append( wxT(" ") );
+            dst.append( wxString(preas) );
         }
         else if ( preDelim )
-            dst.append ( postDelim );
+            dst.append( wxString(postDelim) );
     }
 }
 
