def __init__(self, name): super(makeAnyDict, self).__init__(name) self.KeyType = self.createInputPin( 'KeyType', 'AnyPin', defaultValue=str(""), constraint="1", supportedPinDataTypes=getHashableDataTypes()) self.KeyType.hidden = True self.arrayData = self.createInputPin('data', 'AnyPin', structure=PinStructure.Dict) self.arrayData.enableOptions(PinOptions.AllowMultipleConnections | PinOptions.AllowAny | PinOptions.DictElementSupported) self.arrayData.disableOptions(PinOptions.ChangeTypeOnConnection | PinOptions.SupportsOnlyArrays) self.outArray = self.createOutputPin('out', 'AnyPin', structure=PinStructure.Dict) self.outArray.enableOptions(PinOptions.AllowAny) self.outArray.disableOptions(PinOptions.ChangeTypeOnConnection) self.result = self.createOutputPin('result', 'BoolPin') self.arrayData.onPinDisconnected.connect(self.inPinDisconnected) self.arrayData.onPinConnected.connect(self.inPinConnected) self.KeyType.typeChanged.connect(self.updateDicts)
def __init__(self, name): super(makeDictElement, self).__init__(name) self.bCacheEnabled = False self.key = self.createInputPin( 'key', 'AnyPin', structure=StructureType.Single, constraint="1", supportedPinDataTypes=getHashableDataTypes()) self.value = self.createInputPin('value', 'AnyPin', structure=StructureType.Multi, constraint="2") self.value.enableOptions(PinOptions.AllowAny) self.outArray = self.createOutputPin('out', 'AnyPin', defaultValue=DictElement(), structure=StructureType.Single, constraint="2") self.outArray.enableOptions(PinOptions.AllowAny | PinOptions.DictElementSupported) self.outArray.onPinConnected.connect(self.outPinConnected) self.outArray.onPinDisconnected.connect(self.outPinDisConnected) self.key.dataBeenSet.connect(self.dataBeenSet) self.value.dataBeenSet.connect(self.dataBeenSet)
def getItem(obj=('AnyPin', None, {PinSpecifires.CONSTRAINT: "1", PinSpecifires.ENABLED_OPTIONS: PinOptions.ArraySupported | PinOptions.AllowAny}), element=("AnyPin", None, {PinSpecifires.SUPPORTED_DATA_TYPES: getHashableDataTypes()}), result=(REF, ("BoolPin", False))): """Python's ``[]`` operator. ``obj[element]`` will be executed.""" try: result(True) return obj[element] except: result(False) return None
def getItem(obj=('AnyPin', None, { "constraint": "1", "enabledOptions": PinOptions.ArraySupported | PinOptions.AllowAny }), element=("AnyPin", None, { "supportedDataTypes": getHashableDataTypes() }), result=("Reference", ("BoolPin", False))): """Python's ``[]`` operator. ``obj[element]`` will be executed.""" try: result(True) return obj[element] except: result(False) return None
def createPropertiesWidget(self, propertiesWidget): baseCategory = CollapsibleFormWidget(headName="Base") # name le_name = QLineEdit(self._rawVariable.name) le_name.returnPressed.connect(lambda: self.setName(le_name.text())) baseCategory.addWidget("Name", le_name) # data type if self._rawVariable.structure == StructureType.Dict: dictObject = self._rawVariable.value keyTypeSelector = EnumComboBox(values=getHashableDataTypes()) valueTypeSelector = EnumComboBox([ pin.__name__ for pin in getAllPinClasses() if pin.IsValuePin() if pin.__name__ != "AnyPin" ]) keyTypeSelector.setEditable(False) valueTypeSelector.setEditable(False) keyTypeSelector.setCurrentIndex( keyTypeSelector.findText(dictObject.keyType)) valueTypeSelector.setCurrentIndex( valueTypeSelector.findText(dictObject.valueType)) keyTypeSelector.changeCallback.connect(self.onDictKeyTypeChanged) valueTypeSelector.changeCallback.connect( self.onDictValueTypeChanged) baseCategory.addWidget("Key type", keyTypeSelector) baseCategory.addWidget("Value type", valueTypeSelector) else: cbTypes = EnumComboBox([ pin.__name__ for pin in getAllPinClasses() if pin.IsValuePin() if pin.__name__ != "AnyPin" ]) cbTypes.setCurrentIndex(cbTypes.findText(self.dataType)) cbTypes.changeCallback.connect(self.setDataType) cbTypes.setEditable(False) baseCategory.addWidget("Type", cbTypes) propertiesWidget.addWidget(baseCategory) # structure type cbStructure = EnumComboBox( [i.name for i in (StructureType.Single, StructureType.Array)]) cbStructure.setEditable(False) cbStructure.setCurrentIndex( cbStructure.findText(self._rawVariable.structure.name)) cbStructure.changeCallback.connect(self.onStructureChanged) propertiesWidget.addWidget(baseCategory) baseCategory.addWidget("Structure", cbStructure) valueCategory = CollapsibleFormWidget(headName="Value") # current value if self._rawVariable.structure == StructureType.Single: if not type(self._rawVariable.value) in {list, set, dict, tuple}: def valSetter(x): self._rawVariable.value = x w = createInputWidget( self._rawVariable.dataType, valSetter, getPinDefaultValueByType(self._rawVariable.dataType)) if w: w.setWidgetValue(self._rawVariable.value) w.setObjectName(self._rawVariable.name) valueCategory.addWidget(self._rawVariable.name, w) # access level cb = QComboBox() cb.addItem('public', 0) cb.addItem('private', 1) cb.addItem('protected', 2) def accessLevelChanged(x): self._rawVariable.accessLevel = AccessLevel[x] EditorHistory().saveState("Change variable access level", modify=True) cb.currentTextChanged.connect(accessLevelChanged) cb.setCurrentIndex(self._rawVariable.accessLevel) valueCategory.addWidget('Access level', cb) propertiesWidget.addWidget(valueCategory)