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 sometimesskewed. - When a property with children was expanded or collapsed, and current selection was outside the visible area, then the grid was inadvertedly scrolled to the selection. Version 1.0.4 ( May-21-2005 ) Changes and Minor Features: - Colour scheme generator is now smarter and should be considerably better for various Windows themes. If you do not like how it looks, edit contrib/include/wx/propgrid/propgrid.h and change define wxPG_NEW_COLOUR_SCHEME to 0. - wxUIntProperty for representing unsigned integers. You can change base (default is decimal) and prefix by manipulating wxPG_UINT_BASE and wxPG_UINT_PREFIX attributes. See Attribute Identifiers module in the documentation for more info. - Added wxPropertyGridManager::ClearPage(page) to delete all properties on given page. Bug Fixes: - If value in textctrl editor was edited, and splitter was subsequently moved, then the corresponding wxPG_EVT_CHANGED was not sent. - Windows 2000: Pressing ALT + some key that isn't actually bound to a shortcut caused program to hang (thanks Bernard Duggan). - WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY and WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR did not compile (and neither did their declare counterparts). - wxFontProperty: setting invalid Family, Style, or Weight caused a crash (assertion failure in debug build). - Giving -1/wxID_ANY as id to wxPropertyGridManager resulted in an assertion failure. - Description box or status bar were not cleared consistently when Thaw() and Freeze() were used when deleting items. - wxPropertyGrid::SetPropertyValueUnspecified(name) had typo in its name (Value was missing). Version 1.0.3 ( May-13-2005 ) Bug Fixes: - Changes were not copied (and wxEVT_PG_CHANGED event was not sent) from wxTextCtrl based editor when focusing out of the property grid, or when the grid was being destroyed. This is now solved by committing changes and sending the event when focus or mouse moves leaves the property grid and when special key (alt,ctrl,meta - which are connected to closing the app via keyboard) is pressed while text is being edited. If this fails to work, *error message will be shown on grid deletion*. - Keyboard navigation code has been overhauled. Fixes include: * Keyboard navigation in wxPropertyGrid placed in wxDialog or wxPanel was seriously skewed. * Keyboard navigating upwards (and sometimes downwards as well) did not scroll to navigated property. * It was possible to navigate out with arrow keys. * Changing mode in wxPropertyGridManager stopped keyboard navigation from working. * Now, when there is no selection, first non-tab, non-esc key down event will select the topmost property. Known things that don't work yet: * wxGTK: Pressing ESC in property editor does not unfocus it correctly. - Right-clicking now selects the property underneath. - ClientData methods were not enabled by the default, and if they were manually enabled, there were compile errors (thanks Bernard Duggan). - wxPropertyGridManager::SetWindowStyleFlag was seriously flawed. - Few ignorable but rare assertion failures removed. - Sample app incorrectly placed multiple controls on plain wxFrame (which is apparently a no-no). - Another Borland C++ fix (hopefully its now fine, thanks Luigi Bianchi). - Flag indicating read-only editor was not inherited by fixed sub-properties. Version 1.0.2 ( May-03-2005 ) Changes: - wxParentProperty has been re-implemented (I thought wxCustomProperty could replace it but that turned out not to be practical). Added section on docs main page as well. - It is now possible to have nested properties that use the default SetValueFromString/GetValueAsString (which prints something like "child value 1; child value2; ...etc..."). Children with sub-items of their own are separated by brackets. For example: Property Value -------------------- ------------------------ TopProperty "1; [2a; 2b]; 3" First Child "1" Second Child "2a; 2b" First Sub-Child "2a" Second Sub-Child "2b" Third Child "3" As an example of this, I have added a property labeled "3D Object" to the third page in the sample app. Bugs Fixed: - Attribute wxPG_FILE_WILDCARD did not work. - Various bugs with nested properties. - Did not compile with wxUSE_UNICODE=0 + wxUSE_STL=1 (thanks Joachim Hönig). - wxPropertyGridManager: wxPG_AUTO_SORT was forced. - wxPropertyGridManager: selections were not retained. - Windows XP: Drew corrupted drop button with some themes. Version 1.0.1 ( April-24-2005 ) Changes: - More consistent positions for wxTextCtrl-based editors. - wxGTK2 wxTextCtrl based editor now uses clipper window to remove its borders. Previously only wxNO_BORDER flag was used (similar to wxMSW), but it was not sufficient for all GUI themes. Bugs Fixed: - Category with zero children caused a graphics glitch. - If mouse in editor was dragged outside on to the splitter, control's cursor was changed to double arrow. - Editor control's keyboard focus was not detected correctly if it used a clipper window. - Borland C++ compile error. Version 1.0.0 ( Apr-14-2005 ) Note: There are still few known bugs left. I have tried to compile a more-or-less complete list, which can be found on the docs main page. New Features: - wxWidgets 2.6.0 compatibility. - wxCustomProperty. This is a property class that can be, using SetPropertyAttribute, customized for various needs. It can also have children. Note that its value type is string, and this cannot be (and should not be) currently modified. See docs main page, section "Custom User Properties (using wxCustomProperty)" for more information. Changes and Minor Additions: - wxParentProperty is removed (use wxCustomProperty instead). - Moved class definitions of following property classes to propdev.h or advprops.h (so they can now be inherited from): wxImageFilePropertyClass, wxCursorPropertyClass, wxMultiChoicePropertyClass. - Expander button is no longer drawn for parent properties when they have no children. - Added wxPropertyGridPopulator pseudo-code sample to the documentation. - New method: SetPropertyChoices(id/name,wxPGConstants) Preferred way to override the entire set of choices for a property. - Added some missing wxPropertyGridManager methods: SetPropertyLabel - Modified wxPropertyGrid::GetImageSize so that it can return image size of a specified property. If no argument is given, it works as before. Bugs Fixed: - Graphics glitch when deleting a property. - Active editor misplacement on Compact. - Garbage between textctrl and button after splitter movement. - Expander icon clickable area was slightly less than the entire icon. - GCC 4.x compile problem. - If grid was resized so that the scrolled position changed and there was an editor control which position or size had to be changed, then the final control position was skewed. Version 1.0.0 RC1 ( Mar-30-2005 ) New Features: - wxWidgets 2.5.5 compatibility. - wxPropertyGridPopulator class. Allows populating wxPropertyGrid from an arbitrary text source. For a practical example, see propgridsample.cpp's functions FormMain::OnSaveToFileClick FormMain::OnLoadFromFileClick NOTES: * wxParentProperty is not supported yet. * As currently there is no GetPropertyAttribute, property attributes cannot be stored. - wxEnumProperty and all custom properties derived from them now have dynamic label and value storage (called "choices" storage). Arrays given on creation are only initial and can be modified. Note that they are cached per-pointer, so two properties which are given same static arrays use the same dynamic storage. Thus, adding a choice to one property adds the same choice to all other properties using the same choice storage. However, there is a method to create private copy of choices for a property. Methods of note: wxPGConstants& GetPropertyChoices(id/name). Returns writable reference to the choices of a wxEnumProperty or derivative (and some others, such as wxMultiChoiceProperty, as well). Can be modified or given to another property in constructor function. AddPropertyChoice(id/name,label[,value]). Appends entry to the choices storage of a property. SetPropertyChoicesPrivate(id/name). If property's set of choices if shared with other properties, a private copy of it will be created for this property. - wxGTK 1.2 port is now almost usable. Problems remain in refreshing editor controls (try expanding/collapsing font property while its selected) and also there is a strange problem with wxMultiChoiceProperty (dialog's list box doesn't get correct selection). Note that this port also no longer uses custom controls. Changes and Minor Features: - Margin no longer uses background colour - use new SetMarginColour and GetMarginColour instead. - wxOwnerDrawnComboBox now allows "fake" popup window (i.e. wxWindow instead of wxPopupWindow) whenever possible. This reduces number of bugs experienced (wxPopupWindow is not perfect yet). To make best use of this "feature", use vertically large wxPropertyGrid (common in typical applications). - wxOwnerDrawnComboBox now extends the popup to always be wide enough to accommodate widest item in list. - IsModified is deprecated. Use IsPropertyModified and IsAnyModified instead. - GetFirstChild now only returns first child of root and category (you should not have need for easy sub-property access). - Using better Doxygen configuration (member sorting, no brief in member list). - Removed option to use .NET icons on toolbar. - ChoiceAndButton editor's button is now of same height as choice's dropbutton. - Precision handling of wxFloatProperty and wxArrayDoubleProperty have been improved. Precision of -1, which is now default, indicates use of default printf precision. Also, excess zeroes are now removed from displayed strings. Note that wxArrayDoubleEditorDialog was also modified. - Some new methods: wxPGProperty* wxPropertyGrid::CreatePropertyByClass (classname,name,label) Creates new property according to given classname (for example, "wxStringProperty" or "String"). Name and label are same as usual. wxPGProperty* wxPropertyGrid::CreatePropertyByType (valuetype,name,label) Like CreatePropertyByClass but creates from a name of valuetype (i.e. "string", "long", or any returned by wxVariant::GetType, wxPGProperty::GetType or wxPGValueType::GetType). size_t wxPGProperty::SetChoices(size_t id,labels,values) If id is non-zero and found, then set property's choices to refer to that. If not, then creates new set of choices with given id (or generated if that is zero). Returns final id. Changes to Custom Property Creation: - Added m_constants member to wxPGChoiceInfo (which is then filled by GetChoiceInfo if dynamic modification of property's choices is desired). - New wxBaseEnumPropertyClass for creating enum props which have totally custom label and value storage (see propdev.h for details). - wxPGProperty::PrepareValueForDialogEditing. See documentation on when to use (and what existing code it should replace...). - As a rule, properties must now be able to cope with NULL initial value (if its given as pointer or reference). Bugs Fixed: - Some properties with wxTextCtrl based editor could not sustain unspecified value. - Did not compile without wxWidgets 2.4 compatibility flag (thanks Luigi Bianchi). - If dialog-editable property was set with unspecified value, the dialog usually showed the value prior it was set to unspecified. Now dialog should show default value instead. - wxPropertyGrid::SetFont crashed if called before control was fully created (thanks Tyler Edwards). - wxOwnerDrawnComboBox's popup was not always closed when mouse was clicked over the grid. Version 1.0.0 BETA 4 ( Mar-19-2005 ) This is an intermediate bug fix release. Bugs Fixed: - wxMSW: Excess flicker on Refresh resolved. - wxGTK: wxOwnerDrawnComboBox popup window border problems solved. - wxPropertyGridManager's header didn't compile properly. - ClearSelection did not clear page's selection. - Potential freezing due to mouse capture not releasing. - In wxArrayDoublePropertyClass, m_precision member was used before it was initialized (Matthew Christie). Version 1.0.0 BETA 3 ( Mar-10-2005 ) NOTE: If you are upgrading from 0.9.9.x or earlier, then please read the 1.0.0 BETA 1 section below. New Features: - NSIS-based installer executable (for Windows). Will try to auto-detect wxWidgets dir and version, and copies makefiles accordingly (thanks to Dave Moor for help in testing it). - Added per-property client data. Use void wxPropertyGrid::SetPropertyClientData(id/name,void*) to set it and void* wxPropertyGrid::GetPropertyClientData(id/name) to get it. There is also wxPropertyGridEvent::GetPropertyClientData. - Added specific background colour for category captions. Use wxPropertyGrid::SetCaptionBackgroundColour and wxPropertyGrid::GetCaptionBackgroundColour to use it. In the sample application, this feature can be demonstrated by setting the White Colour Scheme. - Added to sample a wxArrayDoubleProperty - an example of array property of non-string values. - Preliminary wxUSE_STL=1 compatibility (not yet in custom controls mode - if you really need this, then make a feature request). Changes and minor features: - Loads of restructuring and additions to the documentation main page. - Added wxPropertyGrid::ShowPropertyError(id/name,msg). It shows an error message that is related to a single property. Useful if you want to do custom checking in OnPropertyChanged handler and tell the user if he fumbled (currently message is not shown that well - probably improved in future). - There is now abstract wxArrayEditorDialog class declared in propdev.h. It can be derived to create editor dialog for any type of array. See wxArrayDoubleEditorDialog in the sample app for an example of how to do it. - wxBoolProperty has now wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING attribute. Set it to 1 to enable value cycling on double-click. - wxGetVariantCast(var,classname) is now redefined in propgrid.h to also take in account wxPropertyGrid-generated variants (normally the macro in question only works with regular wxObject-variants). Effectively makes WX_PG_VARIANT_TO_WXOBJECT obsolete. - wxPropertyGrid::Enable(property,bool) is now deprecated. Use wxPropertyGrid::EnableProperty instead. - Added wxBoolProperty related section to documentation main page (due to all special stuff now going on with it). - wxPropertyGrid::SetPropertyAttribute(id/name,wxPGVariant) is now SetPropertyAttribute(id/name,wxVariant) due to STL compatibility issues. There is no int-based constructor for wxVariant (as of 2.5.4), so you need to cast constant ints to longs! - Similarly, wxPGProperty::SetAttribute(id,wxPGVariant) is now wxPGProperty::SetAttribute(id,wxVariant). - Added bool wxPGProperty::StdValidationProcedure(value) which can be used instead of common "DoSetValue(value); return TRUE;" sequence in propertyclass::SetValueFromString in order to automatically use any future validator code (ok for simple properties such as wxStringProperty and wxIntProperty, but not for wxArrayXXXProperty). Bugs Fixed: - Crash may occur some time after Clear (selection was not nulled properly). - Numerous compiler warnings and errors resolved for Borland C++ (thanks to Dave Moor for reporting them). - wxOwnerDrawnComboBox's popup now closes on menu events and propertygrid scrolling as well. - There was no proper unspecified value support in wxOwnerDrawnComboBox. - Changes in splitter centering code may have solved various issues. - There was wxWidgets dir detection bug in POSIX installation script. Version 1.0.0 BETA 2 ( Feb-20-2005 ) NOTE: If you are upgrading from 0.9.9.x or earlier, then please read the 1.0.0 BETA 1 section below. New Features: - wxOwnerDrawnComboBox: A customizable generic combobox to be used with native controls. It allows custom painting popup items and even a completely custom popup. If you want to see how it behaves as a standalone control, use Custom Combo Sample item in Try These! menu. Sorry, no "double-click cycles" behaviour (yet). Sorry, no docs. See odcombo.h and propgridsample.cpp (end of the file) for some details. - 2.5.4 compatibility. Changes: - Native controls are now default. Added compiling section to the documentation to clarify how to revert to custom controls if so desired. - wxArrayString editor dialog now has different set of buttons enabled/disabled depending on whether the textctrl or the listbox is focused. This should improve its usability (but it could still be better - suggestions are welcome). - Added wxPropertyGridManager::SetDescription(label,content) to set custom content for description text box. - Added wxPropertyGrid::GetImageSize(). It returns size of the image custom paint in front of (some) properties. - UNIX install script is now able to auto-detect wxWidgets version. It also now has extra safety checks. Internal Property API Changes: - Added wxPGEditor::CanContainCustomImage. Returns TRUE if the actual control can contain the property's custom image. Base implementation returns FALSE. Bugs Fixed: - GetPropertyValues would crash with combination of NULL base parent and wxKEEP_STRUCTURE flag (now NULL will indicate usage of root property, as used in the sample app). - Type 2 tokenizer (used by the normal wxArrayStringProperty, for example) caused memory leak on unfinished token. - Massive amounts (100+) of category adding and removal was problematic. - wxMSW: Previously what was supposed to be dotted line was short dash instead. - wxGTK: Native controls were not always properly refreshed after their value was changed. - Few graphics glitches with check box editor (rect filled with background colour was lacking one pixel in width, focused item was not properly repainted on resize). Version 1.0.0 BETA 1 ( Jan-24-2005 ) SIGNIFICANT CHANGES! PLEASE READ CAREFULLY! To improve compile times, there has been a significant change to how new instances of property classes are created. Since now classes themselves are no longer global, a constructor function must be called instead of a standard constructor. Previously one would call: pg->Append( new wxIntProperty(wxT("Label"), wxT("name"), 0) ); Now this would be used instead: pg->Append( wxIntProperty(wxT("Label"), wxT("name"), 0) ); The only visible difference is the lack of keyword "new". As a consequence, actual classes had to be renamed. They now have "Class" appended to their names. However, only those who have created custom properties should really have to worry about this. See below for complete summary of changes in creating custom user properties. API and File Organization Changes (vs 0.9.9.x): - Project is now "propgrid" instead of "propertygrid". This changes include path as well ( "wx/propertygrid/xxx.h" -> "wx/propgrid/xxx.h" ) - Header file name changes: "propertygrid.h" -> "propgrid.h" "propgext.h" -> "propdev.h" - wxPropertyGridManager got its own header file "manager.h". - Window style changes: wxPG_AUTOSORT -> wxPG_AUTO_SORT wxPG_NOCATEGORIES -> wxPG_HIDE_CATEGORIES wxPG_BOLDMODIFIED -> wxPG_BOLD_MODIFIED wxPG_SPLITTERAUTOCENTER -> wxPG_SPLITTER_AUTO_CENTER - wxVariant storage system changed a bit. Now for each value type which data type is not directly supported in wxVariant there is wxVariantData class. This allows pretty much flawless GetPropertyValues and SetPropertyValues. However, this comes at some price in executable size ( < 10k ) and that wxVariant::GetWxObjectPtr doesn't work any longer on those properties. Instead, you need to use this macro (similar to wxDynamicCast): WX_PG_VARIANT_TO_WXOBJECT(variant,targetclass) This should be considered a temporary solution (wxWidgets variant system needs fixing). - SetSelection -> SelectProperty, SelectPage (as appropriate). SelectProperty added to wxPropertyGridManager. ClearSelection added to wxPropertyGridManager. GetPropertyName added to wxPropertyGridManager. - wxALSO_CHILDREN flag (used by SetPropertyAttribute) was renamed to wxRECURSE. - wxPG_EX_FLAT_TOOLBAR is now default. Use wxPG_EX_NO_FLAT_TOOLBAR to disable it. New Features: - ChoiceAndButton editor class. Used by a new example, AdvImageFile property (its on first page in the app). It works like ImageFile property, but also has dropdown list of all tried image files (with thumbnails, too). - New property generator macro pair: WX_PG_DECLARE_ARRAYSTRING_PROPERTY(PROPNAME) WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY(PROPNAME,DELIMITER,CUSTBUTTXT) Creates a wxArrayStringProperty derivative which allows a custom string list delimiter and setting a custom editor action into the string editor dialog. PROPNAME = As usual. DELIMITER = wxT('"') for "str1" "str2" style and anything else for str1 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.