Changeset 11222:f0c4dedce024 in orange


Ignore:
Timestamp:
12/05/12 14:47:54 (17 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added a strict check against the saved schemes widget settings.

Location:
Orange/OrangeCanvas
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/application/canvasmain.py

    r11220 r11222  
    702702        """ 
    703703        document = self.current_document() 
    704         if document.isModified(): 
     704        if document.isModifiedStrict(): 
    705705            # Ask for save changes 
    706706            if self.ask_save_changes() == QDialog.Rejected: 
     
    731731        """ 
    732732        document = self.current_document() 
    733         if document.isModified(): 
     733        if document.isModifiedStrict(): 
    734734            if self.ask_save_changes() == QDialog.Rejected: 
    735735                return QDialog.Rejected 
     
    800800        """ 
    801801        document = self.current_document() 
    802         if document.isModified(): 
     802        if document.isModifiedStrict(): 
    803803            if self.ask_save_changes() == QDialog.Rejected: 
    804804                return QDialog.Rejected 
     
    959959        if status == QDialog.Accepted: 
    960960            doc = self.current_document() 
    961             if doc.isModified(): 
     961            if doc.isModifiedStrict(): 
    962962                if self.ask_save_changes() == QDialog.Rejected: 
    963963                    return QDialog.Rejected 
     
    997997        if status == QDialog.Accepted: 
    998998            doc = self.current_document() 
    999             if doc.isModified(): 
     999            if doc.isModifiedStrict(): 
    10001000                if self.ask_save_changes() == QDialog.Rejected: 
    10011001                    return QDialog.Rejected 
     
    12671267        """ 
    12681268        document = self.current_document() 
    1269         if document.isModified(): 
     1269        if document.isModifiedStrict(): 
    12701270            if self.ask_save_changes() == QDialog.Rejected: 
    12711271                return 
     
    12901290        """ 
    12911291        document = self.current_document() 
    1292         if document.isModified(): 
     1292        if document.isModifiedStrict(): 
    12931293            if self.ask_save_changes() == QDialog.Rejected: 
    12941294                # Reject the event 
  • Orange/OrangeCanvas/document/schemeedit.py

    r11221 r11222  
    33 
    44""" 
     5 
     6import os 
    57import sys 
    68import logging 
     9import StringIO 
     10 
    711from operator import attrgetter 
    812 
     
    9599        self.__undoStack = QUndoStack(self) 
    96100        self.__undoStack.cleanChanged[bool].connect(self.__onCleanChanged) 
     101 
     102        # OWBaseWidget properties when set to clean state 
     103        self.__cleanSettings = [] 
    97104 
    98105        self.__editFinishedMapper = QSignalMapper(self) 
     
    339346 
    340347    def isModified(self): 
    341         return not self.__undoStack.isClean() 
     348        """Is the document modified. 
     349        """ 
     350        return self.__modified or not self.__undoStack.isClean() 
    342351 
    343352    def setModified(self, modified): 
    344         if modified and not self.isModified(): 
    345             raise NotImplementedError 
     353        if self.__modified != modified: 
     354            self.__modified = modified 
     355 
     356        if not modified: 
     357            self.__cleanSettings = self.__scheme.widget_settings() 
     358            self.__undoStack.setClean() 
    346359        else: 
    347             self.__undoStack.setClean() 
     360            self.__cleanSettings = [] 
    348361 
    349362    modified = Property(bool, fget=isModified, fset=setModified) 
     363 
     364    def isModifiedStrict(self): 
     365        """Is the document modified. Run a strict check against all node 
     366        properties as they were at the time when the last call to 
     367        `setModified(True)` was made. 
     368 
     369        """ 
     370        settingsChanged = self.__cleanSettings != \ 
     371                          self.__scheme.widget_settings() 
     372 
     373        log.debug("Modified strict check (modified flag: %s, " 
     374                  "undo stack clean: %s, properties: %s)", 
     375                  self.__modified, 
     376                  self.__undoStack.isClean(), 
     377                  settingsChanged) 
     378 
     379        return self.isModified() or settingsChanged 
    350380 
    351381    def setQuickMenuTriggers(self, triggers): 
     
    395425                self.__scheme.node_removed.connect(self.__onNodeRemoved) 
    396426                self.titleChanged.emit(scheme.title) 
     427                self.__cleanSettings = scheme.widget_settings() 
     428            else: 
     429                self.__cleanSettings = [] 
    397430 
    398431            self.__annotationGeomChanged.deleteLater() 
  • Orange/OrangeCanvas/scheme/widgetsscheme.py

    r11204 r11222  
    141141            widget.close() 
    142142 
     143    def widget_settings(self): 
     144        """Return a list of dictionaries with widget settings. 
     145        """ 
     146        return [self.widget_for_node[node].getSettings(alsoContexts=False) 
     147                for node in self.nodes] 
     148 
    143149    def sync_node_properties(self): 
    144150        """Sync the widget settings/properties with the SchemeNode.properties. 
Note: See TracChangeset for help on using the changeset viewer.