| 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 | | |
|---|
| | 183 | |
|---|
| | 184 | + Fixed a problem when switching to the Browse page of the datanav grid without |
|---|
| | 185 | first running a query. Also, there was an error being thrown if a previous |
|---|
| | 186 | query had results, and a subsequent query had no results. |
|---|
| | 187 | |
|---|
| | 188 | + Modified the code in _setCurrentRow() of dGrid so that it wasn't calling |
|---|
| | 189 | SetGridCursor() unless the position had actually changed. I had recorded up to |
|---|
| | 190 | 10 calls to this function, all with the exact same values each time I switched |
|---|
| | 191 | to the Browse page. |
|---|
| | 192 | |
|---|
| | 193 | + Removed the code that lower-cased field names, as it was preventing the code |
|---|
| | 194 | from working with case-sensitive backends and columns containing capital |
|---|
| | 195 | letters. |
|---|
| | 196 | |
|---|
| | 197 | Fixed a problem where str values were not able to be properly converted to |
|---|
| | 198 | unicode. |
|---|
| | 199 | |
|---|
| | 200 | + Added a parameter to the promptForFileName() method to specify the default |
|---|
| | 201 | path for the dialog. |
|---|
| | 202 | |
|---|
| | 203 | + Added the TreeItemContextMenu event. This differs from the normal |
|---|
| | 204 | ContextMenuEvent in that it returns the itemID of the node that was |
|---|
| | 205 | right-clicked. |
|---|
| | 206 | |
|---|
| | 207 | + Added code in the event data gathering code to store the tree item ID for |
|---|
| | 208 | 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 |
|---|
| | 213 | dBorderSizer when the sizer was released. |
|---|
| | 214 | |
|---|
| | 215 | + The double-Activate on Windows is really getting in the way. I haven't heard |
|---|
| | 216 | anything from my bug report yet, so I added workaround code to ignore the |
|---|
| | 217 | first Activate. |
|---|
| | 218 | |
|---|
| | 219 | + Cleaned up the order of releasing child objects for sizers. Also fixed problem |
|---|
| | 220 | with releasing the box for border sizers. |
|---|
| | 221 | |
|---|
| | 222 | + Added getFunctionList() method to return a list of all 'class' and 'def' |
|---|
| | 223 | statements in the current file. |
|---|
| | 224 | |
|---|
| | 225 | + First pass at integrating the dTable class into the dabo.db framework. Right |
|---|
| | 226 | now, if this works at all, it only works for SQLite. |
|---|
| | 227 | |
|---|
| | 228 | + Fixed a bug wherein multiply-nested sizers might not release all of their |
|---|
| | 229 | content when release(True) is called. |
|---|
| | 230 | |
|---|
| | 231 | + Added a 'setInactive()' method that will hide the auto-complete popup if one |
|---|
| | 232 | is visible. |
|---|
| | 233 | |
|---|
| | 234 | + Disabled the fillGrid()'s setting of focus to the grid, as it causes problems |
|---|
| | 235 | with stealing focus away from another active form, at least on Windows. Also, |
|---|
| | 236 | it seems that such code really doesn't belong inside the function to build the |
|---|
| | 237 | grid, but perhaps we'll find it belongs somewhere else. |
|---|
| | 238 | |
|---|
| | 239 | + The xml header wasn't being converted to native line endings. Fixed. |
|---|
| | 240 | |
|---|
| | 241 | + No need to explicitly do the unicode conversion in the report fields, as that |
|---|
| | 242 | is done in the report writer. |
|---|
| | 243 | |
|---|
| | 244 | + Added a Refresh event. This is raised when dForm.refresh() is called. All |
|---|
| | 245 | dPemMixin classes will receive it, and fire their refresh() hook method. |
|---|
| | 246 | |
|---|
| | 247 | + Added dynamic properties to most normal static properties. Example: given a |
|---|
| | 248 | label and a function 'currTime()' in a form that returns the current time, |
|---|
| | 249 | issuing the following: |
|---|
| | 250 | label.DynamicCaption = label.Form.currTime |
|---|
| | 251 | will result in the label's Caption property being updated every time |
|---|
| | 252 | label.Form.refresh() is called. |
|---|
| | 253 | |
|---|
| | 254 | + Added two methods to dabo.ui for converting image data back to bitmaps and |
|---|
| | 255 | images. These were necessary because I noticed that when Editor.py was called |
|---|
| | 256 | from locations other than its own directory, the image file for the function |
|---|
| | 257 | button was not found. The solution was to convert the .png file to a data |
|---|
| | 258 | stream using wx.tools.img2py.py, and store that in Editor.py. |
|---|
| | 259 | |
|---|
| | 260 | + Can now set dApp.UI=None, and setup() won't try to load a UI. You have to do |
|---|
| | 261 | it explicitly, though, such as: |
|---|
| | 262 | app = dabo.dApp() |
|---|
| | 263 | app.UI = None |
|---|
| | 264 | app.setup() |
|---|
| | 265 | --or-- |
|---|
| | 266 | app = dabo.dApp(UI=None) |
|---|
| | 267 | app.setup() |
|---|
| | 268 | |
|---|
| | 269 | + First crack at creating a double-buffered drawing surface. The new class, |
|---|
| | 270 | 'dDrawPanel', is a subclass of dPanel, but has its repainting handled through |
|---|
| | 271 | the double-buffer techniques outlined on the wxPython wiki. |
|---|
| | 272 | |
|---|
| | 273 | + Bookmarks in dEditor now persist when you save the file. If you re-open a |
|---|
| | 274 | saved file with bookmarks, they are restored. |
|---|
| | 275 | |
|---|
| | 276 | + Refactored dUserSettingProvider a little bit. Fixed a bug in |
|---|
| | 277 | getUserSettingKeys() that resulted in it always returning an empty list. Added |
|---|
| | 278 | deleteUserSetting() and deleteAllUserSettings(); these do just what you think |
|---|
| | 279 | they would. |
|---|
| | 280 | |
|---|
| | 281 | + Changed a couple exec() calls to setattr() calls instead, which may be safer |
|---|
| | 282 | if not faster, but definitely more explicit and easier to understand. |
|---|
| | 283 | |
|---|
| | 284 | + Implemented the handling of RowSpan/ColSpan for grid sizers. Added a |
|---|
| | 285 | GridSizerSpanException class that is raised if an attempt to set the span to a |
|---|
| | 286 | location that is already occupied. |
|---|
| | 287 | |
|---|
| | 288 | + Revamped the entire flow for transactions. These changes have been tested on |
|---|
| | 289 | MySQL and SQLite, but still need to be tested with Firebird and PostgreSQL. |
|---|
| | 290 | |
|---|
| | 291 | + Changed the default for bizobjs, cursors, etc., to not autocommit. The |
|---|
| | 292 | AutoCommit property of the bizobj is simply a pass-through to the cursor's |
|---|
| | 293 | AutoCommit property. |
|---|
| | 294 | |
|---|
| | 295 | + Also cleaned up some inconsistent spacing and method ordering. |
|---|
| | 296 | |
|---|
| | 297 | + Modified datanav to allow for manual setups that don't use fieldSpecs or |
|---|
| | 298 | relationSpecs. I'll be committing a change to the AppWizard that allows |
|---|
| | 299 | for this option soon. |
|---|
| | 300 | |
|---|
| | 301 | + Moved SelectPageClass, BrowsePageClass, and EditPageClass from PageFrame |
|---|
| | 302 | to Form, since that is a better central location for these properties. |
|---|
| | 303 | |
|---|
| | 304 | + Added a splash screen to the Dabo app startup. This is based on Andrea |
|---|
| | 305 | Gavana's AdvancedSplash class, and allows for cool shaped windows, etc. |
|---|
| | 306 | |
|---|
| | 307 | + Added the ability to set the DataSource to an object, rather than just a |
|---|
| | 308 | string that can be eval'd to an object. |
|---|
| | 309 | |
|---|
| | 310 | + Changed the 'getMaxRow/Col' methods to 'getHighRow/Col' in order to avoid |
|---|
| | 311 | confusion with the MaxRows/Cols props in dGridSizer. |
|---|
| | 312 | |
|---|
| | 313 | + Modified both sizer classes to accept windows and not just SizerItems when |
|---|
| | 314 | setting/getting prop values. |
|---|
| | 315 | |
|---|
| | 316 | + Added the movePage() method, which takes either a page reference or a page |
|---|
| | 317 | index, and moves the page to the specified position. The page is then |
|---|
| | 318 | selected, unless the third parameter 'selecting' is False. |
|---|
| | 319 | |
|---|
| | 320 | + Added a getInt() method to dabo.ui.uiwx. |
|---|
| | 321 | |
|---|
| | 322 | + Fixed the splashscreen display on Windows. |
|---|
| | 323 | |
|---|
| | 324 | + Added the ability to set the font face and size for the editor. |
|---|
| | 325 | |
|---|
| | 326 | + Added the setCheck() method to dMenu. Given a caption, it will check any menus |
|---|
| | 327 | whose captions match. By default it will uncheck any that don't match; you can |
|---|
| | 328 | pass False as the second argument and leave non-matchers alone. Also added |
|---|
| | 329 | clearChecks() to uncheck all menu items in a menu. |
|---|
| | 330 | |
|---|
| | 331 | + Exposed the FileName and FilePath properties in dEditor. |
|---|
| | 332 | |
|---|
| | 333 | + Added some syntax sugar for referring to fields and variables in reports. |
|---|
| | 334 | Where you used to have to refer to self.Record["clientname"], you can now do |
|---|
| | 335 | self.clientname. Same with self.Variables. |
|---|
| | 336 | |
|---|
| | 337 | + Added the 'callEvery' function to dabo.ui. This function accepts an interval |
|---|
| | 338 | (in milliseconds), and callable reference, and optional arguments to that |
|---|
| | 339 | callable. It then creates a timer that fires the callable every <interval> |
|---|
| | 340 | milliseconds, passing along any optionally included arguments. The timer |
|---|
| | 341 | reference is then returned, where it can be controlled by calling stop(), |
|---|
| | 342 | start() or release(). This is based on the dCallEvery class that Brandon |
|---|
| | 343 | Singer proposed. I made it a function in dabo.ui because I felt it was more |
|---|
| | 344 | consistent with the existing functions callAfter() and callAfterInterval(). |
|---|
| | 345 | |
|---|
| | 346 | + Changed the default for forms to not automatically show "Record 1 of 0" or |
|---|
| | 347 | similar meaningless database information in the status bar. Set it back to |
|---|
| | 348 | True for the datanav Form class, so all datanav apps should remain unchanged. |
|---|
| | 349 | All of the apps in the demo and IDE directories that don't query data, though, |
|---|
| | 350 | no longer show that message. |
|---|
| | 351 | |
|---|
| | 352 | + Creating an instance of dApp doesn't automatically create an instance of |
|---|
| | 353 | uiApp. Instead, it now asks dabo.ui to get it a reference, and dabo.ui either |
|---|
| | 354 | returns the current instance if one already exists, or creates one if not. |
|---|
| | 355 | This allows you to run wxPython apps from within wxPython apps. |
|---|
| | 356 | |
|---|
| | 357 | + Added some rudimentary support for file drag/drop. Right now, you can call |
|---|
| | 358 | 'createFileDropTarget' on an object to make it able to respond to files |
|---|
| | 359 | dropped on it. Pass in an optional handler object reference; otherwise, the |
|---|
| | 360 | handler is set to the object itself. The drop event is passed on to the |
|---|
| | 361 | handler by calling its 'processDroppedFiles' method, which should be |
|---|
| | 362 | overridden in the handler object to do the specific processing of the files. |
|---|
| | 363 | |
|---|
| | 364 | + Added a 'Column' property to dEditor; this represents the column position in |
|---|
| | 365 | the current line, and can be changed to move the cursor within the line. |
|---|
| | 366 | |
|---|
| | 367 | + Added option in getItemByRowCol() to return the sizer item in the given |
|---|
| | 368 | position instead of the object managed by that sizer item. |
|---|
| | 369 | |
|---|
| | 370 | + Added method 'isItemChecked()' to allow you to determine the checked status of |
|---|
| | 371 | any menu item. |
|---|
| | 372 | |
|---|
| | 373 | + Added dabo.ui.getMousePosition(), which returns the position of the mouse |
|---|
| | 374 | on the screen. This is in contrast to dPemMixin.getMousePosition(), which |
|---|
| | 375 | gets the position of the mouse inside the client window. |
|---|
| | 376 | |
|---|
| | 377 | + Update to allow execution of SQL statements without affecting the current data |
|---|
| | 378 | set. The bizobj has a new pass-through method named 'execute()', which takes a |
|---|
| | 379 | statement understood by the backend database and passes it to its cursor's |
|---|
| | 380 | execute method. |
|---|
| | 381 | |
|---|
| | 382 | + The cursor class has been modified to run all statements that don't begin with |
|---|
| | 383 | 'select' through its auxiliary cursor, thereby preserving its data set. |
|---|
| | 384 | Preliminary tests that I've run have confirmed that these are working |
|---|
| | 385 | correctly, but there should be a lot more testing done before I am confident |
|---|
| | 386 | that these changes are truly sound and can handle whatever we can toss at them. |
|---|
| | 387 | |
|---|
| | 388 | + You can now set the DataSource to an actual object, instead of having to set |
|---|
| | 389 | it to a string that could be resolved to an object. |
|---|
| | 390 | |
|---|
| | 391 | + Added basic support for storing lists/tuples in the user settings. |
|---|
| | 392 | |
|---|
| | 393 | + Added a simple way of persisting MRU lists in applications. A new dApp |
|---|
| | 394 | property, '_persistentMRUs' is a dict that contains the name of the menu as |
|---|
| | 395 | the key for the entry, and the function to bind the items to as the value. The |
|---|
| | 396 | framework will then handle saving and restoring MRU lists upon app startup and |
|---|
| | 397 | closing. |
|---|
| | 398 | |
|---|
| | 399 | + Modified the uiApp to accept just the menu caption as an identifier instead of |
|---|
| | 400 | requiring the actual menu. This is necessary to create MRU lists for context |
|---|
| | 401 | menus, or for restoring menus at app startup. |
|---|
| | 402 | |
|---|
| | 403 | + Updated the requirement that a bizobj be found for all data sources. Since |
|---|
| | 404 | that was written, Dabo's use of data binding has expanded to lots of |
|---|
| | 405 | non-bizobj uses. |
|---|
| | 406 | |
|---|
| | 407 | + Completed the majority of the work needed to implement saved classes that can |
|---|
| | 408 | be used in other class designs; it was working from the Designer, but not when |
|---|
| | 409 | you ran the form. These changes implement the whole inheritance structure so |
|---|
| | 410 | that if you change the underlying class, any changes not explicitly overridden |
|---|
| | 411 | in the design that uses that class are reflected. This works for both property |
|---|
| | 412 | changes as well as code changes. |
|---|
| | 413 | |
|---|
| | 414 | + Switched the default order of arguments in callAfterInterval(). It makes more |
|---|
| | 415 | sense to specify the interval first, followed by the function and its |
|---|
| | 416 | arguments. Sticking the interval between the function and its arguments seems |
|---|
| | 417 | very awkward. I added code to callAfterInterval() to check if it received a |
|---|
| | 418 | call in which the interval is the second argument (i.e., the original style) |
|---|
| | 419 | and switch them around in that event. |
|---|
| | 420 | |
|---|
| | 421 | + Removed dDrawPanel as a class. Turns out that adding double-buffering to |
|---|
| | 422 | panels doesn't affect their performance noticeably, so it made sense to turn |
|---|
| | 423 | this on for all dPanel objects by default. However, if you run into a |
|---|
| | 424 | situation where this adversely affects your app, there is a new property named |
|---|
| | 425 | 'Buffered' that will turn this behavior off (i.e., make it work like it used |
|---|
| | 426 | to) when set to False. |
|---|
| | 427 | |
|---|
| | 428 | *IF YOU USED dDrawPanel IN YOUR CODE, THIS WILL BREAK IT!* You must update by |
|---|
| | 429 | changing all references to dDrawPanel to simply dPanel. |
|---|
| | 430 | |
|---|
| | 431 | + Removed the old syntax for begin/commit/rollbackTransaction. The default for |
|---|
| | 432 | these actions in dBackendObject is to call the appropriate method on the |
|---|
| | 433 | connection, not to execute a command on the cursor. |
|---|
| | 434 | |
|---|
| | 435 | + Removed the call to cursor.connection.begin() in the beginTransaction() |
|---|
| | 436 | method. This does not seem to be needed for most backends; in fact, it is |
|---|
| | 437 | typically used to override autocommit to create temporary explicit |
|---|
| | 438 | transactions. |
|---|
| | 439 | |
|---|
| | 440 | + Table creation now works for MySQL also. The class dAutoBizobj is a bizobj |
|---|
| | 441 | that has a dTable. The function AutoCreateTables() will try to create all the |
|---|
| | 442 | tables that have been setup with dAutoBizobj objects. If it can't create the |
|---|
| | 443 | tables, a message pops up for the user and the db admin. The db admin can |
|---|
| | 444 | enter the username and password for access to create tables or the db admin |
|---|
| | 445 | can manualy execute the queries in the queries.sql. |
|---|
| | 446 | |
|---|
| | 447 | + Converted the dTimer from a bitmap to a non-visible control based directly on |
|---|
| | 448 | wx.Timer. This makes it fit in much better with dabo.ui.callEvery(), which is |
|---|
| | 449 | much more convenient to use in many cases. |
|---|
| | 450 | |
|---|
| | 451 | + Began coding for the Hover property, which will allow for easier visual coding |
|---|
| | 452 | of MouseOver events. It isn't fully implemented yet, so don't try working with |
|---|
| | 453 | it. |
|---|
| | 454 | |
|---|
| | 455 | + Implemented the Hover property in dPemMixin. The reason for this rather than |
|---|
| | 456 | relying on MouseLeave to terminate the effect is that there are many time when |
|---|
| | 457 | it seems that the mouse leaves the area without triggering the MouseLeave |
|---|
| | 458 | event. The Hover mechanism employs a timer to check for mouse position, and |
|---|
| | 459 | fire the MouseLeave code if it detects that the mouse position is outside of |
|---|
| | 460 | the control. |
|---|
| | 461 | |
|---|
| | 462 | + Added a CustomSQL property to the datanav form. If set, the settings in the |
|---|
| | 463 | select page will be ignored and the contents of CustomSQL used instead. |
|---|
| | 464 | |
|---|
| | 465 | + Added defaults to dGrid.getValue(). If no row or col is specified, it defaults |
|---|
| | 466 | to the current row/column, respectively. |
|---|
| | 467 | |
|---|
| | 468 | + Added fontMetricFromDrawObject() to dabo.ui. This enables simple calculation |
|---|
| | 469 | of the width/height of a drawn text object. |
|---|
| | 470 | |
|---|
| | 471 | + Added a fitToSizer() method to dPemMixin. This will resize the object to fit |
|---|
| | 472 | the size required by the sizer represented in its Sizer property. You can also |
|---|
| | 473 | pass in extraWidth and extraHeight values to adjust the size further. |
|---|
| | 474 | |
|---|
| | 475 | + Added 'Alignment' to the pre-init properties of dCheckBox. Cleaned up the |
|---|
| | 476 | property methods and definitions to make them alphabetized, and to make the |
|---|
| | 477 | strings localized. Also relaxed the values accepted for the Alignment |
|---|
| | 478 | property. |
|---|
| | 479 | |
|---|
| | 480 | + Added an option to dEditor.changeFontSize() to accept strings in the format |
|---|
| | 481 | "+n" or "-n". These will increment or decrement the font size by 'n' points. |
|---|
| | 482 | |
|---|
| | 483 | + Moved the _addCode() method out of dFormMixin, since it really is more generic |
|---|
| | 484 | than that. It now lives in dObject._addCodeAsMethod(), which takes a dict of |
|---|
| | 485 | method name/code pairs and adds them as methods of the object. dPemMixin now |
|---|
| | 486 | looks for a keyword argument called 'srcCode', and if found, adds it to the |
|---|
| | 487 | object. |
|---|
| | 488 | |
|---|
| | 489 | + You can now call addObject() and pass a cdxml file instead of a Dabo class |
|---|
| | 490 | reference, and the class defined in the cdxml will be added to the parent. |
|---|
| | 491 | |
|---|
| | 492 | + Cleaned up the dynamic code creation routines in dObject and |
|---|
| | 493 | DesignerXmlConverter. |
|---|
| | 494 | |
|---|
| | 495 | + Modified xmltodict to handle property declarations. |
|---|
| | 496 | |
|---|
| | 497 | + Added setAfter() and setAfterInterval() to dabo.ui. These work the same as |
|---|
| | 498 | callAfter() and callAfterInterval(), except you use them to set properties to |
|---|
| | 499 | particular values. |
|---|
| | 500 | |
|---|
| | 501 | + Added the following properties to dGrid: MovableColumns, ResizableColumns, and |
|---|
| | 502 | ResizableRows. When any of these are set to False, the user cannot move/resize |
|---|
| | 503 | the column or row. |
|---|
| | 504 | |
|---|
| | 505 | + Changed the keyboard datanav navigation from Ctrl+, and Ctrl+. to Ctrl+LEFT |
|---|
| | 506 | and Ctrl+RIGHT on Mac, and Alt+LEFT and Alt+RIGHT on Linux and Windows. I've |
|---|
| | 507 | The original configuration, in addition to being nonintuitive, didn't work on |
|---|
| | 508 | Windows. |
|---|
| | 509 | |
|---|
| | 510 | + Added the ability to save screenshots in one of several graphics formats. |
|---|
| | 511 | While this was part of the Bubblet demo originally, it could have uses |
|---|
| | 512 | elsewhere. For example, combining this with dabo.ui.callAfterInterval() would |
|---|
| | 513 | enable timed screen shots. |
|---|
| | 514 | |
|---|
| | 515 | + Hacked a bit to get getCaptureBitmap() to work well on GTTK, but it's still |
|---|
| | 516 | a bit of a mess. GTK doesn't capture the title bar, menu bar or frame |
|---|
| | 517 | decorations of a window, and I tried to compensate the sizing accordingly. |
|---|
| | 518 | Individual controls don't seem to work at all. I don't have more time to |
|---|
| | 519 | play around with this now, but this is hardly a show-stopper for release. |
|---|
| | 520 | |
|---|
| | 521 | |
|---|
| | 522 | =============================================================================== |
|---|