Update
This commit is contained in:
128
2023/scripts/rigging_tools/ngskintools2/ui/qt.py
Normal file
128
2023/scripts/rigging_tools/ngskintools2/ui/qt.py
Normal file
@@ -0,0 +1,128 @@
|
||||
import os
|
||||
|
||||
from ngSkinTools2.api.pyside import QtCore, QtGui, QtWidgets, get_main_window
|
||||
from ngSkinTools2.api.python_compatibility import Object
|
||||
|
||||
|
||||
def wrap_layout_into_widget(layout):
|
||||
w = QtWidgets.QWidget()
|
||||
w.setLayout(layout)
|
||||
return w
|
||||
|
||||
|
||||
def signals_blocked(widget):
|
||||
return SignalBlockContext(widget)
|
||||
|
||||
|
||||
class SignalBlockContext(Object):
|
||||
def __init__(self, widget):
|
||||
self.widget = widget
|
||||
|
||||
def __enter__(self):
|
||||
self.prevState = self.widget.blockSignals(True)
|
||||
|
||||
def __exit__(self, *args):
|
||||
self.widget.blockSignals(self.prevState)
|
||||
|
||||
|
||||
def on(*signals):
|
||||
"""
|
||||
decorator for function: list signals that should fire for this function.
|
||||
|
||||
instead of:
|
||||
|
||||
def something():
|
||||
...
|
||||
btn.clicked.connect(something)
|
||||
|
||||
do:
|
||||
|
||||
@qt.on(btn.clicked)
|
||||
def something():
|
||||
...
|
||||
"""
|
||||
|
||||
def decorator(fn):
|
||||
for i in signals:
|
||||
i.connect(fn)
|
||||
return fn
|
||||
|
||||
return decorator
|
||||
|
||||
|
||||
class SingleWindowPolicy(Object):
|
||||
def __init__(self):
|
||||
self.lastWindow = None
|
||||
|
||||
def setCurrent(self, window):
|
||||
if self.lastWindow:
|
||||
self.lastWindow.close()
|
||||
self.lastWindow = window
|
||||
|
||||
on(window.finished)(self.cleanup)
|
||||
|
||||
def cleanup(self):
|
||||
self.lastWindow = None
|
||||
|
||||
|
||||
def alternative_palette_light():
|
||||
palette = QtGui.QPalette()
|
||||
palette.setColor(QtGui.QPalette.Window, QtGui.QColor(243, 244, 246))
|
||||
palette.setColor(QtGui.QPalette.WindowText, QtGui.QColor(33, 37, 41))
|
||||
return palette
|
||||
|
||||
|
||||
def bind_action_to_button(action, button):
|
||||
"""
|
||||
|
||||
:type button: PySide2.QtWidgets.QPushButton
|
||||
:type action: PySide2.QtWidgets.QAction
|
||||
"""
|
||||
|
||||
@on(action.changed)
|
||||
def update_state():
|
||||
button.setText(action.text())
|
||||
button.setEnabled(action.isEnabled())
|
||||
button.setToolTip(action.toolTip())
|
||||
button.setStatusTip(action.statusTip())
|
||||
button.setVisible(action.isVisible())
|
||||
if action.isCheckable():
|
||||
button.setChecked(action.isChecked())
|
||||
|
||||
button.setCheckable(action.isCheckable())
|
||||
|
||||
on(button.clicked)(action.trigger)
|
||||
update_state()
|
||||
|
||||
return button
|
||||
|
||||
|
||||
images_path = os.path.join(os.path.dirname(__file__), "images")
|
||||
|
||||
|
||||
def icon_path(path):
|
||||
if path.startswith(':'):
|
||||
return path
|
||||
return os.path.join(images_path, path)
|
||||
|
||||
|
||||
def scaled_icon(path, w, h):
|
||||
from ngSkinTools2.ui.layout import scale_multiplier
|
||||
|
||||
return QtGui.QIcon(
|
||||
QtGui.QPixmap(icon_path(path)).scaled(w * scale_multiplier, h * scale_multiplier, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||
)
|
||||
|
||||
|
||||
def image_icon(file_name):
|
||||
return QtGui.QIcon(icon_path(file_name))
|
||||
|
||||
|
||||
def select_data(combo, data):
|
||||
"""
|
||||
set combo box index to data index
|
||||
"""
|
||||
combo.setCurrentIndex(combo.findData(data))
|
||||
|
||||
|
||||
mainWindow = get_main_window()
|
||||
Reference in New Issue
Block a user