Index: src/include/propgrid/include/wx/propgrid/manager.h
===================================================================
--- src/include/propgrid/include/wx/propgrid/manager.h	(revision 3811)
+++ 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/pg_dox_mainpage.h
===================================================================
--- src/include/propgrid/include/wx/propgrid/pg_dox_mainpage.h	(revision 3811)
+++ 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.7 Overview
 
       wxPropertyGrid is a specialized two-column grid for editing properties
     such as strings, numbers, flagsets, fonts, and colours. It allows hierarchial,
@@ -1593,7 +1593,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 +1616,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 3811)
+++ 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 3811)
+++ 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__
@@ -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        1270
 
 
 // -----------------------------------------------------------------------
@@ -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
 
@@ -1176,6 +1191,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 +1203,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 +1229,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 +1308,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 +1416,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)
@@ -3076,6 +3109,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 +3249,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 +3657,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 +4070,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 +4446,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:
@@ -5753,6 +5832,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 +5978,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 )
     {
Index: src/sdk/propgrid/CHANGES-propgrid.txt
===================================================================
--- src/sdk/propgrid/CHANGES-propgrid.txt	(revision 3811)
+++ src/sdk/propgrid/CHANGES-propgrid.txt	(working copy)
@@ -1,1761 +1,970 @@
 
+Version 1.2.7 ( Mar-24-2007 )
 
-Version 1.0.6.1 ( Dec-02-2005 )
+  New:
 
-   Tweaks:
+  - SetPropertyValue and GetPropertyValue methods for wxLongLong and
+    wxULongLong. In addition, added wxLongLongProperty to sampleprops.cpp.
 
-   - 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.
+  - Makefiles for wxWidgets 2.8.3, 2.6.4 and CVS (2.9.0).
 
 
-   Bugs Fixed:
+  Changed:
 
-   - ComboBox control crashed often (for instance, when the dropdown button
-     was pressed many times in a row).
+  - 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.
 
-   - In some cases wxPropertyGrid stole keyboard focus.
 
+  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.
 
-Version 1.0.6 ( Sep-21-2005 )
+  - On GTK, toolbar height was incorrect.
 
-  Minor Features:
+  - Fixed regression which caused spinctrl editor on GTK to crash on arrow
+    click.
 
-  - Initial Mac OS X compatibility has been reported (should build and run -
-    thanks to Jan-Friso Schipper for working it out).
+  - Fixed regression which caused Freeze/Thaw to work incorrectly.
 
-    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.
+  - Makefile.in did not have UNIX line endings.
 
-  - wxWidgets 2.6.2 makefiles.
+  - 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).
 
-  Bugs Fixed:
+  - NULL pointers of focus events were not handled correctly
+    (patch #1675902 by rjmyst3).
 
-  - wxFloatProperty and sample's wxArrayDoubleProperty had problems when
-    locale was set to one using comma as decimal point.
+  - wxFlagsProperty with zero children could not be replaced (#bug 1675077).
 
-  - wxUIntProperty did not render its value unless base or prefix was
-    explicitly set (via SetPropertyAttribute).
+  - String handling code has been modified for wxWidgets CVS (2.9.0) and STL-
+    friendliness.
 
-  - WinXP/Win2K, wxWidgets 2.6.1+: Improved indentation fix.
+  - Compile problem with wxWidgets 2.6.1 on wxMSW (patch #1671422 by
+    Tim Stahlhut).
 
-  - 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).
+  - Compile problem in sample if WXWIN_COMPATIBILITY_2_6 was not used with
+    wxWidgets 2.8 (bug #1647725).
 
 
 
-Version 1.0.5 ( Jun-06-2005 )
+Version 1.2.6 ( Jan-21-2007 )
 
-  Minor Features:
+  New:
 
-  - Added wxPropertyGrid::ReplaceProperty(id/name,newproperty).
+  - SpinCtrl editor re-implemented using wxTextCtrl in combination with
+    wxSpinButton. This should resolve vast majority of SpinCtrl issues.
+    As a bonus, SpinCtrl now also works with wxFloatProperty (or any
+    property which value as string is a number).
 
-  - Added flags argument default value (0) for wxPGProperty's GetValueAsString,
-    SetValueFromString, and SetValueFromInt methods.
+  - Added extra style wxPG_EX_AUTO_UNSPECIFIED_VALUES. When specified,
+    it is possible to set some properties to unspecified values by editing
+    them. Currently, following properties support this:
+      * wxIntProperty, wxUIntProperty, and wxFloatProperty: Clear the
+        text field.
 
-  - wxWidgets 2.6.1 makefiles.
+  - Added extra style wxPG_EX_PROCESS_EVENTS_IMMEDIATELY. When specified,
+    ProcessEvent is used to dispatch wxPropertyGridEvents instead of
+    AddPendingEvent.
 
 
   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").
+  - Crash when deleting a property with modified, uncommitted value.
 
-  - wxGTK: Virtual size was sometimes skewed.
+  - Compilation problems with wxWidgets 2.8.0.
 
-  - 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.
+  - Compilation problem with MingW (bug #1619351).
 
+  - Compilation problem under Mac OS X (bug #1619350).
 
+  - Compilation failed if wxBitmapComboBox was also used (bug #1622884).
 
-Version 1.0.4 ( May-21-2005 )
+  - Compilation problem when not using precompiled headers.
 
-  Changes and Minor Features:
+  - Regression where point size and underlined attribute of wxFontProperty
+    were not interpreted correctly.
 
-  - 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.
+  - Various problems if first page of wxPropertyGridManager was removed
+    and re-created (patch #1626581 by rjmyst3).
 
-  - 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.
+  - Properties using ComboBox editor and custom painting displayed their
+    value string even if it was unspecified.
 
-  - Added wxPropertyGridManager::ClearPage(page) to delete all
-    properties on given page.
+  - Posix install script had comptibility issues with some non-bash
+    compliant shells (bug #1620783).
 
+  - Unable to edit unspecified text properties with clipper window
+    (bug #1635432).
 
-  Bug Fixes:
+  - SetPropertyValue, when called on a child property, did not visibly
+    refresh the parent.
 
-  - If value in textctrl editor was edited, and splitter was subsequently
-    moved, then the corresponding wxPG_EVT_CHANGED was not sent.
+  - In rare circumstances, it was possible to "select" last selected
+    property of another page by double-clicking.
 
-  - 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).
+Version 1.2.5 ( Dec-11-2006 )
 
-  - Giving -1/wxID_ANY as id to wxPropertyGridManager resulted in an
-    assertion failure.
+  New/Changed:
 
-  - Description box or status bar were not cleared consistently when
-    Thaw() and Freeze() were used when deleting items.
+  - wxPython Bindings: Experimental support for creating custom properties
+    and editors. See README-propgrid-wxPython.txt and test_propgrid.py
+    for more information (carefully, since there are caveats).
 
-  - wxPropertyGrid::SetPropertyValueUnspecified(name) had typo in its
-    name (Value was missing).
+  - Added wxPropertyGridManager::GetDescBoxHeight().
 
+  - Makefiles for wxWidgets 2.8.0.
 
+  - Added support for preprocessor define wxPG_USE_WXMODULE. Default is 1,
+    but can be set to 0 inorder not to use wxModule to manage global variables.
+    This may be needed in cases where wxPropertyGrid is linked in a plugin
+    DLL. (patch #1609769 by Tim Stahlhut)
 
-Version 1.0.3 ( May-13-2005 )
+  - wxPython related source files are now in a separate archive.
 
-  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*.
+  Bugs Fixed:
 
-  - 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.
+  - wxGTK, wxMAC: Fixed regression where the control was blank unless extra
+    style wxPG_EX_NATIVE_DOUBLE_BUFFERING was defined.
 
-  - Right-clicking now selects the property underneath.
+  - wxMSW: Indentation in wxTextCtrl editors was not correct in all
+    combinations of font and Windows OS version.
 
-  - ClientData methods were not enabled by the default, and if they
-    were manually enabled, there were compile errors
-    (thanks Bernard Duggan).
+  - Setting value of a wxSystemColourProperty sometimes partially corrupted
+    the value (specifically, wxColourPropertyValue::m_type). This was a
+    regression caused by a buggy bug fix in 1.2.4.
 
-  - wxPropertyGridManager::SetWindowStyleFlag was seriously flawed.
+  - Property's custom text colour was not always applied correctly on the
+    value column.
 
-  - Few ignorable but rare assertion failures removed.
+  - "make install" didn't work. Note that the current fix is only a workaround
+    (bug #1604887).
 
-  - Sample app incorrectly placed multiple controls on plain wxFrame
-    (which is apparently a no-no).
+  - Compile errors with GCC 4.1 and newer.
 
-  - Another Borland C++ fix (hopefully its now fine, thanks Luigi Bianchi).
+  - wxImageFilePropertyClass, wxCursorPropertyClass and
+    wxMultiChoicePropertyClass were missing export declaration.
 
-  - Flag indicating read-only editor was not inherited by fixed sub-properties.
 
 
+Version 1.2.4 ( Nov-12-2006 )
 
-Version 1.0.2 ( May-03-2005 )
+  New:
 
-  Changes:
+  - Added SetPropertyTextColour. It sets text colour of properties and
+    their children. Similar to SetPropertyBackgroundColour, it doesn't
+    affect the caption colours.
 
-  - 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.
+  - Added SetPropertyBackgroundColour as an alias for SetPropertyColour.
 
-  - 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"
+  - Added SetCaptionTextColour. It specifically sets (caption) text
+    colour of a category property.
 
-    As an example of this, I have added a property labeled "3D Object" to the
-    third page in the sample app.
+  - Headers now identify WXMAKINGLIB_PROPGRID, which must be defined if
+    wxPropertyGrid is to be linked statically while wxWidgets itself is
+    linked dynamically (ie. WXUSINGDLL is defined)
+    (patch #1593682 by Tim Stahlhut).
 
+  - Improved combobox LnF under Windows Vista.
 
-  Bugs Fixed:
+  - wxPython build scripts and readme updated to work with the 2.7 branch.
 
-  - 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.
+  - Child properties in deep hierarchy were not properly repainted when value of
+    one of their parents was updated (bug #1578255).
 
-  - If mouse in editor was dragged outside on to the splitter, control's
-    cursor was changed to double arrow.
+  - Unspecified value did not work well with SpinCtrl editor.
 
-  - Editor control's keyboard focus was not detected correctly if it used a
-    clipper window.
+  - DeletePropertyChoice and InsertPropertyChoice did not adjust the selection
+    appropriately. Now, if current selection is deleted, then value is set to
+    unspecified.
 
-  - Borland C++ compile error.
+  - wxPython bindings: Setting string array and int array values didn't work.
 
+  - Setting undefined wxColour value to a wxColourProperty or
+    wxSystemColourProperty could cause assertion failure/crash (bug #1593459).
 
+  - Internal global variables class was not correctly destroyed, potentially
+    causing problems on app exit. Now this should be fixed by using wxModule.
 
-Version 1.0.0 ( Apr-14-2005 )
+  - GetCellDisableTextColour -> GetCellDisabledTextColour.
 
-  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.
+  - Fixed potential infinite focus event recursion scenario with
+    wxEditEnumProperty (applied to wxMAC, at least).
 
-  New Features:
+  - wxPGCheckBoxEditor, wxParentPropertyClass and wxCustomPropertyClass were
+    missing export declaration.
 
-  - wxWidgets 2.6.0 compatibility.
+  - Compile problem with wxWidgets 2.7.2.
 
-  - 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.
 
+Version 1.2.3 ( Oct-15-2006 )
 
-  Changes and Minor Additions:
+  New:
 
-  - wxParentProperty is removed (use wxCustomProperty instead).
+  - Added extra style wxPG_EX_NATIVE_DOUBLE_BUFFERING, which allows wxPropertyGrid
+    to rely on system's native double-buffering, and thus conserve some memory
+    and improve drawing performance.
 
-  - Moved class definitions of following property classes to propdev.h or
-    advprops.h (so they can now be inherited from):
-      wxImageFilePropertyClass, wxCursorPropertyClass,
-      wxMultiChoicePropertyClass.
+  - Added EVT_PG_DOUBLE_CLICK (using event type wxEVT_PG_DOUBLE_CLICK) for
+    intercepting double-clicks on properties.
 
-  - 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.
+  - Spurious property change events when pressing alt or ctrl, or when leaving
+    the control area with mouse. This was especially annoying if a validator
+    was used.
 
-  - Active editor misplacement on Compact.
+  - wxFloatProperty could crash with wxUSE_STL = 1 (bug #1561169, fix by Todd).
 
-  - Garbage between textctrl and button after splitter movement.
+  - wxPropertyGridManager toolbar height was too small under Windows.
 
-  - 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.2.2 ( Sep-09-2006 )
 
+  New:
 
+  - Extra style wxPG_EX_GREY_LABEL_WHEN_DISABLED added. It causes labels
+    to become greyed along with the values when a property becomes disabled.
 
-Version 1.0.0 RC1 ( Mar-30-2005 )
+  - SetCellDisabledTextColour member function added to wxPropertyGrid.
 
-  New Features:
+  - Installer may try to automatically run bakefile if installing
+    for an "unsupported" wxWidgets version.
 
-  - wxWidgets 2.5.5 compatibility.
+  - Windows uninstaller does now much more through job. Namely, temporary
+    files (*.obj etc.) and files specific to older wxPropertyGrid releases
+    are removed where possible.
 
-  - wxPropertyGridPopulator class.
-    Allows populating wxPropertyGrid from an arbitrary text source.
-    For a practical example, see propgridsample.cpp's functions
-      FormMain::OnSaveToFileClick
-      FormMain::OnLoadFromFileClick
+  - Unix uninstaller script added (contrib/uninstall-propgrid.sh).
 
-    NOTES:
-      * wxParentProperty is not supported yet.
-      * As currently there is no GetPropertyAttribute, property
-        attributes cannot be stored.
+  - wxArrayStringProperty now uses its validator to also validate the value
+    in editor dialog (done when ok is pressed). No other properties do this
+    currently, but just let me know if you need such thing.
 
-  - 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.
+  - Added virtual member function wxArrayEditorDialog::GetTextCtrlValidator.
+    Implement it in a derived class to create a wxValidator for the wxTextCtrl
+    in dialog.
 
-    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.
+  - Editor dialog of subclassed wxArrayStringPropertyClass can be changed
+    easier - you only need to implement new virtual member function
+    CreateEditorDialog() to return new instance of your own editor dialog
+    class derived from wxArrayEditorDialog. To facilitiate this there are
+    two new virtual functions in wxArrayEditorDialog - SetDialogValue and
+    GetDialogValue. At the moment they are not used with any other
+    properties.
 
-      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.
+  Bugs Fixed:
 
-  - 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.
+  - Pressing enter in wxEditEnumProperty's editor didn't do anything useful but
+    caused focus to be lost from wxPropertyGrid.
 
+  - All wxKeyEvents, specifically those from editor controls, could not be
+    intercepted. These events are now also sent to wxPropertyGrid itself,
+    meaning they can be intercepted in EVT_KEY_DOWN/UP handlers of derived
+    class or pushed wxEvtHandler.
 
-  Changes and Minor Features:
+  - Pressing NumLock could cause problems under toolkits based on X. This
+    includes, for instance, wxGTK (patch #1554432 by rjmyst3).
 
-  - Margin no longer uses background colour - use new SetMarginColour
-    and GetMarginColour instead.
+  - Compile problem with gcc4.1+ (bug #1540414)
 
-  - 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).
+  - Trying to use wxMultiChoiceProperty with wxPGChoices that had values
+    not matching string indices did not work.
 
-  - wxOwnerDrawnComboBox now extends the popup to always be wide
-    enough to accommodate widest item in list.
+  - wxPropertyGridManager::CreatePropertyGrid() was not virtual.
 
-  - 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).
+Version 1.2.1 ( Aug-12-2006 )
 
-  - Removed option to use .NET icons on toolbar.
+  New:
 
-  - ChoiceAndButton editor's button is now of same height
-    as choice's dropbutton.
+  - Much improved focus detection.
 
-  - 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.
+  - wxDateProperty added to advprops.h/cpp. It uses wxDateTime value type
+    and a new DatePickerCtrl editor (altough TextCtrl editor works as well).
+    There are two new attributes for it: wxPG_DATE_FORMAT (string - used with
+    wxDateTime::Format. Set your locale for nice default value) and
+    wxPG_DATE_PICKER_STYLE (long - the window style used when creating
+    wxDatePickerCtrl).
 
-  - 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.
+    Member functions SetPropertyValue and GetPropertyValueAsDateTime have also
+    been added to wxPropertyGrid and wxPropertyGridManager.
 
-      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).
+  - DatePickerCtrl editor added to advprops.h/cpp. Note that wxDatePickerCtrl
+    resides in wxAdv library, so using anything from advprops may cause
+    dependency for it. Since I don't want that to happen by default, you will
+    need to define wxPG_ALLOW_WXADV somewhere (library project settings or
+    top of propgrid.h, for instance).
 
-      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.
+  - SpinCtrl editor moved from samples to advprops.h/cpp. You need to call
+    static member function wxPropertyGrid::RegisterAdditionalEditors()
+    prior to using it.
 
+  - Numerous wxASSERTs and wxCHECKs have been added to validate property ids
+    and names (among other things).
 
-  Changes to Custom Property Creation:
+  - wxPropertyGridEventHandler macro added for use with wxEvtHandler::Connect.
 
-  - Added m_constants member to wxPGChoiceInfo (which is then
-    filled by GetChoiceInfo if dynamic modification of property's
-    choices is desired).
+  - Added to readme a note about tar "lone zero block" warning message.
 
-  - 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.
+  - On systems where wxPopupWindow was used instead of wxTransientPopupWindow
+    (includes all systems with wxWidgets 2.6.1 or earlier), there was serious
+    dysfunctionality and even crashes in some rare situtations (for instance,
+    clicking wxPropertyGridManager toolbar button when a popup was open).
 
-  - Did not compile without wxWidgets 2.4 compatibility flag
-    (thanks Luigi Bianchi).
+  - wxPython bindings: property help strings did not appear in
+    PropertyGridManager's description box.
 
-  - 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.
+  - wxPython bindings: there should now be a lot more Python exceptions
+    instead of plain crashes when an invalid property name is used.
 
-  - wxPropertyGrid::SetFont crashed if called before control was
-    fully created (thanks Tyler Edwards).
+  - #1521288 (Crash on Tab keypress)
 
-  - wxOwnerDrawnComboBox's popup was not always closed when mouse
-    was clicked over the grid.
+  - When wxPG_EX_HELP_AS_TOOLTIPS extra window style was used, the help
+    strings were still shown in the status bar (in addition to that they
+    were shown as tooltips).
 
+  - POSIX installer script didn't work if path to wxWidgets was relative.
 
+  - EventObject of wxPropertyGridManager's wxPropertyGridEvents pointed to
+    the underlying wxPropertyGrid instead of the main (manager) object.
 
-Version 1.0.0 BETA 4 ( Mar-19-2005 )
+  - Some inconsistencies in how Doxygen generated the documentation have
+    been resolved.
 
-  This is an intermediate bug fix release.
 
-  Bugs Fixed:
 
-  - wxMSW: Excess flicker on Refresh resolved.
+Version 1.2.0 ( Jul-09-2006 )
 
-  - wxGTK: wxOwnerDrawnComboBox popup window border problems solved.
+  Start of a new Stable API branch. In the subsequent 1.2.x releases API will
+  not be changed (albeit minor additions can be made) and internal changes not
+  related to bug fixes will be kept at minimum.
 
-  - wxPropertyGridManager's header didn't compile
-    properly.
+  New/Changed:
 
-  - ClearSelection did not clear page's selection.
+  - Improved appearance when disabled (all text is greyed).
 
-  - Potential freezing due to mouse capture not releasing.
+  - Added keyboard shortcut Alt+Down to push the editor button. You can change
+    it to a custom shortcut with new member function
+    wxPropertyGrid::SetButtonShortcut(keycode,ctrlDown,altDown).
 
-  - In wxArrayDoublePropertyClass, m_precision member was
-    used before it was initialized (Matthew Christie).
+  - wxPropertyGridManager::SelectPage() now supports page index -1 to
+    indicate no selection.
 
+  - Ability to subclass wxPropertyGrid and wxPropertyGridManager has been
+    improved. See docs for details.
 
+  - Section "Creating New Properties" in the documentation has been
+    heavily revised to introduce how to subclass properties as easily
+    as possible (ie. macros not necessary).
 
-Version 1.0.0 BETA 3 ( Mar-10-2005 )
+  - Added wxPG_VERSION macro. It is calculated as MajorVersion*1000 +
+    MinorVersion*100 + Release*10 + Subrelease. For instance, version 1.2.0
+    translates to 1200.
 
-  NOTE: If you are upgrading from 0.9.9.x or earlier, then please
-    read the 1.0.0 BETA 1 section below.
+  - Added wxPropertyGrid::GetPropertyPtr(id/name).
 
-  New Features:
+  - wxArrayStringPropertyClass::OnButtonClick is now virtual.
 
-  - 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).
+  - wxTextValidator didn't work with wxEditEnumProperty.
 
-  - Numerous compiler warnings and errors resolved for Borland C++
-    (thanks to Dave Moor for reporting them).
+  - Fixed bug #1511342 (Cannot clear FileProperty when PG_FILE_SHOW_FULL_PATH = 0)
 
-  - wxOwnerDrawnComboBox's popup now closes on menu events and propertygrid
-    scrolling as well.
+  - Fixed bug #1509826 (Expand buttons drawn in the wrong place)
 
-  - There was no proper unspecified value support in wxOwnerDrawnComboBox.
+  - Fixed bug #1510934 (Build fails on gcc 4.1.1)
 
-  - Changes in splitter centering code may have solved various issues.
+  - Keyboard navigation with limited editing properties could provoke
+    (harmless) assertion failure.
 
-  - There was wxWidgets dir detection bug in POSIX installation script.
+  - Custom wxPropertyGridPage did not trigger events in wxPropertyGridManager
+    itself (for instance, property description did not appear when property
+    was selected).
 
+  - wxPropertyGrid::GetEditorControl() sometimes crashed with wxGTK.
 
 
-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.
+Version 1.1.6 ( Jun-08-2006 )
 
-  New Features:
+  New/Changed:
 
-  - 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.
+  - Added attribute wxPG_FILE_DIALOG_TITLE for wxFileProperty. If set,
+    the file selector dialog will use it as the title.
 
-    Sorry, no "double-click cycles" behaviour (yet).
+  - Added attribute wxPG_DIR_DIALOG_MESSAGE for wxDirProperty. If set,
+    the dir selector dialog will use it as the message.
 
-    Sorry, no docs. See odcombo.h and propgridsample.cpp (end of
-    the file) for some details.
+  - Added wxPropertyGridManager::RemovePage(pageIndex).
 
-  - 2.5.4 compatibility.
+  - Addex extra window style wxPG_EX_HELP_AS_TOOLTIPS, which will
+    display property help strings as tooltips instead of status bar text.
+    However, the usual wxWidgets restrictions apply and therefore multiline
+    tooltips are not created automatically (ie. line breaks are needed for
+    long tips).
 
+  - wxPropertyGridPage class can now be subclassed to create custom manager
+    pages. wxPropertyGridManager::AddPage() has new last argument where the
+    page instance can be given. Custom pages are mostly useful for handling
+    page-specific events, altough some virtual member functions can be
+    overridden as well (DoInsert, DoDelete).
 
-  Changes:
+  - wxPG_SPLITTER_AUTO_CENTER behaviour has been further tweaked.
 
-  - Native controls are now default. Added compiling section to
-    the documentation to clarify how to revert to custom controls
-    if so desired.
+  - Unix installer now uses configure's regen script to generate makefiles.
+    As of consequence, build dir is now asked even if quick install is used,
+    unless the dir is given as the second parameter.
 
-  - 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.
+  New Features for Creating User Properties:
 
-  - Added wxPropertyGrid::GetImageSize(). It returns size of the
-    image custom paint in front of (some) properties.
+  - OnCustomPaint can now be used to paint the entire item (ie. not just
+    an image in front of the text, as previously). Requirement is that
+    GetImageSize returns wxPG_FULL_CUSTOM_PAINT_SIZE(preferredHeight),
+    or for flexible height, wxPG_FULL_CUSTOM_PAINT_FLEXIBLE_SIZE(preferredHeight).
+    wxPaintedEnumPropertyClass has been added to the sample application as a
+    demonstration how to do this.
 
-  - 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).
+  - Combobox focus and selection background drawing corrected.
 
-  - Type 2 tokenizer (used by the normal wxArrayStringProperty, for example)
-    caused memory leak on unfinished token.
+  - Various problems with wxWidgets 2.7.0.
 
-  - Massive amounts (100+) of category adding and removal was problematic.
+  - GCC 4.0 warning.
 
-  - 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.1.5 ( May-05-2006 )
 
+  New/Changed:
 
+  - Hugely improved wxPG_SPLITTER_AUTO_CENTER behaviour regarding appearing/
+    disappearing scrollbar.
 
-Version 1.0.0 BETA 1 ( Jan-24-2005 )
+  - Text length limiting. Works with any properties using text ctrl as an
+    editor. Call wxPropertyGrid::SetPropertyMaxLength or wxPGProperty::
+    SetMaxLength.
 
-  SIGNIFICANT CHANGES! PLEASE READ CAREFULLY!
+  - Attributes now work in wxPython (thanks to the wxVariant typemap I added
+    to the SWIG interface). See readme of the bindings package for a single
+    line example.
 
-  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.
+  - Property hiding. Use wxPropertyGrid::HideProperty(property,true/false),
+    or wxPGProperty::Hide(true/false). NOTE! This overlaps the old priority
+    system and cannot be used simultaneously.
 
-  Previously one would call:
+  - wxSystemColourProperty: Selecting or setting custom colour from dialog
+    no longer tries to find named match from the list of system colours.
 
-    pg->Append( new wxIntProperty(wxT("Label"), wxT("name"), 0) );
+  - Added attribute wxPG_FILE_INITIAL_PATH to wxFileProperty. If set, the
+    selector dialog will use it as initial path.
 
-  Now this would be used instead:
+  - wxPGChoices id used mainly with wxPropertyGridPopulator has been changed
+    from type size_t to custom type wxPGChoicesId (which is currently void*).
 
-    pg->Append( wxIntProperty(wxT("Label"), wxT("name"), 0) );
 
-  The only visible difference is the lack of keyword "new".
+  Bugs Fixed:
 
-  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.
+  - Current colour was not selected in the colour dialog of wxColourProperty and
+    its kind (thanks Anthony Sommers).
 
-  See below for complete summary of changes in creating custom
-  user properties.
+  - Fixed bug #1467766 (Combobox is set to the wrong value for an empty property)
 
+  - Fixed bug #1467760 (Can't tab from checkbox property on Windows)
 
-  API and File Organization Changes (vs 0.9.9.x):
+  - Applied patch #1467753 by Julian Smart that solves various keyboard navigation
+    issues with combo box editor, including:
+    * Pressing Enter should not show popup.
+    * Pressing Escape should close popup.
 
-  - Project is now "propgrid" instead of "propertygrid". This changes
-    include path as well ( "wx/propertygrid/xxx.h" -> "wx/propgrid/xxx.h" )
+  - wxMSW: Pressing enter in list popup didn't select an item.
 
-  - Header file name changes:
-    "propertygrid.h" -> "propgrid.h"
-    "propgext.h" -> "propdev.h"
+  - String property using attribute wxPG_STRING_PASSWORD exposed its value
+    as plain text instead of asterisk sequence in its parent's summary string.
 
-  - wxPropertyGridManager got its own header file "manager.h".
+  - wxPropertyGrid::GetEditorControl() now returns the actual control
+    instead of clipper window, if any.
 
-  - Window style changes:
-    wxPG_AUTOSORT -> wxPG_AUTO_SORT
-    wxPG_NOCATEGORIES -> wxPG_HIDE_CATEGORIES
-    wxPG_BOLDMODIFIED -> wxPG_BOLD_MODIFIED
-    wxPG_SPLITTERAUTOCENTER -> wxPG_SPLITTER_AUTO_CENTER
+  - Compile problems with 64-bit compilers.
 
-  - 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):
+  - Compile problems with wxWidgets 2.7.0.
 
-    WX_PG_VARIANT_TO_WXOBJECT(variant,targetclass)
+  - Hopefully now compiles with Cygwin.
 
-    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.
+Version 1.1.4 ( Mar-22-2006 )
 
-  - wxPG_EX_FLAT_TOOLBAR is now default. Use wxPG_EX_NO_FLAT_TOOLBAR
-    to disable it.
+    IMPORTANT! There are changes in custom/user property scheme. See below.
 
+  New/Changed:
 
-  New Features:
+  - Internal changes to make wxPython bindings reality.
 
-  - 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).
+  - wxWidgets 2.6.3 makefiles are included.
 
-  - New property generator macro pair:
-    WX_PG_DECLARE_ARRAYSTRING_PROPERTY(PROPNAME)
-    WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY(PROPNAME,DELIMITER,CUSTBUTTXT)
+  - wxValidators are now used in a different way for textctrls - validation
+    happens on change instead on modify. This prevents user from leaving the
+    editor control if entered text is invalid.
 
-    Creates a wxArrayStringProperty derivative which allows a custom
-    string list delimiter and setting a custom editor action into
-    the string editor dialog.
+  - wxIntProperty and wxFloatProperty now have default numeric wxTextValidators
+    attached to them.
 
-    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.
+  - Added CanClose() method which returns false if value in active editor
+    has been invalidated by a wxValidator.
 
-    Also, you must implement the custom button method
+  - ClearSelection and SelectProperty now return false if selection could not
+    be changed (which would be the case if editor's validation fails).
 
-    bool PROPNAMEClass::OnCustomStringEdit ( wxWindow* parent, wxString& value )
+  - AddPropertyChoice method now also updates an active editor control.
 
-    even if you used NULL as CUSTBUTTXT.
+  - InsertPropertyChoice and DeletePropertyChoice methods.
 
-    Included in the sample is wxDirsProperty as an example of using
-    these macros.
+  - wxPGProperty now has AppendChoice, InsertChoice and DeleteChoice methods.
+    They also update active editor control.
 
+  - New attribute: wxPG_FILE_SHOW_RELATIVE_PATH. For wxFileProperty and derivatives.
+    Allows showing relative instead of absolute path. Base path is the value given
+    for this attribute.
 
-  Summary of Other Changes in Creating User Custom Properties (vs 0.9.9.x):
+  - Moved the remaining wxPGxxx editor class headers to propdev.h.
 
-  - 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.
+  - Sample application is now split into two source files. The new one,
+    sampleprops.cpp contains those more useful sample user properties.
 
-    Apart from the additon of prefix, easy-property macros such
-    as DECLARE_STRING_PROPERTY and IMPLEMENT_CUSTOM_FLAGS_PROPERTY
-    remain unchanged.
+  - Dialog positioning and sizer spacing should now be more appropriate with
+    Windows CE.
 
-  - 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).
+  - wxPG_COMPATIBILITY_1_0_0 is no longer on by default.
 
-    Example of use:
 
-    WX_PG_DECLARE_PROPERTY(wxRealPointProperty,const wxRealPoint&,RealPoint())
+  Changes in Creating User Properties and Editors:
 
-    As always, there is also _WITH_DECL variant that takes an additional
-    declaration argument (such as export).
+  - OnEvent: Instead of calling CopyValueFromControl, method should simply
+    return true when changing event was received.
 
-  - 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).
+  - Macros WX_PG_IMPLEMENT_STRING_PROPERTY_WITH_VALIDATOR and
+    WX_PG_IMPLEMENT_STRING_PROPERTY now require an additional argument
+    which can be either wxPG_NO_ESCAPE (no escape sequences, ie. newlines
+    and tabs cannot really be used - good for wxDirProperty and such) or
+    wxPG_ESCAPE (the classic mode).
 
-  - 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:
+  - wxPGEditor::AppendItem(wnd,label) replaced with
+    wxPGEditor::InsertItem(wnd,label,index).
 
-    WX_PG_IMPLEMENT_PROPERTY_CLASS(PROPNAME,VALUETYPE,TYPE_AS_ARG,EDITORCLASS)
+  - wxPGEditor::DeleteItem(wnd,index) added.
 
-    So for example:
-    IMPLEMENT_PROPERTY_CLASS(wxFontDataProperty,wxFontProperty,
-                             wxFontData,TextCtrlAndButton)
 
-    is now:
+  Bugs Fixed:
 
-    WX_PG_IMPLEMENT_PROPERTY_CLASS(wxFontDataProperty,wxFontData,
-                                   const wxFontData&,TextCtrlAndButton)
+  - wxDirProperty used escape sequences (such as \n and \t), causing dir
+    selector dialog to always start from the scratch.
 
-  - To sum things up in an example...
+  - Custom delimeter for WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY_WITH_VALIDATOR
+    (including sample wxDirsProperty) did not take effect until the value was
+    set outside the constructor.
 
+  - wxPGSpinCtrlEditor (from the sample app) crashed when value was
+    entered manually.
 
-      //* BEFORE *//
+  - Property value type builder macro WX_PG_IMPLEMENT_VALUE_TYPE_VOIDP_CVD
+    did not work properly. Also added note about needing to use basic
+    WX_PG_DECLARE_VALUE_TYPE macro with it.
 
-      // Header:
+  - Keyboard navigation did not work in combo popups.
 
-      class wxMyCustomProperty : public wxPGProperty
-      {
-          DECLARE_PROPERTY_CLASS(wxMyCustomProperty)
-      public:
-          ...
-      };
+  - Open Watcom problems.
 
-      // Source:
+  - GetFirstChild was not available in wxPropertyGridManager.
 
-      IMPLEMENT_PROPERTY_CLASS(wxMyCustomProperty,wxPGProperty,
-                               MyValueClass,TextCtrl)
+  - Windows CE popup window problems.
 
 
-      //* NOW *//
 
-      // Header:
+Version 1.1.3 ( Jan-15-2006 )
 
-      WX_PG_DECLARE_PROPERTY(wxMyCustomProperty,const MyValueClass&,MyValueClass())
+  New Features:
 
-      // Source:
-      class wxMyCustomPropertyClass : public wxPGProperty
-      {
-          WX_PG_DECLARE_PROPERTY_CLASS()
-      public:
-          ...
-      };
+  - wxPopupTransientWindow now used for wxMSW and wxGTK popups if compiled with
+    wxWidgets 2.6.2 or newer. This allows more authentic popup behaviour and
+    using mouse input in wxGTK modal dialogs.
 
-      WX_PG_IMPLEMENT_PROPERTY_CLASS(wxMyCustomProperty,MyValueClass,
-                                     const MyValueClass&,TextCtrl)
+  - wxWidgets 2.7.0 makefiles.
 
-  - 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).
+  - Mouse cursor did not always change to resize-arrow when hovering on the
+    splitter.
 
-  - wxPropertyGrid::Collapse and Expand: Attempted visible
-    changes for categories in non-categoric mode.
+  - Various bugs with child properties set to have unspecified value (for
+    instance, when a property's value is set to unspecified, it's parent's
+    "summary" text now correctly reflects this).
 
-  - Right click on custom control did not properly produce
-    property right click event.
+  - In ANSI build, it should now be possible to enter any non-ASCII
+    characters in editor dialogs of wxLongStringProperty and
+    wxArrayStringProperty (thanks Milan Babuskov).
 
-  - SetPropertyValues: If property/parent with list's name
-    already existed, then list's contents was skipped.
+  - Editor dialogs of wxLongStringProperty and wxArrayStringProperty now
+    correctly use parent wxPropertyGrid's font.
 
-  - GetPropertyValues: Names of list variants was extracted
-    from property's label instead of name.
+  - CollapseAll could corrupt the current selection.
 
-  - GetPropertyByLabel: Resulted in infinite loop.
+  - wxMAC compile problem.
 
-  - GetFirstCategory and GetNextCategory did not work in
-    non-categoric mode.
+  - wxParentProperty should now work if it initially has no children.
 
-  - 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).
+Version 1.1.2 ( Dec-02-2005 )
 
-  - wxPropertyGridManager: Did not correctly get various flags
-    (namely wxPG_HIDE_CATEGORIES). Changes in OnToolBarClick and
-    SetWindowStyleFlag.
+  New Features:
 
-  - wxPropertyGridManager: Proper Refresh method was missing.
+  - wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING (wxBoolProperty attribute to allow
+    value cycling with double-click) has been re-enabled and *is now on by
+    the default*. Focusing to the combo box is detected as the first click,
+    so behaviour will be much smoother than before.
 
-  - wxFontDataProperty: Did not check if editor control was NULL.
+  - New Attribute: wxPG_COLOUR_ALLOW_CUSTOM. Custom colour choice of
+    wxColourProperty, wxSystemColourProperty, and their kind can be disabled
+    by setting this attribute to 0.
 
-  - Choice editor didn't accept zero length string arrays.
+  - SetPropertyAttributeAll(attrId,attrVal) method allows setting an attribute
+    for every single property (in both normal grid and grid manager). Just
+    remember to call it *after* your grid has been completely built.
 
-  - 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.
+  - Size given in constructor or Create did not work.
 
-  - Native controls: When editor class did not create a control (in case of
-    limited editing, for example), there would always be a crash.
+  - Shorter name for SetPropertyValueUnspecified (ie. SetPropertyUnspecified)
+    was not available when v1.0.0 compatibility flag was set (which was the
+    default).
 
-  - Since native wxTextCtrl::SetValue generates change event, setting value to
-    unspecified cleared property's value and sent property change event.
+  - In some cases wxPropertyGrid stole keyboard focus.
 
-  - wxGTK wxCCustomButton: Moving mouse cursor from combo button to combo popup
-    didn't remove hilighted status of that button.
+  - Left aligning the splitter (ie. SetSplitterLeft method) has been fine-tuned.
 
-  - wxFileProperty: Default file was unintentionally set to "*.XXX"
-    (Chris Garrett).
+  - It was not possible to have user properties with name not starting
+    with "wx".
 
-  - 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 1.1.1 ( Sep-21-2005 )
 
-
-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).
+  - New property editor: ComboBox. Just like Choice but without
+    wxCB_READONLY flag.
 
-  - 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.
+  - New property: wxEditEnumProperty. Just like wxEnumProperty, but
+    has wxString value and ComboBox as default editor.
 
-  - 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.
+  - New method: SetSplitterLeft. Moves splitter as far left as possible
+    so that labels are still fully visible. Also, this is the new default
+    splitter position when wxPG_SPLITTER_AUTO_CENTER window style is not
+    used.
 
-  - 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.
+  - New event: EVT_PG_ITEM_COLLAPSED - occurs when property or category
+    has been collapsed by the user.
 
-  NOTE: There are changes to property class system (including implementation of
-    wxFontDataProperty, wxSizeProperty and wxPointProperty examples). See
-    "Internal changes of note" below for details.
+  - New event: EVT_PG_ITEM_EXPANDED - occurs when property or category
+    has been expanded by the user.
 
-  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.
+  - Initial Mac OS X compatibility has been reported (should build and run -
+    thanks to Jan-Friso Schipper for working it out).
 
-    https://sourceforge.net/tracker/index.php?func=detail&aid=1098374&group_id=9863&atid=309863
+    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.
 
-  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.
+  Bug Fixes:
 
-  - IsPropertyValueUnspecified(id/name): Returns TRUE if property's value was
-    set to "unspecified".
+  - wxFloatProperty and sample's wxArrayDoubleProperty had problems when
+    locale was set to one using comma as decimal point.
 
-  - SetPropertyColour(id/name,wxcolour): Sets custom background colour to a property
-    and all of its children. Can be used on categories as well.
+  - When value image of property w/ Choice editor was changed (with
+    SetPropertyImage method), image appeared in front of every line in
+    dropdown, not just the current one.
 
-  - GetPropertyColour(id/name): Returns background colour of a property.
+  - WX_PG_IMPLEMENT_STRING_PROPERTY macro produced erroneous code.
 
-  - SetPropertyColourToDefault(id/name): Reverts colour of property and its children
-    to the current default cell background colour (set using SetCellBackgroundColour).
+  - SetSplitterPosition did not work  when called before grid's size was
+    properly set (by sizer logic etc).
 
-  - 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.
+  - SetSplitterPosition was missing from wxPropertyGridManager.
 
-  - wxPropertyGrid::GetFontHeight(): Returns maximum vertical extent used by
-    the current font.
 
 
-  Name Changes:
+Version 1.1.0 ( Jun-14-2005 )
 
-  - SetCategoryColour -> SetPropertyColour
-  - SetCategoryColourToDefault -> SetPropertyColourToDefault
-  - GetCategoryColour -> GetPropertyColour
+  Attention, users of 1.0.x! Carefully read section entitled 'API Changes'.
 
-
-  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.
+  - When wxPropertyGrid loses focus, selected property now becomes greyed
+    (similar to other controls).
 
-  Name Changes:
+  - wxValidator support methods:
+        void SetPropertyValidator(id/name,wxValidator&)
+        wxValidator* GetPropertyValidator(id/name)
 
-  - IsCategory -> IsPropertyCategory
-  - IsSelected -> IsPropertySelected
-  - IsExpanded -> IsPropertyExpanded
+    In addition, wxFileProperty, wxDirProperty (as well as wxDirsProperty
+    in the sample app) now have built-in validators to filter out characters
+    that cannot be used in paths.
 
-  New Methods:
+  - Value image of any property can be set:
+        void SetPropertyImage(id/name,wxBitmap&)
+        wxBitmap* GetPropertyImage(id/name)
 
-  - 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().
+  - Editor of any property can be changed:
+        void SetPropertyEditor(id/name,const wxPGEditor*)
+        const wxPGEditor* GetPropertyEditor(id/name)
 
-  Other Changes:
+  - Property inheritance can now be traced, using IsPropertyKindOf method.
+    For example, to find out whether property inherits from wxCustomPropertyClass,
+    use:
+        pg->IsPropertyKindOf( property, WX_PG_CLASSINFO(wxCustomProperty) )
 
-  - 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.
+  - wxStringProperty got wxPG_STRING_PASSWORD attribute. When it is used
+    the value is echoed as asterisks and wxTE_PASSWORD is passed to the
+    textctrl editor.
 
-  Internal changes of note:
+  - wxColourProperty (and wxSystemColourProperty) trigger colour dialog on
+    wxButton click events (which means that changing the editor to
+    wxPG_EDITOR(TextCtrlAndButton) is viable).
 
-  - 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.
+  - wxColourProperty's default editor is now now TextCtrlAndButton
+    (wxSystemColourProperty still has Choice). To get the old editor, just use
+    following code immediately after property has been added:
 
-  Bugs Fixed:
+    pg->SetPropertyEditor(colourProperty,wxPG_EDITOR(Choice))
 
-  - 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.
+  - SpinCtrl editor added to the sample app. It is an example of user creatable
+    property editor, with plenty of comments. On the third page of sample app
+    there is a property "SpinCtrl" using it.
 
+  - Items of wxFlagsProperty can now be changed with SetPropertyChoices.
 
-Version 0.9.7 ( Dec-20-2004 )
+  - Added documentation section "Customizing Properties (without sub-classing)".
 
-  New Features:
+  - WX_PG_IMPLEMENT_STRING_PROPERTY_WITH_VALIDATOR. Identical to
+    WX_PG_IMPLEMENT_STRING_PROPERTY except it also declares
+    wxValidator* DoGetValidator() const method.
 
-  - wxMultiChoiceProperty: Property that embeds wxMultiChoiceDialog
-    as transparently as possible. Thus, strings are given as
-    wxArrayString and value as wxArrayInt.
+  - WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY_WITH_VALIDATOR. Identical to
+    WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY except it also declares
+    wxValidator* DoGetValidator() const method.
 
-  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.
+  API Changes:
 
-  Bugs Fixed:
+  - wxEnumProperty and wxFlagsProperty new constructor functions:
+        wxEnumProperty(name,label,wxArrayString labels,value)
+        wxEnumProperty(name,label,wxArrayString labels, wxArrayInt values, value)
 
-  - 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.
+  - wxPGConstants renamed to wxPGChoices. *
 
+  - wxChar* arrays given as argument to wxEnumProperty, wxFlagsProperty,
+    WX_PG_IMPLEMENT_CUSTOM_ENUM_PROPERTY, WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY,
+    and WX_PG_IMPLEMENT_CUSTOM_FLAGS_PROPERTY, *must now be NULL terminated*.
+    Also, all such constructors and macros no longer have 'itemcount' argument
+    (for the obvious reason).
 
-Version 0.9.6 ( Dec-17-2004 )
+  - Sub-properties (i.e. properties which have parent that is not category or
+    root) can no longer be accessed globally by their name. Instead, use
+    "<property>.<subproperty>" in place of "<subproperty>".
 
-  New Features:
+    For example:
+        wxPGId id = pg->GetPropertyByName(wxT("Property.SubProperty"));
+    Or:
+        wxPGId id = pg->GetPropertyByName(wxT("Property"),wxT("SubProperty"));
 
-  - 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.
+    Clarification on sub-property OnChange event handling:
+    - For wxParentProperty and wxCustomProperty, events will occur for
+      sub-property. For those properties that inherit directly from
+      wxPGPropertyWithChildren/wxBaseParentPropertyClass (wxFontProperty,
+      wxFlagsProperty, etc), events occur for the main parent property
+      only (actually, this has to do whether the children are "private" or not
+      - see the attributes).
+    - When wxParentProperty or wxCustomProperty's child gets changed, you can
+      use wxPropertyGridEvent::GetMainParent to obtain its top non-category
+      parent (useful, if you have wxParentProperty as child of another
+      wxParentProperty, for example).
 
-  - 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".
+  - Manager's default is now to hide Alphabetic/Categoric mode buttons. Use
+    new ex-flag wxPG_EX_MODE_BUTTONS to show them.
 
-  - 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.
+  - SetPropertyValueUnspecified renamed to SetPropertyUnspecified. *
 
-  - 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.
+  - wxRECURSE renamed to wxPG_RECURSE. *
 
-  Name Changes:
+  - wxKEEP_STRUCTURE renamed to wxPG_KEEP_STRUCTURE. *
 
-  - 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.
+  - GetPrimaryEditor renamed to GetEditorControl. *
 
-  New Methods:
+  - Identifiers wxPGCtrlClass, wxCCustomTextCtrl, wxCCustomButton, and
+    wxCCustomComboBox have been removed (use wxWindow, wxTextCtrl, wxButton and
+    wxOwnerDrawnComboBox instead). *
 
-  - 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.
+  - SetPropertyChoicesPrivate renamed to SetPropertyChoicesExclusive.
 
-  Other Changes:
+    * When wxPG_COMPATIBILITY_1_0_0 is defined (which is default - see
+    propgrid.h), this change is also implemented in its 1.0.x form.
 
-  - 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):
+  Dropped Features:
 
-  - 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.
+  - Support for wxWidgets versions earlier than 2.6.0.
 
-  Bugs Fixed:
+  - Non-wxWindow-based custom controls.
 
-  - 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.
+  - wxPG_EX_CLASSIC_SPACING (defined to 0 with wxPG_COMPATIBILITY_1_0_0).
 
+  - Double click cycles (wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING) - mostly useless
+    feature modeled from .NET version.
 
-Version 0.9.5 ( Dec-08-2004 )
+  - wxPG_NEW_COLOUR_SCHEME can no longer be used to revert to the old colour
+    scheme.
 
-  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).
+  - Pressing ESC when editing value in wxTextCtrl editor cancels any
+    changes (in addition to unfocusing the control, as previously).
 
-  Property System Changes (important if you have made custom property classes):
+  - EVT_TEXT (id = wxEVT_COMMAND_TEXT_UPDATED) events are now passed out of
+    of wxPropertyGrid. This is useful if you want your app to know when user
+    has started editing a property (since wxEVT_PG_CHANGED is sent only
+    after changes are committed, ie. enter is pressed or focus changes).
 
-  - 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.
+  - GetFirstProperty, GetNextProperty and GetPrevProperty will no longer
+    skip wxCustomProperty and wxParentProperty.
 
-  Bugs Fixed:
+  - Unhandled editor button events are redirected to the grid's event handler
+    (effectively makes custom editor button callback function obsolete).
 
-  - WXK_BACKSPACE processing in wxCustomTextCtrl did not take selection into account.
+  - wxFontProperty's "Face Name" sub-property has been changed to a
+    wxEnumProperty (it was wxStringProperty). Drop down will show all
+    available font faces.
 
+  - Check box editor no longer receives keyboard focus indicator (if I can
+    figure how to add it *only* when getting focus from kbd, then I will do
+    that).
 
-Version 0.9.4 ( Nov-29-2004 )
+  - Added GetEditorControlSecondary which returns editor's button, if any.
 
-  New Features:
+  - wxBasePropertyClass is a new alias for wxPGProperty.
 
-  - 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.
+  - wxBaseParentPropertyClass is a new alias for wxPGPropertyWithChildren.
 
-  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 to Property Classes System:
 
-  Changes:
+  - WX_PG_IMPLEMENT_PROPERTY_CLASS now has base property argument, inserted
+    to second place (i.e. its between property name and value type). Use
+    wxBaseProperty when inheriting from wxPGProperty and wxBaseParentProperty
+    when inherting from wxPGPropertyWithChildren.
 
-  - 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.
+  - Added wxPGProperty::DoGetValidator virtual method. If property does
+    not have explicit validator, it is called when property's editor is
+    about to be created. See wxPGProperty class reference for implementation
+    details.
 
-  Property System Changes (important if you have made custom property classes):
+  - wxPropertyGrid::OnCustomEditorEvent's argument changed from wxEvent&
+    to wxCommandEvent& - you need to change casting in any related Connect
+    calls to accommodate this.
 
-  - 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.
+  - wxPGChoices (old wxPGConstants) has been transformed internally. Due
+    to this, properties that need it now hold wxPGChoices m_choices instead
+    of wxPGChoices* m_choices. wxPGConstantsUnref macros are no longer necessary
+    in destructors.
 
-  Bugs Fixed:
+  - Editor classes wxPGTextCtrlEditor and wxPGChoiceEditor are now available
+    for inheritance in propdev.h.
 
-  - 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.
+  - wxStringPropertyClass is available for inheritance in propdev.h.
 
+  - Replaced all m_constants members with m_choices.
 
-Version 0.9.3 ( Nov-21-2004 )
+  - Second argument of wxPGProperty::SetAttribute changed from "wxVariant" to
+    "wxVariant&".
 
-  New Features:
+  - virtual const wxPGEditor* GetEditorClass () const; replaced with
+    virtual const wxPGEditor* DoGetEditorClass () const;
+    (since there is now non-virtual wxPGProperty::GetEditorClass)
 
-  - 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).
+  - Added wxPGEditor::GetName(). It is auto-generated with macros, and
+    will return pointer to editor's name ("TextCtrl" etc).
 
-  Changes:
+  - Added wxPGEditor::OnFocus(). It is triggered when editor gets focus.
+    For wxTextCtrl based editor, for example, it should select all text.
 
-  - 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.
+  - Old WX_PG_DECLARE_EDITOR_CLASS (which declares editor singleton
+    *in header*) has been renamed to WX_PG_DECLARE_EDITOR.
 
-  Internal Changes to Properties:
+  - WX_PG_IMPLEMENT_EDITOR_CLASS_CONSTFUNC renamed to
+    WX_PG_IMPLEMENT_EDITOR_CLASS.
 
-  - 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.
+  - WX_PG_DECLARE_EDITOR_CLASS added - use it as you would DECLARE_DYNAMIC_CLASS.
 
-  Bugs Fixed:
 
-  - When category was disabled, its children were not (Vladimir Vainer).
-  - wxCustomChoice's button was not released correctly in all cases.
+  Bug Fixes:
 
+  - wxUIntProperty did not render its value unless base or prefix was
+    explicitly set (via SetPropertyAttribute).
 
-Version 0.9.2 ( Nov-10-2004 )
+  - WinXP/Win2K, wxWidgets 2.6.1: Improved indentation fix.
 
-  New Features:
+  - 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).
 
-  - 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.
+  - GetCaptionBackgroundColour function name had typo (g was missing).
 
-  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:
+Version 1.0.5 ( Jun-06-2005 )
 
-  - 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.
+  See CHANGES-propgrid.txt of versions earlier than 1.1.3.
 
-  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.9.2 and earlier
 
-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 3811)
+++ 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.7
+    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.6-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 3811)
+++ 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();
Index: src/sdk/propgrid/src/propgrid/manager.cpp
===================================================================
--- src/sdk/propgrid/src/propgrid/manager.cpp	(revision 3811)
+++ 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 3811)
+++ 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"
@@ -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 3811)
+++ 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
@@ -505,6 +509,9 @@
 // * After 1.0.x compatibility removed, drop itemcount argument support.
 //
 // 1.3 Branch:
+// * onevent wnd always actual control, never clipper.
+// * Custom values (one of which is Unspecified). Up to 255, use string table
+//   in property grid for relevant displayed strings.
 // * Maybe have wxPG_EX_PROCESS_EVENTS_IMMEDIATELY behaviour as default (and non-
 //   optional).
 // * Move to different directory style to enable CVS usage.
@@ -1782,7 +1789,7 @@
 
 wxPGProperty* wxParentProperty( const wxString& label, const wxString& name )
 {
-    return new wxParentPropertyClass (label,name);
+    return new wxParentPropertyClass(label,name);
 }
 
 
@@ -1842,9 +1849,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 +2131,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
 // -----------------------------------------------------------------------
@@ -3716,6 +3736,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 )
@@ -4580,6 +4605,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 +4758,7 @@
     DrawItemAndChildren(p);
 
     wxPGPropertyWithChildren* parent = p->GetParent();
-    while ( parent->GetParentingType() <= PT_SUBPROPERTY )
+    while ( parent->GetParentingType() <= PT_FIXEDCHILDREN )
     {
         DrawItem(parent);
         parent = parent->GetParent();
@@ -4918,7 +4971,12 @@
     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 +5050,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,6 +5083,7 @@
     but->Create(this,wxPG_SUBID2,wxT("..."),p,s,wxWANTS_CHARS);
 
     but->SetFont( m_captionFont );
+#endif
 
     return but;
 }
@@ -5112,52 +5187,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 +5240,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();
+    wxUniChar prev_a = wxT('\0');
 
-    wxChar a = *src;
-    while ( a )
+    dst_str.clear();
+
+    for ( ; i != src_str.end(); i++ )
     {
-        src++;
+        wxUniChar a = wxPGGetIterChar(src_str, i);
 
         if ( a >= wxT(' ')
         #if !wxUSE_UNICODE
@@ -5196,40 +5270,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 +5599,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 +5612,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 +6271,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 +7041,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 +7744,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
@@ -10283,7 +10351,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 +10584,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 +10848,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 +10858,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 +10941,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 +10970,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 +10993,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 +11674,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 +11721,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 +11735,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 +11936,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 +12460,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 )
             {
@@ -12679,7 +12807,7 @@
         property->m_depthBgCol = greyDepth;
 
         // Add children to propertywithchildren.
-        if ( parenting < 0 )
+        if ( parenting < PT_NONE )
         {
             wxPGPropertyWithChildren* pwc = (wxPGPropertyWithChildren*)property;
 
@@ -12689,21 +12817,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 +12856,6 @@
 
         // Calculate text extent for caption item.
         pc->CalculateTextExtent(propGrid,propGrid->GetCaptionFont());
-
     }
 
     return parenting;
@@ -12733,6 +12863,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 +12901,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 +12968,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;
@@ -12956,7 +13106,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 3811)
+++ 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 );
+        */
     }
 }
 
