Changeset 7788:0b01ab883c4d in orange


Ignore:
Timestamp:
03/30/11 18:33:03 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
6ea24f033036fac00da21b359afa7757ddc1ccf4
Message:

Improved handling of modified schemas on program exit and 'New Scheme' action.

Location:
orange/OrangeCanvas
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeCanvas/orngCanvas.pyw

    r7735 r7788  
    527527 
    528528    def menuItemNewScheme(self): 
    529         self.schema.clear() 
     529        if self.schema.saveBeforeClose(): 
     530            self.schema.clear() 
     531            self.schema.removeTempDoc() 
    530532 
    531533    def dumpVariables(self): 
  • orange/OrangeCanvas/orngDoc.py

    r7725 r7788  
    5757 
    5858    def isSchemaChanged(self): 
     59        """ Is this schema document modified. 
     60        """ 
    5961        return self.loadedSettingsDict != dict([(widget.caption, widget.instance.saveSettingsStr()) for widget in self.widgets]) 
    60          
    61     # we are about to close document 
    62     # ask the user if he is sure 
    63     def closeEvent(self,ce): 
    64         newSettings = self.isSchemaChanged() 
    65  
    66         self.synchronizeContexts() 
    67         #if self.canvasDlg.settings["autoSaveSchemasOnClose"] and self.widgets != []: 
    68         if self.widgets != []: 
    69             self.save(os.path.join(self.canvasDlg.canvasSettingsDir, "lastSchema.tmp")) 
    70  
    71         if self.canvasDlg.settings["dontAskBeforeClose"]: 
    72             if newSettings and self.schemaName != "": 
    73                 self.save() 
     62     
     63    def setSchemaModified(self, state): 
     64        """ Set the modified document state flag. 
     65        """ 
     66        # Update the loaded settings dict so we know if the widget 
     67        # settings have changed from the last save when we quit  
     68        # the application (see closeEvent handler) 
     69        if not state: 
     70            self.loadedSettingsDict = dict([(widget.caption, widget.instance.saveSettingsStr()) for widget in self.widgets]) 
     71        else: 
     72            self.loadedSettingsDict = {} 
     73         
     74    def closeEvent(self, ce): 
     75        if self.saveBeforeClose(): 
    7476            self.clear() 
    7577            self.removeTempDoc() 
    7678            ce.accept() 
    77         elif newSettings: 
    78             res = QMessageBox.question(self, 'Orange Canvas','Do you wish to save the schema?', QMessageBox.Yes, QMessageBox.No, QMessageBox.Cancel) 
    79             if res == QMessageBox.Yes: 
    80                 self.saveDocument() 
    81                 self.clear() 
    82                 self.removeTempDoc() 
    83                 ce.accept() 
    84                  
    85             elif res == QMessageBox.No: 
    86                 self.clear() 
    87                 self.removeTempDoc() 
    88                 ce.accept() 
    89             else: 
    90                 ce.ignore()     # we pressed cancel - we don't want to close the document 
    91                 return 
    92         else: 
    93             self.clear() 
    94             self.removeTempDoc() 
    95          
     79        else: 
     80            ce.ignore() 
     81             
    9682        QWidget.closeEvent(self, ce) 
    9783        orngHistory.logCloseSchema(self.schemaID) 
     84         
    9885         
    9986    # save a temp document whenever anything changes. this doc is deleted on closeEvent 
     
    445432        else: 
    446433            self.save() 
     434            self.setSchemaModified(False) 
    447435 
    448436    def saveDocumentAs(self): 
    449         name = str(QFileDialog.getSaveFileName(self, "Save Orange Schema", os.path.join(self.schemaPath, self.schemaName), "Orange Widget Schema (*.ows)")) 
    450         if os.path.splitext(name)[0] == "": return 
    451         if os.path.splitext(name)[1].lower() != ".ows": name = os.path.splitext(name)[0] + ".ows" 
     437        name = str(QFileDialog.getSaveFileName(self, "Save Orange Schema", os.path.join(self.schemaPath, self.schemaName or "Untitled.ows"), "Orange Widget Schema (*.ows)")) 
     438        if os.path.splitext(name)[0] == "": 
     439            return 
     440        if os.path.splitext(name)[1].lower() != ".ows": 
     441            name = os.path.splitext(name)[0] + ".ows" 
    452442        self.save(name) 
    453  
     443        self.setSchemaModified(False) 
     444         
    454445    # save the file 
    455     def save(self, filename = None): 
    456         if filename == None: 
     446    def save(self, filename=None): 
     447        if filename is None: 
    457448            filename = os.path.join(self.schemaPath, self.schemaName) 
    458             # Update the loaded settings dict so we now if the widget 
    459             # settings have chenged from the last save when we quit  
    460             # the application (see closeEvent handler) 
    461             self.loadedSettingsDict = dict((widget.caption, widget.instance.saveSettingsStr()) for widget in self.widgets) 
    462449             
    463450        # create xml document 
     
    507494            self.canvasDlg.setCaption(self.schemaName) 
    508495 
     496    def saveBeforeClose(self): 
     497        """ Call to ask the user to save the schema before it is closed. 
     498        Return True if save was successful or user did not want to save, 
     499        else return False (user canceled the operation). 
     500           
     501        """ 
     502        newSettings = self.isSchemaChanged() 
     503 
     504        self.synchronizeContexts() 
     505        if self.widgets != []: 
     506            self.save(os.path.join(self.canvasDlg.canvasSettingsDir, "lastSchema.tmp")) 
     507 
     508        if self.canvasDlg.settings["dontAskBeforeClose"]: 
     509            if newSettings and self.schemaName != "": 
     510                self.save() 
     511            return True 
     512                 
     513        elif newSettings: 
     514            res = QMessageBox.question(self, 'Orange Canvas', 'Do you wish to save the schema?', QMessageBox.Yes, QMessageBox.No, QMessageBox.Cancel) 
     515            if res == QMessageBox.Yes: 
     516                self.saveDocument() 
     517                return True 
     518            elif res == QMessageBox.No: 
     519                return True 
     520            else:      
     521                # User pressed cancel - we don't want to close the document 
     522                return False 
     523        else: 
     524            return True 
    509525 
    510526    # load a scheme with name "filename" 
Note: See TracChangeset for help on using the changeset viewer.