Exemple #1
0
    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)
Exemple #2
0
 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
Exemple #4
0
 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)