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)