Changeset 11487:912e57db9317 in orange


Ignore:
Timestamp:
05/06/13 11:05:48 (12 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Finalise the WidgetsScheme on a 'Close' event.

Location:
Orange/OrangeCanvas
Files:
2 edited

Legend:

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

    r11469 r11487  
    944944        scheme_doc.setScheme(new_scheme) 
    945945 
    946         old_scheme.save_widget_settings() 
    947         old_scheme.close_all_open_widgets() 
    948         old_scheme.signal_manager.stop() 
     946        # Send a close event to the Scheme, it is responsible for 
     947        # closing/clearing all resources (widgets). 
     948        QApplication.sendEvent(old_scheme, QEvent(QEvent.Close)) 
     949 
    949950        old_scheme.deleteLater() 
    950951 
     
    14911492                return 
    14921493 
     1494        old_scheme = document.scheme() 
     1495 
    14931496        # Set an empty scheme to clear the document 
    14941497        document.setScheme(widgetsscheme.WidgetsScheme()) 
    14951498 
    1496         scheme = document.scheme() 
    1497         scheme.save_widget_settings() 
    1498         scheme.close_all_open_widgets() 
    1499         scheme.signal_manager.stop() 
    1500         scheme.deleteLater() 
     1499        QApplication.sendEvent(old_scheme, QEvent(QEvent.Close)) 
     1500 
     1501        old_scheme.deleteLater() 
    15011502 
    15021503        config.save_config() 
  • Orange/OrangeCanvas/scheme/widgetsscheme.py

    r11486 r11487  
    151151        return widget 
    152152 
    153     def close_all_open_widgets(self): 
    154         for widget in self.widget_for_node.values(): 
    155             widget.close() 
    156  
    157153    def widget_settings(self): 
    158154        """Return a list of dictionaries with widget settings. 
     
    160156        return [self.widget_for_node[node].getSettings(alsoContexts=False) 
    161157                for node in self.nodes] 
    162  
    163     def save_widget_settings(self): 
    164         """Save all widget settings to their global settings file. 
    165         """ 
    166         for node in self.nodes: 
    167             widget = self.widget_for_node[node] 
    168             if not widget._settingsFromSchema: 
    169                 widget.saveSettings() 
    170158 
    171159    def sync_node_properties(self): 
     
    191179        self.sync_node_properties() 
    192180        Scheme.save_to(self, stream, pretty, pickle_fallback) 
     181 
     182    def event(self, event): 
     183        """ 
     184        Reimplemented from `QObject.event`. 
     185 
     186        Responds to QEvent.Close event by stopping signal processing and 
     187        closing all widgets. 
     188 
     189        """ 
     190        if event.type() == QEvent.Close: 
     191            self.signal_manager.stop() 
     192 
     193            # Notify the widget instances. 
     194            for widget in self.widget_for_node.values(): 
     195                if not widget._settingsFromSchema: 
     196                    # First save global settings if necessary. 
     197                    widget.saveSettings() 
     198 
     199                widget.close() 
     200                widget.onDeleteWidget() 
     201 
     202            event.accept() 
     203            return True 
     204        else: 
     205            return Scheme.event(self, event) 
    193206 
    194207    def __on_help_request(self): 
Note: See TracChangeset for help on using the changeset viewer.