Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 8 additions & 15 deletions NodeGraphQt/base/graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,13 +164,6 @@ def _wire_signals(self):
"""
Connect up all the signals and slots here.
"""
# TODO: refactor hard coded tab search logic into
# "graph_actions.py" module.
# hard coded tab search.
tab = QtWidgets.QShortcut(
QtGui.QKeySequence(QtCore.Qt.Key_Tab), self._viewer)
tab.activated.connect(self._toggle_tab_search)
self._viewer.show_tab_search.connect(self._toggle_tab_search)

# internal signals.
self._viewer.search_triggered.connect(self._on_search_triggered)
Expand Down Expand Up @@ -221,14 +214,6 @@ def _on_insert_node(self, pipe, node_id, prev_node_pos):
self._on_nodes_moved(prev_node_pos)
self._undo_stack.endMacro()

def _toggle_tab_search(self):
"""
toggle the tab search widget.
"""
if self._viewer.underMouse():
self._viewer.tab_search_set_nodes(self._node_factory.names)
self._viewer.tab_search_toggle()

def _on_property_bin_changed(self, node_id, prop_name, prop_value):
"""
called when a property widget has changed in a properties bin.
Expand Down Expand Up @@ -477,6 +462,14 @@ def undo_view(self):
self._undo_view.setWindowTitle('Undo History')
return self._undo_view

def toggle_node_search(self):
"""
toggle the node search widget visibility.
"""
if self._viewer.underMouse():
self._viewer.tab_search_set_nodes(self._node_factory.names)
self._viewer.tab_search_toggle()

def show(self):
"""
Show node graph widget this is just a convenience
Expand Down
9 changes: 9 additions & 0 deletions NodeGraphQt/base/graph_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ def build_context_menu(graph):
# "Node" menu.
# --------------------------------------------------------------------------
node_menu = graph_menu.add_menu('&Nodes')
node_menu.add_command('Node Search', _toggle_node_search, 'Tab')
node_menu.add_separator()
node_menu.add_command(
'Auto Layout Up Stream', _layout_graph_up, 'L')
node_menu.add_command(
Expand Down Expand Up @@ -312,3 +314,10 @@ def _layout_graph_up(graph):
"""
nodes = graph.selected_nodes() or graph.all_nodes()
graph.auto_layout_nodes(nodes=nodes, down_stream=False)


def _toggle_node_search(graph):
"""
show/hide the node search widget.
"""
graph.toggle_node_search()
37 changes: 27 additions & 10 deletions NodeGraphQt/widgets/tab_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,14 @@ def setModel(self, model):
self._using_orig_model = True


class TabSearchMenuWidget(QtWidgets.QMenu):

search_submitted = QtCore.Signal(str)
class TabSearchLineEditWidget(QtWidgets.QLineEdit):

def __init__(self, node_dict=None):
super(TabSearchMenuWidget, self).__init__()
tab_pressed = QtCore.Signal()

self.line_edit = QtWidgets.QLineEdit()
self.line_edit.setAttribute(QtCore.Qt.WA_MacShowFocusRect, 0)
self.line_edit.setMinimumSize(200, 22)
def __init__(self, parent=None):
super(TabSearchLineEditWidget, self).__init__(parent)
self.setAttribute(QtCore.Qt.WA_MacShowFocusRect, 0)
self.setMinimumSize(200, 22)
text_color = self.palette().text().color().toTuple()
selected_color = self.palette().highlight().color().toTuple()
style_dict = {
Expand All @@ -81,7 +79,23 @@ def __init__(self, node_dict=None):
style += ' {}:{};\n'.format(elm_name, elm_val)
style += '}\n'
stylesheet += style
self.line_edit.setStyleSheet(stylesheet)
self.setStyleSheet(stylesheet)

def keyPressEvent(self, event):
super(TabSearchLineEditWidget, self).keyPressEvent(event)
if event.key() == QtCore.Qt.Key_Tab:
self.tab_pressed.emit()


class TabSearchMenuWidget(QtWidgets.QMenu):

search_submitted = QtCore.Signal(str)

def __init__(self, node_dict=None):
super(TabSearchMenuWidget, self).__init__()

self.line_edit = TabSearchLineEditWidget()
self.line_edit.tab_pressed.connect(self._close)

self._node_dict = node_dict or {}
if self._node_dict:
Expand All @@ -91,6 +105,8 @@ def __init__(self, node_dict=None):
search_widget.setDefaultWidget(self.line_edit)
self.addAction(search_widget)

text_color = self.palette().text().color().toTuple()
selected_color = self.palette().highlight().color().toTuple()
style_dict = {
'QMenu': {
'color': 'rgb({0},{1},{2})'.format(*text_color),
Expand Down Expand Up @@ -179,7 +195,8 @@ def _clear_actions(self):
del self._searched_actions[:]

def _set_menu_visible(self, visible):
[menu.menuAction().setVisible(visible) for menu in self._menus.values()]
for menu in self._menus.values():
menu.menuAction().setVisible(visible)

def _close(self):
self._set_menu_visible(False)
Expand Down
30 changes: 14 additions & 16 deletions NodeGraphQt/widgets/viewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ class NodeViewer(QtWidgets.QGraphicsView):
insert_node = QtCore.Signal(object, str, dict)
node_name_changed = QtCore.Signal(str, str)
node_backdrop_updated = QtCore.Signal(str, str, object)
show_tab_search = QtCore.Signal()

# pass through signals that are translated into "NodeGraph()" signals.
node_selected = QtCore.Signal(str)
Expand Down Expand Up @@ -315,8 +314,7 @@ def contextMenuEvent(self, event):
ctx_menu.exec_(event.globalPos())
else:
return super(NodeViewer, self).contextMenuEvent(event)
else:
self.show_tab_search.emit()

return super(NodeViewer, self).contextMenuEvent(event)

def mousePressEvent(self, event):
Expand Down Expand Up @@ -893,22 +891,22 @@ def tab_search_set_nodes(self, nodes):
self._search_widget.set_nodes(nodes)

def tab_search_toggle(self):
if isinstance(self._search_widget, TabSearchMenuWidget):
state = self._search_widget.isVisible()
if not state:
self._search_widget.setVisible(state)
self.setFocus()
return

pos = self._previous_pos
state = not self._search_widget.isVisible()
if state:
rect = self._search_widget.rect()
new_pos = QtCore.QPoint(int(pos.x() - rect.width() / 2),
int(pos.y() - rect.height() / 2))
self._search_widget.move(new_pos)
self._search_widget.setVisible(state)
rect = self.mapToScene(rect).boundingRect()
self.scene().update(rect)
else:
self._search_widget.setVisible(state)
self.clearFocus()
rect = self._search_widget.rect()
new_pos = QtCore.QPoint(int(pos.x() - rect.width() / 2),
int(pos.y() - rect.height() / 2))
self._search_widget.move(new_pos)
self._search_widget.setVisible(state)
self._search_widget.setFocus()

rect = self.mapToScene(rect).boundingRect()
self.scene().update(rect)

def rebuild_tab_search(self):
if isinstance(self._search_widget, TabSearchMenuWidget):
Expand Down