MetaBox/Scripts/Modeling/Edit/PlugIt/PlugIt_Setting.py
2025-01-14 02:17:16 +08:00

379 lines
12 KiB
Python

## SETTING
from PySide2 import QtWidgets, QtCore, QtGui
from maya import cmds as mc
import maya.mel as mel
import json
from .Qt import QtWidgets, QtCore, QtCompat
import os
import maya.cmds as cmds
from maya import OpenMayaUI as omui
# Special cases for different Maya versions
try:
from shiboken2 import wrapInstance
except ImportError:
from shiboken import wrapInstance
try:
from PySide2.QtGui import QIcon
from PySide2.QtWidgets import QWidget
except ImportError:
from PySide.QtGui import QIcon, QWidget
import importlib
from . import PlugIt_Global
importlib.reload(PlugIt_Global)
from . import PlugIt_CSS
importlib.reload(PlugIt_CSS)
##PATH_SET
IconPath = PlugIt_Global.IconsPathThemeClassic
PreferencePath = PlugIt_Global.PreferencePath
##GLOBAL VAR
WindowsTitle = "Settings"
LIBRARY_PATH = PlugIt_Global.LIBRARY_PATH
ASSET_FAVOURITES_PATH = PlugIt_Global.ASSET_FAVOURITES_PATH
##UI INFO
Theme_pref = json.load(open(PreferencePath + 'Pref_Theme.json', "r"))
PREF_THEME = (Theme_pref['THEME'])
if PREF_THEME == 0:
ThemeIndex = 0
if PREF_THEME == 1:
ThemeIndex = 1
if PREF_THEME == 2:
ThemeIndex = 2
Icon_pref = json.load(open(PreferencePath + 'Pref_IconSize.json', "r"))
PREF_ICON = (Icon_pref['ICONSIZE'])
if PREF_ICON == 18:
IconIndex = 0
if PREF_ICON == 22:
IconIndex = 1
if PREF_ICON == 30:
IconIndex = 2
Click_pref = json.load(open(PreferencePath + 'Pref_Click.json', "r"))
PREF_CLICK = (Click_pref['CLICK'])
if PREF_CLICK == 0:
ClickIndex = 0
if PREF_CLICK == 1:
ClickIndex = 1
# ________________//
# ___________________________________________
# ________________//
class Setting_UI(QtWidgets.QDialog):
def __init__(self, parent=None):
super(Setting_UI, self).__init__()
self.setMinimumSize(650, 210)
self.buildUI()
def buildUI(self):
SETTINGLayout = QtWidgets.QVBoxLayout(self)
self.setStyleSheet(PlugIt_Global.Theme)
##UI - Preferences
iconButtonSize = PlugIt_Global.IconButtonSize
## UI TABS
UILabel = QtWidgets.QLabel(self)
UILabel.setText(" - U I - ")
UILabel.setFont(QtGui.QFont('Candara', 10))
UILabel.setAlignment(QtCore.Qt.AlignCenter)
SETTINGLayout.addWidget(UILabel)
SETTINGLayout.addSpacing(5)
##_____________________________________________________ UI THEME
THEMEHlyt = QtWidgets.QHBoxLayout()
SETTINGLayout.addLayout(THEMEHlyt)
THEMELabel = QtWidgets.QLabel(self)
THEMELabel.setText("T h e m e : ")
THEMELabel.setFixedWidth(58)
THEMELabel.setFont(QtGui.QFont('Candara', 7))
THEMEHlyt.addWidget(THEMELabel)
self.ThemeComboList = [
'Default Blue',
'Maya',
]
self.ThemeCombo = QtWidgets.QComboBox()
self.ThemeCombo.addItems(self.ThemeComboList)
self.ThemeCombo.setFixedWidth(200)
self.ThemeCombo.currentIndexChanged.connect(self.SET_Theme)
self.ThemeCombo.setCurrentIndex(ThemeIndex)
THEMEHlyt.addWidget(self.ThemeCombo)
## UI ICONSIZE
IconSizeLabel = QtWidgets.QLabel(self)
IconSizeLabel.setText(" / I c o n s S i z e : ")
IconSizeLabel.setFixedWidth(140)
IconSizeLabel.setFont(QtGui.QFont('Candara', 7))
THEMEHlyt.addWidget(IconSizeLabel)
self.IconSizeComboList = [
'18',
'22',
'30',
]
self.IconSizeCombo = QtWidgets.QComboBox()
self.IconSizeCombo.addItems(self.IconSizeComboList)
#self.IconSizeCombo.setFixedWidth(200)
self.IconSizeCombo.setCurrentIndex(IconIndex)
self.IconSizeCombo.currentIndexChanged.connect(self.SET_IconSize)
THEMEHlyt.addWidget(self.IconSizeCombo)
##---------------------------------------------------- SEPARATOR : Horizontal
SETTINGLayout.addSpacing(2)
separator = QtWidgets.QLabel('')
separator.setStyleSheet( "QLabel {background-color: #313131; padding: 0; margin: 0; border-bottom: 1 solid #262626; border-top: 1 solid #313131;}")
separator.setMaximumHeight(1)
SETTINGLayout.addWidget(separator)
SETTINGLayout.addSpacing(2)
## UI TABS
UILabel = QtWidgets.QLabel(self)
UILabel.setText(" - P L U G O P T I O N S - ")
UILabel.setFont(QtGui.QFont('Candara', 10))
UILabel.setAlignment(QtCore.Qt.AlignCenter)
SETTINGLayout.addWidget(UILabel)
##_____________________________________________________ CLICK CHOICE
CLICKHlyt = QtWidgets.QHBoxLayout()
SETTINGLayout.addLayout(CLICKHlyt)
CLICKLabel = QtWidgets.QLabel(self)
CLICKLabel.setText("I m p o r t P l u g : ")
CLICKLabel.setFont(QtGui.QFont('Candara', 7))
CLICKHlyt.addWidget(CLICKLabel)
self.ClickComboList = [
'Left Click',
'Double-Click',
]
self.ClickCombo = QtWidgets.QComboBox()
self.ClickCombo.addItems(self.ClickComboList)
#self.ClickCombo.setFixedWidth(150)
self.ClickCombo.currentIndexChanged.connect(self.SET_Click)
self.ClickCombo.setCurrentIndex(ClickIndex)
CLICKHlyt.addWidget(self.ClickCombo)
CLICKHlyt.addSpacing(20)
## CLEAN FAV BTN
CleanFavBTN = QtWidgets.QPushButton()
CleanFavBTN.setText("C l e a n F a v o r i t e T a b")
CleanFavBTN.setFont(QtGui.QFont('Candara', 7))
CleanFavBTN.setObjectName("CleanFav")
CleanFavBTN.setFixedHeight(25)
CleanFavBTN.setFixedWidth(200)
CleanFavBTN.clicked.connect(self.CleanFav)
CleanFavBTN.setToolTip("That will delete all Favorite tab content")
CLICKHlyt.addWidget(CleanFavBTN)
## CLEAN SCENE BTN
CleanSceneBTN = QtWidgets.QPushButton()
CleanSceneBTN.setText("C l e a n S c e n e")
CleanSceneBTN.setFont(QtGui.QFont('Candara', 7))
CleanSceneBTN.setObjectName("CleanScene")
CleanSceneBTN.setFixedHeight(25)
CleanSceneBTN.setFixedWidth(200)
CleanSceneBTN.clicked.connect(self.CleanScene)
CleanSceneBTN.setToolTip("Clean Scene Node after Problem")
CLICKHlyt.addWidget(CleanSceneBTN)
##---------------------------------------------------- SEPARATOR : Horizontal
SETTINGLayout.addSpacing(2)
separator = QtWidgets.QLabel('')
separator.setStyleSheet(
"QLabel {background-color: #313131; padding: 0; margin: 0; border-bottom: 1 solid #262626; border-top: 1 solid #313131;}")
separator.setMaximumHeight(1)
SETTINGLayout.addWidget(separator)
SETTINGLayout.addSpacing(2)
##________________________________________// SAVE SETTING
SaveSettingBTN = QtWidgets.QPushButton()
SaveSettingBTN.setText("SAVE SETTING")
SaveSettingBTN.setObjectName("SaveSetting")
SaveSettingBTN.setFixedHeight(25)
SaveSettingBTN.clicked.connect(self.Apply)
SaveSettingBTN.setToolTip("Apply and Save Setting")
SETTINGLayout.addWidget(SaveSettingBTN)
#THEMEHlyt.addStretch()
SETTINGLayout.addStretch()
CLICKHlyt.addStretch()
def CleanScene(self):
if mc.objExists("PlugIt_TargetMesh"):
mc.rename("PlugIt_TargetMesh", "newDebugMesh")
listToClean = ["PlugIt_TargetMesh*", "Plug_Mesh*", "Mesh_EdgeBorder_set*", "Plug_AllFaces_set*", "Plug_EdgeBorder_set*", "Plug_Hole_set*", "Plug_Selection_set*", "PlugIt_Plug_Shd*", "hairSystem*", "hairSystem*Follicles", "hairSystem*OutputCurves*", "nucleus*", "Mesh_EdgeBorder_set*"]
for each in listToClean:
if mc.objExists(each):
mc.delete(each)
def CleanFav(self):
BackgroundColor = 0.16
Message = "Are you sure you want to delete all your saved favourites?"
# ________________//
if mc.window("WarningWindow", exists=True):
mc.deleteUI("WarningWindow")
mc.window("WarningWindow", title=' Warning ', s=False, vis=True, rtf=False)
mc.columnLayout(adj=True, rs=3, bgc=[BackgroundColor, BackgroundColor, BackgroundColor])
mc.separator(h=8, style='none')
mc.text(l=" " + Message + " ", al="center")
mc.separator(h=8, style='none')
mc.rowColumnLayout( numberOfRows=1 )
mc.separator(w=35, style='none')
mc.button(l="YES", c=self.WarningDeleteLayerYES, width= 100, h=20)
mc.separator(w=10, style='none')
mc.button(l="NO", c=self.WarningDeleteLayerNO, width= 100, h=20)
mc.window("WarningWindow", e=True, wh=(300, 80))
qw = omui.MQtUtil.findWindow("WarningWindow")
widget = wrapInstance(int(qw), QWidget)
icon = QIcon(IconPath + "Windows_Ico_Warning.png")
widget.setWindowIcon(icon)
mc.showWindow()
def WarningDeleteLayerYES(self, *args):
favouriteFilePath = ASSET_FAVOURITES_PATH
infoToSave = []
s = json.dumps(infoToSave)
open(favouriteFilePath, "w").write(s)
from . import PlugIt_UI
import importlib
importlib.reload(PlugIt_UI)
ui = PlugIt_UI.showUI()
def WarningDeleteLayerNO(self, *args):
mc.deleteUI("WarningWindow")
def SET_Theme(self):
ChoosenValue = self.ThemeCombo.currentIndex()
if ChoosenValue == 0:
ThemeValue =0
if ChoosenValue == 1:
ThemeValue =1
if ChoosenValue == 2:
ThemeValue =2
infoToSave = {"THEME": ThemeValue}
s = json.dumps(infoToSave)
open(PreferencePath + 'Pref_Theme.json', "w").write(s)
def SET_IconSize(self):
ChoosenValue = self.IconSizeCombo.currentIndex()
if ChoosenValue == 0:
IconValue =18
if ChoosenValue == 1:
IconValue =22
if ChoosenValue == 2:
IconValue =30
infoToSave = {"ICONSIZE": IconValue}
s = json.dumps(infoToSave)
open(PreferencePath + 'Pref_IconSize.json', "w").write(s)
def SET_Click(self):
ChoosenValue = self.ClickCombo.currentIndex()
if ChoosenValue == 0:
ClickValue =0
if ChoosenValue == 1:
ClickValue =1
infoToSave = {"CLICK": ClickValue}
s = json.dumps(infoToSave)
open(PreferencePath + 'Pref_Click.json', "w").write(s)
def Apply(self):
from . import PlugIt_UI
import importlib
importlib.reload(PlugIt_UI)
ui = PlugIt_UI.showUI()
def Dock(Widget, width=200, height=200, hp="free", show=True):
label = getattr(Widget, "label", WindowsTitle)
try:
cmds.deleteUI(WindowsTitle)
except RuntimeError:
pass
dockControl = cmds.workspaceControl(
WindowsTitle,
initialWidth=width,
minimumWidth=False,
widthProperty=hp,
heightProperty=hp,
label=label
)
dockPtr = omui.MQtUtil.findControl(dockControl)
dockWidget = QtCompat.wrapInstance(int(dockPtr), QtWidgets.QWidget)
dockWidget.setAttribute(QtCore.Qt.WA_DeleteOnClose)
child = Widget(dockWidget)
dockWidget.layout().addWidget(child)
if show:
cmds.evalDeferred(
lambda *args: cmds.workspaceControl(
dockControl,
edit=True,
widthProperty="free",
restore=True
)
)
return child
def showUI():
ui = Dock(Setting_UI)
ui.show()
# Get a pointer and convert it to Qt Widget object
qw = omui.MQtUtil.findWindow(WindowsTitle)
widget = wrapInstance(int(qw), QWidget)
# Create a QIcon object
icon = QIcon(IconPath + "Windows_Ico2.png")
# Assign the icon
widget.setWindowIcon(icon)
return ui