Skip to content

Commit b856bdf

Browse files
committed
Added double slider
1 parent 0eb0262 commit b856bdf

File tree

4 files changed

+72
-12
lines changed

4 files changed

+72
-12
lines changed

NodeGraphQt/constants.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -230,21 +230,23 @@ class NodePropWidgetEnum(Enum):
230230
COLOR_PICKER = 9
231231
#: Node property represented with a ColorPicker (RGBA) widget.
232232
COLOR4_PICKER = 10
233-
#: Node property represented with a Slider widget.
233+
#: Node property represented with an (Int) Slider widget.
234234
SLIDER = 11
235+
#: Node property represented with a (Dobule) Slider widget.
236+
DOUBLE_SLIDER = 12
235237
#: Node property represented with a file selector widget.
236-
FILE_OPEN = 12
238+
FILE_OPEN = 13
237239
#: Node property represented with a file save widget.
238-
FILE_SAVE = 13
240+
FILE_SAVE = 14
239241
#: Node property represented with a vector2 widget.
240-
VECTOR2 = 14
242+
VECTOR2 = 15
241243
#: Node property represented with vector3 widget.
242-
VECTOR3 = 15
244+
VECTOR3 = 16
243245
#: Node property represented with vector4 widget.
244-
VECTOR4 = 16
246+
VECTOR4 = 17
245247
#: Node property represented with float line edit widget.
246-
FLOAT = 17
248+
FLOAT = 18
247249
#: Node property represented with int line edit widget.
248-
INT = 18
250+
INT = 19
249251
#: Node property represented with button widget.
250-
BUTTON = 19
252+
BUTTON = 20

NodeGraphQt/custom_widgets/properties_bin/custom_widget_slider.py

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def __init__(self, parent=None):
1616
self._slider = QtWidgets.QSlider()
1717
self._spinbox = QtWidgets.QSpinBox()
1818
self._init()
19+
self._init_signal_connections()
1920

2021
def _init(self):
2122
self._slider.setOrientation(QtCore.Qt.Horizontal)
@@ -27,13 +28,15 @@ def _init(self):
2728
layout.setContentsMargins(0, 0, 0, 0)
2829
layout.addWidget(self._spinbox)
2930
layout.addWidget(self._slider)
30-
self._spinbox.valueChanged.connect(self._on_spnbox_changed)
31-
self._slider.valueChanged.connect(self._on_slider_changed)
3231
# store the original press event.
3332
self._slider_mouse_press_event = self._slider.mousePressEvent
3433
self._slider.mousePressEvent = self._on_slider_mouse_press
3534
self._slider.mouseReleaseEvent = self._on_slider_mouse_release
3635

36+
def _init_signal_connections(self):
37+
self._spinbox.valueChanged.connect(self._on_spnbox_changed)
38+
self._slider.valueChanged.connect(self._on_slider_changed)
39+
3740
def _on_slider_mouse_press(self, event):
3841
self._block = True
3942
self._slider_mouse_press_event(event)
@@ -68,3 +71,51 @@ def set_min(self, value=0):
6871
def set_max(self, value=0):
6972
self._spinbox.setMaximum(value)
7073
self._slider.setMaximum(value)
74+
75+
76+
class QDoubleSlider(QtWidgets.QSlider):
77+
double_value_changed = QtCore.Signal(float)
78+
79+
def __init__(self, decimals=2, *args, **kargs):
80+
super(QDoubleSlider, self).__init__(*args, **kargs)
81+
self._multiplier = 10 ** decimals
82+
83+
self.valueChanged.connect(self._on_value_change)
84+
85+
def _on_value_change(self):
86+
value = float(super(QDoubleSlider, self).value()) / self._multiplier
87+
self.double_value_changed.emit(value)
88+
89+
def value(self):
90+
return float(super(QDoubleSlider, self).value()) / self._multiplier
91+
92+
def setMinimum(self, value):
93+
return super(QDoubleSlider, self).setMinimum(value * self._multiplier)
94+
95+
def setMaximum(self, value):
96+
return super(QDoubleSlider, self).setMaximum(value * self._multiplier)
97+
98+
def setSingleStep(self, value):
99+
return super(QDoubleSlider, self).setSingleStep(value * self._multiplier)
100+
101+
def singleStep(self):
102+
return float(super(QDoubleSlider, self).singleStep()) / self._multiplier
103+
104+
def setValue(self, value):
105+
super(QDoubleSlider, self).setValue(int(value * self._multiplier))
106+
107+
108+
class PropDoubleSlider(PropSlider):
109+
def __init__(self, parent=None, decimals=2):
110+
# Do not initialize Propslider, just its parents
111+
super(PropSlider, self).__init__(parent)
112+
self._block = False
113+
self._slider = QDoubleSlider(decimals=decimals)
114+
self._spinbox = QtWidgets.QDoubleSpinBox()
115+
self._init()
116+
self._init_signal_connections()
117+
118+
def _init_signal_connections(self):
119+
self._spinbox.valueChanged.connect(self._on_spnbox_changed)
120+
# Connect to double_value_changed instead valueChanged
121+
self._slider.double_value_changed.connect(self._on_slider_changed)

NodeGraphQt/custom_widgets/properties_bin/node_property_factory.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from NodeGraphQt.constants import NodePropWidgetEnum
22
from .custom_widget_color_picker import PropColorPickerRGB, PropColorPickerRGBA
33
from .custom_widget_file_paths import PropFilePath, PropFileSavePath
4-
from .custom_widget_slider import PropSlider
4+
from .custom_widget_slider import PropSlider, PropDoubleSlider
55
from .custom_widget_value_edit import FloatValueEdit, IntValueEdit
66
from .custom_widget_vectors import PropVector2, PropVector3, PropVector4
77
from .prop_widgets_base import (
@@ -36,6 +36,7 @@ def __init__(self):
3636
NodePropWidgetEnum.COLOR_PICKER.value: PropColorPickerRGB,
3737
NodePropWidgetEnum.COLOR4_PICKER.value: PropColorPickerRGBA,
3838
NodePropWidgetEnum.SLIDER.value: PropSlider,
39+
NodePropWidgetEnum.DOUBLE_SLIDER.value: PropDoubleSlider,
3940
NodePropWidgetEnum.FILE_OPEN.value: PropFilePath,
4041
NodePropWidgetEnum.FILE_SAVE.value: PropFileSavePath,
4142
NodePropWidgetEnum.VECTOR2.value: PropVector2,

NodeGraphQt/custom_widgets/properties_bin/node_property_widgets.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,12 @@ def __init__(self):
587587
range=(45, 55),
588588
widget_type=NodePropWidgetEnum.SLIDER.value
589589
)
590+
self.create_property(
591+
'float_range',
592+
value=150.5,
593+
range=(50.5, 200),
594+
widget_type=NodePropWidgetEnum.DOUBLE_SLIDER.value
595+
)
590596
self.create_property(
591597
'color4_picker',
592598
value=(255, 0, 0, 122),

0 commit comments

Comments
 (0)