Example #1
0
    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))
Example #2
0
    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)
Example #3
0
    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))