This commit is contained in:
Jeffreytsai1004 2025-01-14 02:23:10 +08:00
parent 06258d32cd
commit f5664bb99e
10 changed files with 6385 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
from ModIt import ModIt_UI
import importlib
importlib.reload(ModIt_UI)
ModIt_UI

View File

@ -0,0 +1,722 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
##GLOBAL VARIABLEs
from PySide2 import QtWidgets, QtCore, QtGui
from maya import cmds as mc
import maya.mel as mel
import json
import os
import maya.cmds as cmds
from maya import OpenMayaUI as omui
##THEME_SET
USERAPPDIR = cmds.internalVar(userAppDir=True)
VERSION = cmds.about(v=True)
IconPath = os.path.join(USERAPPDIR, VERSION+'/scripts/ModIt/Icons/Theme_Classic/')
# Attention l'ordre est important notamen pour le QPushButton!!
##COLORS SCHEME
### GREY BG : #272727
### GREY Line : #444444
### GREEN : #b3b523
### YELLOW : #c49e19
### GREY MODIT COLOR
#TABS BG : 292929
#SECTION BG : 303030
#BLUE : 29b1ea
## Add border: 0px; to Background to remove border lines
##GLOBAL VARIABLEs
from PySide2 import QtWidgets, QtCore, QtGui
from maya import cmds as mc
import maya.mel as mel
import json
import os
import maya.cmds as cmds
from maya import OpenMayaUI as omui
ModIt_CSS = """
*{
background: #303030;
border: 0px;
}
QTabWidget::pane { /* Ligne Ar a la suite des tabs */
background: #202020;
}
QToolTip {
background-color : #202020;
color : #b7b7b7;
font-size: 16px;
}
QPushButton{ background-color: #303030;
}
QPushButton:hover{ background-color: #606060;
border-radius: 3px;
}
QPushButton:pressed{ background-color: #282828;
}
QPushButton[objectName^="TABS_BTN_OFF"]{
background-color :#292929;
border-top: 1px solid gray;
border-right: 1px solid gray;
border-left: 1px solid gray;
border-color: #222222;
}
QPushButton[objectName^="TABS_BTN_OFF"]:hover{
background-color : #181818;
border-top: 2px solid gray;
border-color: #303030;
}
QPushButton[objectName^="TABS_BTN_OFF"]:pressed{
background-color : #65BEF1;
}
QPushButton[objectName^="StoreSet"]{
background-color :#292929;
border: 1px solid gray;
border-color: #222222;
}
QPushButton[objectName^="StoreSet"]:hover{
background-color :#303030;
border: 1px solid gray;
border-color: #424242;
}
QPushButton[objectName^="StoreSet"]:pressed{
background-color : #65BEF1;
}
QPushButton[objectName^="AssetIt"]{
background-color :#222222;
border: 1px solid gray;
border-color: #222222;
color : #65BEF1
}
QPushButton[objectName^="AssetIt"]:hover{
background-color :#303030;
border: 1px solid gray;
border-color: #424242;
}
QPushButton[objectName^="AssetIt"]:pressed{
background-color : #65BEF1;
}
QPushButton[objectName^="Separator"]{
background-color: #464646;
}
QComboBox {
border: 1px solid gray;
border-radius: 4px;
background: #2f2f2f;
border-color: #202020;
padding: 1px 2px 1px 3px;
color: #C2C2C2;
font-size: 14px;
}
QComboBox::drop-down {
subcontrol-origin: padding;
subcontrol-position: top right;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
}
QComboBox::down-arrow {
image: url(""" + IconPath + """Arrow_Down.png);
}
QSlider {
min-height: 14;
max-height: 14;
}
QSlider::handle:horizontal {
background: #65BEF1;
width: 6px;
margin-top: -6px;
margin-bottom: -6px;
border-radius: 2px;
min-height: 12;
max-height: 12;
}
QSlider::groove:horizontal {
background: #242424;
height: 2px;
}
QDoubleSpinBox{
background-color: #2f2f2f;
border: 1px solid gray;
border-color: #202020;
border-radius: 4px;
font-size: 14px;
}
QDoubleSpinBox::focus{
border: 1px solid #b3b523;
border-color: #65BEF1;
border-radius: 2px;
}
QLineEdit{
background-color: #262626;
border: 1px solid gray;
border-radius: 3px;
border-color: #444444;
}
QLineEdit:hover{
background-color: #222222;
border: 1px solid gray;
border-radius: 3px;
border-color: #999999;
}
QLineEdit:focus{
background-color: #222222;
border: 1px solid gray;
border-radius: 3px;
border-color: #65BEF1;
}
QCheckBox::indicator:unchecked {
border: 1px solid #385E74;
}
QCheckBox::indicator:checked {image: url(""" + IconPath + """Apply.png);
border: 1px solid #385E74;
}
"""
AssetIt_CSS = """
*{
background: #272727;
border: 0px;
}
QMenu{
background-color: #222222;
border: 1px solid gray;
border-radius: 2px;
border-color: #385E74;
}
QMenu::item{
color: #909090;
}
QMenu::item:selected{
background-color: #262626;
color: #65BEF1;
}
QLineEdit{
background-color: #222222;
border: 1px solid gray;
border-radius: 3px;
border-color: #444444;
}
QLineEdit:hover{
background-color: #222222;
border: 1px solid gray;
border-radius: 3px;
border-color: #999999;
}
QLineEdit:focus{
background-color: #222222;
border: 1px solid gray;
border-radius: 3px;
border-color: #65BEF1;
}
QScrollBar::handle:vertical {
background: #2094D6;
border-radius: 3px;
}
QScrollBar:vertical {
width: 12px;
}
QListWidget{
background: #202020; /* Background de la fenetre Widgets */
border: 2px solid #202020;
border-radius: 3px;
padding: 0px;
}
QListView::item:hover{
border : 2px solid black;
background : green;
}
/*QWidget:hover{
background: #808080;
}*/
QTabWidget::pane { /* Ligne Ar a la suite des tabs */
background: #202020;
}
QTabBar::tab {
background: #282828;
border: 1px solid #202020;
border-radius: 3px;
min-width: 12ex;/* taille du Tab Largeur */
padding: 5px;/* taille du Tab Hauteur */
color: #909090
}
QTabBar::tab:hover {
background: #454545;
border: 1px solid #202020;
border-top: 1px solid #E3E3E3;
border-radius: 3px;
color: #E3E3E3
}
QTabBar::tab:selected {
background: #292929;
border: 1px solid #202020;
border-top: 1px solid #419ED3;
border-radius: 3px;
color: #419ED3
}
QSlider {
min-height: 12;
max-height: 12;
}
QSlider::handle:horizontal {
background: #65BEF1;
width: 22px;
margin-top: -4px;
margin-bottom: -4px;
border-radius: 2px;
min-height: 10;
max-height: 10;
}
QSlider::groove:horizontal {
background: #404040;
height: 1px;
}
QToolTip {
background-color : #202020;
color : #65BEF1;
font-size: 16px;
}
QPushButton{ background-color: #282828;
}
QPushButton:hover{ background-color: #404040;
border-radius: 3px;
}
QPushButton:pressed{ background-color: #222222;
}
QPushButton[objectName^="Items"]{
background-color: #232323;
border: 1px solid gray;
border-color: #202020;
}
QPushButton[objectName^="Items"]:hover{
background-color: #303030;
border: 2px solid gray;
border-color: #505050;
}
QToolButton{
color : #404040;
}
QToolButton:hover{
color : #606060;
}
QPushButton[objectName^="AddAsset"]{
background-color : #222222;
color : #808080;
}
QPushButton[objectName^="AddAsset"]:hover{
background-color : #252525;
border: 1px solid gray;
border-color: #65BEF1;
color : #65BEF1;
}
QPushButton[objectName^="AddAsset"]:pressed{
background-color : #141414;
border: 1px solid gray;
border-color: #222222;
color : #404040;
}
QPushButton[objectName^="SaveSetting"]:hover{
background-color : #252525;
border: 1px solid gray;
border-color: #FFFFFF;
border-radius: 2px;
color : #FFFFFF;
}
QPushButton[objectName^="SaveSetting"]{
background-color : #252525;
border: 1px solid gray;
border-color: #65BEF1;
border-radius: 2px;
color : #65BEF1;
}
QPushButton[objectName^="SaveSetting"]:pressed{
background-color : #202020;
border: 1px solid gray;
border-color: #606060;
border-radius: 2px;
color : #606060;
}
QPushButton[objectName^="CleanFav"]{
background-color : #252525;
border: 1px solid gray;
border-color: #b7842a;
color : #b7842a;
}
QPushButton[objectName^="CleanFav"]:hover{
background-color : #252525;
border: 1px solid gray;
border-color: #FF9B22;
color : #FF9B22;
}
QPushButton[objectName^="CleanFav"]:pressed{
background-color : #141414;
border: 1px solid gray;
border-color: #222222;
color : #404040;
}
QPushButton[objectName^="Separator"]{
background-color: #272727;
}
QLineEdit[objectName^="UserLibPathField"]{
background-color: #222222;
color: #65BEF1;
}
QLabel[objectName^="AssetName"]{
background-color : #1E1E1E;
color : #65BEF1;
border: 1px solid gray;
border-color: #353535;
border-radius: 2px;
}
QLabel[objectName^="AssetTitle"]{
color : #65BEF1;
}
QLabel[objectName^="ThumbAsset"]{
background-color : #232323;
color : #65BEF1;
border: 1px solid gray;
border-color: #383838;
border-radius: 2px;
}
QDoubleSpinBox{
font-size:17px;
background-color: #242424;
width: 60px;
}
QDoubleSpinBox::focus{
border: 1px solid #b3b523;
font-size:17px;
background-color: #1e1e1e;
border-color: #65BEF1;
border-radius: 2px;
width: 60px;
}
QComboBox {
border: 2px solid gray;
border-radius: 4px;
background: #232323;
border-color: #232323;
padding: 1px 2px 1px 3px;
min-width: 6em;
color: #C2C2C2;
}
QComboBox::drop-down {
subcontrol-origin: padding;
subcontrol-position: top right;
width: 15px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
}
QComboBox::down-arrow {
image: url(""" + IconPath + """ComboBox_Arrow.png);
}
QCheckBox[objectName^="ClayRender"]::indicator:Unchecked:hover{image: url(""" + IconPath + """ClayRender_ON.png);
border: 0px solid #444444;
}
QCheckBox[objectName^="ClayRender"]::indicator:checked {image: url(""" + IconPath + """ClayRender_ON.png);
border: 0px solid #444444;
}
QCheckBox[objectName^="ClayRender"]::indicator:Unchecked {image: url(""" + IconPath + """ClayRender_OFF.png);
border: 0px solid #444444;
}
QCheckBox[objectName^="ClayRender"]::indicator:checked:hover{image: url(""" + IconPath + """ClayRender_OVER.png);
border: 0px solid #444444;
}
QGroupBox {
border: 1px solid gray;
border-color: #444444;
border-radius: 4px;
color : #65BEF1;
margin-top: 18px;
font-size: 16px;
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left;
border-top-left-radius: 10px;
border-top-right-radius: 10x;
padding: 1px 12px;
}
QRadioButton::indicator::unchecked{
border: 1px solid;
border-color: #444444;
border-radius: 5px;
background-color: #444444;
width: 9px;
height: 9px;
}
QRadioButton::indicator:unchecked:hover
{
border: 1px solid;
border-color: #888888;
border-radius: 5px;
background-color: #888888;
width: 9px;
height: 9px;
}
QRadioButton::indicator::checked{
border: 1px solid;
border-color: #65BEF1;
border-radius: 5px;
background-color: #65BEF1;
width: 9px;
height: 9px;
}
"""
Maya_CSS = """
*{
}
QPushButton{
border: 0px;
}
QPushButton:hover{ background-color: #656565;
}
QPushButton:pressed{ background-color: #303030;
}
"""

View File

@ -0,0 +1,130 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
##GLOBAL VARIABLEs
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
from . import ModIt_CSS
##_____________________________________________PATH
ModItPath = os.path.dirname(os.path.abspath(__file__)).replace('\\', '/')
PlugInsPath = ModItPath
IconsPathThemeClassic = os.path.join(ModItPath+'/Icons/Theme_Classic/')
ToolPath = os.path.join(ModItPath+'/Tools/')
PreferencePath = os.path.join(ModItPath+'/Preferences/')
PrefIcons = os.path.join(ModItPath+'/Icons/')
RessourcePath = os.path.join(ModItPath+'/Ressources/')
##_____________________________________________PREFERENCES
ModItTitle = "ModIt"
##_____________________________________________UI
#_____________#Theme
Theme_pref = json.load(open(PreferencePath + 'Pref_Theme.json', "r"))
PREF_THEME = (Theme_pref['THEME'])
if PREF_THEME == 0:
Theme = ModIt_CSS.ModIt_CSS
IconPath = IconsPathThemeClassic
elif PREF_THEME == 1:
Theme = ModIt_CSS.Maya_CSS
IconPath = IconsPathThemeClassic
#_____________#IconSize
IconSize_pref = json.load(open(PreferencePath + 'Pref_IconSize.json', "r"))
PREF_ICONSIZE = (IconSize_pref['ICONSIZE'])
IconButtonSize = PREF_ICONSIZE
# ******************************************
# BUTTONS PARAMS
# ******************************************
iconFixeSize = 30
iconButtonSize = 30
separatorWidth = 1
##_____________________________________________WARNING POP UP
def WarningWindow(message, size, *args):
BackgroundColor = 0.16
# ________________//
if cmds.window("WarningWindow", exists=True):
cmds.deleteUI("WarningWindow")
cmds.window("WarningWindow", title=' Warning ', s=False, vis=True, rtf=False)
cmds.columnLayout(adj=True, rs=3, bgc=[BackgroundColor, BackgroundColor, BackgroundColor])
cmds.separator(h=8, style='none')
cmds.text(l=" " + message + " ", al="center")
cmds.separator(h=8, style='none')
cmds.button(l="OK", c=WarningOKButton)
cmds.window("WarningWindow", e=True, wh=(size, 80))
qw = omui.MQtUtil.findWindow("WarningWindow")
widget = wrapInstance(int(qw), QWidget)
icon = QIcon(IconPath + "Windows_Ico_Warning.png")
widget.setWindowIcon(icon)
cmds.showWindow()
def WarningOKButton(*args):
cmds.deleteUI("WarningWindow")
def LoadingWindow(message, size, *args):
BackgroundColor = 0.110
# ________________//
if cmds.window("LoadingWindow", exists=True):
cmds.deleteUI("LoadingWindow")
cmds.window("LoadingWindow", title='Loading Asset', s=False, vis=True, rtf=False)
cmds.columnLayout(adj=True, rs=3, bgc=[BackgroundColor, BackgroundColor, BackgroundColor])
cmds.separator(h=5, style='none')
cmds.text(l=" " + message + " ", al="center")
cmds.iconTextButton(image1= IconPath + "Refresh_Button.png")
cmds.window("LoadingWindow", e=True, wh=(size, 70))
qw = omui.MQtUtil.findWindow("LoadingWindow")
widget = wrapInstance(int(qw), QWidget)
icon = QIcon(IconPath + "Windows_Ico2.png")
widget.setWindowIcon(icon)
cmds.showWindow()

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,54 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
##-------------------------------------------------------------------------- I M P O R T
from PySide2 import QtWidgets, QtCore, QtGui
from maya import cmds as mc
import maya.cmds as cmds
import maya.mel as mel
import json
from .Qt import QtWidgets, QtCore, QtCompat
import os
from maya import OpenMayaUI as omui
from functools import partial
# Special cases for different Maya versions
from shiboken2 import wrapInstance
from PySide2.QtGui import QIcon
from PySide2.QtWidgets import QWidget
##---------------------------------------- Import Modules
import importlib
from . import ModIt_Global
importlib.reload(ModIt_Global)
##-------------------------------------------------------------------------- G L O B A L V A R
##PATH_SET
PreferencePath = ModIt_Global.PreferencePath
ToolsPath = ModIt_Global.ToolPath
DOCK =(json.load(open(PreferencePath + 'Dockable.json',"r"))['VALUE'])
if DOCK == 0:
print("MODIT FLOATING MODE")
open(PreferencePath + 'UI_Adapt_Height.json', "w").write(json.dumps({"VALUE": 660}))
open(PreferencePath + 'Section_Utilities.json', "w").write(json.dumps({"VALUE": 1}))
open(PreferencePath + 'Section_Primitives.json', "w").write(json.dumps({"VALUE": 1}))
open(PreferencePath + 'Section_Colors.json', "w").write(json.dumps({"VALUE": 1}))
open(PreferencePath + 'Section_Selections.json', "w").write(json.dumps({"VALUE": 1}))
open(PreferencePath + 'Section_Mesh.json', "w").write(json.dumps({"VALUE": 1}))
open(PreferencePath + 'Section_Sets.json', "w").write(json.dumps({"VALUE": 1}))
open(PreferencePath + 'Section_Tools.json', "w").write(json.dumps({"VALUE": 1}))
from . import ModIt_UI
importlib.reload(ModIt_UI)
ui = ModIt_UI
else:
print("MODIT DOCKABLE MODE")
from . import ModIt_UI
importlib.reload(ModIt_UI)
ui = ModIt_UI.showUI()

View File

@ -0,0 +1,628 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
##--------------------------------------------------------------------------
## ScriptName : ModIt 3.0
## Author : Wizix
## StartDate : 2022/09/09
## LastUpdate : 2022/13/09
## Version : 0.0.1
##-------------------------------------------------------------------------- I M P O R T
from PySide2 import QtWidgets, QtCore, QtGui
from maya import cmds as mc
import maya.cmds as cmds
import maya.mel as mel
import json
from .Qt import QtWidgets, QtCore, QtCompat
import os
from maya import OpenMayaUI as omui
from functools import partial
# Special cases for different Maya versions
from shiboken2 import wrapInstance
from PySide2.QtGui import QIcon
from PySide2.QtWidgets import QWidget
##---------------------------------------- Import Modules
import importlib
from . import ModIt_Global
importlib.reload(ModIt_Global)
from . import ModIt_CSS
importlib.reload(ModIt_CSS)
##---------------------------------------- Import Classes
from .Class import Collapsible
importlib.reload(Collapsible)
from .Modeling import Section_PRIMITIVES
importlib.reload(Section_PRIMITIVES)
from .Modeling import Section_COLORS
importlib.reload(Section_COLORS)
from .Modeling import Section_SETS
importlib.reload(Section_SETS)
from .Modeling import Section_SELECTIONS
importlib.reload(Section_SELECTIONS)
from .Modeling import Section_MESH
importlib.reload(Section_MESH)
from .Modeling import Section_TOOLS
importlib.reload(Section_TOOLS)
from .Modeling import Section_UTILITIES
importlib.reload(Section_UTILITIES)
from .Placement import Layout_PLACEMENT
importlib.reload(Layout_PLACEMENT)
from .Setting import Layout_SETTING
importlib.reload(Layout_SETTING)
from .Shading import Layout_SHADING
importlib.reload(Layout_SHADING)
##-------------------------------------------------------------------------- G L O B A L V A R
##PATH_SET
IconPath = ModIt_Global.IconsPathThemeClassic
PreferencePath = ModIt_Global.PreferencePath
ToolsPath = ModIt_Global.ToolPath
RessourcePath = ModIt_Global.RessourcePath
#GLOBAR VAR UI
WINDOW_TITLE = ModIt_Global.ModItTitle
##JSON PREF DATA
ADAP_HEIGHT = (json.load(open(PreferencePath + 'UI_Adapt_Height.json',"r"))['VALUE'])
TAB_OPEN =(json.load(open(PreferencePath + 'TabOpen.json',"r"))['TAB_OPEN'])
S_UTILITIES_VALUE =(json.load(open(PreferencePath + 'Section_Utilities.json',"r"))['VALUE'])
S_PRIMITIVES_VALUE =(json.load(open(PreferencePath + 'Section_Primitives.json',"r"))['VALUE'])
S_COLORS_VALUE =(json.load(open(PreferencePath + 'Section_Colors.json',"r"))['VALUE'])
S_SELECTIONS_VALUE =(json.load(open(PreferencePath + 'Section_Selections.json',"r"))['VALUE'])
S_MESH_VALUE =(json.load(open(PreferencePath + 'Section_Mesh.json',"r"))['VALUE'])
S_SETS_VALUE =(json.load(open(PreferencePath + 'Section_Sets.json',"r"))['VALUE'])
S_TOOLS_VALUE =(json.load(open(PreferencePath + 'Section_Tools.json',"r"))['VALUE'])
WIN_DISPLAY_SIZE =(json.load(open(PreferencePath + 'WinSize.json',"r"))['VALUE'])
DOCK =(json.load(open(PreferencePath + 'Dockable.json',"r"))['VALUE'])
##-------------------------------------------------------------------------- B U I L D U I
def maya_main_window():
main_window_ptr = omui.MQtUtil.mainWindow() ##Return the Maya main window widget as a Python object
return wrapInstance(int(main_window_ptr), QtWidgets.QWidget)
class ModIt_UI(QtWidgets.QDialog):
if DOCK == 0:
def __init__(self, parent=maya_main_window()):
super(ModIt_UI, self).__init__(parent)
##__________________________________________________________________ SAVE UI POSITION
self.settings_path = os.path.join(PreferencePath + "settingsFile.ini")
##__________________________________________________________________ WINDOWS SETTING
self.setWindowTitle(WINDOW_TITLE)
self.setFixedSize(340, ADAP_HEIGHT)
icon = QIcon(IconPath + "ModIt_Window_Ico.png")
self.setWindowIcon(icon)
self.buildUI()
else:
def __init__(self, parent=None):
super(ModIt_UI, self).__init__()
##__________________________________________________________________ SAVE UI POSITION
self.settings_path = os.path.join(PreferencePath + "settingsFile.ini")
self.setMinimumSize(400, 660)
self.buildUI()
def buildUI(self):
open(PreferencePath + 'JobNumber.json', "w").write(json.dumps({"JOB_NUMBER": 0}))
# ******************************************
# BUTTONS PARAMS
# ******************************************
Tab_iconFixeSize = 30
Tab_iconButtonSize = 24
iconFixeSize = ModIt_Global.iconFixeSize
iconButtonSize = ModIt_Global.iconButtonSize
separatorWidth = ModIt_Global.separatorWidth
##__________________// UI - Import CSS
self.setStyleSheet(ModIt_Global.Theme)
##_________________// Restore Previous Position
settings_obj = QtCore.QSettings(self.settings_path, QtCore.QSettings.IniFormat)
self.restoreGeometry(settings_obj.value("windowGeometry"))
##_________________// GLOBAL LAYOUT
GLOBAL_Lyt = QtWidgets.QVBoxLayout(self)
GLOBAL_Lyt.setSpacing(0)
GLOBAL_Lyt.setContentsMargins(0, 0, 0, 0)
##------------------------------------------------------------------------------------//
##------------------------------------------------------------------------------------------------------// TABS
##------------------------------------------------------------------------------------//
self.TABSBAR_Widget = QtWidgets.QWidget()
self.TABSBAR_Widget.setStyleSheet("background-color:#222222;") #TABS BG - Pose problem bg color
self.TABSBAR_Lyt = QtWidgets.QHBoxLayout(self.TABSBAR_Widget)
self.TABSBAR_Lyt.setAlignment(QtCore.Qt.AlignTop)
self.TABSBAR_Lyt.setContentsMargins(0, 0, 0, 0)
self.TABSBAR_Lyt.setSpacing(0)
GLOBAL_Lyt.addWidget(self.TABSBAR_Widget)
##______________________________________________________/ BTN MODELING TAB
self.ModelingTab_Btn = QtWidgets.QPushButton()
if TAB_OPEN == 0:
self.ModelingTab_Btn.setIcon(QtGui.QIcon(IconPath + "MODELING_ON.png"))
self.ModelingTab_Btn.setStyleSheet("background-color:#303030;")
else:
self.ModelingTab_Btn.setIcon(QtGui.QIcon(IconPath + "MODELING_OFF.png"))
self.ModelingTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
self.ModelingTab_Btn.setFixedSize(Tab_iconFixeSize,Tab_iconFixeSize)
self.ModelingTab_Btn.setIconSize(QtCore.QSize(Tab_iconButtonSize, Tab_iconButtonSize))
self.ModelingTab_Btn.setToolTip(" ModIt ")
self.ModelingTab_Btn.clicked.connect(self.ModelingTab_ON)
self.TABSBAR_Lyt.addWidget(self.ModelingTab_Btn)
##______________________________________________________/ BTN SHADING TAB
self.ShadingTab_Btn = QtWidgets.QPushButton()
if TAB_OPEN == 1:
self.ShadingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SHADING_ON.png"))
self.ShadingTab_Btn.setStyleSheet("background-color:#303030;")
else:
self.ShadingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SHADING_OFF.png"))
self.ShadingTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
self.ShadingTab_Btn.setFixedSize(Tab_iconFixeSize,Tab_iconFixeSize)
self.ShadingTab_Btn.setIconSize(QtCore.QSize(Tab_iconButtonSize, Tab_iconButtonSize))
self.ShadingTab_Btn.clicked.connect(self.ShadingTab_ON)
self.ShadingTab_Btn.setToolTip(" ViewportIt ")
self.TABSBAR_Lyt.addWidget(self.ShadingTab_Btn)
##______________________________________________________/ BTN PLACEMENT TAB
self.PlacementTab_Btn = QtWidgets.QPushButton()
if TAB_OPEN == 2:
self.PlacementTab_Btn.setIcon(QtGui.QIcon(IconPath + "PLACEMENT_ON.png"))
self.PlacementTab_Btn.setStyleSheet("background-color:#303030;")
else:
self.PlacementTab_Btn.setIcon(QtGui.QIcon(IconPath + "PLACEMENT_OFF.png"))
self.PlacementTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\QPushButton::hover{background-color : #343434;}")
self.PlacementTab_Btn.setFixedSize(Tab_iconFixeSize,Tab_iconFixeSize)
self.PlacementTab_Btn.setIconSize(QtCore.QSize(Tab_iconButtonSize, Tab_iconButtonSize))
self.PlacementTab_Btn.clicked.connect(self.PlacementTab_ON)
self.PlacementTab_Btn.setToolTip(" Placement ")
self.TABSBAR_Lyt.addWidget(self.PlacementTab_Btn)
##______________________________________________________/ BTN SETTING TAB
self.SettingTab_Btn = QtWidgets.QPushButton()
if TAB_OPEN == 3:
self.SettingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SETTING_ON.png"))
self.SettingTab_Btn.setStyleSheet("background-color:#303030;")
else:
self.SettingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SETTING_OFF.png"))
self.SettingTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\QPushButton::hover{background-color : #343434;}")
self.SettingTab_Btn.setFixedSize(Tab_iconFixeSize,Tab_iconFixeSize)
self.SettingTab_Btn.setIconSize(QtCore.QSize(Tab_iconButtonSize, Tab_iconButtonSize))
self.SettingTab_Btn.clicked.connect(self.SettingTab_ON)
self.SettingTab_Btn.setToolTip(" Setting ")
self.TABSBAR_Lyt.addWidget(self.SettingTab_Btn)
##------------------------------------------------------------------------------------//
##------------------------------------------------------------------------------------------------------// T A B M O D E L I N G
##------------------------------------------------------------------------------------//
self.TAB_MODELING_Widget = QtWidgets.QWidget()
GLOBAL_Lyt.addWidget(self.TAB_MODELING_Widget)
self.ALL_SECTIONS_HLyt = QtWidgets.QVBoxLayout(self.TAB_MODELING_Widget)
self.ALL_SECTIONS_HLyt.setContentsMargins(0, 0, 0, 0)
self.ALL_SECTIONS_HLyt.setSpacing(5)# BETWEEN SECTIONS
self.ALL_SECTIONS_HLyt.setAlignment(QtCore.Qt.AlignTop)
##_________________________________________________________________________________________________________________/ U T I L I T E S
self.Collapsible_wdg_SETS = Collapsible.CollapsibleWidget("U T I L I T E S")
self.Collapsible_wdg_SETS.set_expanded(S_UTILITIES_VALUE)
self.Collapsible_wdg_SETS.collapsed_signal.connect(partial(self.Section_OpenClose_btn, "Utilities", 40))
self.Collapsible_wdg_SETS.add_widget(Section_UTILITIES.UTILITIES_LAYOUT())
self.ALL_SECTIONS_HLyt.addWidget(self.Collapsible_wdg_SETS)
## _____________________________________________________/ Separator
self.ALL_SECTIONS_HLyt.addSpacing(2)
self.Separator = QtWidgets.QLabel()
self.Separator.setFixedSize(2000,2)
self.Separator.setStyleSheet("background-color:#262626;")
self.ALL_SECTIONS_HLyt.addWidget(self.Separator)
##_________________________________________________________________________________________________________________/ P R I M I T I V E S
self.Collapsible_wdg_PRIMITIVES = Collapsible.CollapsibleWidget("P R I M I T I V E S")
self.Collapsible_wdg_PRIMITIVES.set_expanded(S_PRIMITIVES_VALUE)
self.Collapsible_wdg_PRIMITIVES.collapsed_signal.connect(partial(self.Section_OpenClose_btn, "Primitives", 40))
self.Collapsible_wdg_PRIMITIVES.add_widget(Section_PRIMITIVES.PRIMITIVES_LAYOUT())
self.ALL_SECTIONS_HLyt.addWidget(self.Collapsible_wdg_PRIMITIVES)
## _____________________________________________________/ Separator
self.ALL_SECTIONS_HLyt.addSpacing(2)
self.Separator = QtWidgets.QLabel()
self.Separator.setFixedSize(2000,2)
self.Separator.setStyleSheet("background-color:#262626;")
self.ALL_SECTIONS_HLyt.addWidget(self.Separator)
##_________________________________________________________________________________________________________________/ C O L O R S
self.Collapsible_wdg_COLORS = Collapsible.CollapsibleWidget("C O L O R S")
self.Collapsible_wdg_COLORS.set_expanded(S_COLORS_VALUE)
self.Collapsible_wdg_COLORS.collapsed_signal.connect(partial(self.Section_OpenClose_btn, "Colors", 40))
self.Collapsible_wdg_COLORS.add_widget(Section_COLORS.COLORS_LAYOUT())
self.ALL_SECTIONS_HLyt.addWidget(self.Collapsible_wdg_COLORS)
## _____________________________________________________/ Separator
self.ALL_SECTIONS_HLyt.addSpacing(2)
self.Separator = QtWidgets.QLabel()
self.Separator.setFixedSize(2000,2)
self.Separator.setStyleSheet("background-color:#262626;")
self.ALL_SECTIONS_HLyt.addWidget(self.Separator)
##_________________________________________________________________________________________________________________/ S E L E C T I O N S
self.Collapsible_wdg_SELECTIONS = Collapsible.CollapsibleWidget("S E L E C T I O N S")
self.Collapsible_wdg_SELECTIONS.set_expanded(S_SELECTIONS_VALUE)
self.Collapsible_wdg_SELECTIONS.collapsed_signal.connect(partial(self.Section_OpenClose_btn, "Selections", 40))
self.Collapsible_wdg_SELECTIONS.add_widget(Section_SELECTIONS.SELECTIONS_LAYOUT())
self.ALL_SECTIONS_HLyt.addWidget(self.Collapsible_wdg_SELECTIONS)
## _____________________________________________________/ Separator
self.ALL_SECTIONS_HLyt.addSpacing(2)
self.Separator = QtWidgets.QLabel()
self.Separator.setFixedSize(2000,2)
self.Separator.setStyleSheet("background-color:#262626;")
self.ALL_SECTIONS_HLyt.addWidget(self.Separator)
##_________________________________________________________________________________________________________________/ M E S H
self.Collapsible_wdg_MESH = Collapsible.CollapsibleWidget("M E S H")
self.Collapsible_wdg_MESH.set_expanded(S_MESH_VALUE)
self.Collapsible_wdg_MESH.collapsed_signal.connect(partial(self.Section_OpenClose_btn, "Mesh", 110))
self.Collapsible_wdg_MESH.add_widget(Section_MESH.MESH_LAYOUT())
self.ALL_SECTIONS_HLyt.addWidget(self.Collapsible_wdg_MESH)
## _____________________________________________________/ Separator
self.ALL_SECTIONS_HLyt.addSpacing(2)
self.Separator = QtWidgets.QLabel()
self.Separator.setFixedSize(2000,2)
self.Separator.setStyleSheet("background-color:#262626;")
self.ALL_SECTIONS_HLyt.addWidget(self.Separator)
##_________________________________________________________________________________________________________________/ S E T S
self.Collapsible_wdg_SETS = Collapsible.CollapsibleWidget("S E T S")
self.Collapsible_wdg_SETS.set_expanded(S_SETS_VALUE)
self.Collapsible_wdg_SETS.collapsed_signal.connect(partial(self.Section_OpenClose_btn, "Sets", 85))
self.Collapsible_wdg_SETS.add_widget(Section_SETS.SETS_LAYOUT())
self.ALL_SECTIONS_HLyt.addWidget(self.Collapsible_wdg_SETS)
## _____________________________________________________/ Separator
self.ALL_SECTIONS_HLyt.addSpacing(2)
self.Separator = QtWidgets.QLabel()
self.Separator.setFixedSize(2000,2)
self.Separator.setStyleSheet("background-color:#262626;")
self.ALL_SECTIONS_HLyt.addWidget(self.Separator)
##_________________________________________________________________________________________________________________/ T O O L S
self.Collapsible_wdg_TOOLS = Collapsible.CollapsibleWidget("T O O L S")
self.Collapsible_wdg_TOOLS.set_expanded(S_TOOLS_VALUE)
self.Collapsible_wdg_TOOLS.collapsed_signal.connect(partial(self.Section_OpenClose_btn, "Tools", 40))
self.Collapsible_wdg_TOOLS.add_widget(Section_TOOLS.TOOLS_LAYOUT())
self.ALL_SECTIONS_HLyt.addWidget(self.Collapsible_wdg_TOOLS)
##------------------------------------------------------------------------------------//
##------------------------------------------------------------------------------------------------------// T A B S H A D I N G
##------------------------------------------------------------------------------------//
self.TAB_SHADING_Widget = QtWidgets.QWidget()
GLOBAL_Lyt.addWidget(self.TAB_SHADING_Widget)
self.TAB_SHADING_Lyt = QtWidgets.QVBoxLayout(self.TAB_SHADING_Widget)
self.TAB_SHADING_Lyt.addWidget(Layout_SHADING.SHADING_LAYOUT())
##------------------------------------------------------------------------------------//
##------------------------------------------------------------------------------------------------------// T A B P L A C E M E N T
##------------------------------------------------------------------------------------//
self.TAB_PLACEMENT_Widget = QtWidgets.QWidget()
GLOBAL_Lyt.addWidget(self.TAB_PLACEMENT_Widget)
self.TAB_PLACEMENT_Lyt = QtWidgets.QVBoxLayout(self.TAB_PLACEMENT_Widget)
self.TAB_PLACEMENT_Lyt.addWidget(Layout_PLACEMENT.PLACEMENT_LAYOUT())
##------------------------------------------------------------------------------------//
##------------------------------------------------------------------------------------------------------// T A B S E T T I N G
##------------------------------------------------------------------------------------//
self.TAB_SETTING_Widget = QtWidgets.QWidget()
GLOBAL_Lyt.addWidget(self.TAB_SETTING_Widget)
self.TAB_SETTING_Lyt = QtWidgets.QVBoxLayout(self.TAB_SETTING_Widget)
self.TAB_SETTING_Lyt.addWidget(Layout_SETTING.SETTING_LAYOUT())
##__________________________________________________________________// UI - END
self.ALL_SECTIONS_HLyt.addStretch()
self.TAB_SHADING_Lyt.addStretch()
self.TAB_PLACEMENT_Lyt.addStretch()
self.TAB_SETTING_Lyt.addStretch()
##_______________/ AT SCRIPT OPENING SET HIDE/SHOW TABS
if TAB_OPEN == 0:
self.ModelingTab_ON()
if TAB_OPEN == 1:
self.ShadingTab_ON()
if TAB_OPEN == 2:
self.PlacementTab_ON()
if TAB_OPEN == 3:
self.SettingTab_ON()
##_________________________________________________________________________________// ACTIONS DEF
##_____________________________________________________________
##______________________________________________________/ TABS BAR
def ModelingTab_ON(self):
ADAP_HEIGHT = (json.load(open(PreferencePath + 'UI_Adapt_Height.json', "r"))['VALUE'])
self.TAB_MODELING_Widget.show()
self.TAB_SHADING_Widget.hide()
self.TAB_PLACEMENT_Widget.hide()
self.TAB_SETTING_Widget.hide()
if DOCK == 0:
self.setFixedHeight(ADAP_HEIGHT)
self.resize(self.width(), ADAP_HEIGHT)
self.ModelingTab_Btn.setIcon(QtGui.QIcon(IconPath + "MODELING_ON.png"))
self.ModelingTab_Btn.setStyleSheet("background-color:#303030;") # TABS BTN BG - ACTIF
self.ShadingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SHADING_OFF.png"))
self.ShadingTab_Btn.setStyleSheet("QPushButton{background-color :#292929;}\QPushButton::hover{background-color : #343434;}")
self.PlacementTab_Btn.setIcon(QtGui.QIcon(IconPath + "TabScrew_OFF.png"))
self.PlacementTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
self.SettingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SETTING_OFF.png"))
self.SettingTab_Btn.setStyleSheet("QPushButton{background-color :#292929;}\ QPushButton::hover{background-color : #343434;}")
open(PreferencePath + 'TabOpen.json', "w").write(json.dumps({"TAB_OPEN" : 0}))
def ShadingTab_ON(self):
self.TAB_MODELING_Widget.hide()
self.TAB_SHADING_Widget.show()
self.TAB_PLACEMENT_Widget.hide()
self.TAB_SETTING_Widget.hide()
if DOCK == 0:
if WIN_DISPLAY_SIZE == 0: # 125
self.setFixedHeight(535)
else:
self.setFixedHeight(555)
self.resize(self.width(), 40)
self.ShadingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SHADING_ON.png"))
self.ShadingTab_Btn.setStyleSheet("background-color:#303030;")
self.ModelingTab_Btn.setIcon(QtGui.QIcon(IconPath + "MODELING_OFF.png"))
self.ModelingTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
self.PlacementTab_Btn.setIcon(QtGui.QIcon(IconPath + "TabScrew_OFF.png"))
self.PlacementTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
self.SettingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SETTING_OFF.png"))
self.SettingTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
open(PreferencePath + 'TabOpen.json', "w").write(json.dumps({"TAB_OPEN" : 1}))
def PlacementTab_ON(self):
self.TAB_MODELING_Widget.hide()
self.TAB_SHADING_Widget.hide()
self.TAB_PLACEMENT_Widget.show()
self.TAB_SETTING_Widget.hide()
if DOCK == 0:
self.setFixedHeight(680)
self.resize(self.width(), 40)
self.PlacementTab_Btn.setIcon(QtGui.QIcon(IconPath + "TabScrew_ON.png"))
self.PlacementTab_Btn.setStyleSheet("background-color:#303030;")
self.ModelingTab_Btn.setIcon(QtGui.QIcon(IconPath + "MODELING_OFF.png"))
self.ModelingTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
self.ShadingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SHADING_OFF.png"))
self.ShadingTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
self.SettingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SETTING_OFF.png"))
self.SettingTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
open(PreferencePath + 'TabOpen.json', "w").write(json.dumps({"TAB_OPEN" : 2}))
def SettingTab_ON(self):
self.TAB_MODELING_Widget.hide()
self.TAB_SHADING_Widget.hide()
self.TAB_PLACEMENT_Widget.hide()
self.TAB_SETTING_Widget.show()
if DOCK == 0:
if WIN_DISPLAY_SIZE == 0: # 125
self.setFixedHeight(440)
else:
self.setFixedHeight(480)
self.resize(self.width(), 40)
self.SettingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SETTING_ON.png"))
self.SettingTab_Btn.setStyleSheet("background-color:#303030;")
self.ModelingTab_Btn.setIcon(QtGui.QIcon(IconPath + "MODELING_OFF.png"))
self.ModelingTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
self.PlacementTab_Btn.setIcon(QtGui.QIcon(IconPath + "TabScrew_OFF.png"))
self.PlacementTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
self.ShadingTab_Btn.setIcon(QtGui.QIcon(IconPath + "SHADING_OFF.png"))
self.ShadingTab_Btn.setStyleSheet("QPushButton{background-color :#272727;}\ QPushButton::hover{background-color : #343434;}")
open(PreferencePath + 'TabOpen.json', "w").write(json.dumps({"TAB_OPEN" : 3}))
def Section_OpenClose_btn(self, name, size, signal):
ADAP_HEIGHT = (json.load(open(PreferencePath + 'UI_Adapt_Height.json',"r"))['VALUE'])
userWidht = self.width()
if signal == 1:
NEW_ADAP_HEIGHT = ADAP_HEIGHT + size
self.setMinimumHeight(NEW_ADAP_HEIGHT)
self.resize(userWidht, NEW_ADAP_HEIGHT)
open(PreferencePath + 'Section_' + str(name) + '.json', "w").write(json.dumps({"VALUE": 1}))
open(PreferencePath + 'UI_Adapt_Height.json', "w").write(json.dumps({"VALUE": NEW_ADAP_HEIGHT}))
else:
NEW_ADAP_HEIGHT = ADAP_HEIGHT - size
self.setMinimumHeight(NEW_ADAP_HEIGHT)
self.resize(userWidht, NEW_ADAP_HEIGHT)
open(PreferencePath + 'Section_'+ str(name) + '.json', "w").write(json.dumps({"VALUE": 0}))
open(PreferencePath + 'UI_Adapt_Height.json', "w").write(json.dumps({"VALUE": NEW_ADAP_HEIGHT}))
def closeEvent(self, event):
# Save window's geometry
settings_obj = QtCore.QSettings(self.settings_path, QtCore.QSettings.IniFormat)
settings_obj.setValue("windowGeometry", self.saveGeometry())
##KILL INTERACTIVE PRIM SCRIPT JOB
JOB_NUMBER = (json.load(open(PreferencePath + 'JobNumber.json', "r"))['JOB_NUMBER'])
try:
mc.scriptJob(kill=JOB_NUMBER, force=True)
except:
pass
##DELETE PopUp UI
if mc.window("Bevel2", exists=True):
mc.deleteUI("Bevel2")
if mc.window("Bend", exists=True):
mc.deleteUI("Bend")
if mc.window("Linear Duplication", exists=True):
mc.deleteUI("Linear Duplication")
if mc.window("Radial Duplication", exists=True):
mc.deleteUI("Radial Duplication")
if mc.window("Curve Duplication", exists=True):
mc.deleteUI("Curve Duplication")
##_____________________________________________________________
##_________________________________________________________________________________// UI
##_____________________________________________________________
if DOCK == 0:
try:
UI.close() # pylint: disable=E0601
UI.deleteLater()
except:
pass
UI = ModIt_UI()
UI.show()
else:
def Dock(Widget, width=200, height=200, hp="free", show=True):
name = ModIt_Global.ModItTitle
label = getattr(Widget, "label", name)
try:
cmds.deleteUI(name)
except RuntimeError:
pass
dockControl = cmds.workspaceControl(
name,
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 atClose():
print("At MODIT CLOSE")
if mc.window("ModIt_Global.ModItTitle", exists=True):
mc.deleteUI("ModIt_Global.ModItTitle")
def showUI():
ui = Dock(ModIt_UI)
ui.show()
# # Get a pointer and convert it to Qt Widget object
# qw = omui.MQtUtil.findWindow(ModIt_Global.ModItTitle)
# try:
# widget = wrapInstance(int(qw), QWidget)
# # Create a QIcon object
# icon = QIcon(IconPath + "ModIt_Window_Ico.png")
# # Assign the icon
# widget.setWindowIcon(icon)
# except:
# pass # Pour si on reload alos qu'il est dock
# return ui

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from . import *

View File

@ -0,0 +1,129 @@
import sys
from PySide2 import QtCore
from PySide2 import QtWidgets
from shiboken2 import getCppPointer
import maya.OpenMayaUI as omui
import maya.cmds as cmds
class WorkspaceControl(object):
def __init__(self, name):
self.name = name
self.widget = None
def create(self, label, widget, ui_script=None):
cmds.workspaceControl(self.name, label=label)
if ui_script:
cmds.workspaceControl(self.name, e=True, uiScript=ui_script)
self.add_widget_to_layout(widget)
self.set_visible(True)
def restore(self, widget):
self.add_widget_to_layout(widget)
def add_widget_to_layout(self, widget):
if widget:
self.widget = widget
self.widget.setAttribute(QtCore.Qt.WA_DontCreateNativeAncestors)
if sys.version_info.major >= 3:
workspace_control_ptr = int(omui.MQtUtil.findControl(self.name))
widget_ptr = int(getCppPointer(self.widget)[0])
else:
workspace_control_ptr = long(omui.MQtUtil.findControl(self.name))
widget_ptr = long(getCppPointer(self.widget)[0])
omui.MQtUtil.addWidgetToMayaLayout(widget_ptr, workspace_control_ptr)
def exists(self):
return cmds.workspaceControl(self.name, q=True, exists=True)
def is_visible(self):
return cmds.workspaceControl(self.name, q=True, visible=True)
def set_visible(self, visible):
if visible:
cmds.workspaceControl(self.name, e=True, restore=True)
else:
cmds.workspaceControl(self.name, e=True, visible=False)
def set_label(self, label):
cmds.workspaceControl(self.name, e=True, label=label)
def is_floating(self):
return cmds.workspaceControl(self.name, q=True, floating=True)
def is_collapsed(self):
return cmds.workspaceControl(self.name, q=True, collapse=True)
class DockableUI(QtWidgets.QWidget):
WINDOW_TITLE = "DockableUI"
ui_instance = None
@classmethod
def display(cls):
if cls.ui_instance:
cls.ui_instance.show_workspace_control()
else:
cls.ui_instance = cls()
@classmethod
def get_workspace_control_name(cls):
return "{0}WorkspaceControl".format(cls.__name__)
@classmethod
def get_ui_script(cls):
module_name = cls.__module__
if module_name == "__main__":
module_name = cls.module_name_override
ui_script = "from {0} import {1}\n{1}.display()".format(module_name, cls.__name__)
return ui_script
def __init__(self):
super(DockableUI, self).__init__()
self.setObjectName(self.__class__.__name__)
self.create_actions()
self.create_widgets()
self.create_layout()
self.create_connections()
self.create_workspace_control()
def create_actions(self):
pass
def create_widgets(self):
pass
def create_layout(self):
pass
def create_connections(self):
pass
def create_workspace_control(self):
self.workspace_control_instance = WorkspaceControl(self.get_workspace_control_name())
if self.workspace_control_instance.exists():
self.workspace_control_instance.restore(self)
else:
self.workspace_control_instance.create(self.WINDOW_TITLE, self, ui_script=self.get_ui_script())
def show_workspace_control(self):
self.workspace_control_instance.set_visible(True)