From: Kevin A. <al...@se...> - 2002-02-27 20:36:06
|
Both the textEditor and resourceEditor samples are using essentially the same logic for managing user config files and the "state machine" logic for New, Open, Save, Save As..., Revert, Exit. This is different than the logic most of the other samples use which is like the HyperCard auto-persistance model, where a data file is automatically opened when the app starts up and the data file is automatically saved when the app closes. The latter code is much simpler as this fragment from the addresses sample shows: def on_openBackground(self, source, event): if not outlook.WIN32_FOUND: self.menuBar.setEnabled('menuFileImportOutlook', 0) if os.path.exists(USER_DATA_FILE): self.document = Document(self, USER_DATA_FILE) else: self.document = Document(self, DATA_FILE) # make sure we don't overwrite the default file from cvs self.document.filename = USER_DATA_FILE def doExit(self): self.document.saveFile() # we don't have window events hooked up yet to our own event model yet def OnCloseWindow(self, event): self.doExit() model.Background.OnCloseWindow(self, event) def on_exit_command(self, menu, event): self.Close() The Document class actually handles the opening and saving of the data file, so the background "view" doesn't contain that code. The if/then/else in the openBackground handler should probably be changed so the Document is responsible for deciding how it gets the initial data, then the "view" won't care whether the data comes from ZODB, a text file, a remote web site, etc. It would probably be worthwhile having other coders go over the logic for both types of app models, discussing it on the list to improve the code (I admit it is a bit of a hack job) and then moving the code into separate classes. These could be subclasses of Background or more likely separate classes that are used via multiple inheritance. ka |