root/tags/dabo-0.7/ChangeLog

Revision 2461, 79.0 kB (checked in by paul, 2 years ago)

Dabo 0.7 ChangeLog? additions.

  • Property svn:eol-style set to native
Line 
1 See the Subversion log for all the details.
2
3 ========================================================================
4 Dabo 0.7 (2006-11-16) (Revision 2464):
5
6 It has sure been a while, but we haven't been resting. Lots of new stuff
7 as we move one step forward to Dabo 1.0. Here are the most important
8 things to mention.
9
10 Notable things:
11 + SQLite is now required.
12 + wxPython 2.7 and 2.8 DO NOT WORK yet, but will soon, so stick with 2.6
13   for now.
14 + Dabo preferences are no longer saved in .ini files, but as sqlite databases.
15 + The old shortcut of referencing fields in bizobjs like:
16     fname = biz.first_name
17   no longer works. You need to change all such code to read:
18       fname = biz.Record.first_name
19
20 Known Issues:
21 + FireBird Requery problem (see http://dabodev.com/tracker/0229)
22
23
24 Bug Fixes:
25 + Replace function in dTextBox and dEditBox causing traceback. Fixed.
26 + Incremental search in dGrid now works with unicode data.
27 + Double select page on Mac and Win. Fixed.
28 + Datanav select page scrollbar doesn't show. Fixed.
29 + Ignore Tab and Shift+Tab in grid searching, so they can navigate.
30 + Setting AutoPopulatePK on the bizobj doesn't propagate to cursor. Fixed.
31 + Entering a unicode character in a dTextBox set up with a str value doesn't
32   stick. Fixed.
33 + Fixed unicode problems in dEditor.
34 + Fixed problem where fast cpu's could generate non-unique object names.
35 + Fixed showModal() to reactivate previously deactivated windows accordingly.
36 + dCursor's initProperties() called twice. Fixed.
37 + Spacers not working correctly in class designer generated files. Fixed.
38 + Fixed dabo.ui.getMouseObject() to always return the dabo object, not the
39   wx one. This would happen with grids, for example.
40 + Border sizer caption not showing. Fixed.
41 + Connection information not properly escaped in default.cnxml. Fixed.
42 + Fixed layout of nested sizers.
43 + Fixed running class-within-a-class (class designer generated).
44 + Fixed paged controls to work when generated from the Class Designer.
45 + Grid mouse events duplicated. Fixed.
46 + Can't set RegID from within initProperties(). Fixed.
47 + stderr and stdout not restored if intellisense processing caused exception.
48   Fixed.
49 + Fixed login form to look okay at low resolutions.
50 + Removed old, lingering requirement for mx.DateTime.
51 + dSpinner doesn't work correctly unless initialized to '0'. Fixed.
52 + dForm.ActiveControl would return controls in other forms, if they were the
53   current active control with keyboard focus, when clearly we want the active
54   control of *this* form. Fixed.
55 + Fixed function in dbSQLite to find and set the pk field.
56 + Fixed __version__.py to work outside the expected directory naming
57   structure.
58 + Report writer wasn't initializing report variables before starting the
59   iteration of the cursor, resulting in errors if you referred to the
60   variables from inside the page header, for example. Fixed.
61 + Setting the Value of a data-bound control programatically wasn't propagating
62   to the underlying bizobj. Fixed.
63 + New reportlab can only handle utf-8, causing errors otherwise. Added a
64   friendly message in case this happens to you when running the Quick Report
65   option in AppWizard-generated apps.
66
67 Enhancements:
68 + Added Visible property to grid dColumns.
69 + Added column information to the EventData of grid events.
70 + Removed RequeryOnLoad property from datanav.Form to dabo.ui.dForm.
71 + Can now send kwargs to grid.addColumn(), which get sent to the column's
72   constructor.
73 + Added self.super() to replace cls.doDefault, thanks to Timothy Delaney.
74 + Added exception handling to requerying. If exception happens, the
75   transaction will be rolled back.
76 + Enhanced the process used to determine field types. In addition to better
77   automatic deduction of types, you can now explicitly set the DataStructure
78   property of dBizobj and Dabo will respect that.
79 + Added Alt+Up and Alt+Down to AppWizard Apps, which bring you to first and
80   last records, respectively.
81 + Added properties for getting/setting the selection and insertion point for
82   text controls. These are InsertionPosition, SelectedText, SelectionEnd,
83   SelectionLength, and SelectionStart.
84 + Compound primary keys can now be used.
85 + Dabo icon now has an alpha channel and looks much better. Thanks to Kenneth
86   Ismert for doing a great job of this.
87 + Added Expanded property for treeview nodes.
88 + Can now set PageClass property of dPageFrame to a cdxml file.
89 + Added dRadioList to replace dRadioGroup. Pure Dabo control.
90 + Added ability to set a bizobj LinkField property to a table.field reference.
91 + Added RequeryWithParent property to dBizobj, True by default. Allows for
92   user code to determine when to requery the child, for performance reasons.
93 + Added Selection property to dGrid, which returns the list of selected rows
94   or columns.
95 + Added AutoBizobj, thanks to Echo.
96 + Added Count property to dMenu, to return the number of child menus.
97 + Changed most initial dEditor settings into configurable properties.
98 + Drag/Drop for tree nodes begun.
99 + Added getCurrentRecord() that returns the actual record data.
100 + Added dPref for managing application preferences, and switched the default
101   way to save/restore settings to use this class. Your application can define
102   whatever hierarchy you see fit. See also the new BasePrefKey and
103   PreferenceManager properties of dObject.
104 + Added ForceCase property to dTextBox and dEditBox. Forces to upper, lower,
105   or title case as the user types.
106 + Added getTempCursor() to facilitate ad-hoc data queries.
107 + Added dApp.Encoding property, a single place to get the unicode encoding. To
108   set the default encoding, use dabo.defaultEncoding = "latin-1", for example.
109 + Added clear() method to sizers, to remove all items from the sizer, and to
110   optionally destroy the items as well.
111 + Added Precision property to dColumn, which specifies the number of places to
112   show for float columns.
113 + Added preliminary support for BLOB fields. Works at least with MySQL.
114 + Added GridBeforeSort and GridAfterSort events.
115 + Added itemNode entry to the eventData for Tree events.
116 + dToggleButton now uses GenBitmapTextToggleButton, allowing for text and
117   images.
118 + Added some filtering functions to dDataSet, for selecting which records
119   to return.
120 + Added transparency and drawGradient to drawing objects. Thanks to Andrea
121   Galvana for the gradient code.
122 + Added WordWrap property to dColumn, which will wrap the text appropriately.
123 + Added cut/copy/paste hooks at the grid level.
124 + Added dabo.ui.getFormMousePosition (position relative to active form)
125 + Added DrawMode property, the logical function to use for draw operations.
126 + Added ability for About dialog subclasses to add their own version info.
127 + Added helper functions to dabo.ui: isControlDown(), isShiftDown(),
128   isAltDown(), and isCommandDown() which will return True/False depending
129   on whether the key is down while the call is made.
130 + Added containerCoordinates() and formCoordinates() method, to get the
131   current mouse position relative to the container or form.
132 + Added objectCoordinates(), which is relative to the object.
133 + Made dForm.ActiveForm settable as well as gettable.
134 + Added isContainedBy() function, returning True if the object is contained
135   inside the passed container.
136 + Made dEditor a data-aware control (cool!)
137 + Added Encoding property to dDataSet. Thanks to Simen Haugen.
138 + Can now send extra keyword args to bindKey(), which will get included in
139   the eventData dictionary, just like it works with bindEvent().
140 + Added Dabo data type code "L" for blobs, "G" for longs, and "F" for floats.
141 + Added 'sort none' option to dGrid. Now, the third mouse click on the header
142   will be 'no sort'.
143 + Added accelerator keys to the datanav Actions menu. Added Select All to the
144   Edit menu.
145 + Added dabo/ui/uiwx/concordance.py, which shows a listing of all the Dabo
146   ui classes, and the wx Class from which they descend. Then, it shows the
147   wx classes, and the list of Dabo classes that descend from it. Should help
148   people with questions like "where is wx.TextCtrl in Dabo? (dTextBox).
149 + Added MultipleSelection property to dGrid.
150 + Improved dPageList, allowing setting the spacing of the list items with
151   ListSpacing, and catching right-clicks smartly (the correct item gets
152   referenced).
153 + Added function dabo.lib.getRandomUUID(). Thanks to Ka-Ping Yee.
154 + Added method afterInitAll(), which gets called after all child objects have
155   been initialized and are live.
156 + Added helpful treeFromStructure() method to dTreeView, which takes a
157   hierarchy (in list or tuple form) and constructs the tree nodes accordingly.
158 + Added ability to send sequences of 3-sequences to the ok/cancel dialog to
159   automatically construct labels and controls on the dialog.
160 + Couldn't use the same RegID for objects, even if the prior object was
161   destroyed. Relaxed the requirements to allow for this.
162 + Added dHtmlBox, which wraps wx.html.HtmlWindow, for displaying formatted
163   text simply. Thanks to Nate Lowrie.
164 + Added showContainingPage() method to all ui controls, which will recursively
165   show any pages in any pageframes that contain this control.
166 + Added showCurrentLine() to dEditor. Does what it says.
167 + Datanav forms (AppWizard-generated) now look better as they have a bigger
168   default size. Thanks to Bill Anderson for bringing up lots of such issues.
169 + Added AddChildEditPages property to datanav apps. Set it to False and you
170   stop getting the annoying edit pages for the child bizobjs.
171 + Previously, you could only set page sizes in reports to strings like
172   "letter", "a4", etc. Now, you can also set explicit sizes such as
173   (100, 75) or ("1.75 in", "1 in").
174 + Added preliminary support for Microsoft SQL Server. This isn't usable yet
175   for any but the most tenacious developers, and likely quite buggy. If you
176   want to try it out or help develop it, please post a message to the dabo
177   developer's list (dabo-dev@leafe.com).
178
179 ========================================================================
180 Dabo 0.6 (2006-03-27) (Revision 2043):
181 (for now, due to lack of time, I'm just echoing svn log. If someone wants to
182 summarize the changes --today!-- that would be *very much* appreciated.)
183
184 ------------------------------------------------------------------------
185 r1863 | ed | 2006-01-25 18:41:44 -0800 (Wed, 25 Jan 2006) | 4 lines
186
187 Fixed a problem when switching to the Browse page of the datanav grid without first running a query. Also, there was an error being thrown if a previous query had results, and a subsequent query had no results.
188
189 Modified the code in _setCurrentRow() of dGrid so that it wasn't calling SetGridCursor() unless the position had actually changed. I had recorded up to 10 calls to this function, all with the exact same values each time I switched to the Browse page.
190
191 ------------------------------------------------------------------------
192 r1864 | ed | 2006-01-26 09:34:20 -0800 (Thu, 26 Jan 2006) | 4 lines
193
194 Removed the code that lower-cased field names, as it was preventing the code from working with case-sensitive backends and columns containing capital letters.
195
196 Also fixed a problem where str values were not able to be properly converted to unicode.
197
198 ------------------------------------------------------------------------
199 r1866 | ed | 2006-01-26 15:11:35 -0800 (Thu, 26 Jan 2006) | 2 lines
200
201 Added a parameter to the promptForFileName() method to specify the default path for the dialog.
202
203 ------------------------------------------------------------------------
204 r1867 | ed | 2006-01-26 17:36:12 -0800 (Thu, 26 Jan 2006) | 9 lines
205
206 Added the TreeItemContextMenu event. This differs from the normal ContextMenuEvent in that it returns the itemID of the node that was right-clicked.
207
208 Added code in the event data gathering code to store the tree item ID for these events in EventData.itemID.
209
210 Changed all the names '_id' in the dTreeView.py file to the clearer 'itemID'.
211
212 Fixed an oversight in the dSizerMixin that didn't remove the Box for a dBorderSizer when the sizer was released.
213
214
215 ------------------------------------------------------------------------
216 r1872 | paul | 2006-01-27 08:01:09 -0800 (Fri, 27 Jan 2006) | 1 line
217
218 The double-Activate on Windows is really getting in the way. I haven't heard anything from my bug report yet, so I added workaround code to ignore the first Activate.
219 ------------------------------------------------------------------------
220 r1873 | ed | 2006-01-27 12:16:01 -0800 (Fri, 27 Jan 2006) | 2 lines
221
222 Cleaned up the order of releasing child objects for sizers. Also fixed problem with releasing the box for border sizers.
223
224 ------------------------------------------------------------------------
225 r1875 | ed | 2006-01-28 15:32:34 -0800 (Sat, 28 Jan 2006) | 2 lines
226
227 Added getFunctionList() method to return a list of all 'class' and 'def' statements in the current file.
228
229 ------------------------------------------------------------------------
230 r1876 | echo | 2006-01-29 12:50:27 -0800 (Sun, 29 Jan 2006) | 3 lines
231
232 First pass at integrating the dTable class into the dabo.db framework. Right now, if this works at all, it only works for SQLite.
233
234
235 ------------------------------------------------------------------------
236 r1877 | ed | 2006-01-29 19:45:26 -0800 (Sun, 29 Jan 2006) | 2 lines
237
238 Fixed a bug wherein multiply-nested sizers might not release all of their content when release(True) is called.
239
240 ------------------------------------------------------------------------
241 r1878 | ed | 2006-01-29 20:37:07 -0800 (Sun, 29 Jan 2006) | 2 lines
242
243 Added a 'setInactive()' method that will hide the auto-complete popup if one is visible.
244
245 ------------------------------------------------------------------------
246 r1882 | paul | 2006-01-31 09:28:37 -0800 (Tue, 31 Jan 2006) | 1 line
247
248 Disabled the fillGrid()'s setting of focus to the grid, as it causes problems with stealing focus away from another active form, at least on Windows. Also, it seems that such code really doesn't belong inside the function to build the grid, but perhaps we'll find it belongs somewhere else.
249 ------------------------------------------------------------------------
250 r1883 | paul | 2006-01-31 11:58:23 -0800 (Tue, 31 Jan 2006) | 1 line
251
252 The xml header wasn't being converted to native line endings. Fixed.
253 ------------------------------------------------------------------------
254 r1884 | paul | 2006-01-31 16:09:18 -0800 (Tue, 31 Jan 2006) | 1 line
255
256 No need to explicitly do the unicode conversion in the report fields, as that is done in the report writer.
257 ------------------------------------------------------------------------
258 r1885 | ed | 2006-01-31 16:25:28 -0800 (Tue, 31 Jan 2006) | 12 lines
259
260 Added a Refresh event. This is raised when dForm.refresh() is called. All dPemMixin classes will receive it, and fire their refresh() hook method.
261
262 Added dynamic properties. Every property can be made dynamic by prefixing it with 'Dynamic'. Dynamic props are set to any callable function; when the object receives a Refresh event, the function's return value is used to set the value of the underlying property.
263
264 [NOTE: The previous paragraph no longer applies.]
265
266 Example: given a label and a function 'currTime()' in a form that returns the current time, issuing the following:
267
268     label.DynamicCaption = label.Form.currTime
269    
270 will result in the label's Caption property being updated every time label.Form.refresh() is called with the value of the current time.
271
272 Also added two methods to dabo.ui for converting image data back to bitmaps and images. These were necessary because I noticed that when Editor.py was called from locations other than its own directory, the image file for the function button was not found. The solution was to convert the .png file to a data stream using wx.tools.img2py.py, and store that in Editor.py.
273
274 ------------------------------------------------------------------------
275 r1889 | paul | 2006-02-01 16:23:51 -0800 (Wed, 01 Feb 2006) | 13 lines
276
277 This commit lets you set dApp.UI=None, and setup() won't try to load a UI.
278 You have to do it explicitly, though, such as:
279
280 app = dabo.dApp()
281 app.UI = None
282 app.setup()
283
284 --or--
285
286 app = dabo.dApp(UI=None)
287 app.setup()
288
289
290 ------------------------------------------------------------------------
291 r1890 | ed | 2006-02-02 05:13:52 -0800 (Thu, 02 Feb 2006) | 10 lines
292
293 Major revamping of the whole refresh/update/dynamic design.
294
295 First, refresh() simply repaints the object and anything contained in it. It simply calls the wx.Refresh() method.
296
297 There is now a method named 'update()' which will update any dynamic aspects of a control, such as its Dynamic* properties, or its data bindings, if any. If the object is a form, calling update triggers a ValueUpdate event that all data-aware controls will receive. All objects with children will raise an Update event in order to propagate the update message. You can call update() on a specific object, and only that object and its children will be updated.
298
299 This clarifies the language we use: 'refresh' refers only to having the object repainted on the screen, while 'update' can change aspects of the object, such as its value or other properties.
300
301 Updated all the classes that referred to these events and methods by their old names.
302
303 ------------------------------------------------------------------------
304 r1892 | ed | 2006-02-02 15:32:49 -0800 (Thu, 02 Feb 2006) | 3 lines
305
306 First crack at creating a double-buffered drawing surface. The new class, 'dDrawPanel', is a subclass of dPanel, but has its repainting handled through the double-buffer techniques outlined on the wxPython wiki.
307
308
309 ------------------------------------------------------------------------
310 r1897 | ed | 2006-02-04 14:03:39 -0800 (Sat, 04 Feb 2006) | 4 lines
311
312 Bookmarks in dEditor now persist when you save the file. If you re-open a saved file with bookmarks, they are restored.
313
314 Refactored dUserSettingProvider a little bit. Fixed a bug in getUserSettingKeys() that resulted in it always returning an empty list. Added deleteUserSetting() and deleteAllUserSettings(); these do just what you think they would.
315
316 ------------------------------------------------------------------------
317 r1902 | paul | 2006-02-06 08:32:50 -0800 (Mon, 06 Feb 2006) | 13 lines
318
319 Simplified dPemMixin's __getattr__ and __setattr__ somewhat. I still believe it
320 would be better to be explicit about dynamic properties, and will try to find
321 some time to make that happen.
322
323 Changed a couple exec() calls to setattr() calls instead, which may be safer
324 if not faster, but definitely more explicit and easier to understand.
325
326 Added back a needed test for deadObject that I removed from the onUpdate
327 callback, and changed the test in update() back to testing for the deadObject
328 instead of putting it in a try block.
329
330
331 -----------------------------------------------------------------------
332 r1904 | paul | 2006-02-06 16:36:58 -0800 (Mon, 06 Feb 2006) | 54 lines
333
334 Added makeDynamicProperty() function to dabo.ui, which creates a dynamic
335 property definition for the passed normal property object. I wanted to put
336 this in propertyHelperMixin but it doesn't appear to me that dynamic
337 properties are really at all useful outside of a UI context (indeed,
338 everything else having to do with dynamic props is defined inside
339 dPemMixin...).
340
341 Explicitly defined Dynamic properties for most of the existing properties
342 defined in dPemMixin. Removed the automagical __getattr__/__setattr__
343 overrides.
344
345 This dynamism is really cool, and I'm sorry that we aren't seeing completely
346 eye-to-eye on it. But here are some things that "just work" with my
347 implementation:
348
349 1) Run SimpleFormWithBizobj, and in the command window type:
350 > def dfb(biz):
351 >    return biz.ccity.strip() == "Arecibo"
352    
353 > self.PageFrame.Pages[2].setAll("DynamicFontBold", (dfb, self.getBizobj()))
354
355 Now, go to the edit page and scroll through. The setAll() call just worked without
356 any changes needed. Something is keeping it working with the original implementation
357 but I admit that I don't see why, at first glance.
358
359 2) Notice when you are typing in the command window, that the dynamic properties
360 show up in the list. This is really what I mean when I talk about things being
361 documented.
362
363 3) Passing dynamic props to the constructor is the same as defining them in the class
364 txt = dabo.ui.dTextBox(self, DynamicEnabled=myFunc)
365 txt.DynamicFontItalic = myFunc
366
367 Both of the above calls work as usual WRT the Dabo Property Interface.
368
369 Granted, there's more work involved when defining a new class (gotta remember to tell
370 Python about the dynamic props). But after all is said, done, and considered, it is
371 my genuine hope and belief that this was the right way to go. But I am still sorry for
372 stepping on toes.
373
374 I'll follow through with making other properties (those outside dPemMixin) dynamic as
375 well.
376
377 There are things to consider in the future, such as:
378
379 + Do we make a DynamicValue?
380 + If so, does it override the value gotten from FieldSource, if set?
381 + What bearing does this have on the dynamism already present in, e.g.,
382 the setting of dynamic values from non-bizobj data bindings?
383
384 Anyway, thanks for putting in the Dynamic stuff, Ed. Once we take care of the refresh
385 overhead - perhaps by using the timer/observer-based approach I talked about this
386 morning - this is really going to be killer.
387
388 ------------------------------------------------------------------------
389 r1907 | ed | 2006-02-07 07:32:34 -0800 (Tue, 07 Feb 2006) | 2 lines
390
391 Implemented the handling of RowSpan/ColSpan for grid sizers.  Added a GridSizerSpanException class that is raised if an attempt to set the span to a location that is already occupied.
392
393 ------------------------------------------------------------------------
394 r1909 | paul | 2006-02-07 12:43:44 -0800 (Tue, 07 Feb 2006) | 16 lines
395
396 Sorted out some problems and redundancies in the update() cycle:
397
398 + Removed the update delays, as they caused other problems.
399
400 + Because of the recursive nature of the update() function, both ValueUpdate
401   and Update events were triggering the controls to update themselves. Removed
402   ValueUpdate event and consolidated into the update() cycle.
403
404 + The Refresh() call inside update() was being called way too much. In testing
405   different ways to limit this refreshing, I discovered that for all the cases
406   I tested, the Refresh() wasn't needed at all. So I removed it. If you need
407     a refresh() you need to call that explicitly now. I think this may be better
408     anyway because they are different concepts.
409        
410 Performance still isn't stellar, but it does seem much better now.
411
412 ------------------------------------------------------------------------
413 r1912 | ed | 2006-02-08 14:44:41 -0800 (Wed, 08 Feb 2006) | 6 lines
414
415 Revamped the entire flow for transactions. These changes have been tested on MySQL and SQLite, but still need to be tested with Firebird and PostgreSQL.
416
417 Changed the default for bizobjs, cursors, etc., to not autocommit. The AutoCommit property of the bizobj is simply a pass-through to the cursor's AutoCommit property.
418
419 Also cleaned up some inconsistent spacing and method ordering.
420
421 ------------------------------------------------------------------------
422 r1917 | paul | 2006-02-09 11:48:33 -0800 (Thu, 09 Feb 2006) | 8 lines
423
424 Modified datanav to allow for manual setups that don't use fieldSpecs or
425 relationSpecs. I'll be committing a change to the AppWizard that allows
426 for this option soon.
427
428 Moved SelectPageClass, BrowsePageClass, and EditPageClass from PageFrame
429 to Form, since that is a better central location for these properties.
430
431
432 ------------------------------------------------------------------------
433 r1919 | ed | 2006-02-09 21:17:46 -0800 (Thu, 09 Feb 2006) | 7 lines
434
435 EXPERIMENTAL!
436 Added a splash screen to the Dabo app startup. This is based on Andrea Gavana's AdvancedSplash class, and allows for cool shaped windows, etc.
437
438 Right now on the Mac there is a noticeable delay from when the splash screen shaped frame appears and when the bitmap is drawn in the Paint event. I'm hoping to be able to figure out why, and also hope that this is just a Mac thing, as Andrea says he's tested this on WinXP and Gtk.
439
440 If this works, we may want to consider better artwork for our default splash screen, but this transparent 'dabo' lettering will do for now.
441
442 ------------------------------------------------------------------------
443 r1922 | ed | 2006-02-10 14:39:15 -0800 (Fri, 10 Feb 2006) | 7 lines
444
445 Turned off the default for showing the splash screen. You can now pass the splash screen settings as parameters to the constructor of dApp, since that's the only practical way to override them.
446
447 Changed the bulk of initialization to the constructor of uiApp. Previously the uiApp object was created, and then things like platform, app reference, etc., weren't established until setup(). dApp now passes a callback to uiApp that is used to continue the startup process once the uiApp has finished initializing.
448
449 Many changes to the SplashScreen class. It now works decently on OS X and Windows, and still looks like crap on Gtk.
450
451
452 ------------------------------------------------------------------------
453 1924 | ed | 2006-02-10 18:23:33 -0800 (Fri, 10 Feb 2006) | 2 lines
454
455 Added the ability to set the DataSource to an object, rather than just a string that can be eval'd to an object.
456
457 ------------------------------------------------------------------------
458 r1926 | ed | 2006-02-11 10:29:20 -0800 (Sat, 11 Feb 2006) | 4 lines
459
460 Changed the 'getMaxRow/Col' methods to 'getHighRow/Col' in order to avoid confusion with the MaxRows/Cols props in dGridSizer.
461
462 Modified both sizer classes to accept windows and not just SizerItems when setting/getting prop values.
463
464 ------------------------------------------------------------------------
465 r1929 | ed | 2006-02-12 07:12:14 -0800 (Sun, 12 Feb 2006) | 2 lines
466
467 Added the movePage() method, which takes either a page reference or a page index, and moves the page to the specified position. The page is then selected, unless the third parameter 'selecting' is False.
468
469 ------------------------------------------------------------------------
470 r1933 | ed | 2006-02-12 15:36:46 -0800 (Sun, 12 Feb 2006) | 6 lines
471
472 Added a getInt() method to dabo.ui.uiwx.
473
474 Fixed the splashscreen display on Windows.
475
476 Added the ability to set the font face and size for the editor.
477
478 ------------------------------------------------------------------------
479 r1938 | ed | 2006-02-13 15:51:36 -0800 (Mon, 13 Feb 2006) | 4 lines
480
481 Added the setCheck() method to dMenu. Given a caption, it will check any menus whose captions match. By default it will uncheck any that don't match; you can pass False as the second argument and leave non-matchers alone. Also added clearChecks() to uncheck all menu items in a menu.
482
483 Exposed the FileName and FilePath properties in dEditor.
484
485 ------------------------------------------------------------------------
486 r1939 | paul | 2006-02-13 16:32:28 -0800 (Mon, 13 Feb 2006) | 4 lines
487
488 Added some syntax sugar for referring to fields and variables. Where you
489 used to have to refer to self.Record["clientname"], you can now do
490 self.clientname. Same with self.Variables.
491
492 ------------------------------------------------------------------------
493 r1940 | ed | 2006-02-14 07:21:27 -0800 (Tue, 14 Feb 2006) | 4 lines
494
495 Added the 'callEvery' function to dabo.ui. This function accepts an interval (in milliseconds), and callable reference, and optional arguments to that callable. It then creates a timer that fires the callable every <interval> milliseconds, passing along any optionally included arguments. The timer reference is then returned, where it can be controlled by calling stop(), start() or release().
496
497 This is based on the dCallEvery class that Brandon Singer proposed. I made it a function in dabo.ui because I felt it was more consistent with the existing functions callAfter() and callAfterInterval().
498
499 ------------------------------------------------------------------------
500 r1941 | ed | 2006-02-14 18:06:00 -0800 (Tue, 14 Feb 2006) | 2 lines
501
502 Changed the default for forms to not automatically show "Record 1 of 0" or similar meaningless database information in the status bar. Set it back to True for the datanav Form class, so all datanav apps should remain unchanged. All of the apps in the demo and IDE directories that don't query data, though, no longer show that message.
503
504 ------------------------------------------------------------------------
505 r1942 | ed | 2006-02-14 18:35:24 -0800 (Tue, 14 Feb 2006) | 2 lines
506
507 Creating an instance of dApp doesn't automatically create an instance of uiApp. Instead, it now asks dabo.ui to get it a reference, and dabo.ui either returns the current instance if one already exists, or creates one if not. This allows you to run wxPython apps from within wxPython apps.
508
509 ------------------------------------------------------------------------
510 r1943 | ed | 2006-02-15 14:13:29 -0800 (Wed, 15 Feb 2006) | 5 lines
511
512 Added some rudimentary support for file drag/drop. Right now, you can call 'createFileDropTarget' on an object to make it able to respond to files dropped on it. Pass in an optional handler object reference; otherwise, the handler is set to the object itself. The drop event is passed on to the handler by calling its 'processDroppedFiles' method, which should be overridden in the handler object to do the specific processing of the files.
513
514 Added a 'Column' property to dEditor; this represents the column position in the current line, and can be changed to move the cursor within the line.
515
516
517 ------------------------------------------------------------------------
518 r1944 | ed | 2006-02-16 06:21:47 -0800 (Thu, 16 Feb 2006) | 2 lines
519
520 Added option in getItemByRowCol() to return the sizer item in the given position instead of the object managed by that sizer item.
521
522 ------------------------------------------------------------------------
523 r1945 | ed | 2006-02-16 07:32:33 -0800 (Thu, 16 Feb 2006) | 2 lines
524
525 Added method 'isItemChecked()' to allow you to determine the checked status of any menu item.
526
527 ------------------------------------------------------------------------
528 r1946 | paul | 2006-02-16 08:36:49 -0800 (Thu, 16 Feb 2006) | 4 lines
529
530 Added dabo.ui.getMousePosition(), which returns the position of the mouse
531 on the screen. This is in contrast to dPemMixin.getMousePosition(), which
532 gets the position of the mouse inside the client window.
533
534 ------------------------------------------------------------------------
535 r1951 | ed | 2006-02-16 14:06:06 -0800 (Thu, 16 Feb 2006) | 4 lines
536
537 Update to allow execution of SQL statements without affecting the current data set. The bizobj has a new pass-through method named 'execute()', which takes a statement understood by the backend database and passes it to its cursor's execute method.
538
539 The cursor class has been modified to run all statements that don't begin with 'select' through its auxiliary cursor, thereby preserving its data set. Preliminary tests that I've run have confirmed that these are working correctly, but there should be a lot more testing done before I am confident that these changes are truly sound and can handle whatever we can toss at them.
540
541 ------------------------------------------------------------------------
542 r1954 | ed | 2006-02-16 17:12:17 -0800 (Thu, 16 Feb 2006) | 2 lines
543
544 You can now set the DataSource to an actual object, instead of having to set it to a string that could be resolved to an object.
545
546 ------------------------------------------------------------------------
547 r1958 | ed | 2006-02-17 18:13:28 -0800 (Fri, 17 Feb 2006) | 6 lines
548
549 Added basic support for storing lists/tuples in the user settings.
550
551 Added a simple way of persisting MRU lists in applications. A new dApp property, '_persistentMRUs' is a dict that contains the name of the menu as the key for the entry, and the function to bind the items to as the value. The framework will then handle saving and restoring MRU lists upon app startup and closing.
552
553 Modified the uiApp to accept just the menu caption as an identifier instead of requiring the actual menu. This is necessary to create MRU lists for context menus, or for restoring menus at app startup.
554
555 ------------------------------------------------------------------------
556 r1959 | ed | 2006-02-18 12:55:23 -0800 (Sat, 18 Feb 2006) | 2 lines
557
558 Updated the requirement that a bizobj be found for all data sources. SInce that was written, Dabo's use of data binding has expanded to lots of non-bizobj uses.
559
560 ------------------------------------------------------------------------
561 r1962 | ed | 2006-02-20 14:22:40 -0800 (Mon, 20 Feb 2006) | 2 lines
562
563 Completed the majority of the work needed to implement saved classes that can be used in other class designs; it was working from the Designer, but not when you ran the form. These changes implement the whole inheritance structure so that if you change the underlying class, any changes not explicitly overridden in the design that uses that class are reflected. This works for both property changes as well as code changes.
564
565 ------------------------------------------------------------------------
566 r1963 | ed | 2006-02-21 06:11:12 -0800 (Tue, 21 Feb 2006) | 8 lines
567
568 Switched the default order of arguments in callAfterInterval(). It makes more sense to specify the interval first, followed by the function and its arguments. Sticking the interval between the function and its arguments seems very awkward. I added code to callAfterInterval() to check if it received a call in which the interval is the second argument (i.e., the original style) and switch them around in that event.
569
570 Removed dDrawPanel as a class. Turns out that adding double-buffering to panels doesn't affect their performance noticeably, so it made sense to turn this on for all dPanel objects by default. However, if you run into a situation where this adversely affects your app, there is a new property named 'Buffered' that will turn this behavior off (i.e., make it work like it used to) when set to False.
571
572 *IF YOU USED dDrawPanel IN YOUR CODE, THIS WILL BREAK IT!*
573
574 You must update by changing all references to dDrawPanel to simply dPanel.
575
576 ------------------------------------------------------------------------
577 r1964 | ed | 2006-02-21 11:05:01 -0800 (Tue, 21 Feb 2006) | 2 lines
578
579 Changed the default for double buffering back to off. Seems that it wasn't as transparently simple as I thought.
580
581 ------------------------------------------------------------------------
582 r1969 | ed | 2006-02-25 11:37:56 -0800 (Sat, 25 Feb 2006) | 2 lines
583
584 Removed the old syntax for begin/commit/rollbackTransaction. The default for these actions in dBackendObject is to call the appropriate method on the connection, not to execute a command on the cursor.
585
586 ------------------------------------------------------------------------
587 r1971 | ed | 2006-02-26 14:38:48 -0800 (Sun, 26 Feb 2006) | 2 lines
588
589 Removed the call to cursor.connection.begin() in the beginTransaction() method. This does not seem to be needed for most backends; in fact, it is typically used to override autocommit to create temporary explicit transactions.
590
591 ------------------------------------------------------------------------
592 r1972 | echo | 2006-02-28 10:51:19 -0800 (Tue, 28 Feb 2006) | 7 lines
593
594 Table creation now works for MySQL also.
595
596 The class dAutoBizobj is a bizobj that has a dTable.
597
598 The function AutoCreateTables() will try to create all the tables that have been setup with dAutoBizobj objects. If it can't create the tables, a message pops up for the user and the db admin. The db admin can enter the username and password for access to create tables or the db admin can manualy execute the queries in the queries.sql.
599
600 Also, having autotables for more than database or even more than one host does not messup or crash, it is handled.
601 ------------------------------------------------------------------------
602 r1975 | ed | 2006-03-01 13:43:52 -0800 (Wed, 01 Mar 2006) | 9 lines
603
604 Converted the dTimer from a bitmap to a non-visible control based directly on wx.Timer. This makes it fit in much better with dabo.ui.callEvery(), which is much more convenient to use in many cases.
605
606 Began coding for the Hover property, which will allow for easier visual coding of MouseOver events. It isn't fully implemented yet, so don't try working with it.
607
608 ------------------------------------------------------------------------
609 r1977 | ed | 2006-03-01 16:34:12 -0800 (Wed, 01 Mar 2006) | 2 lines
610
611 Implemented the Hover property in dPemMixin. The reason for this rather than relying on MouseLeave to terminate the effect is that there are many time when it seems that the mouse leaves the area without triggering the MouseLeave event. The Hover mechanism employs a timer to check for mouse position, and fire the MouseLeave code if it detects that the mouse position is outside of the control.
612
613 ------------------------------------------------------------------------
614 r1981 | paul | 2006-03-03 09:53:18 -0800 (Fri, 03 Mar 2006) | 6 lines
615
616 Added a CustomSQL property to the datanav form. If set, the settings in the
617 select page will be ignored and the contents of CustomSQL used instead.
618
619 ------------------------------------------------------------------------
620 r1983 | ed | 2006-03-05 08:42:35 -0800 (Sun, 05 Mar 2006) | 15 lines
621
622 Added defaults to dGrid.getValue(). If no row or col is specified, it defaults to the current row/column, respectively.
623
624 Added fontMetricFromDrawObject() to dabo.ui. This enables simple calculation of the width/height of a drawn text object.
625
626 Added a fitToSizer() method to dPemMixin. This will resize the object to fit the size required by the sizer represented in its Sizer property. You can also pass in extraWidth and extraHeight values to adjust the size further.
627
628 Added 'Alignment' to the pre-init properties of dCheckBox. Cleaned up the property methods and definitions to make them alphabetized, and to make the strings localized. Also relaxed the values accepted for the Alignment property.
629
630 Added an option to dEditor.changeFontSize() to accept strings in the format "+n" or "-n". These will increment or decrement the font size by 'n' points.
631
632 ------------------------------------------------------------------------
633 r1985 | ed | 2006-03-06 17:42:06 -0800 (Mon, 06 Mar 2006) | 2 lines
634
635 Moved the _addCode() method out of dFormMixin, since it really is more generic than that. It now lives in dObject._addCodeAsMethod(), which takes a dict of method name/code pairs and adds them as methods of the object. dPemMixin now looks for a keyword argument called 'srcCode', and if found, adds it to the object.
636
637 ------------------------------------------------------------------------
638 r1986 | ed | 2006-03-09 13:47:29 -0800 (Thu, 09 Mar 2006) | 6 lines
639
640 This class handles the conversion of cdxml text to a class object. It has one main method: classFromXml(), which takes a cdxml file and returns the main class stored in that file. This class can then be instantiated as part of a live app.
641
642 It is working for most simple classes. You can create layouts using sizers, panels, and add code to any object, and it will work. However, support for GRIDS and PAGEFRAMES is not completed yet. ANY SAVED DESIGN WITH GRIDS OR PAGEFRAMES WILL BE BROKEN NOW.
643
644 This will, of course, be temporary, until I can add that logic to this class.
645
646 ------------------------------------------------------------------------
647 r1987 | ed | 2006-03-09 13:49:16 -0800 (Thu, 09 Mar 2006) | 2 lines
648
649 Updated dabo.ui to use the new cdxml converter in createForm().
650
651 ------------------------------------------------------------------------
652 r1988 | ed | 2006-03-10 16:20:42 -0800 (Fri, 10 Mar 2006) | 4 lines
653
654 Added support for grids and pageframes. These are now re-created as they appeared in the design.
655
656 This is now ready for testing and bug reports.
657
658 ------------------------------------------------------------------------
659 r1992 | ed | 2006-03-11 17:56:25 -0800 (Sat, 11 Mar 2006) | 2 lines
660
661 You can now call addObject() and pass a cdxml file instead of a Dabo class reference, and the class defined in the cdxml will be added to the parent.
662
663 ------------------------------------------------------------------------
664 r1998 | ed | 2006-03-14 17:17:06 -0800 (Tue, 14 Mar 2006) | 4 lines
665
666 Cleaned up the dynamic code creation routines in dObject and DesignerXmlConverter.
667
668 Modified xmltodict to handle property declarations. After 0.6 is out, we really need to move to a more automatic way of doing this. I'd like to look into things such as cElementTree, which is supposed to be incorporated into the next verison of Python. Our files are not so huge that we couldn't parse them into DOM trees.
669
670 ------------------------------------------------------------------------
671 r1999 | ed | 2006-03-15 04:29:28 -0800 (Wed, 15 Mar 2006) | 8 lines
672
673 Added setAfter() and setAfterInterval() to dabo.ui. These work the same as callAfter() and callAfterInterval(), except you use them to set properties to particular values.
674
675 Added the following properties to dGrid: MovableColumns, ResizableColumns, and ResizableRows. When any of these are set to False, the user cannot move/resize the column or row.
676
677 ------------------------------------------------------------------------
678 r2013 | paul | 2006-03-21 08:59:43 -0800 (Tue, 21 Mar 2006) | 1 line
679
680 Changed the keyboard datanav navigation from Ctrl+, and Ctrl+. to Alt+LEFT and Alt+RIGHT. I've confirmed this works on Win and Gtk. Will test Mac next. The original configuration, in addition to being nonintuitive, didn't work on Windows.
681 ------------------------------------------------------------------------
682 r2017 | paul | 2006-03-21 09:41:51 -0800 (Tue, 21 Mar 2006) | 1 line
683
684 Changed the nav keys to Ctrl+LEFT/Ctrl+Right because Alt+arrow on Mac translates to the Option+Arrow which is used for keyboard navigation of text entry fields. Note that because of a separate problem, only forward keyboard navigation is possible on Mac currently.
685 ------------------------------------------------------------------------
686 r2018 | paul | 2006-03-21 09:49:06 -0800 (Tue, 21 Mar 2006) | 4 lines
687
688 Ok, using Ctrl+Arrow on Win and Lin causes the same problem that using
689 Alt+Arrow causes on Mac. Therefore, I've added code to use the best alt
690 key on the running platform.
691
692 ------------------------------------------------------------------------
693 r2023 | ed | 2006-03-21 17:41:20 -0800 (Tue, 21 Mar 2006) | 6 lines
694
695 Added the ability to save screenshots in one of several graphics formats. While this was part of the Bubblet demo originally, it could have uses elsewhere. For example, combining this with dabo.ui.callAfterInterval() would enable timed screen shots.
696
697 Screenshots can be of any object. If no object is specified, the active form is used.
698
699 In order to detect which graphic format was selected, the various file dialog methods have been augmented with similarly-named methods that also return the type selected by the user. For example, calling getFile("jpg", "png") simply returns the path to the selected file. But calling getFileAndType("jpg", "png") returns a 2-tuple: the first element is the path, and the second would be either "jpg" or "png", depending on which of the wildcard types was selected by the user.
700
701 ------------------------------------------------------------------------
702 r2027 | ed | 2006-03-22 11:18:56 -0800 (Wed, 22 Mar 2006) | 9 lines
703
704 Hacked a bit to get getCaptureBitmap() to work well on GTTK, but it's still
705 a bit of a mess. GTK doesn't capture the title bar, menu bar or frame
706 decorations of a window, and I tried to compensate the sizing accordingly.
707 Individual controls don't seem to work at all. I don't have more time to
708 play around with this now, but this is hardly a show-stopper for release.
709
710 ------------------------------------------------------------------------
711
712
713 Dabo 0.5.1 (2006-01-25) (Revision 1860):
714 Additional MDI/SDI improvements and fixes. By default, dForm on Windows will be a MDI child.
715
716 Fixed PageFrame background color to take the background color from the form, not unconditional white. Only on Windows - Gtk and Mac do the right thing by default.
717
718 Fixed various issues with getting icon files and converting them to bitmaps.
719
720 Set the default grid font to Arial,9 on Windows, as the wx-default was just plain ugly.
721
722 Added getPositionInSizer() method to sizers, since they may also be contained within sizers.
723
724 Reworked dShell. Now it appears as a split window, with the standard command area on the top, and the output in the lower pane.
725
726 Changed dGridSizer to raise an exception if the insert method is called instead of just returning False.
727
728 Added SashPositionChanged event. Updated dSplitter to raise this event when the sash position changes.
729
730 Added scrollToBeginning() and scrollToEnd() methods to dEditBox.
731
732 Added pass-through properties for dSplitForm's splitter's panels.
733
734 Added the property 'SplitState' to the dShell class. By right-clicking on the shell, you can toggle between the new split behavior and the "traditional" single pane behavior.
735
736 Added a right-click menu to the output pane. Right now all it can do is clear itself, but we could add other stuff such as font selection, etc.
737
738 Fixed a bug in uiApp that prevented Cut(), Copy() and Paste() from working in the shell (and other non-Daboized controls that only have wx versions of these methods).
739
740 Added a menu command to the shell to clear the output window using Ctrl-Backspace.
741
742 Added the MenuOpen event to dEvents. This allows us to create dynamic menus by intercepting this event and updating the prompts of the menu items as needed. Added the event data code to save the prompt and menu object that triggered the event.
743
744 Added 'deadObjectException' as an alias to wx._core.PyDeadObjectError to the dabo.ui.uiwx module. This will enable Dabo code to handle this condition without having to use wx code.
745
746 Added a bunch on internationalization to the dShell script.
747
748 Made the dMessageBox titles come from Application.getAppInfo(appName) by default.
749
750 Added handling for situations where a bizobj is used with a data connection.
751
752 Added a sizeToColumns() method. This will set the width of the grid equal to that of its component Columns.
753
754 Fixed copy to clipboard in about.py to use CRLF on Windows.
755
756 Added new properties to grid:
757     HorizontalScrolling
758     VerticalScrolling
759     ShowColumnLables
760     ShowCellBorders
761
762 The scrolling properties are booleans, and will hide/show the scrollbars.
763
764 Fixed some problems with setting the column's Width. For a number of reasons, when you created a grid from scratch and then added columns using addColumn, the columns widths you'd specify weren't being respected. Fixed.
765
766 Moved the code for the dEditor class from ide/dEditor.py into its own uiwx-level class. This will allow other apps (I'm thinking Designer here!) to instantiate code editors where they need.
767
768 Revamped the layout of the dOkCancelDialog class to create the panel and sizer that is needed in addControls().
769
770 Cleaned up some of the default spacing so that with AutoSize=True, the form still looks OK.
771
772 Removed the split sash code from the dEditor. That stuff belongs in the form the editor is located, not in the editor itself.
773
774 Fixed a bug in dGrid that only seemed to pop up when the grid was located on a form with a bizobj but that wasn't a dForm. The presets dialog in minesweeper fit that description, and it was throwing errors when you navigated through the grid.
775
776 Added methods for getting/setting the back color of individual items.
777
778 Added property CellHighlightWidth to dGrid, and used that property in the about dialog.
779
780 Made dPanel.addControls() better behaved.
781
782 Reworked/improved the Quick Report dialog in datanav.
783
784 Updated dPageFrameNoTabs to raise the same events as the 'tabbed' versions do. Added a 'getPageNumber()' method.
785
786 Added PNG files for rotating images clockwise and counter-clockwise.
787
788 Improved dImage to support 90 degree rotation in either direction. Added rotation to the the demo.
789
790 Fixed a bug in dListControl's StringValue prop, and any other place where the framework was trying to call the control's GetString() method, since it doesn't have one.
791
792 Added SearchDelay property to dApp, which becomes the default SearchDelay for dGrid. The dGrid SearchDelay can get set to any int but that won't override the dApp setting. If dGrid.SearchDelay is set to None (the default), that is when the dApp setting gets used. Set the default SearchDelay to 300 - better than the previous 600 IMO but still not too fast. Eventually, when we provide a default system preference screen, we should expose this property for the user to tweak how they like.
793
794 Cleaned up and consolidated lots of stuff in dGrid, which shouldn't have any effect on runtime performance. Made SameSizeRows into an actual property.
795
796 Using the standard button sizer in the okay/cancel dialog is good, because it lets wx handle the platform-convention rules. However, even though it handles rearranging the order of the buttons as needed, it doesn't rearrange tab order. So I added code to do that.
797
798 Reworked the login dialog to subclass from dOkCancelDialog.
799
800 Reworked dGrid to sync the rowcount in refresh() calls. Fixed bug in syncing of column counts.
801
802 The entire populate() cycle was happening every time you entered the browse page in datanav apps, when in reality the only thing you need to do in current dGrids when the dataset has been requeried is a simple refresh().
803
804 Added an initial call to _clearDocument(), which is where all the defaults are set for the editor. The DesignerEditor would not indent properly without this.
805
806 Added moveToBeginning() and moveToEnd() methods to position the pointer at the beginning and end of the document, respectively.
807
808 Added functions to dBizobj, dCursor, and dBackend to get the data structure from the cursor description, instead of querying the backend based on a table name. This is more likely to contain correct information, but will need work for other backends besides MySQL. Also, getting the pkid is still problematic - but IMO it isn't a big deal to just have the user tell us which field to use as the PK.
809
810 Fixed dGrid's buildFromDataSet() to use the new function so it will work even if the bizobj has no records at the time of creation.
811
812 Fixed dGrid.sort() to not care if sort is done on an empty bizobj. Added the logic to restore code saved in the Designer so that it functions properly in the re-created form.
813
814 This is big - really big. For the first time, you can create a form in the Designer, add code to be bound to events, or create custom methods, and that code will work in the form created from the .cdxml file exactly the same as if you had written those methods in a regular .py script.
815
816 Improved the card deck pictures.
817
818 Fixed some problems in the Icon setter that would cause errors if None was passed, or if the icon path didn't exist, as would be the case if you were running with py2exe and didn't include the icon files as resources.
819
820 Added a significant change to eventMixin.py's auto event binding logic. The code now first looks at the object itself before looking up its family tree. This is critical for the event binding when running a cdxml file, where methods are added to the object at runtime, and are not present in the class definition.
821
822 Cleaned up some spacing in dEvents; also fixed some "appliesToClass" logic that had events 'applying' to incorrect classses. There are still some anomalies, I'm sure; the event listing in the Designer will reveal these.
823
824 Modified the dynamic code binding to fix the problem with modifying the object's class definition in the current namespace. Also fixed a problem where code for dPage objects was not getting assigned.
825
826 Fixed a bug in the dListControl's _getValue() method when there were no items in the list.
827
828 Added alias 'dragging' for 'mouseDown' in the EventData for mouse events.
829
830 Added method 'getMousePosition()' to dPemMixin. This returns the mouse position in relative coordinates to the object that called it.
831
832 Added 'drawBitmap()' method to dPemMixin. Like the other wx.DC drawing methods, this wraps the wx.DC.DrawBitmap() method into an object interface that Dabo objects can use.
833
834 Changed getSQL() so that if no FROM clause has been specified, it defaults to a FROM clause using the cursor's Table.
835
836 Addedproperties SettingsFileName and SettingsDirectoryName to the app's UserSettingProvider. The defaults for both come from app.getAppInfo("appShortName"), and determine the name of the directory and file name of the user settings file. The directory name will be lower()'d and have a '.' prepended automatically.
837
838 Created the dFoldPanel and dFoldPanelBar classes, which wrap the built-in wx.lib.FoldPanel classes. Modified __init__.py to include these, and added some hacks to dPemMixin to enable them to work with the event structure.
839
840 Added the dCalendar control. This wraps the wx.calendar.CalendarCtrl, making it simpler and more Pythonic to work with.
841
842 Added a setting 'firstDayOfWeek' to dabo.settings
843
844 Moved the method _getWxColour() from dFoldPanelBar into dPemMixin, as it is needed in both dFoldPanelBar as well as dCalendar, and possibly other wx controls that expect a wx.Colour object instead of a color tuple.
845
846 Added the calendar events and their processing.
847
848 Added a form subclass named 'dBorderlessForm'. This creates a form with no visible border or title bar. Renamed the base form class in dForm.py from 'dFormBase' to 'BaseForm'. I felt that the 'd' prefix was misleading, as it isn't meant to be a Dabo base class at all.
849
850 Updated dDateTextBox to use regular datetime values internally instead of wx.DateTime. Updated the calendar to use the new Dabo dCalendar instead of the raw wx version.
851
852 Added row and column highlighting to the dGrid class. Default is to only show the selected cell, but that can be changed by setting the SelectionMode property to either "rows" or "columns". The color used to highlight the selected row/col is controlled by the new SelectionBackColor and SelectionForeColor properties; defaults are yellow background and black text.
853
854 Added a GridRangeSelected event to dEvents, and added the code to raise it to dGrid.
855
856 Changed the default SelectionMode for the datanav grid to 'row'.
857
858 Added some additional properties and functionality to the dFoldPanelBar class. First is the 'Singleton' property, which controls a behavior in which one and only one panel is open at any time. Expanding a different panel collapses the currently open one, and attempting to collapse the expanded panel does nothing.
859
860 Second, there is a 'SingleClick' property that controls whether you need to double-click on a panel's caption bar (default behavior) to toggle it, or whether a single click will suffice.
861
862 Finally, the 'CollapseToBottom' property determines whether any collapsed panels are positioned at the bottom of the control, or whether they remain in their natural position.
863
864 I added the FoldPanelCaptionClick and FoldPanelChange events to dEvents in order to implement these features. They are available to instances of the dFoldPanelBar class for hooking additional behaviors to these events.
865
866 I updated the test form for dFoldPanelBar to enable you to play with these settings.
867
868 Fixed a bug in dGrid's new SelectionMode property. I had previously checked for only 'r' or 'c' at the beginning of the setting, forgetting that 'cells' is a valid setting, so I fixed that to check the first two letters.
869
870 Added the property 'AlternateRowColoring' to dGrid. When True, rows in the grid will be colored depending on the RowColorOdd and RowColorEven properties.
871
872 Changed the datanav grid to use alternate row coloring.
873
874 Added some changes to the column Width setting that were necessary for working correctly in the Designer.
875
876 Fixed a bug with MultipleSelect in the dTreeView class. Added some navigation methods for returning adjacent nodes. Fixed a selection bug when working with MultipleSelect=True.
877
878 Added code to properly escape characters that should not be in XML attributes. Also cleaned up some uneven spacing in the created XML.
879
880 Fixed a bug in dGrid that didn't allow the ColumnCount to be reduced.
881
882 Fixed a bug in dPage that happened when the page was instantiated separately from the pageframe, since it wasn't yet in the Pages collection.
883
884 Added 'dEditableList', which is a wrapping of the wx.gizmos.EditableListBox. This control takes a list and allows the user to add/edit/delete items from the list, as well as re-order them. There are properties to enable/disable any of the following: edit, add, delete, order. All are enabled by default.
885
886 Fixed a bug in dGridSizer. Apparently, calling 'AddGrowableRow/Col' multiple times increments an internal counter, and a subsequent 'RemoveGrowableRow/Col' will only decrement it, and will not set it to be not growable unless the counter has dropped to zero. Now setting a row as growable won't do anything if it already is.
887
888 Added the drawText() method, along with the text draw objects.
889
890 Added columns to reportWriter. Added smarter sorting of elements in the xml output, for instance putting the report title up top instead of on bottom, and putting the bands in order that they appear and not alpha order.
891
892 Changed all the sizer routines to return the SizerItem managing the object that was just added to the sizer.
893
894 Sizer.Children now modified the SizerItem objects to include a 'ControllingSizer' attribute that references the parent sizer.
895
896 Modified the dFoldPanelBar class to better time its refreshes. It's still a bit funky, but does seem to work better.
897
898 Modified dFormMixin to handle the new Spacer panels correctly.
899
900 Added a 'Children' property to dFoldPanelBar that returns the child panels, instead of the layout panel that it uses to manage the visible panels.
901
902 Added a return value to setItemProp() in the sizers so that we can tell if a value was successfully applied.
903
904 Fixed the problem with propertyHelperMixin.getPropertyList(): it was caching the list of properties across the class hierarchy, instead of caching just for this one class definition. Good catch, Ed!
905
906 Wrapped the wx.CheckListBox for Dabo.
907
908 Changed the parameter to sizer for setting the sides that the Border property applies to from 'borderFlags' to 'borderSides', as this seems much more appropriate. Updated the sizers to properly get/set this prop from a list of values.
909
910 Changed all hard-coded "\n" in dicttoxml to the more crossplatform idiom "%s" % os.linesep.
911
912 Fixed a problem whereby nested sizers did not get their Parent property set. Thanks to Casey McGuire for catching this bug.
913
914 Added the GridCellEditBegin event, which is raised when a grid cell editor is shown. This allows you to record the value of a cell before it is modified by the user.
915
916 Added StayOnTop property to dFormMixin.
917
918 Added ShowMenuBar property, so I can avoid showing the Dabo menubar on my property sheet and object tree forms.
919
920 Added groups and variables elements to a newly created report form.
921
922 Changed the default position to (-1, -1), since (0, 0) places the form under the menu bar when running on OS X.
923
924 Fixed a problem with dGrid on Windows where the propsheet was stealing the focus
925
926 Added ForegroundColor and BackgroundColor to dColumn. These props apply to all cells in a column that don't have custom renderers.
927
928 Fleshed out the 'nextNode()' and 'priorNode()' methods to provide true flat navigation through the tree. Also cleaned up several other methods that dealt with nodes and their objects.
929
930 Added font properties to treeview nodes.
931
932 Wrapped the wx.Font object into dFont. This breaks the font editing on the PropSheet, and possibly a few other places that use the font prop, but we'll have to find those afterwards. All previous references to Font have to be changed to GetFont() instead; likewise, all assignments to Font must be replaced with calls to SetFont().
933
934 Revamped the internals of dFont.
935
936 Added 'defaultFontSize' to settings.py
937
938 Updated the font handling in dGrid and dTreeView.
939
940 Cleaned up some spacing in dLabel.
941
942 Added the default wx IDs to the About and Quit menu items so that they appear in the proper place on OS X.
943
944 Updated the long-neglected BorderSizer class, which wraps the wx.StaticBoxSizer class. You can now pass either a pre-made dBox object to the constructor, or pass a parent object, and the constructor will create the box for you.
945
946 Added a Caption property to dBorderSizer. This will update the caption displayed on the sizer's box.
947
948 Refactored the getItemProp() method so that dBorderSizer will use the same functionality.
949
950 Added getAvailableFonts() method. Returns a list of all font faces installed on the current system.
951
952 Updated dFormMixin to handle dBorderSizer objects in .cdxml files
953
954 Changed the prompt and shortcut for the 'Quit' item in dBaseMenuBar to be 'Quit' and 'Ctrl-Q' on all platforms.
955
956 Added additional properties to dBorderSizer that are basically proxies to the box's caption.
957
958 Added a Dabo wrapper for wx._core._wxPyDeadObject.
959
960 Added a couple helper functions for converting between 0-255 rgb
961 format and 0-1 format.
962
963 Added basic MRU (Most Recently Used) capabilities to Dabo. I had looked at the wx.FileHistory class, but it seemed a bit too rigid to work with our design. To use MRU in a menu, the menu should be created by passing 'MRU=True' in the constructor.
964
965 Added Variables, Groups, and Objects as ReportObjectCollections.
966
967 Changed dEvents.ContextMenu to derive from Event instead of MenuEvent, since the contextmenu event is a request for a context menu to be displayed, and not generated from any existing menu.
968
969 Added an addObject() function to report objects. Changed the sorting of report elements so that Variables appears before Groups. Fixed a bug which sometimes kept variables and groups from getting their xml generated.
970
971 Modified xmltodict to properly escape any internal ampersands.
972
973 Modified the Quick Report (list format) to generate the report form not by crafting the XML by hand, but by using the object interface and then finally having the report writer return the XML. This results in quick reports getting the same XML format as if the Designer were used.
974
975 Added the dHyperLink control. This is a wrapped version of the wx.lib.hyperlink.HyperLinkCtrl.
976
977 Added a new function to dabo.ui, callAfterInterval(func, interval). It will call the passed function after the interval has elapsed. Additionally, if callAfterInterval() is called again with the same function before the original timer had elapsed, the old timer is destroyed and the new one instantiated, making the function only run once, after a timer finally reaches the interval.
978
979 Added 'removePage()' and 'cyclePages()' functions to the dPageFrameMixin class. The former allow for a specific page to be removed, while the latter accepts an integer value and cycles the selected page forward (positive) or backwards (negative).
980
981 Added a clear() function to dMenu() for removing all current items.
982
983 Thanks to Brandon Singer, I've fixed a problem where passing kwargs to the constructor of any dObject subclass would silently pass any unhandled kwargs. The fix to the base problem was easy, but it turns out lots of our code was relying on this. I fixed the obvious places (code that gets run from dabo/ui/uiwx/test.py) but I suspect I've missed a few. If you get the exception:
984         TypeError: __init__() got an unexpected keyword argument '<argument>'
985 then it is due to this fix.
986
987 The minesweeper demo uses dabo.fastNameSet when creating the squares, and it turns out that when fastNameSet is True, autoBindEvents() doesn't run. Fixed.
988
989 Fixed dApp to raise the Activate/Deactivate events properly. Fixed dApp to raise Key events. The app gets key events if no window has stopped the event along the way. So now we can dApp.bindEvent(dEvents.KeyChar, func). Fixed dApp to autoBindEvents().
990
991 the menutype keyword can now be used to specifiy about, exit and preferences menu item. Dabo will then automatically use the correct wxID, so the menu items are automatically moved to the MacOS application menu.
992
993 Modified colorTupleFromName() to also attempt to interpret strings as HTML-style hex values.
994
995
996 Dabo-0.5 (2005-11-30) (Revision 1610):
997
998 Added a new class, DataSet, which lets you issue sql queries against local
999 Dabo data, not just against the backend. You can query, sort, and update