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
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)
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
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)
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)