See the Subversion log for all the details. Dabo-0.4.2 (2005-10-07) (Revision 1418): Added PrimaryBizobj property to dForm, which can replace calls to getPrimaryBizobj(). Added Accepted property to dOkCancelDialog, which gets set automatically if the user pressed "OK". Added AutoSQL, UserSQL, CurrentSQL, LastSQL properties to dCursor and dBizobj. When time to requery, the SQL will come from UserSQL if set, or AutoSQL will be regenerated. Fixed a bug that kept changes to a new record from getting committed. Added DefaultValues property to bizobj. Added ListSelection and ListDeselection events to dListControl. Added properties MultipleSelect, HitIndex, LastSelectedIndex, HeaderVisible, HorizontalRules, and VerticalRules. Changed the behavior of both dListControl and dListBox so that merely selecting an item doesn't raise the Hit event; instead, it raises a ListSelection event, and if another item had been previously selected, it raises a ListDeselection event. Hit is only raised from double-clicking on an item, or by pressing Enter. Added new property to dTextBox: StrictDateEntry. Changed the code for interpreting dates entered by the user to allow for some less explicit formats (YYYYMMDD, YYMMDD, and MMDD). If StrictDateEntry is False (the default), these other formats will be used when interpreting dates entered by the user. Added field-level validation to the framework. Improved support for decimal.Decimal, both at the database level and in dTextBox. Added new auto event binding, which automatically binds events based on any defined callback functions. For example, if you have a method onMouseEnter() defined, the dEvents.MouseEnter will automatically be bound to that method. Inspired by PythonCard. Added RegID property to forms, that allows for object registration with the form. Not all objects require RegIDs, but if they have one, they must be unique among all objects in a form. A reference to that object can then be gotten from any other object by calling 'self.Form.getObjectByRegID()'. Linked RegID to the auto event binding, so that if a form has a method of onHit_cmdOK(), and has a button with a RegID of 'cmdOK', the cmdOk's Hit will get bound to the form's callback, automatically. Improved dGrid and dColumn. Many properties added, and you are now in much finer control over the display of grid column headers, grid cell attributes, grid cell editors and renderers, and the grid itself. Began work of allowing case-insensitive property values for properties that take string values, and for properties that take a limited number of values where the first letter is unique, you can set the property by just using the first letter. dTextBox.Alignment = "c" sets the property to "Center", for example. Modified dBizobj, dCursorMixin, and dBackend so that the user can specify the Unicode Encoding to use. Changed the default encoding from latin-1 to utf-8. Added feature to optionally draw sizer outlines on any form that uses dSizers. This is currently accessible via an option in the View menu when the base menu bar is in use, or you can turn it on/off programatically. Grids now remember the column that is sorted, and resort when next instantiated. Added support in dReportWriter for report groups and report variables, and dynamic band heights (based on the height of contained objects). Added showExpr, which is an expression that evaluates at runtime and if true, shows the object in the report, and not if false. Improved the automatic print preview report format in datanav. It now: + prints column headers + mirrors the font size, column width, cell vertical and horizontal alignment, and column height of the grid + mirrors the font size, header height, vertical and horizontal alignment of the grid headers + automatically reorients to landscape if the detail flows beyond the width of portrait + stops printing more columns if doing so would result in overflowing the right margin Key bindings are now case-insensitive. Improved docstrings and API documentation. Dabo-0.4.1 (2005-08-30) (Revision 1226): Improved test framework for uiwx. Now you can run ui/uiwx/test.py and get almost all of the dabo controls in one form, and they are the same tests that you get when you run an individual control directly. Factored out the saving/restoring of user settings out of dApp into the separate dUserSettingProvider class, which can be subclassed or overridded by the developers. Added properties UserSettingProvider and UserSettingProviderClass to dApp. Dabo user settings are no longer saved to .userSettings.ini in the app directory, but are saved to the user's home directory (in ~.dabo/) or if on Windows, in /Application Data/Dabo/. Support for SQLite added. As of this moment, Dabo supports several major open-source database backends: MySQL, PostgreSQL, Firebird, and SQLite. Next on the list should be Oracle, Sybase, and MS-SQL. Started work implementing a Quick Report in the datanav library, which replaces the old HTML Print Preview. This uses the fledgling Dabo Report Writer to create a PDF rendition of the dataset. Added new property for all controls: StatusText. When set, and when the form has a status bar, that text will show in the form's status bar when the mouse enters the control. Expanded the dabo.ui.strToBmp() function to accept an optional scale factor or width/height values. If they are passed, the returned bitmap image is sized to those values. Added an optional parameter to the bizobj and cursor's getDataSet() method. If you send a list of field names, only those fields are returned. Fixed some lingering bugs in the dabo.ui.uiwx package and the datanav lib. dWizard works better now. Improved dGauge, dLine, dBox, dRadioBox, dListBox, dToolBar, and dSizers. Added simple decimal support to dTextBox. Work continues on dGrid, specifically dColumn is now better worked into the "Dabo Way". Added dabo.trace() function, that will drop you into pdb. dConnectInfo reworked to have better property names. Removed dependency on PIL and reportlab from Dabo. These are dependencies still, but only if you try to run a report. Added dabo.lib.StopWatch.StopWatch class, which is a light Python stopwatch with start(), stop(), reset() methods and Value property. This is a partial list. Both Ed and Paul have been very busy with Dabo since 0.4 a few weeks ago. Lots of bugfixes and enhancements were made, and we encourage everyone to upgrade. Dabo-0.4 (2005-08-08) (Revision 1132): Cleaned up the initialization of properties. No more initStyleProperties(); user code just puts their props in initProperties() or sends them to the constructor in the properties arg or as separate named arguments. The framework sorts out when the properties need to be set in the object construction cycle. Improved sizers by separating out the Halign and Valign properties, eliminating the need to use the 'alignment' flags parameter. Added the 'Parent' property, making it easy to reference the control that 'owns' the sizer. Also added the convenience method 'append1x(item)', which is shorthand for writing 'append(item, 1, "expand")', since it is used so frequently. The grid sizers now have 'isRowGrowable()' and 'isColGrowable()' methods for checking the status of any row/column. New dGrid, with dColumn and Header objects available for reference. Lots of convenience functions written, such as those designed for simplified access to common dialogs, are now built into the dabo.ui module. Examples: getFile(), getColor(), getBitmap(), and the getString() functions, which all create, show and destroy the required dialog window, and then return the result. So, to present the user with a font selection dialog, just call dabo.ui.getFont(), and the selected font will be returned (or None if they canceled). Similarly, to show a common messagebox and get the response, just use dabo.ui.info(), dabo.ui.stop(), or dabo.ui.areYouSure(). doDefault() much faster now (thanks to Alex Martelli) Support for decimal.Decimal. New classes: dColorDialog, dToolBar. Work on the report writer and report designer progresses. The report designer is now in the daboide project, not here in dabo anymore. We finally have distutils support. To install Dabo, do the standard "python setup.py install". Thanks to limodou for submitting the patch. Dabo-0.3.2 (2005-03-21) (Revision 959): Work continued on the Dabo report writer and report designer. The writer will now read and write the rfxml file format, and will do some simple reports. The designer will edit the rfxml files, again, with simple formats. This isn't ready to use yet but the foundation is in place. cursorToXML() added. Encoding property added to databases. dBitmap introduced. dWizard introduced. dTreeView introduced. dGrid is being refactored, and is almost done. For a short time, it can be found as dGridX. We worked hard trying to get window closing not to segfault on Windows, to get icons to display correctly on Mac, and to optimize Dabo in some key bottleneck areas. We've greatly improved Dabo's performance on all platforms, and Dabo now behaves less differently on each platform. Improved data binding: controls don't need to bind to a bizobj, but to any object expression. Improved Firebird and PostgreSQL support. Lots of improvements and bug fixes, in all three tiers. Dabo-0.3.1 (2005-02-16) (Revision 802): Separated creation of dCursor from dBizobj. Added option to automatically create a dPanel in dForm. Further Daboized dListControl. Fixed display of a few of our icons on Mac. Added bindKey() method, which binds a keycombo like "Ctrl+D" to a function. Daboized dMenu, dMenuItem, and dMenuBar. Minimal Tkinter (dCheckbox) working again (testing only). Added ActiveControl property to dForm. Various dSizer improvements were made. We moved various things to better places in the source tree. Connection info now saved in XML format. Localization framework added. Courtesy Vladimir Sekissov. Added Children property, which contains a list of a container's children. dCommandButton is now known as dButton. Dabo-0.3 (2005-01-10): New UI controls added: dFileDialog.py dListBox.py dListControl.py dSplitForm.py dSplitter.py GridSizer added. Method calls to all sizers greatly simplified. Menus simplified, removing wx-specific calls. My favorite UI debugging tool: getMouseObject() Framework classes now consistently use the standard initialization methods: initProperties, initEvents, etc. Child requeries and transaction support added to bizobj Bizobjs now support the relationSpecs.rsxml format for adding child relations. Support for fulltext-type searches by word added. Auxiliary (one-shot) cursors added to main cursors for better support of different backends. Improved unicode support in cursors. Added support for PostgreSQL. Added template to ease creation of new backend support scripts. appWizard: added support for parent/child/grandchild/... relationships; improved FieldSpecEditor. appWizard/dDataNav* classes: changed all wx.Sizers to dSizers added "-ignore-" to visually indicate search criteria that will not be used added save/restore of values on search page. added 'Matches Words' option for fulltext searches fixed bugs with searches for boolean values Controls: Now auto-name themselves. Unique name enforcement added. Added _IsContainer attribute to distinguish controls that can add other controls to themselves. Added support for setting colors by name instead of RGB tuple. Fixed resizing bug that would not allow a resized object to be made smaller. Dabo-0.2 (2004-09-20): Continued improving FireBird database support, improved MySQL support. Added preliminary SQLite support. Save passwords encrypted. Added logger objects to send program output to, instead of directly to stdout. Began abstraction of Tkinter at purely an experimental level. Added some new controls, such as a better date control and a combo box. Brought in some Foxpro string functions from the openfox project. New event model, greatly simplifying the binding of events, the raising of events, and the subclassing of events to define new events. Added preliminary unicode support to the cursor level. Dabo-0.1.1 (2004-06-13): Dabo-0.1 (2004-05-10):