Skip to content

Commit 154e797

Browse files
committed
all round bug fixes.
1 parent e1fd874 commit 154e797

File tree

10 files changed

+86
-41
lines changed

10 files changed

+86
-41
lines changed

NodeGraphQt/base/graph.py

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from NodeGraphQt.base.node import NodeObject
1818
from NodeGraphQt.base.port import Port
1919
from NodeGraphQt.constants import (
20+
MIME_TYPE,
2021
URI_SCHEME,
2122
URN_SCHEME,
2223
LayoutDirectionEnum,
@@ -341,7 +342,7 @@ def _on_node_selection_changed(self, sel_ids, desel_ids):
341342
unsel_nodes = [self.get_node_by_id(nid) for nid in desel_ids]
342343
self.node_selection_changed.emit(sel_nodes, unsel_nodes)
343344

344-
def _on_node_data_dropped(self, data, pos):
345+
def _on_node_data_dropped(self, mimedata, pos):
345346
"""
346347
called when data has been dropped on the viewer.
347348
@@ -350,36 +351,52 @@ def _on_node_data_dropped(self, data, pos):
350351
URN = ngqt::node:com.nodes.MyNode1;node:com.nodes.MyNode2
351352
352353
Args:
353-
data (QtCore.QMimeData): mime data.
354+
mimedata (QtCore.QMimeData): mime data.
354355
pos (QtCore.QPoint): scene position relative to the drop.
355356
"""
356357
uri_regex = re.compile(r'{}(?:/*)([\w/]+)(\.\w+)'.format(URI_SCHEME))
357358
urn_regex = re.compile(r'{}([\w\.:;]+)'.format(URN_SCHEME))
358-
if data.hasFormat('text/uri-list'):
359-
for url in data.urls():
359+
if mimedata.hasFormat(MIME_TYPE):
360+
data = mimedata.data(MIME_TYPE).data().decode()
361+
urn_search = urn_regex.search(data)
362+
if urn_search:
363+
search_str = urn_search.group(1)
364+
node_ids = sorted(re.findall(r'node:([\w\.]+)', search_str))
365+
x, y = pos.x(), pos.y()
366+
for node_id in node_ids:
367+
self.create_node(node_id, pos=[x, y])
368+
x += 80
369+
y += 80
370+
elif mimedata.hasFormat('text/uri-list'):
371+
not_supported_urls = []
372+
for url in mimedata.urls():
360373
local_file = url.toLocalFile()
361374
if local_file:
362375
try:
363376
self.import_session(local_file)
364377
continue
365378
except Exception as e:
366-
pass
379+
not_supported_urls.append(url)
367380

368381
url_str = url.toString()
369-
uri_search = uri_regex.search(url_str)
370-
urn_search = urn_regex.search(url_str)
371-
if uri_search:
372-
path = uri_search.group(1)
373-
ext = uri_search.group(2)
374-
self.import_session('{}{}'.format(path, ext))
375-
elif urn_search:
376-
search_str = urn_search.group(1)
377-
node_ids = sorted(re.findall('node:([\w\\.]+)', search_str))
378-
x, y = pos.x(), pos.y()
379-
for node_id in node_ids:
380-
self.create_node(node_id, pos=[x, y])
381-
x += 80
382-
y += 80
382+
if url_str:
383+
uri_search = uri_regex.search(url_str)
384+
if uri_search:
385+
path = uri_search.group(1)
386+
ext = uri_search.group(2)
387+
try:
388+
self.import_session('{}{}'.format(path, ext))
389+
except Exception as e:
390+
not_supported_urls.append(url)
391+
392+
if not_supported_urls:
393+
print(
394+
'Can\'t import the following urls: \n{}'
395+
.format('\n'.join(not_supported_urls))
396+
)
397+
self.data_dropped.emit(mimedata, pos)
398+
else:
399+
self.data_dropped.emit(mimedata, pos)
383400

384401
def _on_nodes_moved(self, node_data):
385402
"""
@@ -640,7 +657,7 @@ def set_grid_mode(self, mode=None):
640657
:linenos:
641658
642659
graph = NodeGraph()
643-
graph.set_grid_mode(ViewerEnum.CURVED.value)
660+
graph.set_grid_mode(ViewerEnum.GRID_DISPLAY_DOTS.value)
644661
645662
Args:
646663
mode (int): background style.

NodeGraphQt/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
# ================================== PRIVATE ===================================
1616

17+
MIME_TYPE = 'nodegraphqt/nodes'
1718
URI_SCHEME = 'nodegraphqt://'
1819
URN_SCHEME = 'nodegraphqt::'
1920

@@ -24,6 +25,7 @@
2425
ICON_NODE_BASE = os.path.join(ICON_PATH, 'node_base.png')
2526

2627
# DRAW STACK ORDER
28+
Z_VAL_BACKDROP = -2
2729
Z_VAL_PIPE = -1
2830
Z_VAL_NODE = 1
2931
Z_VAL_PORT = 2

NodeGraphQt/custom_widgets/nodes_palette.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from Qt import QtWidgets, QtCore, QtGui
66

7-
from NodeGraphQt.constants import URN_SCHEME
7+
from NodeGraphQt.constants import MIME_TYPE, URN_SCHEME
88

99

1010
class _NodesGridDelegate(QtWidgets.QStyledItemDelegate):
@@ -122,11 +122,13 @@ def __init__(self, parent=None):
122122
super(_NodesGridProxyModel, self).__init__(parent)
123123

124124
def mimeData(self, indexes, p_int=None):
125-
node_ids = ['node:{}'.format(i.data(QtCore.Qt.ToolTipRole))
126-
for i in indexes]
125+
node_ids = [
126+
'node:{}'.format(i.data(QtCore.Qt.ToolTipRole))
127+
for i in indexes
128+
]
127129
node_urn = URN_SCHEME + ';'.join(node_ids)
128-
mime_data = super(_NodesGridProxyModel, self).mimeData(indexes, p_int)
129-
mime_data.setUrls([node_urn])
130+
mime_data = QtCore.QMimeData()
131+
mime_data.setData(MIME_TYPE, QtCore.QByteArray(node_urn.encode()))
130132
return mime_data
131133

132134

NodeGraphQt/custom_widgets/nodes_tree.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# -*- coding: utf-8 -*-
33
from Qt import QtWidgets, QtCore, QtGui
44

5-
from NodeGraphQt.constants import URN_SCHEME
5+
from NodeGraphQt.constants import MIME_TYPE, URN_SCHEME
66

77
TYPE_NODE = QtWidgets.QTreeWidgetItem.UserType + 1
88
TYPE_CATEGORY = QtWidgets.QTreeWidgetItem.UserType + 2
@@ -69,8 +69,8 @@ def __repr__(self):
6969
def mimeData(self, items):
7070
node_ids = ['node:{}'.format(i.toolTip(0)) for i in items]
7171
node_urn = URN_SCHEME + ';'.join(node_ids)
72-
mime_data = super(NodesTreeWidget, self).mimeData(items)
73-
mime_data.setUrls([node_urn])
72+
mime_data = QtCore.QMimeData()
73+
mime_data.setData(MIME_TYPE, QtCore.QByteArray(node_urn.encode()))
7474
return mime_data
7575

7676
def _build_tree(self):

NodeGraphQt/nodes/backdrop_node.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,11 @@ def size(self):
131131
self.model.width = self.view.width
132132
self.model.height = self.view.height
133133
return self.model.width, self.model.height
134+
135+
def inputs(self):
136+
# required function but unused for the backdrop node.
137+
return
138+
139+
def outputs(self):
140+
# required function but unused for the backdrop node.
141+
return

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.29'
3+
__version__ = '0.6.30'
44
__status__ = 'Work in Progress'
55
__license__ = 'MIT'
66

NodeGraphQt/qgraphics/node_backdrop.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/python
22
from Qt import QtGui, QtCore, QtWidgets
33

4-
from NodeGraphQt.constants import Z_VAL_PIPE, NodeEnum
4+
from NodeGraphQt.constants import Z_VAL_BACKDROP, NodeEnum
55
from NodeGraphQt.qgraphics.node_abstract import AbstractNodeItem
66
from NodeGraphQt.qgraphics.pipe import PipeItem
77
from NodeGraphQt.qgraphics.port import PortItem
@@ -113,7 +113,7 @@ class BackdropNodeItem(AbstractNodeItem):
113113

114114
def __init__(self, name='backdrop', text='', parent=None):
115115
super(BackdropNodeItem, self).__init__(name, parent)
116-
self.setZValue(Z_VAL_PIPE - 1)
116+
self.setZValue(Z_VAL_BACKDROP)
117117
self._properties['backdrop_text'] = text
118118
self._min_size = 80, 80
119119
self._sizer = BackdropSizer(self, 26.0)

NodeGraphQt/qgraphics/node_base.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -875,6 +875,16 @@ def text_item(self):
875875
"""
876876
return self._text_item
877877

878+
@property
879+
def icon_item(self):
880+
"""
881+
Get the node icon qgraphics item.
882+
883+
Returns:
884+
QtWidgets.QGraphicsPixmapItem: node icon object.
885+
"""
886+
return self._icon_item
887+
878888
@property
879889
def inputs(self):
880890
"""

NodeGraphQt/qgraphics/node_circle.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def _align_ports_horizontal(self, v_offset):
3232
port_height = inputs[0].boundingRect().height()
3333

3434
count = len(inputs)
35-
if count > 2:
35+
if count >= 2:
3636
is_odd = bool(count % 2)
3737
middle_idx = int(count / 2)
3838

@@ -60,12 +60,10 @@ def _align_ports_horizontal(self, v_offset):
6060
port.setPos(port_x, port_y)
6161
port_x += (port_width / 2) - (txt_offset / 2)
6262
port_y += port_height + spacing
63-
6463
else:
6564
port_x = (port_width / 2) * -1
6665
port_y = node_center_y - (port_height / 2)
67-
inputs[0].setPos(port_x, port_y - (port_height / 2) + spacing)
68-
inputs[1].setPos(port_x, port_y + (port_height / 2) + spacing)
66+
inputs[0].setPos(port_x, port_y)
6967

7068
# adjust input text position
7169
for port, text in self._input_items.items():
@@ -81,7 +79,7 @@ def _align_ports_horizontal(self, v_offset):
8179
port_height = outputs[0].boundingRect().height()
8280

8381
count = len(outputs)
84-
if count > 2:
82+
if count >= 2:
8583
is_odd = bool(count % 2)
8684
middle_idx = int(count / 2)
8785

@@ -112,8 +110,7 @@ def _align_ports_horizontal(self, v_offset):
112110
else:
113111
port_x = width - (port_width / 2)
114112
port_y = node_center_y - (port_height / 2)
115-
outputs[0].setPos(port_x, port_y - (port_height / 2) + spacing)
116-
outputs[1].setPos(port_x, port_y + (port_height / 2) + spacing)
113+
outputs[0].setPos(port_x, port_y)
117114

118115
# adjust output text position
119116
for port, text in self._output_items.items():

NodeGraphQt/widgets/viewer.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -673,16 +673,25 @@ def dropEvent(self, event):
673673
pos = self.mapToScene(event.pos())
674674
event.setDropAction(QtCore.Qt.CopyAction)
675675
self.data_dropped.emit(
676-
event.mimeData(), QtCore.QPoint(pos.x(), pos.y()))
676+
event.mimeData(), QtCore.QPoint(pos.x(), pos.y())
677+
)
677678

678679
def dragEnterEvent(self, event):
679-
if event.mimeData().hasFormat('text/uri-list'):
680+
is_acceptable = any([
681+
event.mimeData().hasFormat(i) for i in
682+
['nodegraphqt/nodes', 'text/plain', 'text/uri-list']
683+
])
684+
if is_acceptable:
680685
event.accept()
681686
else:
682687
event.ignore()
683688

684689
def dragMoveEvent(self, event):
685-
if event.mimeData().hasFormat('text/uri-list'):
690+
is_acceptable = any([
691+
event.mimeData().hasFormat(i) for i in
692+
['nodegraphqt/nodes', 'text/plain', 'text/uri-list']
693+
])
694+
if is_acceptable:
686695
event.accept()
687696
else:
688697
event.ignore()

0 commit comments

Comments
 (0)