Changeset 3119
- Timestamp:
- 05/10/07 09:06:47 (1 year ago)
- Files:
-
- branches/NateBranch/AUTHORS (modified) (1 diff)
- branches/NateBranch/ChangeLog (modified) (5 diffs)
- branches/NateBranch/dabo/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/__version__.py (modified) (1 diff)
- branches/NateBranch/dabo/biz/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/biz/dAutoBizobj.py (modified) (1 diff)
- branches/NateBranch/dabo/biz/dBizobj.py (modified) (25 diffs)
- branches/NateBranch/dabo/biz/test/test_dBizobj.py (modified) (3 diffs)
- branches/NateBranch/dabo/dApp.py (modified) (4 diffs)
- branches/NateBranch/dabo/dBug.py (modified) (1 diff)
- branches/NateBranch/dabo/dColors.py (modified) (1 diff)
- branches/NateBranch/dabo/dConstants.py (modified) (1 diff)
- branches/NateBranch/dabo/dEvents.py (modified) (3 diffs)
- branches/NateBranch/dabo/dException.py (modified) (1 diff)
- branches/NateBranch/dabo/dLocalize.py (modified) (3 diffs)
- branches/NateBranch/dabo/dObject.py (modified) (1 diff)
- branches/NateBranch/dabo/dPref.py (modified) (1 diff)
- branches/NateBranch/dabo/dReportWriter.py (modified) (1 diff)
- branches/NateBranch/dabo/dSecurityManager.py (modified) (1 diff)
- branches/NateBranch/dabo/dUserSettingProvider.py (modified) (1 diff)
- branches/NateBranch/dabo/db/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/db/dBackend.py (modified) (2 diffs)
- branches/NateBranch/dabo/db/dConnectInfo.py (modified) (2 diffs)
- branches/NateBranch/dabo/db/dConnection.py (modified) (5 diffs)
- branches/NateBranch/dabo/db/dDataSet.py (modified) (1 diff)
- branches/NateBranch/dabo/db/dNoEscQuoteStr.py (modified) (1 diff)
- branches/NateBranch/dabo/db/dTable.py (modified) (1 diff)
- branches/NateBranch/dabo/db/dbFirebird.py (modified) (3 diffs)
- branches/NateBranch/dabo/db/dbMsSQL.py (modified) (3 diffs)
- branches/NateBranch/dabo/db/dbMySQL.py (modified) (3 diffs)
- branches/NateBranch/dabo/db/dbOracle.py (modified) (3 diffs)
- branches/NateBranch/dabo/db/dbPostgreSQL.py (modified) (3 diffs)
- branches/NateBranch/dabo/db/dbSQLite.py (modified) (2 diffs)
- branches/NateBranch/dabo/db/dbTemplate.py (modified) (3 diffs)
- branches/NateBranch/dabo/db/test/test_dConnectInfo.py (modified) (1 diff)
- branches/NateBranch/dabo/db/test/test_dConnection.py (modified) (1 diff)
- branches/NateBranch/dabo/db/test/test_dCursorMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/icons/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/icons/cards/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/icons/cards/large/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/icons/cards/medium/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/icons/cards/small/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/lib (modified) (1 prop)
- branches/NateBranch/dabo/lib/DesignerUtils.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/DesignerXmlConverter.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/EasyDialogBuilder.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/SimpleCrypt.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/StopWatch.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/autosuper/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/autosuper/autosuper.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/autosuper/autosuper_unittest.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/autosuper/setup.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/caselessDict.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/connParser.py (modified) (5 diffs)
- branches/NateBranch/dabo/lib/datanav/Bizobj.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/datanav/Form.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/datanav/Grid.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/datanav/Page.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/datanav/PageFrame.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/datanav/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/datanav2/Bizobj.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/datanav2/Form.py (modified) (2 diffs)
- branches/NateBranch/dabo/lib/datanav2/Grid.py (modified) (6 diffs)
- branches/NateBranch/dabo/lib/datanav2/Page.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/datanav2/PageFrame.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/datanav2/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/dates.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/doDefaultMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/eventMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/logger.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/profilehooks.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/propertyHelperMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reportUtils.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reportWriter.py (modified) (3 diffs)
- branches/NateBranch/dabo/lib/reporting_stefano/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reporting_stefano/objects.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reporting_stefano/report.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reporting_stefano/run.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reporting_stefano/serialization/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reporting_stefano/serialization/attributes.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reporting_stefano/serialization/children.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reporting_stefano/serialization/serialization.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reporting_stefano/serialization/xmlserializer.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/reporting_stefano/util.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/specParser.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/test/test_dates.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/untabify.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/utils.py (modified) (5 diffs)
- branches/NateBranch/dabo/lib/uuid.py (modified) (1 diff)
- branches/NateBranch/dabo/lib/xmltodict.py (modified) (1 diff)
- branches/NateBranch/dabo/settings.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/dControlMixinBase.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/dDataControlMixinBase.py (modified) (3 diffs)
- branches/NateBranch/dabo/ui/dPemMixinBase.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/dialogs/SortingForm.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/dialogs/Wizard.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/dialogs/WizardPage.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/dialogs/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/dialogs/about.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/dialogs/htmlAbout.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/dialogs/login.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uicurses/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiqt/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/__init__.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/dCheckBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/dControlMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/dDataControlMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/dFormMain.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/dFormMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/dLabel.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/dPanel.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/dPemMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/test.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uitk/uiApp.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/__init__.py (modified) (3 diffs)
- branches/NateBranch/dabo/ui/uiwx/concordance.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dBaseMenuBar.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dBitmap.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dBitmapButton.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dBorderSizer.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dButton.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dCalendar.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dCheckBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dCheckListBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dColorDialog.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dComboBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dControlItemMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dControlMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dDataControlMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dDateTextBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dDialog.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dDockForm.py (copied) (copied from trunk/dabo/ui/uiwx/dDockForm.py)
- branches/NateBranch/dabo/ui/uiwx/dDropdownList.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dEditBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dEditableList.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dEditor.py (modified) (13 diffs)
- branches/NateBranch/dabo/ui/uiwx/dFileDialog.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dFoldPanelBar.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dFont.py (modified) (2 diffs)
- branches/NateBranch/dabo/ui/uiwx/dFontDialog.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dFormMain.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dFormMixin.py (modified) (7 diffs)
- branches/NateBranch/dabo/ui/uiwx/dGauge.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dGlWindow.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dGrid.py (modified) (14 diffs)
- branches/NateBranch/dabo/ui/uiwx/dGridSizer.py (modified) (2 diffs)
- branches/NateBranch/dabo/ui/uiwx/dHtmlBox.py (modified) (10 diffs)
- branches/NateBranch/dabo/ui/uiwx/dHyperLink.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dIcons.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dImage.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dImageMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dKeys.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dLabel.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dLed.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dLine.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dListBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dListControl.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dMenu.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dMenuBar.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dMenuItem.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dMessageBox.py (modified) (2 diffs)
- branches/NateBranch/dabo/ui/uiwx/dPage.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dPageFrame.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dPageFrameMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dPageFrameNoTabs.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dPanel.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dPemMixin.py (modified) (17 diffs)
- branches/NateBranch/dabo/ui/uiwx/dProgressDialog.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dRadioList.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dShell.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dSizer.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dSizerMixin.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dSlider.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dSpinner.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dSplitForm.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dSplitter.py (modified) (2 diffs)
- branches/NateBranch/dabo/ui/uiwx/dStatusBar.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dTextBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dTimer.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dToggleButton.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dToolBar.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dTreeView.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/dUICursors.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/gridRenderers.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/gtkProblems/frame_position_reset.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/macProblems/macArrowHotKeyProblem.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/macProblems/macFontProblem.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/macProblems/macImageProblem/macImageProblem.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/macProblems/macMouseEventProblem/daboClick.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/macProblems/macMouseEventProblem/wxClick.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/masked/format.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/masked/maskededit.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/test.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/test/test_dEditBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/test/test_dForm.py (modified) (4 diffs)
- branches/NateBranch/dabo/ui/uiwx/test/test_dTextBox.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/uiApp.py (modified) (5 diffs)
- branches/NateBranch/dabo/ui/uiwx/winProblems/wxFrameActivate.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/wxProblems/acceleratorTable.py (modified) (1 diff)
- branches/NateBranch/dabo/ui/uiwx/wxProblems/test_font_sizes.py (modified) (1 diff)
- branches/NateBranch/tools/addEncoding.py (copied) (copied from trunk/tools/addEncoding.py)
- branches/NateBranch/tools/extractLoc.py (copied) (copied from trunk/tools/extractLoc.py)
- branches/NateBranch/tools/genpot.py (copied) (copied from trunk/tools/genpot.py)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/NateBranch/AUTHORS
r2715 r3119 18 18 19 19 Thanks everyone for using, improving, and enjoying Dabo!! 20 branches/NateBranch/ChangeLog
r3009 r3119 2 2 3 3 =============================================================================== 4 Dabo 0.8 (2007-0 4-01) (Revision 3010):4 Dabo 0.8 (2007-05-09) (Revision 3111): 5 5 6 6 Enhancements: 7 7 8 8 ===== General Stuff ===== 9 + Improved a lot of the handling of paths. It is now possible to correctly 10 resolve a relative path when the source file and the contained file are in 11 different directories, while the app is running from a third directory. 12 9 13 + Added datanav2; deprecated datanav. datanav2 no longer supports fieldSpecs, 10 14 relationSpecs, and other things. The general theme is that the generated … … 23 27 24 28 ===== UI Tier ===== 29 + Began work getting grid cell properties set up. IOW, being able to set the 30 ForeColor of a specific row in a column (a single cell), including 31 dynamic cell properties. Currently, it works, but the only property 32 I've added yet is CellForeColor and DynamicCellForeColor. 33 34 + Removed the requirement that objects used as DataSources have to inherit 35 from dObject. Thanks Carl for pointing out the limitation. 36 37 + Added dDockForm to the main trunk, which is Dabo's wrapper for wxAUI. 38 39 + Added the option of passing complex filter expressions to setAll(). This 40 function now accepts a tuple of filter expressions of the format 41 'att comp val', which will be eval'd with the child objects inn order to 42 determine if the filter applies. Each expression in the tuple is ANDed 43 with the others; all the tuple elements must evaluate to True for the 44 value to be set. 45 46 + Added the dHtmlBox.HtmlLinkClicked event. 47 48 + Added the HatchStyle property to draw objects. This gives you the option 49 of specifying that the fill for drawn objects can be one of the following 50 hatch patterns: 51 52 Solid (default) 53 Transparent 54 Cross 55 Horizontal 56 Vertical 57 Diagonal 58 ReverseDiagonal 59 CrossDiagonal 60 25 61 + EasyDialogBuilder - minor improvements by Nate Lowrie. 26 62 … … 63 99 + Added AutoAutoCompletion option to dEditor. 64 100 101 + Added methods to dabo.ui: isMouseLeftDown(), isMouseRightDown(), 102 and isMouseMiddleDown(). 103 104 + Added tango icon theme and changed our toolbars/menus to reference the new 105 icons. (Ticket # 1037) 106 107 + Added Modal property to dForm, settable only by sending the property to the 108 constructor. When Modal, a dialog instead of a form will be instantiated. 109 110 + dEditor now properly syntax-colors dabo-based xml files such as .cdxml 111 and .rfxml. Previously, it displayed these files using Python coloring. 112 113 + Removed IconBundle property from dFormMixin. Added the ability to set Form.Icon 114 to a sequence of filenames which Dabo will convert to a wx.IconBundle 115 automatically. 116 117 + Added property WordWrap to dEditBox. Default is True. 118 65 119 ===== Data Tier ===== 120 + Added the option of passing additional keyword arguments to db.dConnection. 121 Thanks Uwe for noting the limitation. 122 66 123 + dbFirebird - Minor improvements by Uwe Grauer. 67 124 … … 84 141 flexible interface to reference calculated fields on the fly. 85 142 143 + Added the 'SaveNewUnchanged' property to dBizobj. When this is True, new 144 records that have not been modified from their defaults are saved; the 145 default remains to not insert such records. 146 86 147 + Improved data binding to bizobjs on a parent form. 87 148 … … 123 184 124 185 + Fixed rapid flashing in a sorted dGrid when an editable column was selected. 186 187 + Fixed bug that prevented adding new records when child bizobjs existed. 188 (Ticket #1027). Thanks to Larry Long and John Fabiani for continued 189 assistance in tracking these problems down. 190 191 + setWhereClause() method missing in dBizobj. Fixed. 192 193 + Fixed dCursor.getChangedRows() to not take into account new records that 194 have no changes. 195 196 + Fixed the dBizobj.save() process to not scan all child bizobj's repeatedly. 197 This fixes some problems, and speeds up save() considerably. 198 199 + Fixed a problem where canceling a bizobj that had no records caused an 200 exception that was being displayed with notifyUser(). Normally, a bizobj 201 with no records does not need canceling, so raising such an error is not 202 appropriate. You can still have the old behavior by calling cancel() with 203 'ignoreNoRecords = False'. 204 205 + Fixed a bug reported by Larry Long and John Fabiani that involved requerying 206 one bizobj resulted in checking for pending changes in other bizobjs that 207 were not involved in the requery. 208 209 + Descending sorts created infinite loop with duplicate values. Fixed. 210 (Ticket #1041). Thanks Jussi. 211 212 + Fixed status text to clear the old field validation failed message when the 213 user fixes the value and the field now passes validation. 214 215 + Fixed the geometry persistence to only restore the size of the form from 216 user settings if BorderResizable is set to True. 217 218 + Fixed dGrid's AlternateRowColoring to be settable from the constructor 219 or initProperties (previously, it was only settable in afterInit() or 220 later). 221 222 + Dynamic props on dColumn were not working: fixed. 223 224 + Fixed a bug that confused the string 'None' with the null value None when 225 setting BorderStyle from a cdxml. Thanks to Miguel for catching this one. 226 227 + Fixed a couple of bugs related to the dSizer.BorderSides property. 228 Previously it was not retrieving that property correctly from the internal 229 wx flag. 125 230 126 231 branches/NateBranch/dabo/__init__.py
r2810 r3119 1 # -*- coding: utf-8 -*- 1 2 """ Dabo: A Framework for developing data-driven business applications 2 3 branches/NateBranch/dabo/__version__.py
r3017 r3119 1 # -*- coding: utf-8 -*- 1 2 # The following 2 lines are the only thing you should change in this file. 2 3 # Everything else is boilerplate copied also to other dabo repositories. 3 4 package_name = "dabo" 4 _version = "0. 8a"5 _version = "0.9a" 5 6 6 7 branches/NateBranch/dabo/biz/__init__.py
r2054 r3119 1 # -*- coding: utf-8 -*- 1 2 """ dabo.biz : Dabo Business Objects (bizobjs) 2 3 branches/NateBranch/dabo/biz/dAutoBizobj.py
r2727 r3119 1 # -*- coding: utf-8 -*- 1 2 import datetime 2 3 import dabo branches/NateBranch/dabo/biz/dBizobj.py
r3038 r3119 1 # -*- coding: utf-8 -*- 1 2 import types 2 3 import re … … 17 18 18 19 19 def __init__(self, conn , properties=None, *args, **kwargs):20 def __init__(self, conn=None, properties=None, *args, **kwargs): 20 21 """ User code should override beforeInit() and/or afterInit() instead.""" 21 22 self.__att_try_setFieldVal = False … … 31 32 32 33 self._beforeInit() 33 cf = self._cursorFactory = conn 34 if cf: 35 # Base cursor class : the cursor class from the db api 36 self.dbapiCursorClass = cf.getDictCursorClass() 37 38 # If there are any problems in the createCursor process, an 39 # exception will be raised in that method. 40 self.createCursor() 41 34 self.setConnection(conn) 42 35 # We need to make sure the cursor is created *before* the call to 43 36 # initProperties() … … 56 49 self._baseClass = dBizobj 57 50 self.__areThereAnyChanges = False # Used by the isChanged() method. 58 # Next two are used by the scan() method.59 self.__scanRestorePosition = True60 self.__scanReverse = False61 51 # Used by the LinkField property 62 52 self._linkField = "" … … 70 60 self._caption = "" 71 61 self._dataSource = "" 62 self._scanRestorePosition = None 72 63 self._SQL = "" 73 64 self._requeryOnLoad = False … … 97 88 98 89 self.beforeInit() 90 91 92 def setConnection(self, conn): 93 """Normally connections are established before bizobj creation, but 94 for those cases where connections are created later, use this method to 95 establish the connection used by the bizobj. 96 """ 97 self._cursorFactory = conn 98 if conn: 99 # Base cursor class : the cursor class from the db api 100 self.dbapiCursorClass = self._cursorFactory.getDictCursorClass() 101 # If there are any problems in the createCursor process, an 102 # exception will be raised in that method. 103 self.createCursor() 99 104 100 105 … … 262 267 cursor.beginTransaction() 263 268 264 changed_rows = self.getChangedRows() 265 for row in changed_rows: 266 self._moveToRowNum(row) 267 try: 268 self.save(startTransaction=False, topLevel=False) 269 except dException.ConnectionLostException, e: 270 self.RowNumber = current_row 271 raise dException.ConnectionLostException, e 272 except dException.DBQueryException, e: 273 # Something failed; reset things. 274 if useTransact: 275 cursor.rollbackTransaction() 276 # Pass the exception to the UI 277 self.RowNumber = current_row 278 raise dException.DBQueryException, e 279 except dException.dException, e: 280 if useTransact: 281 cursor.rollbackTransaction() 282 self.RowNumber = current_row 283 raise 269 try: 270 self.scanChangedRows(self.save, includeNewUnchanged=self.SaveNewUnchanged, 271 startTransaction=False, topLevel=False) 272 except dException.ConnectionLostException, e: 273 self.RowNumber = current_row 274 raise dException.ConnectionLostException, e 275 except dException.DBQueryException, e: 276 # Something failed; reset things. 277 if useTransact: 278 cursor.rollbackTransaction() 279 # Pass the exception to the UI 280 self.RowNumber = current_row 281 raise dException.DBQueryException, e 282 except dException.dException, e: 283 if useTransact: 284 cursor.rollbackTransaction() 285 self.RowNumber = current_row 286 raise 284 287 285 288 if useTransact: … … 368 371 369 372 def cancelAll(self, ignoreNoRecords=None): 370 """Cancel all changes made to the current dataset, including all children.""" 371 self.scanChangedRows(self.cancel, allCursors=False, ignoreNoRecords=ignoreNoRecords) 373 """Cancel all changes made to the current dataset, including all children 374 and all new, unmodified records. 375 """ 376 self.scanChangedRows(self.cancel, allCursors=False, includeNewUnchanged=True, 377 ignoreNoRecords=ignoreNoRecords) 372 378 373 379 … … 386 392 # normally not be a problem. 387 393 ignoreNoRecords = True 388 389 394 # Tell the cursor and all children to cancel themselves: 390 395 self._CurrentCursor.cancel(ignoreNoRecords=ignoreNoRecords) 391 396 for child in self.__children: 392 397 child.cancelAll(ignoreNoRecords=ignoreNoRecords) 393 394 398 self.afterCancel() 395 399 … … 501 505 502 506 503 def getChangedRows(self ):504 """ Returns a list of row numbers for which isChanged() returns True. The507 def getChangedRows(self, includeNewUnchanged=False): 508 """ Returns a list of row numbers for which isChanged() returns True. The 505 509 changes may therefore not be in the record itself, but in a dependent child 506 record. 510 record. If includeNewUnchanged is True, the presence of a new unsaved 511 record that has not been modified from its defaults will suffice to mark the 512 record as changed. 507 513 """ 508 514 if self.__children: … … 513 519 else: 514 520 # Can use the much faster cursor.getChangedRows(): 515 return self._CurrentCursor.getChangedRows( )521 return self._CurrentCursor.getChangedRows(includeNewUnchanged) 516 522 517 523 … … 536 542 537 543 538 def scan(self, func, *args, **kwargs):544 def scan(self, func, reverse=False, *args, **kwargs): 539 545 """Iterate over all records and apply the passed function to each. 540 546 541 547 Set self.exitScan to True to exit the scan on the next iteration. 542 548 543 If self. __scanRestorePosition is True, the position of the current544 record in the recordset is restored after the iteration. If 545 self.__scanReverse is true, the records are processed in reverse order.546 """ 547 self.scanRows(func, range(self.RowCount), *args, **kwargs)548 549 550 def scanRows(self, func, rows, *args, **kwargs):549 If self.ScanRestorePosition is True, the position of the current 550 record in the recordset is restored after the iteration. If the 'reverse' 551 parameter is True, the records are processed in reverse order. 552 """ 553 self.scanRows(func, range(self.RowCount), reverse=reverse, *args, **kwargs) 554 555 556 def scanRows(self, func, rows, reverse=False, *args, **kwargs): 551 557 """Iterate over the specified rows and apply the passed function to each. 552 558 … … 556 562 self.exitScan = False 557 563 rows = list(rows) 558 if self. __scanRestorePosition:564 if self.ScanRestorePosition: 559 565 try: 560 566 currPK = self.getPK() … … 565 571 currRow = self.RowNumber 566 572 try: 567 if self.__scanReverse:573 if reverse: 568 574 rows.reverse() 569 575 for i in rows: … … 573 579 break 574 580 except dException.dException, e: 575 if self. __scanRestorePosition:581 if self.ScanRestorePosition: 576 582 self.RowNumber = currRow 577 583 raise dException.dException, e 578 584 579 if self. __scanRestorePosition:585 if self.ScanRestorePosition: 580 586 if currPK is not None: 581 587 self._positionUsingPK(currPK, updateChildren=False) … … 591 597 592 598 593 def scanChangedRows(self, func, allCursors=False, *args, **kwargs): 599 def scanChangedRows(self, func, allCursors=False, includeNewUnchanged=False, 600 *args, **kwargs): 594 601 """Move the record pointer to each changed row, and call func. 595 602 596 603 If allCursors is True, all other cursors for different parent records will 597 be iterated as well. 604 be iterated as well. 605 606 If includeNewUnchanged is True, new unsaved records that have not been 607 edited from their default values will be counted as 'changed'. 598 608 599 609 If you want to end the scan on the next iteration, set self.exitScan=True. … … 603 613 """ 604 614 self.exitScan = False 615 currCursor = self._CurrentCursor 605 616 old_currentCursorKey = self.__currentCursorKey 606 617 try: 607 old_pk = self._CurrentCursor.getPK()618 old_pk = currCursor.getPK() 608 619 except dException.NoRecordsException: 609 620 # no rows to scan … … 613 624 cursors = self.__cursors 614 625 else: 615 cursors = {old_ pk: self._CurrentCursor}626 cursors = {old_currentCursorKey: currCursor} 616 627 617 628 for key, cursor in cursors.iteritems(): 618 629 self._CurrentCursor = key 619 changed _keys = list(set(cursor._mementos.keys() + cursor._newRecords.keys()))620 for pk in changed_keys:621 self._ positionUsingPK(pk)630 changedRows = self.getChangedRows(includeNewUnchanged) 631 for row in changedRows: 632 self._moveToRowNum(row) 622 633 try: 623 634 func(*args, **kwargs) … … 940 951 return False 941 952 942 if cc.isChanged(allRows=True ):953 if cc.isChanged(allRows=True, includeNewUnchanged=self.SaveNewUnchanged): 943 954 return True 944 955 … … 970 981 # No cursor, no changes. 971 982 return False 972 ret = cc.isChanged(allRows=False )983 ret = cc.isChanged(allRows=False, includeNewUnchanged=self.SaveNewUnchanged) 973 984 974 985 if not ret: … … 1055 1066 if val is None: 1056 1067 val = self.getParentPK() 1057 self.scan(self._setParentFK, val )1068 self.scan(self._setParentFK, val=val) 1058 1069 1059 1070 def _setParentFK(self, val): … … 1717 1728 1718 1729 1730 def _getSaveNewUnchanged(self): 1731 try: 1732 ret = self._saveNewUnchanged 1733 except AttributeError: 1734 ret = self._saveNewUnchanged = False 1735 return ret 1736 1737 def _setSaveNewUnchanged(self, val): 1738 self._saveNewUnchanged = val 1739 1740 1741 def _getScanRestorePosition(self): 1742 return self._scanRestorePosition 1743 1744 def _setScanRestorePosition(self, val): 1745 self._scanRestorePosition = val 1746 1747
