예제 #1
0
    def prompt_parameters(self, xml):
        logging.debug('got back XML from server:\n%s', xml)
        # Edited by Olof 2013/04/16: Temporary fix for handling messages containing
        # XML markup
        #xml_root = etree.fromstring(xml)
        xml_root = etree.fromstring(xml, parser=etree.XMLParser(recover=True))

        # Special case until Olof implements the saner XML format on the server side
        if xml_root.tag == 'message':
            message = dict(type='message', level='info', text='no message')
            for node in xml_root:
                option = node.tag.strip()
                # rename type to level, as type is used for the type
                # this is unfortunate
                if option == 'type':
                    option = 'level'
                message[option] = node.text.strip()
            fields = [message]
        else:
            containers = get_field_containers(xml_root)
            if len(containers) == 0: return
            fields = get_fields(containers[0])
        if self.params_widget is not None:
            self.layout().removeChild(self.params_widget)
        self.params_widget = FieldsWidget(fields, self)

        current_values = self.workflow.get_values_map()
        logging.debug('current values are: %s', current_values)
        self.params_widget.set_values(current_values)
        self.layout().addMultiCellWidget(self.params_widget, 1, 1, 0, 1,
                                         Qt.AlignBottom | Qt.AlignLeft)
        self.params_widget.show()
        self.ok_button.setEnabled(True)
예제 #2
0
    def open_dialog(self, field_list, async_result):

        self._async_result = async_result

        # get special parameters
        parameters = []
        info = None
        cplx = None
        for dd0 in field_list:
            if info is None and dd0.get("variableName") == "_info":
                # Info text - goes to info_gbox
                info = dd0
            elif cplx is None and dd0.get("variableName") == "_cplx":
                # Complex parameter - goes to cplx_gbox
                cplx = dd0
            else:
                parameters.append(dd0)

        # Info box
        if info is None:
            self.info_text.setText("")
            self.info_gbox.setTitle("Info")
            self.info_gbox.hide()
        else:
            self.info_text.setText(info.get("defaultValue"))
            self.info_gbox.setTitle(info.get("uiLabel"))
            self.info_gbox.show()

        # Complex box
        if self.cplx_widget:
            self.cplx_widget.close()
        if cplx is None:
            self.cplx_gbox.hide()
        else:
            if cplx.get("type") == "selection_table":
                self.cplx_widget = SelectionTable(self.cplx_gbox,
                                                  "cplx_widget",
                                                  cplx["header"])
                self.cplx_gbox.setTitle(cplx.get("uiLabel"))
                for ii, values in enumerate(cplx["defaultValue"]):
                    self.cplx_widget.populateColumn(
                        ii, values, colours=cplx.get("colours"))
                self.cplx_gbox.show()

            else:
                raise NotImplementedError(
                    "GPhL complex widget type %s not recognised for parameter _cplx"
                    % repr(cplx.get("type")))

        # parameters widget
        if self.params_widget is not None:
            self.params_widget.close()
            self.params_widget = None
        if parameters:
            self.params_widget = FieldsWidget(fields=parameters,
                                              parent=self.parameter_gbox)

            values = {}
            for dd0 in field_list:
                name = dd0["variableName"]
                value = dd0.get("defaultValue")
                if value is not None:
                    dd0[name] = value
            self.params_widget.set_values(values)
            self.parameter_gbox.show()
        else:
            self.parameter_gbox.hide()

        self.show()
        self.setEnabled(True)
예제 #3
0
    def open_dialog(self, field_list, async_result):

        self._async_result = async_result

        # get special parameters
        parameters = []
        info = None
        cplx = None
        for dd in field_list:
            if info is None and dd.get('variableName') == '_info':
                # Info text - goes to info_gbox
                info = dd
            elif cplx is None and dd.get('variableName') == '_cplx':
                # Complex parameter - goes to cplx_gbox
                cplx = dd
            else:
                parameters.append(dd)

        # Info box
        if info is None:
            self.info_text.setText('')
            self.info_gbox.setTitle('Info')
            self.info_gbox.hide()
        else:
            self.info_text.setText(info.get('defaultValue'))
            self.info_gbox.setTitle(info.get('uiLabel'))
            self.info_gbox.show()

        # Complex box
        if self.cplx_widget:
            self.cplx_widget.close()
        if cplx is None:
            self.cplx_gbox.hide()
        else:
            if cplx.get('type') == 'selection_table':
                self.cplx_widget = SelectionTable(self.cplx_gbox,
                                                  'cplx_widget',
                                                  cplx['header'])
                self.cplx_gbox.setTitle(cplx.get('uiLabel'))
                for ii, values in enumerate(cplx['defaultValue']):
                    self.cplx_widget.populateColumn(
                        ii, values, colours=cplx.get('colours'))
                self.cplx_gbox.show()

            else:
                raise NotImplementedError(
                    "GPhL complex widget type %s not recognised for parameter _cplx"
                    % repr(cplx.get('type')))

        # parameters widget
        if self.params_widget is not None:
            self.params_widget.close()
            self.params_widget = None
        if parameters:
            self.params_widget = FieldsWidget(fields=parameters,
                                              parent=self.parameter_gbox)

            values = {}
            for dd in field_list:
                name = dd['variableName']
                value = dd.get('defaultValue')
                if value is not None:
                    dd[name] = value
            self.params_widget.set_values(values)
            self.parameter_gbox.show()
        else:
            self.parameter_gbox.hide()

        self.show()
        self.setEnabled(True)