Ignore:
Timestamp:
08/13/13 13:19:11 (8 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Changed 'isModifiedStrict' to directly compare the node propetries.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/document/schemeedit.py

    r11639 r11658  
    1515from contextlib import nested 
    1616from urllib import urlencode 
    17 from StringIO import StringIO 
    1817 
    1918from PyQt4.QtGui import ( 
     
    131130        self.__undoStack.cleanChanged[bool].connect(self.__onCleanChanged) 
    132131 
    133         # Serialized scheme when set to a clean state 
    134         self.__cleanSchemeString = None 
     132        # scheme node properties when set to a clean state 
     133        self.__cleanProperties = [] 
    135134 
    136135        self.__editFinishedMapper = QSignalMapper(self) 
     
    483482 
    484483        if not modified: 
    485             self.__cleanSchemeString = scheme_to_string(self.__scheme) 
     484            self.__cleanProperties = node_properties(self.__scheme) 
    486485            self.__undoStack.setClean() 
    487486        else: 
    488             self.__cleanSchemeString = None 
     487            self.__cleanProperties = [] 
    489488 
    490489    modified = Property(bool, fget=isModified, fset=setModified) 
     
    494493        Is the document modified. 
    495494 
    496         Run a strict check comparing to a serialized scheme string 
    497         the time when the last call to `setModified(True)` was made. 
    498  
    499         """ 
    500         schemeChanged = self.__cleanSchemeString != \ 
    501                         scheme_to_string(self.__scheme) 
     495        Run a strict check against all node properties as they were 
     496        at the time when the last call to `setModified(True)` was made. 
     497 
     498        """ 
     499        propertiesChanged = self.__cleanProperties != \ 
     500                            node_properties(self.__scheme) 
    502501 
    503502        log.debug("Modified strict check (modified flag: %s, " 
    504                   "undo stack clean: %s, scheme: %s)", 
     503                  "undo stack clean: %s, properties: %s)", 
    505504                  self.__modified, 
    506505                  self.__undoStack.isClean(), 
    507                   schemeChanged) 
    508  
    509         return self.isModified() or schemeChanged 
     506                  propertiesChanged) 
     507 
     508        return self.isModified() or propertiesChanged 
    510509 
    511510    def setQuickMenuTriggers(self, triggers): 
     
    606605                self.__scheme.title_changed.connect(self.titleChanged) 
    607606                self.titleChanged.emit(scheme.title) 
    608                 self.__cleanSchemeString = scheme_to_string(scheme) 
     607                self.__cleanProperties = node_properties(scheme) 
    609608                sm = scheme.findChild(signalmanager.SignalManager) 
    610609                if sm: 
    611610                    sm.stateChanged.connect(self.__signalManagerStateChanged) 
    612  
    613611            else: 
    614                 self.__cleanSchemeString = None 
     612                self.__cleanProperties = [] 
    615613 
    616614            self.__teardownScene(self.__scene) 
     
    15441542 
    15451543 
    1546 def scheme_to_string(scheme): 
    1547     stream = StringIO() 
    1548     scheme.save_to(stream, pretty=False, pickle_fallback=True) 
    1549     return stream.getvalue() 
    1550  
    1551  
    15521544def geometry_from_annotation_item(item): 
    15531545    if isinstance(item, items.ArrowAnnotation): 
     
    15881580    """ 
    15891581    return unicodedata.category(unichar) not in _control 
     1582 
     1583 
     1584def node_properties(scheme): 
     1585    scheme.sync_node_properties() 
     1586    return [dict(node.properties) for node in scheme.nodes] 
Note: See TracChangeset for help on using the changeset viewer.