Skip to content

Commit 3defba5

Browse files
committed
ported Tab search logic into graph action #253
1 parent e52d019 commit 3defba5

File tree

4 files changed

+56
-40
lines changed

4 files changed

+56
-40
lines changed

NodeGraphQt/base/graph.py

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,6 @@ def _wire_signals(self):
164164
"""
165165
Connect up all the signals and slots here.
166166
"""
167-
# TODO: refactor hard coded tab search logic into
168-
# "graph_actions.py" module.
169-
# hard coded tab search.
170-
tab = QtWidgets.QShortcut(
171-
QtGui.QKeySequence(QtCore.Qt.Key_Tab), self._viewer)
172-
tab.activated.connect(self._toggle_tab_search)
173-
self._viewer.show_tab_search.connect(self._toggle_tab_search)
174167

175168
# internal signals.
176169
self._viewer.search_triggered.connect(self._on_search_triggered)
@@ -221,14 +214,6 @@ def _on_insert_node(self, pipe, node_id, prev_node_pos):
221214
self._on_nodes_moved(prev_node_pos)
222215
self._undo_stack.endMacro()
223216

224-
def _toggle_tab_search(self):
225-
"""
226-
toggle the tab search widget.
227-
"""
228-
if self._viewer.underMouse():
229-
self._viewer.tab_search_set_nodes(self._node_factory.names)
230-
self._viewer.tab_search_toggle()
231-
232217
def _on_property_bin_changed(self, node_id, prop_name, prop_value):
233218
"""
234219
called when a property widget has changed in a properties bin.
@@ -477,6 +462,14 @@ def undo_view(self):
477462
self._undo_view.setWindowTitle('Undo History')
478463
return self._undo_view
479464

465+
def toggle_node_search(self):
466+
"""
467+
toggle the node search widget visibility.
468+
"""
469+
if self._viewer.underMouse():
470+
self._viewer.tab_search_set_nodes(self._node_factory.names)
471+
self._viewer.tab_search_toggle()
472+
480473
def show(self):
481474
"""
482475
Show node graph widget this is just a convenience

NodeGraphQt/base/graph_actions.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ def build_context_menu(graph):
6363
# "Node" menu.
6464
# --------------------------------------------------------------------------
6565
node_menu = graph_menu.add_menu('&Nodes')
66+
node_menu.add_command('Node Search', _toggle_node_search, 'Tab')
67+
node_menu.add_separator()
6668
node_menu.add_command(
6769
'Auto Layout Up Stream', _layout_graph_up, 'L')
6870
node_menu.add_command(
@@ -312,3 +314,10 @@ def _layout_graph_up(graph):
312314
"""
313315
nodes = graph.selected_nodes() or graph.all_nodes()
314316
graph.auto_layout_nodes(nodes=nodes, down_stream=False)
317+
318+
319+
def _toggle_node_search(graph):
320+
"""
321+
show/hide the node search widget.
322+
"""
323+
graph.toggle_node_search()

NodeGraphQt/widgets/tab_search.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,14 @@ def setModel(self, model):
4949
self._using_orig_model = True
5050

5151

52-
class TabSearchMenuWidget(QtWidgets.QMenu):
53-
54-
search_submitted = QtCore.Signal(str)
52+
class TabSearchLineEditWidget(QtWidgets.QLineEdit):
5553

56-
def __init__(self, node_dict=None):
57-
super(TabSearchMenuWidget, self).__init__()
54+
tab_pressed = QtCore.Signal()
5855

59-
self.line_edit = QtWidgets.QLineEdit()
60-
self.line_edit.setAttribute(QtCore.Qt.WA_MacShowFocusRect, 0)
61-
self.line_edit.setMinimumSize(200, 22)
56+
def __init__(self, parent=None):
57+
super(TabSearchLineEditWidget, self).__init__(parent)
58+
self.setAttribute(QtCore.Qt.WA_MacShowFocusRect, 0)
59+
self.setMinimumSize(200, 22)
6260
text_color = self.palette().text().color().toTuple()
6361
selected_color = self.palette().highlight().color().toTuple()
6462
style_dict = {
@@ -81,7 +79,23 @@ def __init__(self, node_dict=None):
8179
style += ' {}:{};\n'.format(elm_name, elm_val)
8280
style += '}\n'
8381
stylesheet += style
84-
self.line_edit.setStyleSheet(stylesheet)
82+
self.setStyleSheet(stylesheet)
83+
84+
def keyPressEvent(self, event):
85+
super(TabSearchLineEditWidget, self).keyPressEvent(event)
86+
if event.key() == QtCore.Qt.Key_Tab:
87+
self.tab_pressed.emit()
88+
89+
90+
class TabSearchMenuWidget(QtWidgets.QMenu):
91+
92+
search_submitted = QtCore.Signal(str)
93+
94+
def __init__(self, node_dict=None):
95+
super(TabSearchMenuWidget, self).__init__()
96+
97+
self.line_edit = TabSearchLineEditWidget()
98+
self.line_edit.tab_pressed.connect(self._close)
8599

86100
self._node_dict = node_dict or {}
87101
if self._node_dict:
@@ -91,6 +105,8 @@ def __init__(self, node_dict=None):
91105
search_widget.setDefaultWidget(self.line_edit)
92106
self.addAction(search_widget)
93107

108+
text_color = self.palette().text().color().toTuple()
109+
selected_color = self.palette().highlight().color().toTuple()
94110
style_dict = {
95111
'QMenu': {
96112
'color': 'rgb({0},{1},{2})'.format(*text_color),

NodeGraphQt/widgets/viewer.py

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class NodeViewer(QtWidgets.QGraphicsView):
3838
insert_node = QtCore.Signal(object, str, dict)
3939
node_name_changed = QtCore.Signal(str, str)
4040
node_backdrop_updated = QtCore.Signal(str, str, object)
41-
show_tab_search = QtCore.Signal()
4241

4342
# pass through signals that are translated into "NodeGraph()" signals.
4443
node_selected = QtCore.Signal(str)
@@ -315,8 +314,7 @@ def contextMenuEvent(self, event):
315314
ctx_menu.exec_(event.globalPos())
316315
else:
317316
return super(NodeViewer, self).contextMenuEvent(event)
318-
else:
319-
self.show_tab_search.emit()
317+
320318
return super(NodeViewer, self).contextMenuEvent(event)
321319

322320
def mousePressEvent(self, event):
@@ -893,22 +891,22 @@ def tab_search_set_nodes(self, nodes):
893891
self._search_widget.set_nodes(nodes)
894892

895893
def tab_search_toggle(self):
896-
if isinstance(self._search_widget, TabSearchMenuWidget):
894+
state = self._search_widget.isVisible()
895+
if not state:
896+
self._search_widget.setVisible(state)
897+
self.setFocus()
897898
return
898899

899900
pos = self._previous_pos
900-
state = not self._search_widget.isVisible()
901-
if state:
902-
rect = self._search_widget.rect()
903-
new_pos = QtCore.QPoint(int(pos.x() - rect.width() / 2),
904-
int(pos.y() - rect.height() / 2))
905-
self._search_widget.move(new_pos)
906-
self._search_widget.setVisible(state)
907-
rect = self.mapToScene(rect).boundingRect()
908-
self.scene().update(rect)
909-
else:
910-
self._search_widget.setVisible(state)
911-
self.clearFocus()
901+
rect = self._search_widget.rect()
902+
new_pos = QtCore.QPoint(int(pos.x() - rect.width() / 2),
903+
int(pos.y() - rect.height() / 2))
904+
self._search_widget.move(new_pos)
905+
self._search_widget.setVisible(state)
906+
self._search_widget.setFocus()
907+
908+
rect = self.mapToScene(rect).boundingRect()
909+
self.scene().update(rect)
912910

913911
def rebuild_tab_search(self):
914912
if isinstance(self._search_widget, TabSearchMenuWidget):

0 commit comments

Comments
 (0)