def buildUI(self): self.setFixedHeight(95 * self.dpiS) layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) self.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum ) # avoid spacing between elements when resizing # header sider = VerticalLabel(self.fx.name, self.dpiS) layout.addWidget(sider) # type column typeColumnWidget = QtWidgets.QWidget() layout.addWidget(typeColumnWidget) typeColumnLayout = QtWidgets.QVBoxLayout(typeColumnWidget) typeColumnLayout.setContentsMargins(10 * self.dpiS, 15 * self.dpiS, 10 * self.dpiS, 10 * self.dpiS) palette = QtGui.QPalette() palette.setColor(QtGui.QPalette.Background, QtGui.QColor(50, 50, 50, 255)) typeColumnWidget.setAutoFillBackground(True) typeColumnWidget.setPalette(palette) # type column widgets # material button style = cmds.mnpr(q=True, style=True) iconName = lib.toCamelCase("{0}_{1}.png".format(self.fx.name, style)) noiseIconDir = os.path.join(self.iconDir, iconName) noiseBtn = qt.IconButton(noiseIconDir, "Noise {0}".format(self.fx.name), [45 * self.dpiS, 45 * self.dpiS], hColor=(100, 100, 100)) typeColumnLayout.addWidget(noiseBtn) # type options typeOptionsGrp = QtWidgets.QWidget() typeColumnLayout.addWidget(typeOptionsGrp) typeOptionsLayout = QtWidgets.QHBoxLayout(typeOptionsGrp) typeOptionsLayout.setContentsMargins(0, 0, 0, 0) typeOptionsLayout.setSpacing(0) toggleIconDir = os.path.join(self.iconDir, "io.png") toggleBtn = qt.IconButton(toggleIconDir, "On | Off", [14 * self.dpiS, 14 * self.dpiS], hColor=(100, 100, 100)) typeOptionsLayout.addWidget(toggleBtn) typeIconDir = os.path.join(self.iconDir, "3D2D.png") typeBtn = qt.IconButton(typeIconDir, "3D | 2D", [28 * self.dpiS, 14 * self.dpiS], hColor=(100, 100, 100)) typeOptionsLayout.addWidget(typeBtn) # settings column pad = 5 * self.dpiS settingsColumnWidget = QtWidgets.QWidget() settingsColumnWidget.setFixedWidth(186 * self.dpiS) layout.addWidget(settingsColumnWidget) settingsColumnLayout = QtWidgets.QGridLayout(settingsColumnWidget) settingsColumnLayout.setContentsMargins(pad, pad, pad, pad * 1.5) settingsColumnLayout.setSpacing(pad) palette = QtGui.QPalette() palette.setColor(QtGui.QPalette.Background, QtGui.QColor(60, 60, 60, 255)) settingsColumnWidget.setAutoFillBackground(True) settingsColumnWidget.setPalette(palette) # noise options widget self.groupBoxWidget = QtWidgets.QGroupBox("{0}".format( self.fx.description)) settingsColumnLayout.addWidget( self.groupBoxWidget, 1, 1, 2, 2) # (Widget, row, column, rowspan, colspan) groupBoxLayout = QtWidgets.QVBoxLayout(self.groupBoxWidget) spacing = pad top = pad * 5 if len(self.fx.procOptions) < 2: spacing *= 3 top = pad * 6 groupBoxLayout.setContentsMargins(pad, top, 0, 0) groupBoxLayout.setSpacing(spacing) self.groupBoxWidget.setAutoFillBackground(True) self.groupBoxWidget.setStyleSheet( "QGroupBox { background-color: rgb(60, 60, 60); border: 0px; font-style: italic; font-weight: bold; }" ) # add radio buttons dynamically self.optionsDict["scale"] = LabeledSlider("scale", dpiS=self.dpiS, labelWidth=40) self.optionsDict["scale"].slider.valueChanged.connect( lambda: nFX.noiseSlide(self.fx, self.optionsDict["scale"])) groupBoxLayout.addWidget(self.optionsDict["scale"]) for option in self.fx.procOptions: self.optionsDict[option] = LabeledSlider(option, dpiS=self.dpiS, labelWidth=40) self.optionsDict[option].slider.valueChanged.connect( self.makeFunc(self.fx, self.optionsDict[option])) groupBoxLayout.addWidget(self.optionsDict[option]) # reset and shift resetIconDir = os.path.join(self.iconDir, "reset.png") resetBtn = qt.IconButton(resetIconDir, "Reset {0}".format(self.fx.name), [14 * self.dpiS, 14 * self.dpiS], bColor=(60, 60, 60), hColor=(100, 100, 100)) settingsColumnLayout.addWidget(resetBtn, 1, 3, 1, 1) self.shiftSlider = qt.RelativeSlider(QtCore.Qt.Vertical) settingsColumnLayout.addWidget(self.shiftSlider, 2, 3, 2, 1) self.shiftSlider.setRange(-100, 100) self.shiftSlider.valueChanged.connect( lambda: nFX.noiseShift(self.fx, self.shiftSlider)) self.shiftSlider.sliderPressed.connect(lambda: nFX.selectMaterials()) """ SIGNALS """ noiseBtn.clicked.connect(lambda: mnpr_system.showShaderAttr()) resetBtn.clicked.connect(lambda: nFX.noiseReset(self.fx)) typeBtn.clicked.connect(lambda: nFX.noiseTypeClicked(self.fx)) toggleBtn.clicked.connect(lambda: nFX.noiseToggleClicked(self.fx))
def buildUI(self): # global UI variables self.setGeometry(500, 400, 250, 250) margin = 10 * self.dpiS # OPERATIONS rOpsGroup = qt.WidgetGroup(qLayout=QtWidgets.QGridLayout()) rOps = cmds.mnpr(listOperations=True) index = 0 self.operationsCBoxDict = dict() self.operationsReloadDict = dict() paintIconDir = os.path.join(mnpr_info.iconDir, "coop_refresh.png") for operation in rOps: self.operationsReloadDict[index] = qt.IconButton( paintIconDir, "Reload Shaders", [14 * self.dpiS, 14 * self.dpiS]) self.operationsReloadDict[index].setProperty( "operationIndex", index) rOpsGroup.addWidget(self.operationsReloadDict[index], index, 0) self.operationsCBoxDict[index] = QtWidgets.QCheckBox(operation) self.operationsCBoxDict[index].setChecked(True) rOpsGroup.addWidget(self.operationsCBoxDict[index], index, 1) index += 1 # TARGETS targetGroup = qt.WidgetGroup(qLayout=QtWidgets.QHBoxLayout()) targetLabel = QtWidgets.QLabel("Active target: ") self.targetCoBox = QtWidgets.QComboBox() nprTargets = cmds.mnpr(lsT=True) self.targetCoBox.addItems(nprTargets) self.targetCoBox.setCurrentIndex(len(nprTargets) - 1) targetGroup.addWidgets([targetLabel, self.targetCoBox]) targetGroup.setContentsMargins(margin, margin, margin, margin) # CHANNELS channelGroup = qt.WidgetGroup(qLayout=QtWidgets.QHBoxLayout()) channelsLabel = QtWidgets.QLabel("Channels: ") self.r = QtWidgets.QCheckBox("R") self.r.setLayoutDirection(QtCore.Qt.RightToLeft) self.r.setChecked(True) self.g = QtWidgets.QCheckBox("G") self.g.setLayoutDirection(QtCore.Qt.RightToLeft) self.g.setChecked(True) self.b = QtWidgets.QCheckBox("B") self.b.setLayoutDirection(QtCore.Qt.RightToLeft) self.b.setChecked(True) self.a = QtWidgets.QCheckBox("A") self.a.setLayoutDirection(QtCore.Qt.RightToLeft) self.negate = QtWidgets.QCheckBox("NEG") self.negate.setLayoutDirection(QtCore.Qt.RightToLeft) channelGroup.addWidgets( [channelsLabel, self.r, self.g, self.b, self.a, self.negate]) channelGroup.setContentsMargins(margin, margin, margin, margin) # COLOR TRANSFORMATION colorTransformGroup = qt.WidgetGroup(qLayout=QtWidgets.QHBoxLayout()) colorTransformLabel = QtWidgets.QLabel("Color xform: ") self.colorTransformButtonGroup = QtWidgets.QButtonGroup() self.colorTransform0 = QtWidgets.QRadioButton("Original") self.colorTransform0.setLayoutDirection(QtCore.Qt.RightToLeft) self.colorTransform0.setChecked(True) self.colorTransformButtonGroup.addButton(self.colorTransform0) self.colorTransform1 = QtWidgets.QRadioButton("-> Lab") self.colorTransform1.setLayoutDirection(QtCore.Qt.RightToLeft) self.colorTransform1.setChecked(False) self.colorTransformButtonGroup.addButton(self.colorTransform1) self.colorTransform2 = QtWidgets.QRadioButton("-> RGB") self.colorTransform2.setLayoutDirection(QtCore.Qt.RightToLeft) self.colorTransform2.setChecked(False) self.colorTransformButtonGroup.addButton(self.colorTransform2) colorTransformGroup.addWidgets([ colorTransformLabel, self.colorTransform0, self.colorTransform1, self.colorTransform2 ]) colorTransformGroup.setContentsMargins(margin, margin, margin, margin) # Create Layout ''' Create the layouts and add widgets ''' rOpsBox = QtWidgets.QGroupBox("Render Operations (passes)") rOpsLayout = QtWidgets.QVBoxLayout(rOpsBox) rOpsLayout.addWidget(rOpsGroup) # self.layout.addWidget(self.header) self.setContentsMargins(0, margin * 1.5, 0, 0) self.layout.addWidget(rOpsBox) self.layout.addWidget(qt.HLine(height=10 * self.dpiS)) self.layout.addWidget(targetGroup) self.layout.addWidget(qt.HLine(height=10 * self.dpiS)) self.layout.addWidget(channelGroup) self.layout.addWidget(qt.HLine(height=10 * self.dpiS)) self.layout.addWidget(colorTransformGroup) self.layout.addWidget(self.brand) # Create Connections ''' SIGNAL ''' for index in range(len(rOps)): self.operationsCBoxDict[index].stateChanged.connect( self.operationChanged) self.operationsReloadDict[index].clicked.connect( self.reloadOperationShaders) self.targetCoBox.currentIndexChanged.connect(self.targetChanged) self.r.stateChanged.connect(self.channelsChanged) self.g.stateChanged.connect(self.channelsChanged) self.b.stateChanged.connect(self.channelsChanged) self.a.stateChanged.connect(self.channelsChanged) self.negate.stateChanged.connect(self.channelsChanged) self.colorTransformButtonGroup.buttonClicked[ 'QAbstractButton *'].connect(self.colorTransformChanged)
def buildUI(self): self.setFixedHeight(95 * self.dpiS) layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) self.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum ) # avoid spacing between elements when resizing # header sider = VerticalLabel(self.fx.name, self.dpiS) layout.addWidget(sider) # paintKey column paintKeyColumnWidget = QtWidgets.QWidget() layout.addWidget(paintKeyColumnWidget) paintKeyColumnLayout = QtWidgets.QVBoxLayout(paintKeyColumnWidget) paintKeyColumnLayout.setContentsMargins(10 * self.dpiS, 15 * self.dpiS, 10 * self.dpiS, 0) palette = QtGui.QPalette() palette.setColor(QtGui.QPalette.Background, QtGui.QColor(50, 50, 50, 255)) paintKeyColumnWidget.setAutoFillBackground(True) paintKeyColumnWidget.setPalette(palette) # paintKey column widgets # paint button style = cmds.mnpr(q=True, style=True) iconName = lib.toCamelCase("{0}_{1}.png".format(self.fx.name, style)) paintIconDir = os.path.join(self.iconDir, iconName) paintBtn = qt.IconButton(paintIconDir, "Paint {0}".format(self.fx.description), [45 * self.dpiS, 45 * self.dpiS]) paintKeyColumnLayout.addWidget(paintBtn) # key buttons keysWidget = QtWidgets.QWidget() paintKeyColumnLayout.addWidget(keysWidget) keysLayout = QtWidgets.QHBoxLayout(keysWidget) keysLayout.setContentsMargins(0, 0, 0, 10 * self.dpiS) keysLayout.setSpacing(0) insertKeyDir = os.path.join(self.iconDir, "insertKey.png") insertKeyBtn = qt.IconButton(insertKeyDir, "Keyframe", [14 * self.dpiS, 14 * self.dpiS], hColor=(100, 100, 100)) keysLayout.addWidget(insertKeyBtn) showKeyedTimelineDir = os.path.join(self.iconDir, "timeline.png") showKeyedTimelineBtn = qt.IconButton(showKeyedTimelineDir, "Show keys in timeline", [16 * self.dpiS, 8 * self.dpiS], hColor=(100, 100, 100)) keysLayout.addWidget(showKeyedTimelineBtn) removeKeyDir = os.path.join(self.iconDir, "removeKey.png") removeKeyBtn = qt.IconButton(removeKeyDir, "Delete Keyframe", [14 * self.dpiS, 14 * self.dpiS], hColor=(100, 100, 100)) keysLayout.addWidget(removeKeyBtn) # settings column pad = 5 * self.dpiS settingsColumnWidget = QtWidgets.QWidget() layout.addWidget(settingsColumnWidget) settingsColumnLayout = QtWidgets.QGridLayout(settingsColumnWidget) settingsColumnLayout.setContentsMargins(pad, pad, pad, pad) settingsColumnLayout.setSpacing(pad) palette = QtGui.QPalette() palette.setColor(QtGui.QPalette.Background, QtGui.QColor(60, 60, 60, 255)) settingsColumnWidget.setAutoFillBackground(True) settingsColumnWidget.setPalette(palette) # paint options widget self.groupBoxWidget = QtWidgets.QGroupBox("{0}".format( self.fx.description)) settingsColumnLayout.addWidget( self.groupBoxWidget, 1, 1, 2, 2) # (Widget, row, column, rowspan, colspan) groupBoxLayout = QtWidgets.QGridLayout(self.groupBoxWidget) groupBoxLayout.setContentsMargins(pad * 3, pad * 3, 0, 0) groupBoxLayout.setSpacing(0) self.groupBoxWidget.setAutoFillBackground(True) self.groupBoxWidget.setStyleSheet( "QGroupBox { background-color: rgb(60, 60, 60); border: 0px; font-style: italic; font-weight: bold; }" ) # add radio buttons dynamically row = 1 column = 1 for key in self.fx.paintOptions: self.optionWidgets[key] = QtWidgets.QRadioButton(key) groupBoxLayout.addWidget(self.optionWidgets[key], row, column, 1, 1) row += 1 if row > 2: column += 1 row = 1 self.optionWidgets[self.fx.paintOptions[0]].setChecked(True) # reset and flood buttons resetBtn = QtWidgets.QPushButton("Reset") settingsColumnLayout.addWidget(resetBtn, 3, 1, 1, 1) floodBtn = QtWidgets.QPushButton("Flood") settingsColumnLayout.addWidget(floodBtn, 3, 2, 1, 1) # vertical slider self.amountSld = QtWidgets.QSlider(QtCore.Qt.Vertical) settingsColumnLayout.addWidget(self.amountSld, 1, 3, 3, 1) self.amountSld.setRange(-100, 100) """ SIGNALS """ paintBtn.clicked.connect(lambda: pFX.paintClicked(self)) insertKeyBtn.clicked.connect(lambda: pFX.paintKeyClicked(self, True)) showKeyedTimelineBtn.clicked.connect( lambda: pFX.showKeyedTimeline(self)) removeKeyBtn.clicked.connect(lambda: pFX.paintKeyClicked(self, False)) for key in self.fx.paintOptions: self.optionWidgets[key].clicked.connect( lambda: pFX.paintToggleClicked(self)) resetBtn.clicked.connect(lambda: pFX.paintFloodClicked(self, True)) floodBtn.clicked.connect(lambda: pFX.paintFloodClicked(self, False)) self.amountSld.valueChanged.connect( lambda: pFX.paintValueChanged(self))