コード例 #1
0
    def addWidgets(self):
        """
        Add widgets
        """
        nbArgument = 0
        layoutUsed = self.mainLayout

        fontBold = QFont()
        fontBold.setBold(True)

        fontNormal = QFont()
        fontNormal.setBold(False)

        for i in xrange(len(self.actionData['data']['obj'])):
            # prevent to limit the display of all arguments
            # split all arguments in two tabulations if necessary
            nbArgument += 1
            if nbArgument > MAX_ARGUMENT_TO_DISPLAY:
                layoutUsed = self.moreLayout  # the second tab
                self.mainTab.setTabEnabled(1, True)
            if nbArgument > MAX_ARGUMENT_TO_DISPLAY2:
                layoutUsed = self.more2Layout  # the second tab
                self.mainTab.setTabEnabled(2, True)

            # extract the name of the function
            varName = self.actionData['data']['obj'][i]['name']
            #argNameLabel = QLabel( varName )
            argNameLabel = QLabelEnhanced(
                varName,
                parent=self,
                data=self.actionData['data']['obj'][i]['descr'])
            argNameLabel.EnterLabel.connect(self.loadArgumentDescription)
            argNameLabel.LeaveLabel.connect(self.clearArgumentDescription)
            #argNameLabel.setToolTip(self.actionData['data']['obj'][i]['descr'])
            layoutUsed.addWidget(argNameLabel, i, 0)

            typeDetected = self.actionData['data']['obj'][i]['type'].split("/")

            opDetected = False
            for j in xrange(len(typeDetected)):
                if typeDetected[j].lower() == 'operators':
                    opDetected = True
                    break
                if typeDetected[j].lower() == 'condition':
                    opDetected = True
                    break

            labDetected = False
            for j in xrange(len(typeDetected)):
                if typeDetected[j].lower() == 'label':
                    labDetected = True
                    break

            constDetected = False
            for j in xrange(len(typeDetected)):
                if typeDetected[j].lower() in ['strconstant', 'intconstant']:
                    constDetected = True
                    break

            dictDetected = False
            for j in xrange(len(typeDetected)):
                if typeDetected[j].lower() == 'dict':
                    dictDetected = True
                    break

            tplMDetected = False
            for j in xrange(len(typeDetected)):
                if typeDetected[j].lower() == 'templatemessage':
                    tplMDetected = True
                    break
            if tplMDetected:
                typeDetected.pop(j)

            tplLDetected = False
            for j in xrange(len(typeDetected)):
                if typeDetected[j].lower() == 'templatelayer':
                    tplLDetected = True
                    break
            if tplLDetected:
                typeDetected.pop(j)

            # exception for testcase parent in adapters or libraries
            if self.actionData['data']['obj'][i]['type'] != "testcase":
                if not self.adapterMode:
                    if dictDetected or tplMDetected or tplLDetected:
                        typeDetected.extend(['variables'])
                    else:
                        if not opDetected:
                            if not labDetected:
                                if not constDetected:
                                    typeDetected.extend(
                                        ['inputs', 'outputs', 'variables'])
                else:
                    if not constDetected:
                        typeDetected.extend(['inputs', 'outputs'])

            # second exception for agent mode
            if self.adapterMode and varName == "agent":
                if "none" in typeDetected or "None" in typeDetected:
                    typeDetected = ['agents', "none"]
                else:
                    typeDetected = ['agents']

            # move none if exists on the list to the end
            noneDetected = False
            for j in xrange(len(typeDetected)):
                if typeDetected[j].lower() == 'none':
                    noneDetected = True
                    break
            if noneDetected:
                typeDetected.pop(j)
                typeDetected.append("none")

            # remove image type
            imgDetected = False
            for j in xrange(len(typeDetected)):
                if typeDetected[j].lower() == 'image':
                    imgDetected = True
                    break
            if imgDetected:
                typeDetected.pop(j)

            # remove string type if operators exists
            strDetected = False
            if opDetected:
                for j in xrange(len(typeDetected)):
                    if typeDetected[j].lower() == 'string':
                        strDetected = True
                        break
                if strDetected:
                    typeDetected.pop(j)

            radioGroup = QButtonGroup(self)

            shiftWidget = 1
            deltaWidget = 0
            radioSelected = shiftWidget

            for j in xrange(len(typeDetected)):
                #if typeDetected[j].lower() == "list":
                #    continue

                radioButton = QRadioButton(typeDetected[j].lower())
                radioButton.setFont(fontNormal)
                radioGroup.addButton(radioButton)
                layoutUsed.addWidget(radioButton, i,
                                     j + shiftWidget + deltaWidget)

                if typeDetected[j].lower() == "testcase":
                    pass

                elif typeDetected[j].lower() == "none":
                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget
                    else:
                        if 'default-value' in self.actionData['data']['obj'][
                                i]:
                            if not len(
                                    self.actionData['data']['obj'][i]
                                ['selected-type']) and self.actionData['data'][
                                    'obj'][i]['default-value'] == 'None':
                                radioSelected = j + shiftWidget + deltaWidget

                elif typeDetected[j].lower() in [
                        "inputs", "outputs", "agents", "variables"
                ]:
                    paramCombo = QComboBox()
                    layoutUsed.addWidget(paramCombo, i,
                                         j + shiftWidget + deltaWidget + 1)

                    if typeDetected[j].lower() == 'inputs':
                        for inpt in self.owner.getInputs():
                            paramCombo.addItem(inpt['name'])
                    if typeDetected[j].lower() == 'outputs':
                        for inpt in self.owner.getOutputs():
                            paramCombo.addItem(inpt['name'])
                    if typeDetected[j].lower() == 'agents':
                        for inpt in self.owner.getAgents():
                            paramCombo.addItem(inpt['name'])
                    if typeDetected[j].lower() == 'variables':
                        paramCombo.addItems(self.variables)

                    # set as default value or not ?
                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget
                        for x in xrange(paramCombo.count()):
                            if paramCombo.itemText(x) == self.actionData[
                                    'data']['obj'][i]['value']:
                                paramCombo.setCurrentIndex(x)
                    deltaWidget += 1

                elif typeDetected[j].lower() == "string":
                    textArea = QTextEdit()
                    textArea.setMinimumHeight(HEIGHT_TEXT_AREA)
                    textArea.setMinimumWidth(WIDTH_TEXT_AREA)
                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget
                        try:
                            if sys.version_info > (3, ):  # python 3 support
                                self.actionData['data']['obj'][i][
                                    'value'] = self.actionData['data']['obj'][
                                        i]['value']
                            else:
                                self.actionData['data']['obj'][i][
                                    'value'] = self.actionData['data']['obj'][
                                        i]['value'].decode('utf8')
                            textArea.setText(
                                self.actionData['data']['obj'][i]['value'])
                        except UnicodeDecodeError as e:
                            textArea.setText(
                                self.actionData['data']['obj'][i]['value'])
                        except UnicodeEncodeError as e:
                            textArea.setText(
                                self.actionData['data']['obj'][i]['value'])
                    else:
                        if 'none' not in self.actionData['data']['obj'][i][
                                'type'].lower():
                            if 'default-value' in self.actionData['data'][
                                    'obj'][i]:
                                textArea.setText(self.actionData['data']['obj']
                                                 [i]['default-value'])
                    layoutUsed.addWidget(textArea, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

                elif typeDetected[j].lower() in ["integer", "float"]:
                    lineEdit = QLineEdit()
                    if typeDetected[j].lower() == "integer":
                        validator = QIntValidator(lineEdit)
                    else:
                        validator = QDoubleValidator(lineEdit)
                        validator.setNotation(
                            QDoubleValidator.StandardNotation)
                    lineEdit.setValidator(validator)
                    lineEdit.installEventFilter(self)

                    if self.actionData['data']['obj'][i]['selected-type'] in [
                            'integer', 'float'
                    ]:
                        radioSelected = j + shiftWidget + deltaWidget
                        lineEdit.setText(
                            "%s" % self.actionData['data']['obj'][i]['value'])
                    else:
                        if 'default-value' in self.actionData['data']['obj'][
                                i]:
                            lineEdit.setText(
                                str(self.actionData['data']['obj'][i]
                                    ['default-value']))
                    layoutUsed.addWidget(lineEdit, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

                elif typeDetected[j].lower() in ["strconstant", "intconstant"]:

                    consCombo = QComboBox()
                    # extract values
                    tmpconstant = self.actionData['data']['obj'][i]['descr']
                    tmpvals = tmpconstant.split("|")
                    # extract all constant and detect the default
                    vals = []
                    defConstant = 0
                    defConstantVal = ''
                    for zz in xrange(len(tmpvals)):
                        if '(default)' in tmpvals[zz]:
                            nameConstant = tmpvals[zz].split(
                                '(default)')[0].strip()
                            vals.append(nameConstant)
                            defConstant = zz
                            defConstantVal = nameConstant
                        else:
                            vals.append(tmpvals[zz].strip())
                    # append all constant to the combobox
                    consCombo.addItems(vals)

                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget
                        for x in xrange(len(vals)):
                            if vals[x] == str(self.actionData['data']['obj'][i]
                                              ['value']):
                                consCombo.setCurrentIndex(x)
                    else:
                        # set the current index for default value
                        consCombo.setCurrentIndex(defConstant)

                    layoutUsed.addWidget(consCombo, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

                elif typeDetected[j].lower() == "boolean":
                    boolCombo = QComboBox()
                    valBool = ["True", "False"]
                    boolCombo.addItems(valBool)

                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget
                        for x in xrange(len(valBool)):
                            if valBool[x] == str(self.actionData['data']['obj']
                                                 [i]['value']):
                                boolCombo.setCurrentIndex(x)
                    else:
                        # set the default value
                        if 'default-value' in self.actionData['data']['obj'][
                                i]:
                            for x in xrange(len(valBool)):
                                if valBool[x] == str(
                                        self.actionData['data']['obj'][i]
                                    ['default-value']):
                                    boolCombo.setCurrentIndex(x)
                    layoutUsed.addWidget(boolCombo, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

                elif typeDetected[j].lower() == "dict":
                    dictWidget = DictWidget.DictWidget(
                        parent=self,
                        advancedMode=False,
                        testParams=self.testParams,
                        variables=self.variables)

                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget

                        if not isinstance(
                                self.actionData['data']['obj'][i]['value'],
                                dict):
                            self.actionData['data']['obj'][i]['value'] = {
                                'dict': []
                            }

                        dictVal = self.actionData['data']['obj'][i]['value'][
                            'dict']
                        dictWidget.setCurrentDict(dictVal=dictVal)

                    layoutUsed.addWidget(dictWidget, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

                elif typeDetected[j].lower() == "dictadvanced":
                    dictWidget = DictWidget.DictWidget(
                        parent=self,
                        advancedMode=True,
                        testParams=self.testParams,
                        variables=self.variables)

                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget

                        if not isinstance(
                                self.actionData['data']['obj'][i]['value'],
                                dict):
                            self.actionData['data']['obj'][i]['value'] = {
                                'dictadvanced': []
                            }

                        dictVal = self.actionData['data']['obj'][i]['value'][
                            'dictadvanced']
                        dictWidget.setCurrentDict(dictVal=dictVal)

                    layoutUsed.addWidget(dictWidget, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

                elif typeDetected[j].lower() == "operators":
                    opWidget = OperatorsWidget.OperatorsWidget(
                        self,
                        testParams=self.testParams,
                        variables=self.variables)
                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget
                        opWidget.setCurrentOperator(
                            operatorVal=self.actionData['data']['obj'][i]
                            ['value'])

                    layoutUsed.addWidget(opWidget, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

                elif typeDetected[j].lower() == "condition":
                    opWidget = OperatorsWidget.OperatorsWidget(
                        self,
                        testParams=self.testParams,
                        variables=self.variables,
                        liteMode=True)
                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget
                        opWidget.setCurrentOperator(
                            operatorVal=self.actionData['data']['obj'][i]
                            ['value'])

                    layoutUsed.addWidget(opWidget, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

                elif typeDetected[j].lower() == "templatelayer":
                    textArea = QLineEdit()
                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget
                        textArea.setText(
                            self.actionData['data']['obj'][i]['value'])
                    else:
                        if 'none' not in self.actionData['data']['obj'][i][
                                'type'].lower():
                            if 'default-value' in self.actionData['data'][
                                    'obj'][i]:
                                textArea.setText(self.actionData['data']['obj']
                                                 [i]['default-value'])
                    layoutUsed.addWidget(textArea, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

                elif typeDetected[j].lower() == "object":
                    textArea = QTextEdit()
                    textArea.setFixedHeight(HEIGHT_TEXT_AREA)
                    textArea.setMinimumWidth(WIDTH_TEXT_AREA)
                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget
                        textArea.setText(
                            self.actionData['data']['obj'][i]['value'])
                    else:
                        # typeParam.setChecked(True) # fix bug
                        if 'none' not in self.actionData['data']['obj'][i][
                                'type'].lower():
                            if 'default-value' in self.actionData['data'][
                                    'obj'][i]:
                                textArea.setText(self.actionData['data']['obj']
                                                 [i]['default-value'])
                    layoutUsed.addWidget(textArea, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

                else:
                    textArea = QTextEdit()
                    textArea.setFixedHeight(HEIGHT_TEXT_AREA)
                    textArea.setMinimumWidth(WIDTH_TEXT_AREA)
                    if self.actionData['data']['obj'][i][
                            'selected-type'] == typeDetected[j].lower():
                        radioSelected = j + shiftWidget + deltaWidget
                        textArea.setText(
                            self.actionData['data']['obj'][i]['value'])
                    else:
                        if 'none' not in self.actionData['data']['obj'][i][
                                'type'].lower():
                            if 'default-value' in self.actionData['data'][
                                    'obj'][i]:
                                textArea.setText(self.actionData['data']['obj']
                                                 [i]['default-value'])
                    layoutUsed.addWidget(textArea, i,
                                         j + shiftWidget + deltaWidget + 1)
                    deltaWidget += 1

            widgetRadio = layoutUsed.itemAtPosition(i, radioSelected).widget()
            widgetRadio.setChecked(True)
            widgetRadio.setFont(fontBold)

        if nbArgument < MAX_ARGUMENT_TO_DISPLAY:
            self.mainTab.setTabEnabled(1, False)