Skip to content

Commit a5669aa

Browse files
authored
Merge pull request #296 from manuelkoester/colorpicker_rgba
Added color4/RGBA property/widget
2 parents 71a1eca + 2a8a625 commit a5669aa

File tree

4 files changed

+71
-2
lines changed

4 files changed

+71
-2
lines changed

NodeGraphQt/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,3 +246,5 @@ class NodePropWidgetEnum(Enum):
246246
INT = 17
247247
#: Node property represented with button widget.
248248
BUTTON = 18
249+
#: Node property represented with a ColorPickerRGBA widget.
250+
COLOR4_PICKER = 19

NodeGraphQt/custom_widgets/properties_bin/custom_widget_color_picker.py

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/python
22
from Qt import QtWidgets, QtCore, QtGui
33

4-
from .custom_widget_vectors import PropVector3
4+
from .custom_widget_vectors import PropVector3, PropVector4
55
from .prop_widgets_abstract import BaseProperty
66

77

@@ -62,3 +62,64 @@ def set_value(self, value):
6262
self._update_color()
6363
self._update_vector()
6464
self.value_changed.emit(self.toolTip(), value)
65+
66+
67+
class PropColorPickerRGBA(BaseProperty):
68+
"""
69+
Color4 (rgba) picker widget for a node property.
70+
"""
71+
72+
def __init__(self, parent=None):
73+
super(PropColorPickerRGBA, self).__init__(parent)
74+
self._color = (0, 0, 0, 255)
75+
self._button = QtWidgets.QPushButton()
76+
self._vector = PropVector4()
77+
self._vector.set_value([0, 0, 0, 255])
78+
self._update_color()
79+
80+
self._button.clicked.connect(self._on_select_color)
81+
self._vector.value_changed.connect(self._on_vector_changed)
82+
83+
layout = QtWidgets.QHBoxLayout(self)
84+
layout.setContentsMargins(0, 0, 0, 0)
85+
layout.addWidget(self._button, 0, QtCore.Qt.AlignLeft)
86+
layout.addWidget(self._vector, 1, QtCore.Qt.AlignLeft)
87+
88+
def _on_vector_changed(self, _, value):
89+
self._color = tuple(value)
90+
self._update_color()
91+
self.value_changed.emit(self.toolTip(), value)
92+
93+
def _on_select_color(self):
94+
current_color = QtGui.QColor(*self.get_value())
95+
alpha_option = QtWidgets.QColorDialog.ShowAlphaChannel
96+
color = QtWidgets.QColorDialog.getColor(
97+
current_color, self, options=alpha_option)
98+
if color.isValid():
99+
self.set_value(color.getRgb())
100+
101+
def _update_vector(self):
102+
self._vector.set_value(self._color)
103+
104+
def _update_color(self):
105+
c = [int(max(min(i, 255), 0)) for i in self._color]
106+
hex_color = '#{0:02x}{1:02x}{2:02x}{3:03x}'.format(*c)
107+
self._button.setStyleSheet(
108+
'''
109+
QPushButton {{background-color: rgba({0}, {1}, {2}, {3});}}
110+
QPushButton::hover {{background-color: rgba({0}, {1}, {2}, {3});}}
111+
'''.format(*c)
112+
)
113+
self._button.setToolTip(
114+
'rgba: {}\nhex: {}'.format(self._color, hex_color)
115+
)
116+
117+
def get_value(self):
118+
return self._color[:4]
119+
120+
def set_value(self, value):
121+
if value != self.get_value():
122+
self._color = value
123+
self._update_color()
124+
self._update_vector()
125+
self.value_changed.emit(self.toolTip(), value)

NodeGraphQt/custom_widgets/properties_bin/node_property_factory.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from NodeGraphQt.constants import NodePropWidgetEnum
2-
from .custom_widget_color_picker import PropColorPickerRGB
2+
from .custom_widget_color_picker import PropColorPickerRGB, PropColorPickerRGBA
33
from .custom_widget_file_paths import PropFilePath, PropFileSavePath
44
from .custom_widget_slider import PropSlider
55
from .custom_widget_value_edit import FloatValueEdit, IntValueEdit
@@ -34,6 +34,7 @@ def __init__(self):
3434
NodePropWidgetEnum.QDOUBLESPIN_BOX.value: PropDoubleSpinBox,
3535
# custom widgets.
3636
NodePropWidgetEnum.COLOR_PICKER.value: PropColorPickerRGB,
37+
NodePropWidgetEnum.COLOR4_PICKER.value: PropColorPickerRGBA,
3738
NodePropWidgetEnum.SLIDER.value: PropSlider,
3839
NodePropWidgetEnum.FILE_OPEN.value: PropFilePath,
3940
NodePropWidgetEnum.FILE_SAVE.value: PropFileSavePath,

NodeGraphQt/custom_widgets/properties_bin/node_property_widgets.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,11 @@ def __init__(self):
587587
range=(45, 55),
588588
widget_type=NodePropWidgetEnum.SLIDER.value
589589
)
590+
self.create_property(
591+
'color4_picker',
592+
value=(255, 0, 0, 122),
593+
widget_type=NodePropWidgetEnum.COLOR4_PICKER.value
594+
)
590595

591596
def _prop_changed(node_id, prop_name, prop_value):
592597
print('-'*100)

0 commit comments

Comments
 (0)