def __init__(self, valueController, parent=None): super(Vec3Editor, self).__init__(valueController, parent=parent) self.__editors = [] hbox = QtWidgets.QHBoxLayout() def defineLineEditSubEditor(): widget = LineEdit(self) validator = QtGui.QDoubleValidator(self) validator.setDecimals(3) widget.setValidator(validator) hbox.addWidget(widget, 1) self.__editors.append(widget) return widget defineLineEditSubEditor() defineLineEditSubEditor() defineLineEditSubEditor() hbox.addStretch(0) hbox.setContentsMargins(0, 0, 0, 0) self.setLayout(hbox) self.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) self.updateEditorValue() for i in range(0, len(self.__editors)): self.__editors[i].editingFinished.connect(self._setValueToController) self.setEditable( valueController.isEditable() )
def __init__(self, valueController, parent=None): super(IntegerEditor, self).__init__(valueController, parent=parent) hbox = QtWidgets.QHBoxLayout() self._editor = QtWidgets.QSpinBox(self) if(self._dataType == 'UInt8' or self._dataType == 'UInt16' or self._dataType == 'UInt32' or self._dataType == 'UInt64' or self._dataType == 'Index' or self._dataType == 'Size' or self._dataType == 'Byte'): self._editor.setMinimum(0) else: self._editor.setMinimum(-100000000) self._editor.setMaximum(100000000) self._editor.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) hbox.addWidget(self._editor, 1) hbox.addStretch(0) hbox.setContentsMargins(0, 0, 0, 0) self.setLayout(hbox) self.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) self.updateEditorValue() self._editor.valueChanged.connect(self._setValueToController) self.setEditable( valueController.isEditable() )
def __init__(self, valueController, parent=None): super(LineEditor, self).__init__(valueController, parent=parent) hbox = QtWidgets.QHBoxLayout() self._editor = LineEditEditor(valueController, parent=self) hbox.addWidget(self._editor, 1) hbox.addStretch(0) hbox.setContentsMargins(0, 0, 0, 0) self.setLayout(hbox) self.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) self.updateEditorValue() # we get lots of 'editingFinished' events, # so filter to only generate undos for important ones. self._value = valueController.getValue() def invokeSetter(): value = self._editor.text() if self._value != value: self._value = value self._setValueToController() self._editor.editingFinished.connect(invokeSetter) self.setEditable(valueController.isEditable())
def __init__(self, valueController, parent=None): super(ListViewEditor, self).__init__(valueController, parent=parent) hbox = QtWidgets.QHBoxLayout() self._editor = QtWidgets.QListWidget(self) self.__items = valueController.getOption('combo') for item in self.__items: self._editor.addItem(str(item)) self._editor.setMaximumHeight(65) hbox.addWidget(self._editor, 1) hbox.addStretch(0) hbox.setContentsMargins(0, 0, 0, 0) self.setLayout(hbox) self.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) self.updateEditorValue() if self.isEditable(): self._editor.itemSelectionChanged.connect( self._setValueToController) else: self._editor.setReadOnly(True)
def __init__(self, valueController, parent=None): super(StringListEditor, self).__init__(valueController, parent=parent) hbox = QtWidgets.QHBoxLayout() self._editor = QtWidgets.QListWidget(self) if self._valueController.hasOption('maxHeight'): self._editor.setMaximumHeight( self._valueController.getOption('maxHeight', 65)) self.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) else: self.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) hbox.addWidget(self._editor, 1) hbox.setContentsMargins(0, 0, 0, 0) self.setLayout(hbox) self.updateEditorValue() if self.isEditable(): def setSelectionOption(value): self._valueController.setOption('currentItem', value) self._editor.itemSelectionChanged.connect(setSelectionOption) else: self.setEditable(False)
def __init__(self, valueController, parent=None): super(ScalarSliderEditor, self).__init__(valueController, parent=parent) hbox = QtWidgets.QHBoxLayout() validator = QtGui.QDoubleValidator(self) validator.setRange(self._range['min'], self._range['max'], 4) self._editEditor.setValidator(validator) self._editEditor.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) self._sliderEditor.setMinimum(self._range['min'] * 1000) self._sliderEditor.setMaximum(self._range['max'] * 1000) self._sliderEditor.setSizePolicy( QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) self._sliderEditor.setTickInterval(1000) self._editEditor.setMinimumWidth(50) self._editEditor.setMaximumWidth(90) hbox.addWidget(self._editEditor, 1) hbox.addWidget(self._sliderEditor, 1) hbox.addStretch() self.setLayout(hbox) self.layout().setContentsMargins(0, 0, 0, 0) self.updateEditorValue() def __sliderPressed(): self.beginInteraction() def __sliderReleased(): self.endInteraction() def __sliderMoved(value): if self._updatingEditor: return value = float(value) / 1000 self._editEditor.setText(str(round(value, 4))) self._value = value self._setValueToController() def __textEdited(): if self._updatingEditor: return value = self.getEditorValue() # if self._dynamicRange: # self.updateSliderRange(value) self._sliderEditor.setValue(value * 1000) self._setValueToController() self._sliderEditor.sliderPressed.connect(__sliderPressed) self._sliderEditor.sliderReleased.connect(__sliderReleased) self._sliderEditor.valueChanged.connect(__sliderMoved) self._editEditor.editingFinished.connect(__textEdited) self.setEditable(valueController.isEditable())
def __init__(self, valueController, parent=None): super(FilepathEditor, self).__init__(valueController, parent=parent) self.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) self._line = QtWidgets.QLineEdit(self) self._browse = QtWidgets.QPushButton(' ... ', self) hbox = QtWidgets.QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.addWidget(self._line) hbox.addWidget(self._browse) self.setLayout(hbox) self.__updateOptions() def localSetter(value): self._setValueToController() self._line.textEdited.connect(localSetter) def __onBrowse(): if self._line.text() == '': initialDir = self._folder else: initialDir = os.path.join(self._folder, self._line.text()) if self._saveFile: (filepath, filter) = QtWidgets.QFileDialog.getSaveFileName( None, caption=self._options['Title'], dir=initialDir, filter=self._options['Filter']) else: (filepath, filter) = QtWidgets.QFileDialog.getOpenFileName( None, caption=self._options['Title'], dir=initialDir, filter=self._options['Filter']) if filepath is None or len(filepath) == 0: return if self._folder != '': filepath = os.path.relpath(filepath, self._folder) self.setEditorValue(filepath) self._setValueToController() self._browse.clicked.connect(__onBrowse) valueController.optionChanged.connect(self.__updateOptions) self.updateEditorValue() self.setEditable(valueController.isEditable())
def __init__(self, valueController, parent=None): super(ColorEditor, self).__init__(valueController, parent=parent) hbox = QtWidgets.QHBoxLayout() self._editors = [] self._qgraphcsScene = QtWidgets.QGraphicsScene(self) self._qgraphcsView = QtWidgets.QGraphicsView(self) self._qgraphcsView.setScene(self._qgraphcsScene) self._qgraphcsView.setFixedSize(100, 20) self._qgraphcsView.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) hbox.addWidget(self._qgraphcsView, 1) hbox.addStretch(0) hbox.setContentsMargins(0, 0, 0, 0) self.setLayout(hbox) self.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) self.updateEditorValue() self.setEditable(valueController.isEditable())
def __init__(self, valueController, parent=None): super(BooleanEditor, self).__init__(valueController, parent=parent) hbox = QtWidgets.QHBoxLayout() self._editor = QtWidgets.QCheckBox(self) hbox.addWidget(self._editor, 1) hbox.addStretch(0) hbox.setContentsMargins(0, 0, 0, 0) self.setLayout(hbox) self.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) self.updateEditorValue() def __stateChanged(value): self._setValueToController() self._editor.stateChanged.connect(__stateChanged) self.setEditable(self.isEditable())
def __init__(self, valueController, parent=None): super(ComboBoxEditor, self).__init__(valueController, parent=parent) self.__name = valueController.getName() self._items = [] hbox = QtWidgets.QHBoxLayout() self._editor = QtWidgets.QComboBox(self) hbox.addWidget(self._editor, 1) hbox.addStretch(0) hbox.setContentsMargins(0, 0, 0, 0) self.setLayout(hbox) self.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) items = valueController.getOption('combo') if items is not None: self.setComboBoxItems(items) self.updateEditorValue() self._editor.currentIndexChanged.connect(self._setValue) self.setEditable(self.isEditable())
def __init__(self, valueController, parent=None): super(ArrayEditor, self).__init__(valueController, parent=parent) self.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) self._enableAddElements = True #valueController.getOption('enableAddElements', valueController.getOption('enableAddRemoveElements', True)) self._enableRemoveElements = True #valueController.getOption('enableRemoveElements', valueController.getOption('enableAddRemoveElements', True)) self._addElementButtonLabel = 'add' #valueController.getOption('addElementButtonLabel', 'add') self._removeElementButtonLabel = 'remove' #valueController.getOption('removeElementButtonLabel', 'remove') self._displayGroupBox = False #self._valueController.getOption('displayArrayLimit', True) self._displayIndex = False #self._valueController.getOption('displayArrayLimit', True) self._displayArrayLimit = False #self._valueController.getOption('displayArrayLimit', True) self._displayNumElements = False #self._valueController.getOption('displayNumElements', True) self._arrayLimit = 3 #self._valueController.getOption('arrayLimit', 3) self._dataType = valueController.getDataType() self._valueArray = self._invokeGetter() self.determineElementType() vbox = QtWidgets.QVBoxLayout() if self._displayArrayLimit or self._displayNumElements: topToolbar = QtWidgets.QWidget(self) topToolbarLayout = QtWidgets.QHBoxLayout() topToolbar.setLayout(topToolbarLayout) vbox.addWidget(topToolbar, 0) if self._displayNumElements: topToolbarLayout.addWidget( QtWidgets.QLabel( 'Num Elements:' + str(len(self._valueArray)), self)) if self._displayArrayLimit: # display a widget to enable setting the maximum number of displayed elements. label = QtWidgets.QLabel('Max Displayed elements:', self) # label.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) topToolbarLayout.addWidget(label, 0) spinBox = QtWidgets.QSpinBox(self) spinBox.setMinimum(0) spinBox.setMaximum(100) # spinBox.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) spinBox.setValue(self._arrayLimit) def setArrayLimit(value): self._arrayLimit = value self.rebuild() spinBox.valueChanged.connect(setArrayLimit) topToolbarLayout.addWidget(spinBox, 0) topToolbarLayout.addStretch(1) self._grid = QtWidgets.QGridLayout() self._grid.setContentsMargins(0, 0, 0, 0) widget = QtWidgets.QWidget(self) widget.setLayout(self._grid) vbox.addWidget(widget) if self._displayGroupBox: groupBox = QtWidgets.QGroupBox(self._valueController.getDataType()) groupBox.setLayout(vbox) groupBox.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) groupBoxLayout = QtWidgets.QVBoxLayout() groupBoxLayout.addWidget(groupBox, 0) self.setLayout(groupBoxLayout) else: self.setLayout(vbox) self.build() if self._elementValueType == 'String': self.setAcceptDrops(self.isEditable())
def createLayout(self): # Parent Layout self._topLayout = QtWidgets.QVBoxLayout() self._topLayout.setContentsMargins(0, 0, 0, 0) self._topLayout.setSpacing(0) self._mainWidget = QtWidgets.QWidget() self._mainWidget.setObjectName('mainPrefWidget') # Main Layout self._mainLayout = QtWidgets.QVBoxLayout(self._mainWidget) self._mainLayout.setContentsMargins(0, 0, 0, 0) self._mainLayout.setSpacing(0) self._preferenceLayout = QtWidgets.QGridLayout() self._preferenceLayout.setContentsMargins(10, 10, 10, 10) self._preferenceLayout.setSpacing(3) self._preferenceLayout.setColumnMinimumWidth(0, 200) self._preferenceLayout.setColumnStretch(0, 1) self._preferenceLayout.setColumnStretch(1, 2) # Add widgets based on type here preferences = self.parentWidget().window().preferences.getPreferences() i = 0 for k, v in preferences.iteritems(): labelFrameWidget = QtWidgets.QFrame() labelFrameWidget.setObjectName('prefLabelWidgetFrame') labelFrameWidget.setFrameStyle(QtWidgets.QFrame.NoFrame | QtWidgets.QFrame.Plain) labelFrameWidget.setToolTip(v['description']) labelFrameLayout = QtWidgets.QHBoxLayout() prefLabel = QtWidgets.QLabel(v['nice_name'], self) prefLabel.setProperty('labelClass', 'preferenceLabel') prefLabel.setObjectName(k + "_label") prefLabel.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) prefLabel.setMinimumWidth(200) labelFrameLayout.addWidget(prefLabel) labelFrameWidget.setLayout(labelFrameLayout) self._preferenceLayout.addWidget(labelFrameWidget, i, 0) if v['type'] == 'bool': valueFrameWidget = QtWidgets.QFrame() valueFrameWidget.setObjectName('prefValueWidgetFrame') valueFrameWidget.setFrameStyle(QtWidgets.QFrame.NoFrame | QtWidgets.QFrame.Plain) valueFrameLayout = QtWidgets.QHBoxLayout() valueWidget = QtWidgets.QCheckBox(self) valueWidget.setObjectName(k + "_valueWidget") valueWidget.setChecked(v['value']) valueFrameLayout.addWidget(valueWidget) valueFrameWidget.setLayout(valueFrameLayout) self._preferenceLayout.addWidget(valueFrameWidget, i, 1, 1, 1) self.prefValueWidgets.append(valueWidget) i += 1 # OK and Cancel buttons buttonLayout = QtWidgets.QHBoxLayout() buttonLayout.setContentsMargins(10, 10, 10, 10) buttons = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, self) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) buttonLayout.addWidget(buttons) # Menu Bar self.menu_bar = QtWidgets.QMenuBar() self.file_menu = self.menu_bar.addMenu('&File') self.importPrefAction = self.file_menu.addAction('&Import...') self.exportPrefAction = self.file_menu.addAction('&Export...') self._mainLayout.addWidget(self.menu_bar) self._mainLayout.addLayout(self._preferenceLayout) self._mainLayout.addStretch(1) self._mainLayout.addLayout(buttonLayout) self._topLayout.addWidget(self._mainWidget) self.setLayout(self._topLayout)
def createLayout(self): self.menuLayout = QtWidgets.QHBoxLayout() self.menuLayout.setContentsMargins(0, 0, 0, 0) self.menuLayout.setSpacing(0) # Menu self.menuBar = QtWidgets.QMenuBar() # File Menu self.fileMenu = self.menuBar.addMenu('&File') self.newAction = self.fileMenu.addAction('&New') self.newAction.setShortcut('Ctrl+N') self.newAction.setObjectName("newAction") self.openAction = self.fileMenu.addAction('&Open...') self.openAction.setShortcut('Ctrl+O') self.openAction.setObjectName("openAction") self.saveAction = self.fileMenu.addAction('&Save') self.saveAction.setShortcut('Ctrl+S') self.saveAction.setObjectName("saveAction") self.saveAsAction = self.fileMenu.addAction('&Save As...') self.saveAsAction.setShortcut('Ctrl+Shift+S') self.saveAsAction.setObjectName("saveAsAction") self.fileMenu.addSeparator() self.recentFilesMenu = QtWidgets.QMenu(title='&Recent Files', parent=self.fileMenu) self.fileMenu.addMenu(self.recentFilesMenu) self.fileMenu.addSeparator() self.closeAction = self.fileMenu.addAction('&Close') self.closeAction.setShortcut('Ctrl+W') self.closeAction.setObjectName("closeAction") # Edit Menu self.editMenu = self.menuBar.addMenu('&Edit') self.copyAction = self.editMenu.addAction('&Copy') self.copyAction.setShortcut('Ctrl+C') self.pasteAction = self.editMenu.addAction('&Paste') self.pasteAction.setShortcut('Ctrl+V') self.pasteConnectedAction = self.editMenu.addAction('Paste Connected') self.pasteConnectedAction.setShortcut( QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.SHIFT + QtCore.Qt.Key_V)) self.editMenu.addSeparator() self.pasteMirroredAction = self.editMenu.addAction('Paste Mirrored') self.pasteMirroredConnectedAction = self.editMenu.addAction( 'Paste Mirrored Connected') self.editMenu.addSeparator() self.editAddBackdropAction = self.editMenu.addAction('Add &Backdrop') self.editMenu.addSeparator() self.editRigNameAction = self.editMenu.addAction('&Rig Name') self.editRigNameAction.setObjectName("editRigNameAction") self.editMenu.addSeparator() self.editPreferencesAction = self.editMenu.addAction('&Preferences...') self.editPreferencesAction.setObjectName("editPreferencesAction") # Build Menu self.buildMenu = self.menuBar.addMenu('&Build') self.buildGuideAction = self.buildMenu.addAction('Build &Guide') self.buildGuideAction.setShortcut('Ctrl+G') self.buildGuideAction.setObjectName("buildGuideAction") self.buildRigAction = self.buildMenu.addAction('Build &Rig') self.buildRigAction.setShortcut('Ctrl+B') self.buildRigAction.setObjectName("buildRigAction") # Tools Menu self.toolsMenu = self.menuBar.addMenu('&Tools') self.reloadComponentsAction = self.toolsMenu.addAction( 'Reload Component Modules') self.reloadComponentsAction.setShortcut('Ctrl+Shift+R') # View Menu self.viewMenu = self.menuBar.addMenu('&View') self.compLibAction = self.viewMenu.addAction('Component &Library') self.compLibAction.setShortcut('Ctrl+Tab') self.snapToGridAction = self.viewMenu.addAction('&Snap To Grid') self.snapToGridAction.setCheckable(True) # Help Menu self.helpMenu = self.menuBar.addMenu('&Help') self.krakenWebSiteAction = self.helpMenu.addAction('Kraken Web Site') self.krakenDocumentationAction = self.helpMenu.addAction( 'Kraken Documentation') self.fabricForumsAction = self.helpMenu.addAction('Fabric Forums') self.helpMenu.addSeparator() self.aboutKrakenAction = self.helpMenu.addAction('About Kraken') # Logo logoWidget = QtWidgets.QLabel() logoWidget.setObjectName('logoWidget') logoWidget.setMinimumHeight(20) logoWidget.setMinimumWidth(110) logoPixmap = QtGui.QPixmap(':/images/KrakenUI_Logo.png') logoWidget.setPixmap(logoPixmap) # Config Widget self.configsParent = QtWidgets.QFrame(self) self.configsParent.setObjectName('configParent') self.configsParent.setFrameStyle(QtWidgets.QFrame.NoFrame) self.configsParent.setMinimumWidth(160) self.configsLayout = QtWidgets.QVBoxLayout() self.configsLayout.setContentsMargins(0, 0, 0, 0) self.configsLayout.setSpacing(0) self.configsWidget = QtWidgets.QComboBox() self.configsWidget.setAutoFillBackground(True) self.configsWidget.setObjectName('configWidget') self.configsWidget.setMinimumWidth(160) self.configsWidget.addItem('Default Config', userData='Default Config') self.configsLayout.addWidget(self.configsWidget) self.configsParent.setLayout(self.configsLayout) configs = KrakenSystem.getInstance().getConfigClassNames() for config in configs: self.configsWidget.addItem(config.split('.')[-1], userData=config) self.rigNameLabel = RigNameLabel('Rig Name:') # Add Widgets self.menuLayout.addWidget(logoWidget, 0) self.menuLayout.addWidget(self.menuBar, 3) self.menuLayout.addWidget(self.configsParent, 0) self.menuLayout.addWidget(self.rigNameLabel, 0) self.setLayout(self.menuLayout)
def __init__(self, valueController, parent=None): super(ComplexTypeEditor, self).__init__(valueController, parent=parent) self.__typeDesc = None try: self.__typeDesc = json.loads( valueController.getValue().type('Type').jsonDesc('String')) except Exception as e: print e if self.__typeDesc is None: raise Exception( "Invalid valuetype specified when constructing ComplexTypeEditor for value '" + valueController.getName() + "' of type '" + str(valueController.getDataType()) + "'") self.expanded = False def showMemberEditors(): for i in range(0, len(self.__typeDesc['members'])): try: memberName = self.__typeDesc['members'][i]['name'] memberType = self.__typeDesc['members'][i]['type'] if str(getattr(self._value, memberName)) != '<RTVal:null>': self.addMemberEditor(memberName, memberType) except Exception as e: print e self.expanded = True def hideMembeEditors(): self.clear() self.expanded = False # self._grid.addWidget(QtWidgets.QLabel(valueController.getDataType()+':', self), self._gridRow, 0) self.expandButton = QtWidgets.QPushButton("+", self) self.expandButton.setCheckable(True) self.expandButton.setMinimumHeight(16) self.expandButton.setMaximumHeight(16) self.expandButton.setSizePolicy( QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)) topToolbar = QtWidgets.QWidget(self) topToolbarLayout = QtWidgets.QHBoxLayout() topToolbar.setLayout(topToolbarLayout) topToolbarLayout.addWidget(self.expandButton, 0) topToolbarLayout.addStretch(2) self._grid.addWidget(topToolbar, self._gridRow, 0) self._gridRow += 1 def expandButtonToggled(toggled): if toggled: self.expandButton.setText('-') showMemberEditors() else: self.expandButton.setText('+') hideMembeEditors() self.expandButton.toggled.connect(expandButtonToggled) self._value = valueController.getValue()