

Version 1.0.6.1 ( Dec-02-2005 )

   Tweaks:

   - wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING (wxBoolProperty attribute to allow
     value cycling with double-click) has been improved considerably.
     Focusing to the combo box is now detected as the first click, so
     behaviour will be much smoother than before.


   Bugs Fixed:

   - ComboBox control crashed often (for instance, when the dropdown button
     was pressed many times in a row).

   - In some cases wxPropertyGrid stole keyboard focus.



Version 1.0.6 ( Sep-21-2005 )

  Minor Features:

  - Initial Mac OS X compatibility has been reported (should build and run -
    thanks to Jan-Friso Schipper for working it out).

    NOTE: wxPropertyGrid::SetFont is reported to crash, so offending code in it
    has been commented out. However, if you are willing to debug the issue, you
    can replace line '#if !defined(__WXMAC__)' with line '#if 1' in propgrid.cpp:
    wxPropertyGrid::SetFont.

  - wxWidgets 2.6.2 makefiles.


  Bugs Fixed:

  - wxFloatProperty and sample's wxArrayDoubleProperty had problems when
    locale was set to one using comma as decimal point.

  - wxUIntProperty did not render its value unless base or prefix was
    explicitly set (via SetPropertyAttribute).

  - WinXP/Win2K, wxWidgets 2.6.1+: Improved indentation fix.

  - When mouse was leaving "slowly" via right edge through active editor
    control, correct mouse leave event was not triggered resulting in
    latest changes not being committed (though there was error notification
    in debug build).



Version 1.0.5 ( Jun-06-2005 )

  Minor Features:

  - Added wxPropertyGrid::ReplaceProperty(id/name,newproperty).

  - Added flags argument default value (0) for wxPGProperty's GetValueAsString,
    SetValueFromString, and SetValueFromInt methods.

  - wxWidgets 2.6.1 makefiles.


  Bugs Fixed:

  - WinXP/Win2K, wxWidgets 2.6.1: Indentation in wxTextCtrl based property
    editor was incorrect (due to change in default font face: previously
    "MS Shell Dlg", now "MS Shell Dlg 2").

  - wxGTK: Virtual size was sometimes skewed.

  - When a property with children was expanded or collapsed, and current
    selection was outside the visible area, then the grid was inadvertedly
    scrolled to the selection.



Version 1.0.4 ( May-21-2005 )

  Changes and Minor Features:

  - Colour scheme generator is now smarter and should be considerably
    better for various Windows themes. If you do not like how it looks,
    edit contrib/include/wx/propgrid/propgrid.h and change define
    wxPG_NEW_COLOUR_SCHEME to 0.

  - wxUIntProperty for representing unsigned integers. You can change
    base (default is decimal) and prefix by manipulating wxPG_UINT_BASE
    and wxPG_UINT_PREFIX attributes. See Attribute Identifiers module
    in the documentation for more info.

  - Added wxPropertyGridManager::ClearPage(page) to delete all
    properties on given page.


  Bug Fixes:

  - If value in textctrl editor was edited, and splitter was subsequently
    moved, then the corresponding wxPG_EVT_CHANGED was not sent.

  - Windows 2000: Pressing ALT + some key that isn't actually bound
    to a shortcut caused program to hang (thanks Bernard Duggan).

  - WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY and
    WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR did not compile
    (and neither did their declare counterparts).

  - wxFontProperty: setting invalid Family, Style, or Weight caused a crash
    (assertion failure in debug build).

  - Giving -1/wxID_ANY as id to wxPropertyGridManager resulted in an
    assertion failure.

  - Description box or status bar were not cleared consistently when
    Thaw() and Freeze() were used when deleting items.

  - wxPropertyGrid::SetPropertyValueUnspecified(name) had typo in its
    name (Value was missing).



Version 1.0.3 ( May-13-2005 )

  Bug Fixes:

  - Changes were not copied (and wxEVT_PG_CHANGED event was not sent)
    from wxTextCtrl based editor when focusing out of the property grid,
    or when the grid was being destroyed. This is now solved by committing
    changes and sending the event when focus or mouse moves leaves the
    property grid and when special key (alt,ctrl,meta - which are connected
    to closing the app via keyboard) is pressed while text is being edited.
    If this fails to work, *error message will be shown on grid deletion*.

  - Keyboard navigation code has been overhauled. Fixes include:
    * Keyboard navigation in wxPropertyGrid placed in wxDialog or wxPanel
      was seriously skewed.
    * Keyboard navigating upwards (and sometimes downwards as well)
      did not scroll to navigated property.
    * It was possible to navigate out with arrow keys.
    * Changing mode in wxPropertyGridManager stopped keyboard navigation
      from working.
    * Now, when there is no selection, first non-tab, non-esc key down event
      will select the topmost property.
    Known things that don't work yet:
    * wxGTK: Pressing ESC in property editor does not unfocus it correctly.

  - Right-clicking now selects the property underneath.

  - ClientData methods were not enabled by the default, and if they
    were manually enabled, there were compile errors
    (thanks Bernard Duggan).

  - wxPropertyGridManager::SetWindowStyleFlag was seriously flawed.

  - Few ignorable but rare assertion failures removed.

  - Sample app incorrectly placed multiple controls on plain wxFrame
    (which is apparently a no-no).

  - Another Borland C++ fix (hopefully its now fine, thanks Luigi Bianchi).

  - Flag indicating read-only editor was not inherited by fixed sub-properties.



Version 1.0.2 ( May-03-2005 )

  Changes:

  - wxParentProperty has been re-implemented (I thought wxCustomProperty
    could replace it but that turned out not to be practical). Added
    section on docs main page as well.

  - It is now possible to have nested properties that use the default
    SetValueFromString/GetValueAsString (which prints something like
    "child value 1; child value2; ...etc..."). Children with sub-items
    of their own are separated by brackets. For example:
      Property              Value
      --------------------  ------------------------
      TopProperty           "1; [2a; 2b]; 3"
        First Child         "1"
        Second Child        "2a; 2b"
          First Sub-Child   "2a"
          Second Sub-Child  "2b"
        Third Child         "3"

    As an example of this, I have added a property labeled "3D Object" to the
    third page in the sample app.


  Bugs Fixed:

  - Attribute wxPG_FILE_WILDCARD did not work.

  - Various bugs with nested properties.

  - Did not compile with wxUSE_UNICODE=0 + wxUSE_STL=1
    (thanks Joachim Hnig).

  - wxPropertyGridManager: wxPG_AUTO_SORT was forced.

  - wxPropertyGridManager: selections were not retained.

  - Windows XP: Drew corrupted drop button with some themes.



Version 1.0.1 ( April-24-2005 )

  Changes:

  - More consistent positions for wxTextCtrl-based editors.

  - wxGTK2 wxTextCtrl based editor now uses clipper window to remove its
    borders. Previously only wxNO_BORDER flag was used (similar to wxMSW),
    but it was not sufficient for all GUI themes.


  Bugs Fixed:

  - Category with zero children caused a graphics glitch.

  - If mouse in editor was dragged outside on to the splitter, control's
    cursor was changed to double arrow.

  - Editor control's keyboard focus was not detected correctly if it used a
    clipper window.

  - Borland C++ compile error.



Version 1.0.0 ( Apr-14-2005 )

  Note: There are still few known bugs left. I have tried to compile a
    more-or-less complete list, which can be found on the docs main page.

  New Features:

  - wxWidgets 2.6.0 compatibility.

  - wxCustomProperty. This is a property class that can be, using
    SetPropertyAttribute, customized for various needs. It can also have
    children. Note that its value type is string, and this cannot be
    (and should not be) currently modified.

    See docs main page, section "Custom User Properties (using
    wxCustomProperty)" for more information.


  Changes and Minor Additions:

  - wxParentProperty is removed (use wxCustomProperty instead).

  - Moved class definitions of following property classes to propdev.h or
    advprops.h (so they can now be inherited from):
      wxImageFilePropertyClass, wxCursorPropertyClass,
      wxMultiChoicePropertyClass.

  - Expander button is no longer drawn for parent properties when they
    have no children.

  - Added wxPropertyGridPopulator pseudo-code sample to the documentation.

  - New method: SetPropertyChoices(id/name,wxPGConstants)
    Preferred way to override the entire set of choices for a property.

  - Added some missing wxPropertyGridManager methods:
      SetPropertyLabel

  - Modified wxPropertyGrid::GetImageSize so that it can return image size
    of a specified property. If no argument is given, it works as before.


  Bugs Fixed:

  - Graphics glitch when deleting a property.

  - Active editor misplacement on Compact.

  - Garbage between textctrl and button after splitter movement.

  - Expander icon clickable area was slightly less than the entire icon.

  - GCC 4.x compile problem.

  - If grid was resized so that the scrolled position changed and there
    was an editor control which position or size had to be changed, then
    the final control position was skewed.



Version 1.0.0 RC1 ( Mar-30-2005 )

  New Features:

  - wxWidgets 2.5.5 compatibility.

  - wxPropertyGridPopulator class.
    Allows populating wxPropertyGrid from an arbitrary text source.
    For a practical example, see propgridsample.cpp's functions
      FormMain::OnSaveToFileClick
      FormMain::OnLoadFromFileClick

    NOTES:
      * wxParentProperty is not supported yet.
      * As currently there is no GetPropertyAttribute, property
        attributes cannot be stored.

  - wxEnumProperty and all custom properties derived from them
    now have dynamic label and value storage (called "choices" storage).
    Arrays given on creation are only initial and can be modified. Note
    that they are cached per-pointer, so two properties which are given
    same static arrays use the same dynamic storage. Thus, adding a choice
    to one property adds the same choice to all other properties using the
    same choice storage. However, there is a method to create private copy
    of choices for a property.

    Methods of note:
      wxPGConstants& GetPropertyChoices(id/name). Returns
        writable reference to the choices of a wxEnumProperty or
        derivative (and some others, such as wxMultiChoiceProperty,
        as well). Can be modified or given to another property in
        constructor function.

      AddPropertyChoice(id/name,label[,value]). Appends entry to
        the choices storage of a property.

      SetPropertyChoicesPrivate(id/name). If property's set of choices
        if shared with other properties, a private copy of it will be
        created for this property.

  - wxGTK 1.2 port is now almost usable. Problems remain in refreshing
    editor controls (try expanding/collapsing font property while its
    selected) and also there is a strange problem with wxMultiChoiceProperty
    (dialog's list box doesn't get correct selection). Note that this
    port also no longer uses custom controls.


  Changes and Minor Features:

  - Margin no longer uses background colour - use new SetMarginColour
    and GetMarginColour instead.

  - wxOwnerDrawnComboBox now allows "fake" popup window (i.e. wxWindow
    instead of wxPopupWindow) whenever possible. This reduces number
    of bugs experienced (wxPopupWindow is not perfect yet). To make
    best use of this "feature", use vertically large wxPropertyGrid
    (common in typical applications).

  - wxOwnerDrawnComboBox now extends the popup to always be wide
    enough to accommodate widest item in list.

  - IsModified is deprecated. Use IsPropertyModified and
    IsAnyModified instead.

  - GetFirstChild now only returns first child of root and
    category (you should not have need for easy sub-property access).

  - Using better Doxygen configuration (member sorting, no brief
    in member list).

  - Removed option to use .NET icons on toolbar.

  - ChoiceAndButton editor's button is now of same height
    as choice's dropbutton.

  - Precision handling of wxFloatProperty and wxArrayDoubleProperty
    have been improved. Precision of -1, which is now default, indicates
    use of default printf precision. Also, excess zeroes are now
    removed from displayed strings. Note that wxArrayDoubleEditorDialog
    was also modified.

  - Some new methods:
      wxPGProperty* wxPropertyGrid::CreatePropertyByClass
      (classname,name,label)
          Creates new property according to given classname (for
          example, "wxStringProperty" or "String"). Name and label are
          same as usual.

      wxPGProperty* wxPropertyGrid::CreatePropertyByType
      (valuetype,name,label)
          Like CreatePropertyByClass but creates from a name of
          valuetype (i.e. "string", "long", or any returned by
          wxVariant::GetType, wxPGProperty::GetType or
          wxPGValueType::GetType).

      size_t wxPGProperty::SetChoices(size_t id,labels,values)
          If id is non-zero and found, then set property's choices to
          refer to that. If not, then creates new set of choices with
          given id (or generated if that is zero). Returns final id.


  Changes to Custom Property Creation:

  - Added m_constants member to wxPGChoiceInfo (which is then
    filled by GetChoiceInfo if dynamic modification of property's
    choices is desired).

  - New wxBaseEnumPropertyClass for creating enum props which have
    totally custom label and value storage (see propdev.h for
    details).

  - wxPGProperty::PrepareValueForDialogEditing. See documentation
    on when to use (and what existing code it should replace...).

  - As a rule, properties must now be able to cope with NULL
    initial value (if its given as pointer or reference).


  Bugs Fixed:

  - Some properties with wxTextCtrl based editor could not sustain
    unspecified value.

  - Did not compile without wxWidgets 2.4 compatibility flag
    (thanks Luigi Bianchi).

  - If dialog-editable property was set with unspecified value,
    the dialog usually showed the value prior it was set to
    unspecified. Now dialog should show default value instead.

  - wxPropertyGrid::SetFont crashed if called before control was
    fully created (thanks Tyler Edwards).

  - wxOwnerDrawnComboBox's popup was not always closed when mouse
    was clicked over the grid.



Version 1.0.0 BETA 4 ( Mar-19-2005 )

  This is an intermediate bug fix release.

  Bugs Fixed:

  - wxMSW: Excess flicker on Refresh resolved.

  - wxGTK: wxOwnerDrawnComboBox popup window border problems solved.

  - wxPropertyGridManager's header didn't compile
    properly.

  - ClearSelection did not clear page's selection.

  - Potential freezing due to mouse capture not releasing.

  - In wxArrayDoublePropertyClass, m_precision member was
    used before it was initialized (Matthew Christie).



Version 1.0.0 BETA 3 ( Mar-10-2005 )

  NOTE: If you are upgrading from 0.9.9.x or earlier, then please
    read the 1.0.0 BETA 1 section below.

  New Features:

  - NSIS-based installer executable (for Windows). Will try to
    auto-detect wxWidgets dir and version, and copies makefiles
    accordingly (thanks to Dave Moor for help in testing it).

  - Added per-property client data. Use

    void wxPropertyGrid::SetPropertyClientData(id/name,void*)

    to set it and

    void* wxPropertyGrid::GetPropertyClientData(id/name)

    to get it. There is also wxPropertyGridEvent::GetPropertyClientData.

  - Added specific background colour for category captions. Use
    wxPropertyGrid::SetCaptionBackgroundColour and
    wxPropertyGrid::GetCaptionBackgroundColour to use it. In the
    sample application, this feature can be demonstrated by setting
    the White Colour Scheme.

  - Added to sample a wxArrayDoubleProperty - an example of
    array property of non-string values.

  - Preliminary wxUSE_STL=1 compatibility (not yet in custom
    controls mode - if you really need this, then make a feature
    request).


  Changes and minor features:

  - Loads of restructuring and additions to the documentation main page.

  - Added wxPropertyGrid::ShowPropertyError(id/name,msg). It shows
    an error message that is related to a single property. Useful
    if you want to do custom checking in OnPropertyChanged handler
    and tell the user if he fumbled (currently message is not
    shown that well - probably improved in future).

  - There is now abstract wxArrayEditorDialog class declared in
    propdev.h. It can be derived to create editor dialog for
    any type of array. See wxArrayDoubleEditorDialog in the
    sample app for an example of how to do it.

  - wxBoolProperty has now wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING
    attribute. Set it to 1 to enable value cycling on double-click.

  - wxGetVariantCast(var,classname) is now redefined in propgrid.h
    to also take in account wxPropertyGrid-generated variants
    (normally the macro in question only works with regular
    wxObject-variants). Effectively makes WX_PG_VARIANT_TO_WXOBJECT
    obsolete.

  - wxPropertyGrid::Enable(property,bool) is now deprecated. Use
    wxPropertyGrid::EnableProperty instead.

  - Added wxBoolProperty related section to documentation main page
    (due to all special stuff now going on with it).

  - wxPropertyGrid::SetPropertyAttribute(id/name,wxPGVariant) is now
    SetPropertyAttribute(id/name,wxVariant) due to STL compatibility
    issues. There is no int-based constructor for wxVariant (as of
    2.5.4), so you need to cast constant ints to longs!

  - Similarly, wxPGProperty::SetAttribute(id,wxPGVariant) is now
    wxPGProperty::SetAttribute(id,wxVariant).

  - Added bool wxPGProperty::StdValidationProcedure(value) which
    can be used instead of common "DoSetValue(value); return TRUE;"
    sequence in propertyclass::SetValueFromString in order to
    automatically use any future validator code (ok for simple
    properties such as wxStringProperty and wxIntProperty,
    but not for wxArrayXXXProperty).


  Bugs Fixed:

  - Crash may occur some time after Clear (selection was not nulled properly).

  - Numerous compiler warnings and errors resolved for Borland C++
    (thanks to Dave Moor for reporting them).

  - wxOwnerDrawnComboBox's popup now closes on menu events and propertygrid
    scrolling as well.

  - There was no proper unspecified value support in wxOwnerDrawnComboBox.

  - Changes in splitter centering code may have solved various issues.

  - There was wxWidgets dir detection bug in POSIX installation script.



Version 1.0.0 BETA 2 ( Feb-20-2005 )

  NOTE: If you are upgrading from 0.9.9.x or earlier, then please
    read the 1.0.0 BETA 1 section below.

  New Features:

  - wxOwnerDrawnComboBox: A customizable generic combobox to be
    used with native controls. It allows custom painting popup
    items and even a completely custom popup. If you want to
    see how it behaves as a standalone control, use Custom Combo
    Sample item in Try These! menu.

    Sorry, no "double-click cycles" behaviour (yet).

    Sorry, no docs. See odcombo.h and propgridsample.cpp (end of
    the file) for some details.

  - 2.5.4 compatibility.


  Changes:

  - Native controls are now default. Added compiling section to
    the documentation to clarify how to revert to custom controls
    if so desired.

  - wxArrayString editor dialog now has different set of buttons
    enabled/disabled depending on whether the textctrl or the listbox
    is focused. This should improve its usability (but it could
    still be better - suggestions are welcome).

  - Added wxPropertyGridManager::SetDescription(label,content) to
    set custom content for description text box.

  - Added wxPropertyGrid::GetImageSize(). It returns size of the
    image custom paint in front of (some) properties.

  - UNIX install script is now able to auto-detect wxWidgets version.
    It also now has extra safety checks.


  Internal Property API Changes:

  - Added wxPGEditor::CanContainCustomImage. Returns TRUE if the actual
    control can contain the property's custom image. Base implementation
    returns FALSE.


  Bugs Fixed:

  - GetPropertyValues would crash with combination of NULL base parent
    and wxKEEP_STRUCTURE flag (now NULL will indicate usage of root
    property, as used in the sample app).

  - Type 2 tokenizer (used by the normal wxArrayStringProperty, for example)
    caused memory leak on unfinished token.

  - Massive amounts (100+) of category adding and removal was problematic.

  - wxMSW: Previously what was supposed to be dotted line was
    short dash instead.

  - wxGTK: Native controls were not always properly refreshed after
    their value was changed.

  - Few graphics glitches with check box editor (rect filled with
    background colour was lacking one pixel in width, focused item
    was not properly repainted on resize).



Version 1.0.0 BETA 1 ( Jan-24-2005 )

  SIGNIFICANT CHANGES! PLEASE READ CAREFULLY!

  To improve compile times, there has been a significant change to how
  new instances of property classes are created. Since now
  classes themselves are no longer global, a constructor function must
  be called instead of a standard constructor.

  Previously one would call:

    pg->Append( new wxIntProperty(wxT("Label"), wxT("name"), 0) );

  Now this would be used instead:

    pg->Append( wxIntProperty(wxT("Label"), wxT("name"), 0) );

  The only visible difference is the lack of keyword "new".

  As a consequence, actual classes had to be renamed. They
  now have "Class" appended to their names. However, only those
  who have created custom properties should really have to worry about
  this.

  See below for complete summary of changes in creating custom
  user properties.


  API and File Organization Changes (vs 0.9.9.x):

  - Project is now "propgrid" instead of "propertygrid". This changes
    include path as well ( "wx/propertygrid/xxx.h" -> "wx/propgrid/xxx.h" )

  - Header file name changes:
    "propertygrid.h" -> "propgrid.h"
    "propgext.h" -> "propdev.h"

  - wxPropertyGridManager got its own header file "manager.h".

  - Window style changes:
    wxPG_AUTOSORT -> wxPG_AUTO_SORT
    wxPG_NOCATEGORIES -> wxPG_HIDE_CATEGORIES
    wxPG_BOLDMODIFIED -> wxPG_BOLD_MODIFIED
    wxPG_SPLITTERAUTOCENTER -> wxPG_SPLITTER_AUTO_CENTER

  - wxVariant storage system changed a bit. Now for each value type which
    data type is not directly supported in wxVariant there is wxVariantData
    class. This allows pretty much flawless GetPropertyValues and
    SetPropertyValues. However, this comes at some price in executable
    size ( < 10k ) and that wxVariant::GetWxObjectPtr doesn't work any
    longer on those properties. Instead, you need to use this macro
    (similar to wxDynamicCast):

    WX_PG_VARIANT_TO_WXOBJECT(variant,targetclass)

    This should be considered a temporary solution (wxWidgets variant system
    needs fixing).

  - SetSelection -> SelectProperty, SelectPage (as appropriate).
    SelectProperty added to wxPropertyGridManager.
    ClearSelection added to wxPropertyGridManager.
    GetPropertyName added to wxPropertyGridManager.

  - wxALSO_CHILDREN flag (used by SetPropertyAttribute) was renamed to
    wxRECURSE.

  - wxPG_EX_FLAT_TOOLBAR is now default. Use wxPG_EX_NO_FLAT_TOOLBAR
    to disable it.


  New Features:

  - ChoiceAndButton editor class. Used by a new example, AdvImageFile
    property (its on first page in the app). It works like ImageFile
    property, but also has dropdown list of all tried image files
    (with thumbnails, too).

  - New property generator macro pair:
    WX_PG_DECLARE_ARRAYSTRING_PROPERTY(PROPNAME)
    WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY(PROPNAME,DELIMITER,CUSTBUTTXT)

    Creates a wxArrayStringProperty derivative which allows a custom
    string list delimiter and setting a custom editor action into
    the string editor dialog.

    PROPNAME = As usual.
    DELIMITER = wxT('"') for "str1" "str2" style and anything else for
      str1<DELIMETER> str2 style.
    CUSTBUTTXT = A const wxChar* text for a button label. NULL for no
      custom button.

    Also, you must implement the custom button method

    bool PROPNAMEClass::OnCustomStringEdit ( wxWindow* parent, wxString& value )

    even if you used NULL as CUSTBUTTXT.

    Included in the sample is wxDirsProperty as an example of using
    these macros.


  Summary of Other Changes in Creating User Custom Properties (vs 0.9.9.x):

  - Main change with macros is that they are always preceded by "WX_PG_"
    instead of nothing or "wxPG_", and that they generally accept
    property names (wxStringProperty is a property name,
    wxStringPropertyClass is property class name). Thus, first
    argument for IMPLEMENT macros should stay the same.

    Apart from the additon of prefix, easy-property macros such
    as DECLARE_STRING_PROPERTY and IMPLEMENT_CUSTOM_FLAGS_PROPERTY
    remain unchanged.

  - Since property classes are now generally hidden,
    WX_PG_DECLARE_PROPERTY(PROPNAME,TYPE_AS_ARG,DEFVAL)
    macro is used to declare a constructor function for them
    (instead of putting the class declaration into a header file).

    Example of use:

    WX_PG_DECLARE_PROPERTY(wxRealPointProperty,const wxRealPoint&,RealPoint())

    As always, there is also _WITH_DECL variant that takes an additional
    declaration argument (such as export).

  - DECLARE_PROPERTY_CLASS (now WX_PG_DECLARE_PROPERTY_CLASS), which
    was used inside a property class declaration, no longer has an argument
    (previously it had class name as argument).

  - IMPLEMENT_PROPERTY_CLASS(CLASSNAME,PARENTCLASS,VALUETYPE,EDITORCLASS)
    got rid of PARENTCLASS argument and got a TYPE_AS_ARG argument (same use
    as in WX_PG_DECLARE_PROPERTY), so it is now:

    WX_PG_IMPLEMENT_PROPERTY_CLASS(PROPNAME,VALUETYPE,TYPE_AS_ARG,EDITORCLASS)

    So for example:
    IMPLEMENT_PROPERTY_CLASS(wxFontDataProperty,wxFontProperty,
                             wxFontData,TextCtrlAndButton)

    is now:

    WX_PG_IMPLEMENT_PROPERTY_CLASS(wxFontDataProperty,wxFontData,
                                   const wxFontData&,TextCtrlAndButton)

  - To sum things up in an example...


      //* BEFORE *//

      // Header:

      class wxMyCustomProperty : public wxPGProperty
      {
          DECLARE_PROPERTY_CLASS(wxMyCustomProperty)
      public:
          ...
      };

      // Source:

      IMPLEMENT_PROPERTY_CLASS(wxMyCustomProperty,wxPGProperty,
                               MyValueClass,TextCtrl)


      //* NOW *//

      // Header:

      WX_PG_DECLARE_PROPERTY(wxMyCustomProperty,const MyValueClass&,MyValueClass())

      // Source:
      class wxMyCustomPropertyClass : public wxPGProperty
      {
          WX_PG_DECLARE_PROPERTY_CLASS()
      public:
          ...
      };

      WX_PG_IMPLEMENT_PROPERTY_CLASS(wxMyCustomProperty,MyValueClass,
                                     const MyValueClass&,TextCtrl)

  - wxPGProperty::GetValue
    is now
    wxPGProperty::DoGetValue

  - void wxPGProperty::GetValueAsString(wxString& str,bool fullvalue)
    is now
    wxString wxPGProperty::GetValueAsString(int argflags)
    So it now just returns the string instead of adding to the
    one given as argument. Also, previous (fullvalue == TRUE) test
    is now (argflags & wxPG_FULL_VALUE), but this is really only
    important for those rare properties that different stored/
    displayed value (wxPG_FULL_VALUE is set if true value should
    be returned instead of displayed one).

  - wxPGProperty::DoSetValueFromInt
    is now
    SetValueFromInt.

  - Changed flags arguments in wxPGProperty methods from long to int
    (affects SetValueFromString and SetValueFromInt).

  - In future, it is preferable to use WX_PG_DECLARE_XXX_METHODS()
    macros to declare overridden methods in property class declaration.
    This causes compile time failure if method specifications
    change, potentially saving debugging time.
      WX_PG_DECLARE_BASIC_TYPE_METHODS(): Declares
        GetValue, DoSetValue, GetValueAsString, SetValueFromString.
      WX_PG_DECLARE_PARENTAL_TYPE_METHODS(): Declares
        GetValue, DoSetValue.
      WX_PG_DECLARE_EVENT_METHODS(): Declares OnEvent.
      WX_PG_DECLARE_CHOICE_METHODS(): Declares GetChoiceInfo,
        SetValueFromInt.
      WX_PG_DECLARE_PARENTAL_METHODS(): Declares ChildChanged,
        RefreshChildren.
      WX_PG_DECLARE_CUSTOM_PAINT_METHODS(): Declares GetImageSize,
        OnCustomPaint.

  - WX_PG_DECLARE_VALUE_TYPE_VOIDP:
    Use this to declare value types implemented with
    WX_PG_IMPLEMENT_VALUE_TYPE_VOIDP (see below).

  - WX_PG_IMPLEMENT_VALUE_TYPE_VOIDP: Generates a wxVariantData class
    as well. This is necessary if you want a wxVariant list (acquired,
    for example, with GetPropertyValues) to own a copy of an object
    of the type (instead of holding just the pointer to the value stored
    in the property). wxVariantData_TYPENAME class is made globally
    accessible by WX_PG_DECLARE_VALUE_TYPE_VOIDP.

  - Old wxPG_IMPLEMENT_VALUE_TYPE_VOIDP is now
    WX_PG_IMPLEMENT_VALUE_TYPE_VOIDP_SIMPLE.

  - WX_PG_IMPLEMENT_VALUE_TYPE_VOIDP_CVD: Like, but instead of
    implementing own wxVariantData class, uses an app-provided one
    (there is extra argument for that purpose). Also, you need to use
    regular WX_PG_DECLARE_VALUE_TYPE with this implement macro.
    NOTE: wxVariantData class must have constructor that accepts
    a reference to the data type class and creates a copy of it.

  - wxPGProperty::UpdateControl(ctrl) added. It calls, if ctrl
    is valid, UpdateControl of the editor class. It is used
    in almost every propertyclass::OnEvent.

  - wxPGPaintData: m_choiceitem is now m_choiceItem.

  - Method generator macros (wxPG_IMPLEMENT_SETVALUE etc.) removed.
    Using them just made the code less clear.

  - Added specs for variable height image support in a choice editor
    drop-down.
    - GetImageSize must return wxPG_FLEXIBLE_SIZE(W,H) where W and H
      are Width and Height of preferred custom image size (both must
      be > 1).
    - When OnCustomPaint receives a call with rect.x < 0, then it
      is a measure item call that should return pd.m_choiceItem's
      height in pd.m_drawnHeight.

  - wxPGPaintData got m_drawnWidth member, which should be filled by
    OnCustomPaint if it infact painted wider or thinner image than
    it should.

  - wxPGProperty from wxObject inheritance option is no longer
    supported (allows simpler WX_PG_IMPLEMENT_PROPERTY_CLASS and
    WX_PG_DECLARE_PROPERTY_CLASS macro).

  - wxLongStringProperty's static functions ExpandEscapeSequences and
    CreateEscapeSequences moved to wxPropertyGrid.


  Other Changes:

  - Supplied bakefile generated makefiles for wxWidgets 2.5.2.
    Unix install script now asks which version you got and copies
    the apropriate makefile (in Windows you have to copy the
    required file manually).

  - wxCCustomComboBox: Now accepts left, right, pgup and pgdn
    keys (when popup not displayed).

  - wxPG_EX_NO_MODE_BUTTONS allows hiding categoric/alphabetic
    mode buttons from wxPropertyGridManager's toolbar.

  - If property grid's frame has status bar, then any property
    specific errors are shown there (instead of using wxLogError).

  - wxFileProperty etc. use proper Editor Class calls instead
    of assuming anything about the editor control used.

  - Added SetPropertyValue(id/name,wxObject&) to both wxPropertyGrid
    and wxPropertyGridManager. Previously there only was a version
    that accepted a wxObject*.

  - GetPropertyClassName now returns constructor function name
    (i.e. property name) instead of actual class name. Thus, string
    returned is the same as in previous versions.

  - wxPGEditor::SetControlValue -> UpdateControl

  - Added wxPGEditor::AppendItem for adding items for controls
    with children.

  - Added wxPGEditor::SetControlStringValue for setting string value
    specifically.

  - Added wxPGEditor::SetControlIntValue for setting int value
    (choice index etc.) specifically.


  Bugs Fixed:

  - There was crash if top-level (i.e. had root as parent)
    properties were used (needed to add m_bgColIndex = 0
    to wxPGProperty::Init).

  - wxPropertyGrid::Collapse and Expand: Attempted visible
    changes for categories in non-categoric mode.

  - Right click on custom control did not properly produce
    property right click event.

  - SetPropertyValues: If property/parent with list's name
    already existed, then list's contents was skipped.

  - GetPropertyValues: Names of list variants was extracted
    from property's label instead of name.

  - GetPropertyByLabel: Resulted in infinite loop.

  - GetFirstCategory and GetNextCategory did not work in
    non-categoric mode.

  - Tab, Shift-Tab, and Escape based property traversal
    worked even when wxTAB_TRAVERSAL was not specified.

  - Changed properties with children did not get properly
    repainted in all cases.

  - If SetPropertyValues was called with selected being
    a sub-property, then that selected property's editor
    control was not properly refreshed (now editor of
    selected is always refreshed in SetPropertyValues).

  - wxPropertyGridManager: Did not correctly get various flags
    (namely wxPG_HIDE_CATEGORIES). Changes in OnToolBarClick and
    SetWindowStyleFlag.

  - wxPropertyGridManager: Proper Refresh method was missing.

  - wxFontDataProperty: Did not check if editor control was NULL.

  - Choice editor didn't accept zero length string arrays.

  - Various bugs that may have existed in older releases.



Version 0.9.9.2 ( Jan-14-2005 )

  Changes:

  - wxGTK wxCCustomButton: gtk_paint_box and gtk_paint_arrow are now
    employed to draw real GTK buttons.

  - wxMSW wxCCustomButton: wxUxTheme is now used to draw real XP buttons.

  - wxCCustomComboBox: Popup now uses wxPopupWindow where available. With
    wxGTK this is currently disabled because it doesn't have proper border
    support for this type of window (as it would seem).

  - wxCCustomComboBox: When popup is open, background of text in the actual
    control is reverted to the standard colour (similar to Windows read-only
    combo).

  - wxCCustomTextCtrl: Double-clicking selects the word under cursor. This is
    done slightly differently under Windows and GTK, according to their native
    textctrl behaviour.

  - Added following methods, previously only available in wxPropertyGrid,
    to wxPropertyGridManager as well: GetPropertyByLabel.

  - Small section removed from wxFontDataProperty example (OnEvent's first
    conditional block; it is unnecessary and currently produces compilation
    error).


  Bugs Fixed:

  - Following properties crashed when running their dialogs when using
    limited editing option: wxLongStringProperty, wxDirProperty, wxFontProperty,
    wxFileProperty, wxImageFileProperty.

  - Native controls: When editor class did not create a control (in case of
    limited editing, for example), there would always be a crash.

  - Since native wxTextCtrl::SetValue generates change event, setting value to
    unspecified cleared property's value and sent property change event.

  - wxGTK wxCCustomButton: Moving mouse cursor from combo button to combo popup
    didn't remove hilighted status of that button.

  - wxFileProperty: Default file was unintentionally set to "*.XXX"
    (Chris Garrett).

  - wxFontDataProperty: When changing colour directly in the textctrl editor,
    colour value was not assigned correctly (resulted in assertion failure).

  - Graphics glitch involving a property with a button in limited editing mode.



Version 0.9.9.1 ( Jan-11-2005 )

  Changes:

  - Checkbox: wxDC::DrawCheckMark is now used to render much better check mark
    graphics.

  - Checkbox: An extra surrounding rectangle is drawn with wxDOT style to
    indicate when it is focused (this looks like a short dash on wxMSW - if
    anyone knows why, please tell me).

  - Checkbox: When property value is modified (and wxPG_BOLD_MODIFIED style is
    used), control's rectangle surrounding the check mark is drawn with 2-pixel
    wide line.


  Bugs Fixed:

  - wxEVT_KEY_XXX were not properly skipped, causing wxEVT_CHAR not to trigger.
    This meant it was impossible to write any text in wxCCustomTextCtrl
    (Vladimir Vainer).

  - In various places in code, calls to Editor->SetControlValue did not check
    for NULL editor control. This meant horrible amount of crashes in some
    scenarios (Vladimir Vainer).

  - wxEVT_PG_CHANGED did not usually occur when changing value of an
    unspecified property for the first time.



Version 0.9.9 ( Jan-10-2005 )

  New Features:

  - Unspecified values are now supported. This is a virtual system only, so
    internally the value stays the same. Only the displayed value is different.
    Use new methods listed below (thanks to Andrew B for suggesting this feature).

  - Property specific background colours are now supported. Use new methods listed
    below. Also note that SetCategoryColour/GetCategoryColour are removed, but
    identical results can be obtained by using new methods.

  - CheckBox editor class, as an alternate to Choice used with wxBoolProperty.
    Use SetPropertyAttribute(id/name,wxPG_BOOL_USE_CHECKBOX,1) to enable it
    for a single property. Set optional flags argument to wxALSO_CHILDREN
    for all child bool properties to use it as well.

  - Native control support is back, better than ever! Custom controls are still
    used by the default, but that should change by setting define
    wxPG_USE_CUSTOM_CONTROLS=0 in the library project settings.

  NOTE: There are changes to property class system (including implementation of
    wxFontDataProperty, wxSizeProperty and wxPointProperty examples). See
    "Internal changes of note" below for details.

  GTK NOTE: If using native controls with wxGTK <= 2.5.3, then please apply the
    following patch. If not, then controls will have excess border and due to
    that potentially alignment problems.

    https://sourceforge.net/tracker/index.php?func=detail&aid=1098374&group_id=9863&atid=309863


  New Methods:

  - SetPropertyValueUnspecified(id/name): Sets value of property to "unspecified".
    Children are processed too, so to set everything call with GetRoot() as arg.
    Internally value is not modified, but for the user it should seem like nothing
    is set.

  - IsPropertyValueUnspecified(id/name): Returns TRUE if property's value was
    set to "unspecified".

  - SetPropertyColour(id/name,wxcolour): Sets custom background colour to a property
    and all of its children. Can be used on categories as well.

  - GetPropertyColour(id/name): Returns background colour of a property.

  - SetPropertyColourToDefault(id/name): Reverts colour of property and its children
    to the current default cell background colour (set using SetCellBackgroundColour).

  - SetPropertyAttribute(id/name,attrid,value,[flags]): Sets a property class/instance
    specific attribute, such as wxFloatProperty precision. Flags can be wxALSO_CHILDREN
    which causes attribute to be set to all children as well.

  - wxPropertyGrid::GetFontHeight(): Returns maximum vertical extent used by
    the current font.


  Name Changes:

  - SetCategoryColour -> SetPropertyColour
  - SetCategoryColourToDefault -> SetPropertyColourToDefault
  - GetCategoryColour -> GetPropertyColour


  Other Changes:

  - Added following methods, previously only available in wxPropertyGrid,
    to wxPropertyGridManager as well: EnableCategories, EnsureVisible, GetFirst,
    GetLastChild, GetPrevSibling, GetPropertyClassName, GetPropertyHelpString,
    GetPropertyValueType, InitAllTypeHandlers, IsPropertyValueType, Sort.

  - Native controls that had borders even when wxNO_BORDER style was used
    now use another wxWindow to clip them (thanks to Vadim Zeitlin for suggesting this).

  - Custom choice selection "marker" changed to better mimic the native control
    (i.e. now blue background when selected, instead of black rectangle drawn
     with wxDOT pen style).

  - wxCCustomTextCtrl: HitTest performance and accuracy significantly improved.

  - wxGTK: Custom button pressed state colour corrected. Also added more
    authentic drop-down arrow.

  - wxPropertyGridManager: Changed the built-in icons. Define wxPG_USE_DOTNET_ICONS=1
    inorder use the original ones.

  - SetBackgroundColour() now mimics SetOwnBackgroundColour's behaviour.

  - Custom Controls: Mousewheel events now properly skipped (except for the popup).


  Internal changes of note:

  - Editor class system. Each property class got GetEditorClass method which is
    automatically generated with DECLARE_PROPERTY_CLASS and IMPLEMENT_PROPERTY_CLASS
    macros. IMPLEMENT_PROPERTY_CLASS now requires an extra argument which tells
    the editor class type. Builtin class symbols are TextCtrl, Choice, TextCtrlAndButton,
    and CheckBox.

  - DoSetValue(value,ctrl) is now DoSetValue(value). Accordingly, setting value
    to control must now be omitted from implementations of this method.

  - DoSetValueFromString(value,ctrl,flags) is now DoSetValueFromString(value,flags)

  - New wxPGProperty virtual method: GetImageSize. If property has custom image,
    override this to return size of that.
    Also, properties no longer have to set wxPG_PROP_CUSTOMIMAGE themselves.

  - New wxPGProperty virtual method: SetAttribute. This is the future preferred
    way to set specific property class values (for example, wxFloatProperty precision
    and wxBoolProperty editor class type).

  - New wxPGProperty virtual method: GetChoiceInfo. If property uses Choice editor
    class (or something similar), and it doesn't inherit from a class that
    already properly implements it (wxBoolProperty and wxEnumProperty do), it
    must be overridden. See header and source files for details.

  - New wxPGProperty virtual method: DoSetValueFromInt. Same rule of importance
    as for GetChoiceInfo.

  - Custom controls: wxCustomXXX renamed to wxCCustomXXX to mark them different
    from potential wxWindow based "true" custom controls.


  Bugs Fixed:

  - Didn't compile in 2.5.2.

  - Right click on image didn't necessarily produce a right click event.

  - Properties derived from wxEnumProperty that used the same value type (long),
    and didn't set valid index for value 0, caused crash in ClearPropertyValue
    (wxCursorProperty, for example, suffered from this symptom).

  - Settings window style flags to wxPropertyGridManager unintentionally
    removed some flags used in the underlying wxPropertyGrid.

  - wxGTK: Native editor controls were not repainted after collapse or expand.

  - Native controls: In one occasion, mouse events detected position of editor
    control incorrectly. Resulting was that, for example, right-click event
    did not always occur as expected.

  - Native controls: Right click didn't work on controls (now it works
    that way in wxMSW).



Version 0.9.8 ( Dec-30-2004 )

  New Features:

  - EVT_PG_PAGE_CHANGED: Handles wxEVT_PG_PAGE_CHANGED type events which occur
    when propertygridmanager page has changed. Use wxPropertyGridManager::GetSelectedPage
    to obtain page that was switched to. This event always has invalid property
    associated with it.

  Name Changes:

  - IsCategory -> IsPropertyCategory
  - IsSelected -> IsPropertySelected
  - IsExpanded -> IsPropertyExpanded

  New Methods:

  - SetPropertyValue(id/name,wxArrayInt): for wxMultiChoiceProperty.
  - GetPropertyValueAsArrayInt(id/name): for wxMultiChoiceProperty.
  - IsPropertyModified: new, proper name for IsModified (which may
    be removed at some point).
  - wxPropertyGridManager::SetDescBoxHeight: sets the height of the
    description text box.
  - wxPropertyGridManager::GetPageName: returns name/label of given page.
  - IsAnyModified: returns TRUE if any property in grid/manager
    was modified.
  - wxPropertyGridManager::IsPageModified(index): returns TRUE
    if any property on given page was modified.
  - wxPropertyGridManager::GetSelectedProperty(): shortcut
    for GetGrid->GetSelection().

  Other Changes:

  - wxCustomTextCtrl: HitTest further improved. Caret moved to the
    empty space between characters.
  - Added following methods, previously only available in wxPropertyGrid,
    to wxPropertyGridManager as well: SetBoolChoices, Collapse, Expand,
    GetNextSibling, GetPropertyCategory, IsPropertyCategory.
  - wxPG_CLASSIC_SPACING moved to extra styles (it is now wxPG_EX_CLASSIC_SPACING).
  - DoGetBestSize() now returns a much smaller area (still, right now I can't get it
    to work as good as I want).
  - wxPropertyGridManager's description text box no longer overlaps
    with its minimum size wxPropertyGrid.
  - Splitter is no longer automatically resized when only a scrollbar
    (dis)appearance was detected.
  - Method PropertyHasCategory removed (use GetPropertyParent and
    IsPropertyCategory combination instead).
  - Method PropertyHasSubProperties removed (use GetFirstChild and
    IsPropertyCategory combination instead).
  - Method IsSubProperty removed (use GetPropertyParent and
    IsPropertyCategory combination instead).
  - Height change treshold which triggers Refresh instead of RedrawAllVisible
    changed to 100 (it was 10). This reduces flicker but should not reintroduce
    graphics glitches due to some fixes in few previous releases.
  - Added tests to sample application.

  Internal changes of note:

  - To fix things, bool value type's TypeName is now "long" to allow
    assigning longs to it (no cast to bool necessary in SetPropertyValue).
    Its CustomTypeName is still "bool" to allow auto-creating wxBoolProperty
    instead of wxIntProperty for it.
  - Custom controls: wxCustomXXXData classes renamed to wxCustomXXXHandler
    (wxCustomXXXComponent would have been another appropriate name).
  - wxCustomComboBox changed so that it allows any types of popups, not
    just simple lists (90% complete, not documented in any manner yet).
  - Added wxPG_IMPLEMENT_VALUE_TYPE_WXOBJ_OWNDEFAULT macro that holds
    default value in itself, instead of returning a reference to a
    value stored elsewhere.

  Bugs Fixed:

  - SetPropertyValue(id,bool) was missing.
  - GetPropertyValueAsBool did not work.
  - Const wxChar*'s get cast to void* instead of wxString ( there is now
    an additional inline SetPropertyValue wrapper for that particular case).
  - wxPG_EX_FLAT_TOOLBAR did not work.
  - wxColourProperty's custom-to-listed translation did not always work.
  - wxCustomTextCtrl: pressing HOME, END, LEFT or RIGHT when all selected did
    not necessarily reset the selection.
  - wxGetNextProperty did not go into child categories.
  - Default value of wxFontDataProperty (in sample application) did not
    work, causing ClearPropertyValue to crash (Vladimir Vainer).
  - wxPGValueType was missing a virtual destructor.
  - wxLongStringProperty's ExpandEscapeSequences and CreateEscapeSequences
    did not check for zero-length string (Vladimir Vainer).
  - Few stupid crashes in the sample.


Version 0.9.7 ( Dec-20-2004 )

  New Features:

  - wxMultiChoiceProperty: Property that embeds wxMultiChoiceDialog
    as transparently as possible. Thus, strings are given as
    wxArrayString and value as wxArrayInt.

  Other Changes:

  - wxPG_INIT_NOCAT moved to extra styles (it is now wxPG_EX_INIT_NOCAT).
  - Added simple scrollbar detection code to SizeEvent handler resolve
    few graphics glitches and fix a hack used with wxGTK.
  - Description box got proper borders.
  - wxColourProperty: When custom colour given as value, colour list
    is examined, and if match is found, then that specific "labeled"
    colour is selected instead. Note that right now this is not used in
    wxSystemColourProperty.
  - wxFileProperty: Searches for best default filter index when value is
    given the first time.
  - wxCustomChoice now handles mousewheel events.
  - wxCustomTextCtrl: now handles events when dragging and mouse
    cursor is outside the rect (which is correct behaviour).
  - wxCustomTextCtrl: last visible character is now shown
    more consistently.

  Bugs Fixed:

  - Description box not correctly refreshed on page change.
  - wxGTK: Skewed virtual size at startup.
  - Graphics glitches with Delete (it now does full refresh).
  - wxArrayStringProperty event handler destroyed dialog prior to calling
    its GetStrings method.
  - SetPropertyLabel did not refresh properly when auto sorting enabled.


Version 0.9.6 ( Dec-17-2004 )

  New Features:

  - wxPropertyGridManager: Embeds wxPropertyGrid, and optionally toolbar,
    adjustable description box, and a compactor button. Automatically
    manages multiple pages of properties, and mirrors many (eventually
    most) of the wxPropertyGrid's methods. See documentation ( section
    Using wxPropertyGridManager on main page) for details.

  - Added following custom property examples to the sample application:
      wxFontDataProperty: Extends wxFontProperty with a colour subproperty.
          Value type is wxFontData (which is used with wxFontDialog).
      wxPointProperty: A simple property for wxPoint class.
          Has two children, "X" and "Y".
      wxSizeProperty: A simple property for wxSize class.
          Has two children, "Width" and "Height".

  - wxPG_LIMITED_EDITING window style flag: disables textctrl based editors
    for properties which can be edited in another way. Equals calling
    wxPropertyGrid::LimitPropertyEditing for all added properties.

  - EVT_PG_RIGHT_CLICK event: handles wxEVT_PG_RIGHT_CLICK, which
    occurs when a property is right clicked. For consistency, also occurs
    when clicking outside property area, but with invalid property id.

  Name Changes:

  - Value type implementor macro names made more consistent:
    wxPG_IMPLEMENT_WXOBJECT_TYPE -> wxPG_IMPLEMENT_VALUE_TYPE_WXOBJ
    wxPG_IMPLEMENT_TYPE -> wxPG_IMPLEMENT_VALUE_TYPE
  - wxPG_NOCATINIT -> wxPG_INIT_NOCAT. Other window style name changes
    also pending.
  - IsEnabled() -> IsPropertyEnabled(). IsEnabled conflicted with
    wxWindow::IsEnabled.

  New Methods:

  - ExpandAll: Expands all items that can be expanded.
  - GetRowHeight: Returns height of a grid row in pixels.
  - SetPropertyValue(id/name,void*): Sets property's value, incase value type is void*
  - GetPropertyValueAsVoidPtr(id/name): Gets value from property, incase value
    type is void*
  - SetBoolChoices(truestr,falsestr): Static method that allows changing choice
    strings for wxBoolProperty.
  - GetPropertyValueAsSize(id/name): Returns value as wxSize. Does type checking.
    Fully inline since wxSizeProperty is not in the library.
  - SetPropertyValue(id/name,wxSize): Sets value from wxSize. Does type checking.
    Fully inline since wxSizeProperty is not in the library.
  - GetPropertyValueAsPoint(id/name): Returns value as wxPoint. Does type checking.
    Fully inline since wxPointProperty is not in the library.
  - SetPropertyValue(id/name,wxPoint): Sets value from wxPoint. Does type checking.
    Fully inline since wxPointProperty is not in the library.
  - GetPropertyIndex: returns property's position under its parent.
  - wxPropertyGridEvent::EnableProperty: Enables property.
  - wxPropertyGridEvent::DisableProperty: Disables property.
  - wxPropertyGridEvent::IsPropertyEnabled: Returns TRUE if property is enabled.

  Other Changes:

  - Categories can now be added in non-categoric mode as well. However, if adding
    to root, the index, in case of Insert, is ignored and the category is appended
    instead.
  - wxColourProperty etc: Custom colour is now indicated with "(R,G,B)" instead
    of "Custom (R,G,B)" for saving screen real-estate.
  - wxColourProperty: Colour list should now have same colours as Windows
    font dialog colour selector. Order is similarly from dark to light.
  - GetPropertyValues: added two arguments, baseparent and flags. baseparent is the
    item under which the properties are got (default is root). Flags can be
    wxKEEP_STRUCTURE if each sub-category is read into a separate wxVariant list.
  - SetPropertyValues: now handles list variants, creating a new sub-category for each.
  - void* type is back. Its typename is "void*", as in wxVariant.
  - Added style wxPG_ALPHABETIC_MODE as a combination of wxPG_NOCATEGORIES and wxPG_AUTOSORT.
  - GetPropertyValueAsXXX(id) methods are now static.
  - Currently, Append is commented out and Insert is used instead. Less code to worry about.
  - Sample's standard items page is now split into two. The new page has example
    sections.

  Property System Changes (important if you have made custom property classes):

  - wxPGPropertyWithChildren now has virtual RefreshChildren.
  - wxPG_SetVariantWxObjectValue macro no longer gets a value argument. Now it
    uses GetValue automatically (increases tolerance for inheriting).
  - wxPG_SetVariantVoidPtrValue() macro for void* value types.
  - wxPG_IMPLEMENT_VALUE_TYPE_VOIDP(CLASSNAME,TYPE,DEFVAL) for non-wxObject
    classes.

  Bugs Fixed:

  - Placing wxPropertyGrid at a high enough y position could cause its
    visibility cache recalculation to fail.
  - Default values of derived value types did not work at all (this included
    default values of custom flags and enum properties that could be generated
    via macro pairs).
  - Using wxPG_NOCATINIT style should have resulted into crash or strange behaviour.
  - wxCustomChoice drop-down placement calculation used logical coordinates
    instead of physical.
  - Window style flags were at 0x0001 -> 0x0800 range instead of correct
    (according to wxToolbar's headers) 0x0010 -> 0x8000 range.
  - LimitPropertyEditing caused graphics glitches with some properties (atleast
    wxFontProperty).
  - wxPGPropertyWithChildren default GetValueAsString added an extra "; "
    at the end of the list of child values.
  - wxFontProperty's text in editor was not correctly refreshed after font
    dialog was closed.


Version 0.9.5 ( Dec-08-2004 )

  New Features:

  - The old wxColourProperty is now wxSystemColourProperty. The new wxColourProperty
    is simpler, equipped with wxColour as value type, and only has some some basic
    colours in its drop-down selection. Note that wxColourPropertyValue's name is left
    intact. wxSystemColourProperty's original constructor (with initial value
    given as two distinct arguments) is removed; instead, now it has (label,name,
    wxcolourpropertyvalue) and (labe,name,wxcolour) constructors.

  - Four types of user properties can now be quickly created using
    DECLARE/IMPLEMENT macro pairs. Here's brief descriptions:

        A) StringProperty with button which function is specified.

        B) wxFlagsProperty with custom default value and built-in labels and values.

        C) wxEnumProperty with custom default value and built-in labels and values.

        D) wxColourProperty with custom colour drop-down.

    Documentation main page has now much better "Creating New Properties"
    section, including instructions how use macros to implement those
    types of properties mentioned above.

  - Help strings can now be associated with properties using SetPropertyHelpString().
    Right now they will be shown in status bar (if any) when property is selected.

  Name Changes:

  - wxColourProperty -> wxSystemColourProperty.
  - GetAllValues -> GetPropertyValues.

  New Methods:

  - SetPropertyValues: sets property values from wxVariant list. List items that
    do not have corresping properties will be created using new NewProperty method.
  - SetPropertyHelpString: associates a help string with a property.
  - GetPropertyHelpString: returns associated help string.
  - CollapseAll: as the name says, this collapses all collapsible items.
  - GetPropertyClassName: returns class name of a property. If wxPGProperty is derived
    from wxObject (or wxVariant) then it uses GetClassInfo()->GetClassName(), otherwise
    a builtin (more lightweight) alternative.
  - InitAllTypeHandlers: initializes all built-in types. As a side effect, creates
    references to most built-in property classes, thus possibly increasing executable size
    when using static library. Mainly useful with SetPropertyValues.
  - NewProperty(label,name,variant): creates new property instance, determining class
    and initial value from third argument (which is a reference to wxVariant).

  Other Changes:

  - Moved wxArrayStringProperty to core properties.
  - All base property classes are now abstract.
  - wxCustomComboBox and wxCustomChoice dropdown now have keyboard control.
  - More consistent visibility cache updating to reduce problems in a
    few complicated situations.
  - If option to inherit from wxVariant or wxObject is not used (as is the default),
    virtual function to return property class name is generated by the IMPLEMENT_XXX
    macro.
  - wxLongStringProperty and all classes created with IMPLEMENT_STRING_PROPERTY
    now convert newlines and tabs into escape sequences when shown/edited in textctrl.
  - Add removed since there are already too many Append overloads.
  - wxSystemColourProperty now has two new constructors: One that accepts
    wxColourPropertyValue reference and other that accepts wxColour.
  - wxMSW: wxCustomComboBox focus indicator rectangle should now have black colour
    (but I think the wxDOT style still doesn't show right).

  Property System Changes (important if you have made custom property classes):

  - wxPG_IMPLEMENT_TYPE etc. macro usage changed. They now have new argument, at the third
    slot, which is the default property class for that type.
  - New wxPGValueType for bool (before, long type was used for bool as well, but now
    we need a bit more type accuracy).
  - DECLARE_PROPERTY_CLASS etc. macros now contain GetValueType() method declaration
    when necessary.
  - GenerateChildren method removed. Instead, children are now generated
    in the constructor.

  Bugs Fixed:

  - WXK_BACKSPACE processing in wxCustomTextCtrl did not take selection into account.


Version 0.9.4 ( Nov-29-2004 )

  New Features:

  - Categories can now be inserted under other categories. In non-categoric mode, items
    of all categories are shown at top level, regardless of their depth in categoric mode.
  - wxParentProperty - only property which can have a custom selection of sub-properties
    (of which any can be wxParentProperty themselves). Has textctrl which edits the values
    similar as with wxFontProperty. When iterating through properties (GetNextProperty etc.),
    wxParentProperty is ignored, but its children are not.
  - wxPG_HIDE_MARGIN style hides margin and prevents user from expanding/collapsing anything.
    Default state of all collapsible items becomes expanded.
  - wxPG_STATIC_SPLITTER style prevents user from moving the splitter.
  - wxPG_STATIC_LAYOUT combines wxPG_HIDE_MARGIN and wxPG_STATIC_SPLITTER. Sample can demonstrate
    use of this combination.
  - Sample application can now be used to browse some of the used wxWidgets library configuration.

  New Methods:

  - Append(prop) and Insert(parent,index,prop) have overloaded versions that allow adding
    simple type variables easier. For example Append(name,label,string) automatically adds
    a wxStringProperty.
  - AppendIn does exactly the same as append, but first argument is id or name to a parent
    under which the newly created property is added.
  - ClearPropertyValue method allows resetting value of a property to the type default.
  - GetPropertyValueAsXXX methods for value acquisition. GetPropertyValueAsString() returns
    full text representation of the property value, regardless of the actual value type of
    that property.
  - IsPropertyValueType methods allow direct checking whether property's value type matches
    a given string (as a value type name) or pointer to value type directly.
  - SetCurrentCategory method allows setting category under which Append adds properties.

  Changes:

  - wxColourProperty now displays correct text all the time (i.e. with custom colour, always
    Custom(R,G,B) instead of just Custom).
  - Initial changes to improve conformance to wx coding standards.
  - GetPropertyValue() returns now wxVariant instead of wxPGVariant.
  - By the default, expand/collapse buttons are now vertically centered. Use wxPG_CLASSIC_SPACING
    style to enforce original spacing.
  - wxPropertyGridEvent methods now have "Property" in their names (for example, GetPropertyValue
    instead GetValue).
  - wxPGId now has comparison operators for wxPGId, wxString(as property name) and const wxChar*
    (also as property name).
  - Part of the propertygrid.h moves to propgext.h, which should be included by user sources
    when they define new property classes.
  - Default name for a property is now it's label instead of wxEmptyString.
  - wxFloatProperty now uses double and value is pointer to it.
  - SetPropertyValueAsFloat() method no longer required. Just use SetPropertyValue() instead
    and cast when you encounter an ambiguity (should now be issue with longs only, not ints).
  - Main property draw function somewhat optimized.
  - Small improvement for OnResize Refresh handling.
  - Sub-properties can now themselves be parents for sub-properties (altough don't expect
    you can add anything to likes of wxFontProperty or wxFlagsProperty).
  - Documentation: Stripped a lot of the "Creating New Properties" section. Mostly obsolete
    stuff that I don't want to keep up-to-date right now.
  - Documentation: Examples should now reflect the significant API changes.

  Property System Changes (important if you have made custom property classes):

  - Value type system.
  - OnEvent's event arg is now wxEvent& instead of wxEvent*.
  - SetValue is now DoSetValue.
  - DoSetValue methods should now include wxPG_SetVariantValue(value) style line.
  - DoSetValue methods' value argument is now of type wxPGVariant instead of void*.
  - GenerateEditorWidgetXXX methods are now GenerateEditorXXX methods.
  - New GenerateEditorTextCtrlAndButton method.
  - GenerateEditorChoice now embeds string array re-allocation (SLAlloc etc.) code.
  - GenerateEditorChoice now uses wx(Custom)ComboBox with wxCB_READONLY to allow
    displaying custom text instad of value label.
  - Choice editor generation simplified - see wxEnumProperty etc. for details.
  - GetValue method is now const.
  - GenerateChild replaced with GenerateChildren.
  - GetValueAsString got second bool argument which, when set to TRUE generates
    complete value (pseudo-storable kind) instead of displayed value.
  - SetValueFromString bool argument is now long flags style argument that can have
    wxPG_REPORT_ERROR (function of old bool) and wxPG_FULL_VALUE flags.

  Bugs Fixed:

  - wxPGPropertyWithChildren::SetValueFromString() could not detect zero-length tokens.
  - Category could not be properly selected by clicking on its text if splitter was at
    farther left position.
  - Internal flags distorting bug in SetDefaultPriority method.
  - A small graphics glitch related to custom controls and properties with an image.


Version 0.9.3 ( Nov-21-2004 )

  New Features:

  - wxArrayStringProperty - for editing a list of strings.
  - wxImageFileProperty - like wxFileProperty, but has thumbnail of the image in front of
    the filename and autogenerates wildcard from available image handlers (buggy under
    wxGTK - most image handler extensions only have the first character).
  - wxCursorProperty - allows selecting one of the common (non-platform specific) cursors.
    Under Windows shows cursor images in the drop-down list (under GTK this isn't easy
    since there doesn't seem to be a function to do it nor is there a way to directly access
    the cursor pixmap).
  - Compact mode where low-priority properties are hidden. Preferred way is to call
    SetDefaultPriority(wxPG_LOW) before starting to add low-priority ones and
    ResetDefaultPriority() when done, altough individual properties can be set with
    SetPropertyPriority(id,priority). Then Compact( TRUE/FALSE ) calls will trigger whether
    low-priority properties are hidden or not. Sample now has checkable Compact item in
    "Try These" menu that will demonstrate this feature.
  - wxCustomButton now has wxGTK native rendering (other platforms still use wxMSW rendering).

  Changes:

  - wxFlagsProperty items must now be separated by commas (semicolons are *not* ok anymore).
  - For consistency, GetNext() and GetPrev() are now GetNextProperty() and GetPrevProperty()
    (original versions are removed and reserved for later reintroduction for iterating over
    any items).
  - SetPropertyValueAsFloat() method for setting values to wxFloatProperties.
  - SetPropertyValue method that accepts a wxString value now uses property's SetValueFromString
    method (so it can be used with all kinds of properties, not just those with string type).
  - wxPGPropertyWithChildren (including wxFontProperty which is derived from it) now gets
    wxTextCtrl editor - it is important that the items are separated by semicolons.
  - List of visible items is cached to make GetItemAtY calls (and, to a lesser degree, few
    other things) a lot faster.
  - New LimitPropertyEditing() method disables wxTextCtrl of the property (if any), if it
    also has another way to edit the property (usually a button that triggers a dialog).
  - New GetFirst() method returns first item, whether it is property or category.
  - New GetFirstVisible() method does the same thing, but not being hidden is a requisite.
  - New GetItemAtY() method returns property or category at given coordinate.
  - wxCustomTextCtrl's HitTest is now accurate (and faster due to extent caching).
  - wxFileProperty remembers filter index across dialog displays.
  - Change to Append: When adding a category with name identical to a category already in the
    wxPropertyGrid, then newly created category is deleted, and most recently added category
    (under which properties are appended) is set to the one with same name. This allows easier
    adding of items to same categories in multiple passes.
  - EnableProperty and DisableProperty are now aliases for Enable and Disable (property, not
    wxWindow versions) respectively.
  - Tooltips disabled in sample application.

  Internal Changes to Properties:

  - All properties now have SetValueFromString() method which allows wxPGPropertyWithChildren
    editing feature. This method basicly now gets most code from CopyValueFromControl()
    methods of wxTextCtrl edited properties.
  - Instead of returning TRUE with GetValueAsString() method, usage of custom image is now
    signaled by setting wxPG_PROP_CUSTOMIMAGE flag in the constructor.
  - Following property methods are now const: GetValueType.

  Bugs Fixed:

  - When category was disabled, its children were not (Vladimir Vainer).
  - wxCustomChoice's button was not released correctly in all cases.


Version 0.9.2 ( Nov-10-2004 )

  New Features:

  - Tooltips show labels and values that do not fit completely to a cell (use new wxPG_TOOLTIPS style).
  - wxFloatProperty - like wxIntProperty but value is a Floating Point number.
  - wxFlagsProperty has textctrl based editor in addition to the child properties.
  - wxCustomTextCtrl supports Cut, Copy and Paste.
  - wxEVT_PG_HIGHLIGHTED event that occurs when mouse hovers over another property.
  - Added documentation: 'Using wxPropertyGrid' (or how wxPropertyGrid should behave) section.

  Changes:

  - Scrollbar unit height now equals item height.
  - Splitter dragging is now relative (looks a bit nicer).
  - All controls should now get modified status only after their value truly gets modified
    (earlier it was acceptable that they sometimes got modified status accidentally).
  - OnResize() now uses plain Refresh() instead of RedrawAll() when height changes a lot (by more than
    10). This should fix 95% of the OnResize() based graphics distortion issues, but causes some
    visible flickering.

  Internal Changes to Properties:

  - wxPGProperty has new method CopyValueFromControl, which allows other changes listed below.
  - wxPGProperty's base behaviour for CreateEditor method is now to create a textctrl
    (earlier it didn't do anything). This allows removing of many identical methods from derived
    property classes.
  - wxPGProperty's base behaviour for OnEvent method is now to handle events typical to both
    textctrls and choices (earlier it didn't do anything).  This allows removing of many
    identical methods from derived property classes.
  - Following property methods are now const: GetValueAsString.

  Bugs Fixed:

  - wxCustomTextCtrl's caret behaved wildly.
  - wxCustomChoice popup was not adjusted to fit the window when there was too little space.
  - DrawItemAndChildren method overdrew the double buffer.
  - wxCustomButton did not recognize a double click as a click.
  - wxCustomTextCtrl crashed when its right edge was clicked.


Version 0.9.1 ( Nov-06-2004 )

  New Features:

  - Custom editor controls for more consistent look and behaviour
    (sort-of experimental; there is a lot of room for improvement here).
  - Keyboard Support: Arrows navigate while editor control unfocused,
    Tab/Shift-Tab when focused.
  - Custom wxChoice: double clicking cycles the item.
  - Double-clicking splitter centers it (and re-enables automatic centering).
  - wxFileProperty now has wxTextCtrl.
  - wxFileProperty constructor has a new argument (placed before value)
    that, when set to TRUE, allows full path to be shown/edited (instead
    of only full filename as before).
  - EnsureVisible method (like wxTreeCtrl's).
  - Add method is now an alias for Append.

  Changes:

  - Advprops.cpp integrated into the library.
  - Simplified file structure of the sample application.
  - Improved the 'grey colour scheme' option in sample application.
  - POSIX setup script can now compile library and sample for you as well.

  Internal Changes to Properties:

  - OnCustomPaint now only paints a small image, not the entire cell.

  Bugs Fixed:

  - wxMSW: When category was collapsed with scrollbar visible and in
    scrolled position, there was graphics distortion.
  - SetSplitterPos() did not adjust editor control properly.
  - Selecting same item in wxEnumProperty and derivates marked it
    as modified.
  - Pressing enter in wxDirProperty and wxLongStringProperty marked
    it as modified.
  - Path for wxFileProperty was not translated correctly from the
    wxFileDialog.
