[core] Node: add alive property for QML

This commit is contained in:
Julien-Haudegond 2020-08-17 11:39:22 +02:00
parent b79795a3c9
commit fe91d07a6a
2 changed files with 19 additions and 1 deletions

View file

@ -223,8 +223,11 @@ class Graph(BaseObject):
def clear(self): def clear(self):
self.header.clear() self.header.clear()
self._compatibilityNodes.clear() self._compatibilityNodes.clear()
self._nodes.clear()
self._edges.clear() self._edges.clear()
# Tell QML nodes are going to be deleted
for node in self._nodes:
node.alive = False
self._nodes.clear()
@property @property
def fileFeatures(self): def fileFeatures(self):
@ -437,6 +440,7 @@ class Graph(BaseObject):
self.removeEdge(edge.dst) self.removeEdge(edge.dst)
inEdges[edge.dst.getFullName()] = edge.src.getFullName() inEdges[edge.dst.getFullName()] = edge.src.getFullName()
node.alive = False
self._nodes.remove(node) self._nodes.remove(node)
self.update() self.update()

View file

@ -442,6 +442,7 @@ class BaseNode(BaseObject):
self._position = position or Position() self._position = position or Position()
self._attributes = DictModel(keyAttrName='name', parent=self) self._attributes = DictModel(keyAttrName='name', parent=self)
self.attributesPerUid = defaultdict(set) self.attributesPerUid = defaultdict(set)
self._alive = True # for QML side to know if the node can be used or is going to be deleted
def __getattr__(self, k): def __getattr__(self, k):
try: try:
@ -526,6 +527,17 @@ class BaseNode(BaseObject):
self._position = value self._position = value
self.positionChanged.emit() self.positionChanged.emit()
@property
def alive(self):
return self._alive
@alive.setter
def alive(self, value):
if self._alive == value:
return
self._alive = value
self.aliveChanged.emit()
@property @property
def depth(self): def depth(self):
return self.graph.getDepth(self) return self.graph.getDepth(self)
@ -792,6 +804,8 @@ class BaseNode(BaseObject):
globalStatusChanged = Signal() globalStatusChanged = Signal()
globalStatus = Property(str, lambda self: self.getGlobalStatus().name, notify=globalStatusChanged) globalStatus = Property(str, lambda self: self.getGlobalStatus().name, notify=globalStatusChanged)
isComputed = Property(bool, _isComputed, notify=globalStatusChanged) isComputed = Property(bool, _isComputed, notify=globalStatusChanged)
aliveChanged = Signal()
alive = Property(bool, alive.fget, alive.fset, notify=aliveChanged)
class Node(BaseNode): class Node(BaseNode):