Skip to content

Commit 44fb644

Browse files
authored
Merge pull request #380 from jchanvfx/node_property_tooltip_379
node property widget tooltip and bug fixes. #379
2 parents 710e756 + b931690 commit 44fb644

File tree

7 files changed

+47
-14
lines changed

7 files changed

+47
-14
lines changed

NodeGraphQt/base/model.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def __repr__(self):
121121
self.__class__.__name__, self.name, self.id)
122122

123123
def add_property(self, name, value, items=None, range=None,
124-
widget_type=None, tab=None):
124+
widget_type=None, widget_tooltip=None, tab=None):
125125
"""
126126
add custom property or raises an error if the property name is already
127127
taken.
@@ -132,6 +132,7 @@ def add_property(self, name, value, items=None, range=None,
132132
items (list[str]): items used by widget type NODE_PROP_QCOMBO.
133133
range (tuple): min, max values used by NODE_PROP_SLIDER.
134134
widget_type (int): widget type flag.
135+
widget_tooltip (str): custom tooltip for the property widget.
135136
tab (str): widget tab name.
136137
"""
137138
widget_type = widget_type or NodePropWidgetEnum.HIDDEN.value
@@ -153,6 +154,9 @@ def add_property(self, name, value, items=None, range=None,
153154
self._TEMP_property_attrs[name]['items'] = items
154155
if range:
155156
self._TEMP_property_attrs[name]['range'] = range
157+
if widget_tooltip:
158+
self._TEMP_property_attrs[name]['tooltip'] = widget_tooltip
159+
156160
else:
157161
attrs = {
158162
self.type_: {
@@ -166,6 +170,8 @@ def add_property(self, name, value, items=None, range=None,
166170
attrs[self.type_][name]['items'] = items
167171
if range:
168172
attrs[self.type_][name]['range'] = range
173+
if widget_tooltip:
174+
attrs[self.type_][name]['tooltip'] = widget_tooltip
169175
self._graph_model.set_node_common_properties(attrs)
170176

171177
def set_property(self, name, value):

NodeGraphQt/base/node.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ def set_selected(self, selected=True):
325325
self.set_property('selected', selected)
326326

327327
def create_property(self, name, value, items=None, range=None,
328-
widget_type=None, tab=None):
328+
widget_type=None, widget_tooltip=None, tab=None):
329329
"""
330330
Creates a custom property to the node.
331331
@@ -347,11 +347,15 @@ def create_property(self, name, value, items=None, range=None,
347347
:attr:`NodeGraphQt.constants.NodePropWidgetEnum.SLIDER`
348348
widget_type (int): widget flag to display in the
349349
:class:`NodeGraphQt.PropertiesBinWidget`
350+
widget_tooltip (str): widget tooltip for the property widget
351+
displayed in the :class:`NodeGraphQt.PropertiesBinWidget`
350352
tab (str): name of the widget tab to display in the
351353
:class:`NodeGraphQt.PropertiesBinWidget`.
352354
"""
353355
widget_type = widget_type or NodePropWidgetEnum.HIDDEN.value
354-
self.model.add_property(name, value, items, range, widget_type, tab)
356+
self.model.add_property(
357+
name, value, items, range, widget_type, widget_tooltip, tab
358+
)
355359

356360
def properties(self):
357361
"""

NodeGraphQt/custom_widgets/properties_bin/node_property_widgets.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def __repr__(self):
9494
self.__class__.__name__, hex(id(self))
9595
)
9696

97-
def add_widget(self, name, widget, value, label=None):
97+
def add_widget(self, name, widget, value, label=None, tooltip=None):
9898
"""
9999
Add a property widget to the window.
100100
@@ -103,8 +103,12 @@ def add_widget(self, name, widget, value, label=None):
103103
widget (BaseProperty): property widget.
104104
value (object): property value.
105105
label (str): custom label to display.
106+
tooltip (str): custom tooltip.
106107
"""
107-
widget.setToolTip(name)
108+
if tooltip:
109+
widget.setToolTip('{}\n{}'.format(name, tooltip))
110+
else:
111+
widget.setToolTip(name)
108112
widget.set_value(value)
109113
if label is None:
110114
label = name
@@ -412,6 +416,7 @@ def _read_node(self, node):
412416
if wid_type == 0:
413417
continue
414418

419+
tooltip = None
415420
widget = widget_factory.get_widget(wid_type)
416421
if prop_name in common_props.keys():
417422
if 'items' in common_props[prop_name].keys():
@@ -420,9 +425,15 @@ def _read_node(self, node):
420425
prop_range = common_props[prop_name]['range']
421426
widget.set_min(prop_range[0])
422427
widget.set_max(prop_range[1])
423-
424-
prop_window.add_widget(prop_name, widget, value,
425-
prop_name.replace('_', ' '))
428+
if 'tooltip' in common_props[prop_name].keys():
429+
tooltip = common_props[prop_name]['tooltip']
430+
prop_window.add_widget(
431+
name=prop_name,
432+
widget=widget,
433+
value=value,
434+
label=prop_name.replace('_', ' '),
435+
tooltip=tooltip
436+
)
426437
widget.value_changed.connect(self._on_property_changed)
427438

428439
# add "Node" tab properties. (default props)

NodeGraphQt/nodes/base_node.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,8 @@ def add_custom_widget(self, widget, widget_type=None, tab=None):
204204
#: redraw node to address calls outside the "__init__" func.
205205
self.view.draw_node()
206206

207-
def add_combo_menu(self, name, label='', items=None, tab=None):
207+
def add_combo_menu(self, name, label='', items=None, tooltip=None,
208+
tab=None):
208209
"""
209210
Creates a custom property with the :meth:`NodeObject.create_property`
210211
function and embeds a :class:`PySide2.QtWidgets.QComboBox` widget
@@ -218,22 +219,25 @@ def add_combo_menu(self, name, label='', items=None, tab=None):
218219
name (str): name for the custom property.
219220
label (str): label to be displayed.
220221
items (list[str]): items to be added into the menu.
222+
tooltip (str): widget tooltip.
221223
tab (str): name of the widget tab to display in.
222224
"""
223225
self.create_property(
224226
name,
225227
value=items[0] if items else None,
226228
items=items or [],
227229
widget_type=NodePropWidgetEnum.QCOMBO_BOX.value,
230+
widget_tooltip=tooltip,
228231
tab=tab
229232
)
230233
widget = NodeComboBox(self.view, name, label, items)
234+
widget.setToolTip(tooltip or '')
231235
widget.value_changed.connect(lambda k, v: self.set_property(k, v))
232236
self.view.add_widget(widget)
233237
#: redraw node to address calls outside the "__init__" func.
234238
self.view.draw_node()
235239

236-
def add_text_input(self, name, label='', text='', tab=None):
240+
def add_text_input(self, name, label='', text='', tooltip=None, tab=None):
237241
"""
238242
Creates a custom property with the :meth:`NodeObject.create_property`
239243
function and embeds a :class:`PySide2.QtWidgets.QLineEdit` widget
@@ -247,21 +251,25 @@ def add_text_input(self, name, label='', text='', tab=None):
247251
name (str): name for the custom property.
248252
label (str): label to be displayed.
249253
text (str): pre filled text.
254+
tooltip (str): widget tooltip.
250255
tab (str): name of the widget tab to display in.
251256
"""
252257
self.create_property(
253258
name,
254259
value=text,
255260
widget_type=NodePropWidgetEnum.QLINE_EDIT.value,
261+
widget_tooltip=tooltip,
256262
tab=tab
257263
)
258264
widget = NodeLineEdit(self.view, name, label, text)
265+
widget.setToolTip(tooltip or '')
259266
widget.value_changed.connect(lambda k, v: self.set_property(k, v))
260267
self.view.add_widget(widget)
261268
#: redraw node to address calls outside the "__init__" func.
262269
self.view.draw_node()
263270

264-
def add_checkbox(self, name, label='', text='', state=False, tab=None):
271+
def add_checkbox(self, name, label='', text='', state=False, tooltip=None,
272+
tab=None):
265273
"""
266274
Creates a custom property with the :meth:`NodeObject.create_property`
267275
function and embeds a :class:`PySide2.QtWidgets.QCheckBox` widget
@@ -276,15 +284,18 @@ def add_checkbox(self, name, label='', text='', state=False, tab=None):
276284
label (str): label to be displayed.
277285
text (str): checkbox text.
278286
state (bool): pre-check.
287+
tooltip (str): widget tooltip.
279288
tab (str): name of the widget tab to display in.
280289
"""
281290
self.create_property(
282291
name,
283292
value=state,
284293
widget_type=NodePropWidgetEnum.QCHECK_BOX.value,
294+
widget_tooltip=tooltip,
285295
tab=tab
286296
)
287297
widget = NodeCheckBox(self.view, name, label, text, state)
298+
widget.setToolTip(tooltip or '')
288299
widget.value_changed.connect(lambda k, v: self.set_property(k, v))
289300
self.view.add_widget(widget)
290301
#: redraw node to address calls outside the "__init__" func.

NodeGraphQt/pkg_info.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/python
22
# -*- coding: utf-8 -*-
3-
__version__ = '0.6.22'
3+
__version__ = '0.6.23'
44
__status__ = 'Work in Progress'
55
__license__ = 'MIT'
66

NodeGraphQt/widgets/node_widgets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def __init__(self, parent=None, name=None, label=''):
101101

102102
def setToolTip(self, tooltip):
103103
tooltip = tooltip.replace('\n', '<br/>')
104-
tooltip = '<b>{}</b><br/>{}'.format(self.name, tooltip)
104+
tooltip = '<b>{}</b><br/>{}'.format(self.get_name(), tooltip)
105105
super(NodeBaseWidget, self).setToolTip(tooltip)
106106

107107
def on_value_changed(self, *args, **kwargs):

examples/nodes/widget_nodes.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ def __init__(self):
2222

2323
# create the QComboBox menu.
2424
items = ['item 1', 'item 2', 'item 3']
25-
self.add_combo_menu('my_menu', 'Menu Test', items=items)
25+
self.add_combo_menu('my_menu', 'Menu Test', items=items,
26+
tooltip='example custom tooltip')
2627

2728

2829
class TextInputNode(BaseNode):

0 commit comments

Comments
 (0)