121 lines
4.4 KiB
Python
121 lines
4.4 KiB
Python
from .pyside import QtWidgets, QtGui, QtCore
|
|
from maya import cmds
|
|
|
|
from .colorwheel import ColorDialog
|
|
from .optionvar import (
|
|
save_optionvar, DEFAULT_LABEL, DEFAULT_HEIGHT, DEFAULT_WIDTH,
|
|
DEFAULT_TEXT_COLOR, DEFAULT_BG_COLOR)
|
|
|
|
|
|
class QuickOptions(QtWidgets.QWidget):
|
|
def __init__(self, parent=None):
|
|
super(QuickOptions, self).__init__(parent=parent)
|
|
self.bg_color = ColorButton()
|
|
self.bg_color.colorChanged.connect(self.save_ui_states)
|
|
self.text_color = ColorButton()
|
|
self.text_color.colorChanged.connect(self.save_ui_states)
|
|
validator = QtGui.QIntValidator()
|
|
self.width = QtWidgets.QLineEdit()
|
|
self.width.returnPressed.connect(self.save_ui_states)
|
|
self.width.setValidator(validator)
|
|
self.width.setFixedWidth(50)
|
|
self.height = QtWidgets.QLineEdit()
|
|
self.height.returnPressed.connect(self.save_ui_states)
|
|
self.height.setValidator(validator)
|
|
self.height.setFixedWidth(50)
|
|
self.label = QtWidgets.QLineEdit()
|
|
self.label.returnPressed.connect(self.save_ui_states)
|
|
|
|
self.layout = QtWidgets.QHBoxLayout(self)
|
|
self.layout.setSpacing(0)
|
|
self.layout.addWidget(QtWidgets.QLabel('Bg-color: '))
|
|
self.layout.addWidget(self.bg_color)
|
|
self.layout.addSpacing(12)
|
|
self.layout.addWidget(QtWidgets.QLabel('Text-color: '))
|
|
self.layout.addWidget(self.text_color)
|
|
self.layout.addSpacing(12)
|
|
self.layout.addWidget(QtWidgets.QLabel('Size: '))
|
|
self.layout.addWidget(self.width)
|
|
self.layout.addWidget(self.height)
|
|
self.layout.addSpacing(12)
|
|
self.layout.addWidget(QtWidgets.QLabel('Label: '))
|
|
self.layout.addWidget(self.label)
|
|
|
|
self.load_ui_states()
|
|
|
|
def save_ui_states(self, *_):
|
|
values = self.values
|
|
save_optionvar(DEFAULT_BG_COLOR, values['bgcolor.normal'])
|
|
save_optionvar(DEFAULT_TEXT_COLOR, values['text.color'])
|
|
save_optionvar(DEFAULT_WIDTH, values['shape.width'])
|
|
save_optionvar(DEFAULT_HEIGHT, values['shape.height'])
|
|
save_optionvar(DEFAULT_LABEL, values['text.content'])
|
|
|
|
def load_ui_states(self):
|
|
self.values = {
|
|
'bgcolor.normal': cmds.optionVar(query=DEFAULT_BG_COLOR),
|
|
'text.color': cmds.optionVar(query=DEFAULT_TEXT_COLOR),
|
|
'shape.width': cmds.optionVar(query=DEFAULT_WIDTH),
|
|
'shape.height': cmds.optionVar(query=DEFAULT_HEIGHT),
|
|
'text.content': cmds.optionVar(query=DEFAULT_LABEL)}
|
|
|
|
@property
|
|
def values(self):
|
|
return {
|
|
'bgcolor.normal': self.bg_color.name,
|
|
'text.color': self.text_color.name,
|
|
'shape.width': int(self.width.text()) if self.width.text() else 10,
|
|
'shape.height': int(self.height.text()) if self.height.text() else 10,
|
|
'text.content': self.label.text()}
|
|
|
|
@values.setter
|
|
def values(self, values):
|
|
self.bg_color.name = values['bgcolor.normal']
|
|
self.text_color.name = values['text.color']
|
|
self.width.setText(str(values['shape.width']))
|
|
self.height.setText(str(values['shape.height']))
|
|
self.label.setText(str(values['text.content']))
|
|
|
|
|
|
class ColorButton(QtWidgets.QAbstractButton):
|
|
colorChanged = QtCore.Signal()
|
|
|
|
def __init__(self, parent=None):
|
|
super(ColorButton, self).__init__(parent=parent)
|
|
self.setFixedSize(20, 20)
|
|
self.color = QtGui.QColor(QtCore.Qt.black)
|
|
self.released.connect(self.pick_color)
|
|
|
|
def pick_color(self):
|
|
dialog = ColorDialog(self.name)
|
|
if not dialog.exec_():
|
|
return
|
|
self.name = dialog.colorname()
|
|
self.colorChanged.emit()
|
|
self.update()
|
|
|
|
@property
|
|
def name(self):
|
|
return self.color.name()
|
|
|
|
@name.setter
|
|
def name(self, value):
|
|
self.color.setNamedColor(value)
|
|
|
|
def paintEvent(self, _):
|
|
try:
|
|
painter = QtGui.QPainter()
|
|
painter.begin(self)
|
|
painter.setBrush(QtGui.QBrush(self.color))
|
|
if self.rect().contains(QtGui.QCursor.pos()):
|
|
color = QtCore.Qt.transparent
|
|
else:
|
|
color = QtCore.Qt.gray
|
|
painter.setPen(QtGui.QPen(color))
|
|
painter.drawRect(self.rect())
|
|
except BaseException:
|
|
pass # avoid crash
|
|
# TODO: log the error
|
|
finally:
|
|
painter.end()
|