Ignore:
Timestamp:
07/02/13 15:23:49 (10 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Refactored widget state messages handling.

Moved the resposibility for handling messages (OWBaseWidget.widgetStateChanged)
to WidgetsScheme.

Added support for messages in base SchemeNode class.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/scheme/widgetsscheme.py

    r11563 r11614  
    2626from .signalmanager import SignalManager, compress_signals, can_enable_dynamic 
    2727from .scheme import Scheme, SchemeNode 
     28from .node import UserMessage 
    2829from .utils import name_lookup, check_arg, check_type 
    2930from ..resources import icon_loader 
     
    145146        widget.progressBarValueChanged.connect(node.set_progress) 
    146147        widget.processingStateChanged.connect(node.set_processing_state) 
     148        widget.widgetStateChanged.connect(self.__on_widget_state_changed) 
    147149        self.connect(widget, 
    148150                     SIGNAL("blockingStateChanged(bool)"), 
     
    159161        return [self.widget_for_node[node].getSettings(alsoContexts=False) 
    160162                for node in self.nodes] 
     163 
     164    def __on_widget_state_changed(self, message_type, message_id, 
     165                                  message_value): 
     166        """ 
     167        The OWBaseWidget info/warning/error state has changed. 
     168 
     169        message_type is one of "Info", "Warning" or "Error" string depending 
     170        of which method (information, warning, error) was called. message_id 
     171        is the first int argument if supplied, and message_value the message 
     172        text. 
     173 
     174        """ 
     175        widget = self.sender() 
     176        node = self.node_for_widget.get(widget) 
     177        if node is not None: 
     178            message_type = str(message_type) 
     179            if message_type == "Info": 
     180                contents = widget.widgetStateToHtml(True, False, False) 
     181                level = UserMessage.Info 
     182            elif message_type == "Warning": 
     183                contents = widget.widgetStateToHtml(False, True, False) 
     184                level = UserMessage.Warning 
     185            elif message_type == "Error": 
     186                contents = widget.widgetStateToHtml(False, False, True) 
     187                level = UserMessage.Error 
     188            else: 
     189                raise ValueError("Invalid message_type: %r" % message_type) 
     190 
     191            if not contents: 
     192                contents = None 
     193 
     194            message = UserMessage(contents, severity=level, 
     195                                  message_id=message_type, 
     196                                  data={"contents-type": "text/html"}) 
     197            node.set_state_message(message) 
    161198 
    162199    def sync_node_properties(self): 
Note: See TracChangeset for help on using the changeset viewer.