예제 #1
0
    def addValueWidget(self, name, dataType, getter, setter=None):
        port = Parameter(
                controller=self.getController(),
                name=name,
                portType=self._attribute.getPortType(),
                dataType=dataType,
                getterFn=getter,
                setterFn=setter
            )
        widget = AttributeWidget.constructAttributeWidget(self.getController(), port, parentWidget=self, addNotificationListener = False)
        if widget is None:
            return;

        # widget.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
        label = QtGui.QLabel(name, self)
        # label.setMaximumWidth(200)
        # label.setContentsMargins(0, 5, 0, 0)
        # label.setMinimumWidth(60)
        # label.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
        # label.setAlignment(QtCore.Qt.AlignRight)
        # label.adjustSize()

        rowSpan = widget.getRowSpan()
        columnSpan = widget.getColumnSpan()
        # if columnSpan==1:
        self._grid.addWidget(label, self._gridRow, 0, QtCore.Qt.AlignRight | QtCore.Qt.AlignTop)
        self._grid.addWidget(widget, self._gridRow, 1)#, QtCore.Qt.AlignLeft)
        self._gridRow += 1
        # else:
        #     self._grid.addWidget(label, self._gridRow, 0, QtCore.Qt.AlignRight | QtCore.Qt.AlignTop)
        #     self._grid.addWidget(widget, self._gridRow+1, 0, rowSpan, columnSpan)
        #     self._gridRow += 2

        self._labels[name] = label
        self._widgets[name] = widget
예제 #2
0
    def constructElementWidget(self, index):
        def elementGetter():
            return self._valueArray[index]
        elementSetter = None

        if self.isEditable():
            def elementSetter(value):
                self._valueArray[index] = value
                self._invokeSetter(self._valueArray)
        elementParameter = Parameter(
            controller=self.getController(),
            name=str(index),
            portType=self._attribute.getPortType(),
            dataType=self._elementValueType,
            getterFn=elementGetter,
            setterFn=elementSetter
        )
        return AttributeWidget.constructAttributeWidget(self.getController(), elementParameter, parentWidget=self, addNotificationListener=False)
예제 #3
0
    def addValueWidget(self, name, dataType, getter, setter=None):
        port = Parameter(controller=self.getController(),
                         name=name,
                         portType=self._attribute.getPortType(),
                         dataType=dataType,
                         getterFn=getter,
                         setterFn=setter)
        widget = AttributeWidget.constructAttributeWidget(
            self.getController(),
            port,
            parentWidget=self,
            addNotificationListener=False)
        if widget is None:
            return

        # widget.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
        label = QtGui.QLabel(name, self)
        # label.setMaximumWidth(200)
        # label.setContentsMargins(0, 5, 0, 0)
        # label.setMinimumWidth(60)
        # label.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
        # label.setAlignment(QtCore.Qt.AlignRight)
        # label.adjustSize()

        rowSpan = widget.getRowSpan()
        columnSpan = widget.getColumnSpan()
        # if columnSpan==1:
        self._grid.addWidget(label, self._gridRow, 0,
                             QtCore.Qt.AlignRight | QtCore.Qt.AlignTop)
        self._grid.addWidget(widget, self._gridRow, 1)  #, QtCore.Qt.AlignLeft)
        self._gridRow += 1
        # else:
        #     self._grid.addWidget(label, self._gridRow, 0, QtCore.Qt.AlignRight | QtCore.Qt.AlignTop)
        #     self._grid.addWidget(widget, self._gridRow+1, 0, rowSpan, columnSpan)
        #     self._gridRow += 2

        self._labels[name] = label
        self._widgets[name] = widget
예제 #4
0
    def constructElementWidget(self, index):
        def elementGetter():
            return self._valueArray[index]

        elementSetter = None

        if self.isEditable():

            def elementSetter(value):
                self._valueArray[index] = value
                self._invokeSetter(self._valueArray)

        elementParameter = Parameter(controller=self.getController(),
                                     name=str(index),
                                     portType=self._attribute.getPortType(),
                                     dataType=self._elementValueType,
                                     getterFn=elementGetter,
                                     setterFn=elementSetter)
        return AttributeWidget.constructAttributeWidget(
            self.getController(),
            elementParameter,
            parentWidget=self,
            addNotificationListener=False)
예제 #5
0
        def constructWidget(index, attrName, attrValueType):

            self.__attrNameMapping[attrName] = attrName

            def keyGetter():
                return attrName

            if self.isEditable():

                def keySetter(key):
                    value = self.__value[self.__attrNameMapping[attrName]]
                    del self.__value[self.__attrNameMapping[attrName]]
                    self.__value[key] = value

                    keyWidget = self.__keywidgets[
                        self.__attrNameMapping[attrName]]
                    valueWidget = self.__widgets[
                        self.__attrNameMapping[attrName]]
                    del self.__keywidgets[self.__attrNameMapping[attrName]]
                    del self.__widgets[self.__attrNameMapping[attrName]]
                    self.__keywidgets[key] = keyWidget
                    self.__widgets[key] = valueWidget
                    self.__attrNameMapping[attrName] = key
                    self._invokeSetter(self.__value)
            else:
                keySetter = None

            # sub-widgets should initialize their values.
            keyParam = Parameter(controller=self.getController(),
                                 name="",
                                 portType=self._attribute.getPortType(),
                                 dataType='String',
                                 getterFn=keyGetter,
                                 setterFn=keySetter)
            keyWidget = AttributeWidget.constructAttributeWidget(
                self.getController(),
                keyParam,
                parentWidget=self,
                addNotificationListener=False)

            def valueGetter():
                return self.__value[self.__attrNameMapping[attrName]]

            if self.isEditable():

                def valueSetter(value):
                    self.__value[self.__attrNameMapping[attrName]] = value
                    self._invokeSetter(self.__value)
            else:
                valueSetter = None

            valueParam = Parameter(controller=self.getController(),
                                   name="",
                                   portType=self._attribute.getPortType(),
                                   dataType=attrValueType,
                                   getterFn=valueGetter,
                                   setterFn=valueSetter)
            valueWidget = AttributeWidget.constructAttributeWidget(
                self.getController(),
                valueParam,
                parentWidget=self,
                addNotificationListener=False)

            # self._grid.addWidget(QtGui.QLabel(attrName, self), index, 0, QtCore.Qt.AlignRight | QtCore.Qt.AlignTop)
            self._grid.addWidget(keyWidget, index, 0,
                                 QtCore.Qt.AlignRight | QtCore.Qt.AlignTop)
            self._grid.addWidget(valueWidget, index, 1)
            self.__keywidgets[attrName] = keyWidget
            self.__widgets[attrName] = valueWidget

            if self.isEditable() and self.__enableAddRemoveElements:
                removeElementButton = QtGui.QPushButton(
                    self.__removeElementButtonLabel, self)

                def removeElement():
                    self.getController().beginUndoBracket(
                        name="Remove element from :" + self.getLabel())

                    newDict = self.getController().constructRTVal(
                        self._dataType)
                    for key in self.__value:
                        if key != attrName:
                            newDict[key] = self.__value[key]

                    self.__value = newDict
                    self._invokeSetter()

                    self.getController().endUndoBracket()
                    self.rebuild()

                removeElementButton.clicked.connect(removeElement)
                self._grid.addWidget(removeElementButton, index, 2)