Skip to content

Commit de33333

Browse files
committed
Add import session option and drag and drop to graph for JSON nodes
1 parent 46f5020 commit de33333

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

NodeGraphQt/base/graph.py

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,29 @@
2323
from NodeGraphQt.widgets.viewer import NodeViewer
2424

2525

26+
class QWidgetDrops(QtWidgets.QWidget):
27+
def dragEnterEvent(self, event):
28+
if event.mimeData().hasUrls:
29+
event.accept()
30+
else:
31+
event.ignore()
32+
33+
def dragMoveEvent(self, event):
34+
if event.mimeData().hasUrls:
35+
event.accept()
36+
else:
37+
event.ignore()
38+
39+
def dropEvent(self, event):
40+
if event.mimeData().hasUrls:
41+
event.setDropAction(QtCore.Qt.CopyAction)
42+
event.accept()
43+
for url in event.mimeData().urls():
44+
self.import_session(url.toLocalFile())
45+
else:
46+
e.ignore()
47+
48+
2649
class NodeGraph(QtCore.QObject):
2750
"""
2851
The ``NodeGraph`` class is the main controller for managing all nodes.
@@ -110,6 +133,7 @@ def __init__(self, parent=None):
110133
self._viewer.need_show_tab_search.connect(self._toggle_tab_search)
111134

112135
self._wire_signals()
136+
self.widget.setAcceptDrops(True)
113137

114138
def __repr__(self):
115139
return '<{} object at {}>'.format(self.__class__.__name__, hex(id(self)))
@@ -325,8 +349,10 @@ def widget(self):
325349
PySide2.QtWidgets.QWidget: node graph widget.
326350
"""
327351
if self._widget is None:
328-
self._widget = QtWidgets.QWidget()
329-
layout = QtWidgets.QVBoxLayout(self._widget)
352+
self._widget = QWidgetDrops()
353+
self._widget.import_session = self.import_session
354+
355+
layout = QtWidgets.QVBoxLayout(self._widget)
330356
layout.setContentsMargins(0, 0, 0, 0)
331357
layout.addWidget(self._viewer)
332358
return self._widget
@@ -1046,16 +1072,25 @@ def save_session(self, file_path):
10461072
def load_session(self, file_path):
10471073
"""
10481074
Load node graph session layout file.
1075+
1076+
Args:
1077+
file_path (str): path to the serialized layout file.
1078+
"""
1079+
self.clear_session()
1080+
self.import_session(file_path)
10491081

1082+
def import_session(self, file_path):
1083+
"""
1084+
Import node graph session layout file.
1085+
10501086
Args:
10511087
file_path (str): path to the serialized layout file.
10521088
"""
1089+
10531090
file_path = file_path.strip()
10541091
if not os.path.isfile(file_path):
10551092
raise IOError('file does not exist.')
10561093

1057-
self.clear_session()
1058-
10591094
try:
10601095
with open(file_path) as data_file:
10611096
layout_data = json.load(data_file)

NodeGraphQt/base/utils.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def setup_context_menu(graph):
3333

3434
# create "File" menu.
3535
file_menu.add_command('Open...', _open_session, QtGui.QKeySequence.Open)
36+
file_menu.add_command('Import...', _import_session, QtGui.QKeySequence.Open)
3637
file_menu.add_command('Save...', _save_session, QtGui.QKeySequence.Save)
3738
file_menu.add_command('Save As...', _save_session_as, 'Ctrl+Shift+s')
3839
file_menu.add_command('New Session', _new_session)
@@ -119,6 +120,20 @@ def _open_session(graph):
119120
graph.load_session(file_path)
120121

121122

123+
def _import_session(graph):
124+
"""
125+
Prompts a file open dialog to load a session.
126+
127+
Args:
128+
graph (NodeGraphQt.NodeGraph): node graph.
129+
"""
130+
current = graph.current_session()
131+
viewer = graph.viewer()
132+
file_path = viewer.load_dialog(current)
133+
if file_path:
134+
graph.import_session(file_path)
135+
136+
122137
def _save_session(graph):
123138
"""
124139
Prompts a file save dialog to serialize a session if required.

0 commit comments

Comments
 (0)