mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-06-06 04:41:58 +02:00
[core/ui] replace and remove depending/required nodes methods
This commit is contained in:
parent
11e68e77ed
commit
ba1994deb9
3 changed files with 25 additions and 28 deletions
|
@ -916,14 +916,6 @@ class Graph(BaseObject):
|
|||
outputNodes, edges = self.nodesFromNode(node, filterTypes=None, reverse=True)
|
||||
return outputNodes[1:] # exclude current node
|
||||
|
||||
def nodesDependingOnNode(self, startNode, filterTypes=None):
|
||||
nodes, edges = self.nodesFromNode(startNode, filterTypes=filterTypes, reverse=True)
|
||||
return nodes
|
||||
|
||||
def nodesRequiredForNode(self, startNode, filterTypes=None):
|
||||
nodes, edges = self.nodesFromNode(startNode, filterTypes=filterTypes, reverse=False)
|
||||
return nodes
|
||||
|
||||
@Slot(Node, result=int)
|
||||
def canSubmitOrCompute(self, startNode):
|
||||
if startNode.isAlreadySubmittedOrFinished():
|
||||
|
|
|
@ -857,8 +857,9 @@ class BaseNode(BaseObject):
|
|||
|
||||
# Unlock required nodes if the current node changes to Error or Stopped
|
||||
if currentStatus in (Status.ERROR, Status.STOPPED):
|
||||
requiredNodes = self.graph.nodesRequiredForNode(self)
|
||||
for node in requiredNodes:
|
||||
self.setLocked(False)
|
||||
inputNodes = self.getInputNodes(recursive=True)
|
||||
for node in inputNodes:
|
||||
node.setLocked(False)
|
||||
|
||||
# Avoid useless travel through nodes
|
||||
|
@ -868,23 +869,25 @@ class BaseNode(BaseObject):
|
|||
|
||||
if currentStatus == Status.SUCCESS:
|
||||
# At this moment, the node is necessarily locked because of previous if statement
|
||||
requiredNodes = self.graph.nodesRequiredForNode(self)
|
||||
dependentNodes = self.graph.nodesDependingOnNode(self)
|
||||
inputNodes = self.getInputNodes(recursive=True)
|
||||
outputNodes = self.getOutputNodes(recursive=True)
|
||||
stayLocked = None
|
||||
|
||||
# Check if at least one dependentNode is submitted or currently running
|
||||
for node in dependentNodes:
|
||||
for node in outputNodes:
|
||||
if node.getGlobalStatus() in lockedStatus and node._chunks.at(0).statusNodeName == node.name:
|
||||
stayLocked = True
|
||||
break
|
||||
if not stayLocked:
|
||||
# Unlock every required node
|
||||
for node in requiredNodes:
|
||||
self.setLocked(False)
|
||||
# Unlock every input node
|
||||
for node in inputNodes:
|
||||
node.setLocked(False)
|
||||
return
|
||||
elif currentStatus in lockedStatus:
|
||||
requiredNodes = self.graph.nodesRequiredForNode(self)
|
||||
for node in requiredNodes:
|
||||
self.setLocked(True)
|
||||
inputNodes = self.getInputNodes(recursive=True)
|
||||
for node in inputNodes:
|
||||
node.setLocked(True)
|
||||
return
|
||||
|
||||
|
|
|
@ -401,11 +401,11 @@ class UIGraph(QObject):
|
|||
|
||||
# If some dependent nodes are submitted, the first one will be in error
|
||||
# Make sure to remove those nodes from the Task Manager list
|
||||
dependentNodes = self._graph.nodesDependingOnNode(node)
|
||||
for node in dependentNodes[1:]: # exclude current node
|
||||
if node.getGlobalStatus() == Status.ERROR:
|
||||
node.upgradeStatusTo(Status.NONE)
|
||||
self._taskManager.removeNode(node)
|
||||
outputNodes = node.getOutputNodes(recursive=True)
|
||||
for n in outputNodes:
|
||||
if n.getGlobalStatus() == Status.ERROR:
|
||||
n.upgradeStatusTo(Status.NONE)
|
||||
self._taskManager.removeNode(n)
|
||||
|
||||
self.computeStatusChanged.emit()
|
||||
|
||||
|
@ -413,13 +413,15 @@ class UIGraph(QObject):
|
|||
def cancelNodeComputation(self, node):
|
||||
""" Cancel the computation of the node and all the nodes depending on it. """
|
||||
if node.getGlobalStatus() == Status.SUBMITTED:
|
||||
# Current node belongs to this list
|
||||
for node in self._graph.nodesDependingOnNode(node):
|
||||
# Status from SUBMITTED to NONE
|
||||
# Make sure to remove the nodes from the Task Manager list
|
||||
node.clearSubmittedChunks()
|
||||
# Make sure to remove the node from the Task Manager list
|
||||
self._taskManager.removeNode(node)
|
||||
|
||||
for n in node.getOutputNodes(recursive=True):
|
||||
n.clearSubmittedChunks()
|
||||
self._taskManager.removeNode(n)
|
||||
|
||||
@Slot(Node)
|
||||
def submit(self, node=None):
|
||||
""" Submit the graph to the default Submitter.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue