mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-29 10:17:27 +02:00
[ui] GraphEditor: Import pipeline on the mouse's position with the node menu
If a pipeline is imported with the node menu instead of the "Import Project" action from the File menu, the top-left "corner" of the graph should be placed on the mouse's position. The position of pipelines imported with the "Import Project" menu remains unchanged: they are automatically placed below the lowest node in the current graph.
This commit is contained in:
parent
04ab813cef
commit
c2570ca0fb
3 changed files with 12 additions and 5 deletions
|
@ -221,10 +221,11 @@ class ImportProjectCommand(GraphCommand):
|
|||
"""
|
||||
Handle the import of a project into a Graph.
|
||||
"""
|
||||
def __init__(self, graph, filepath=None, yOffset=0, parent=None):
|
||||
def __init__(self, graph, filepath=None, position=None, yOffset=0, parent=None):
|
||||
super(ImportProjectCommand, self).__init__(graph, parent)
|
||||
self.filepath = filepath
|
||||
self.importedNames = []
|
||||
self.position = position
|
||||
self.yOffset = yOffset
|
||||
|
||||
def redoImpl(self):
|
||||
|
@ -239,7 +240,10 @@ class ImportProjectCommand(GraphCommand):
|
|||
|
||||
for node in importedNodes:
|
||||
self.importedNames.append(node.name)
|
||||
self.graph.node(node.name).position = Position(node.x, node.y + lowestY + self.yOffset)
|
||||
if self.position is not None:
|
||||
self.graph.node(node.name).position = Position(node.x + self.position.x, node.y + self.position.y)
|
||||
else:
|
||||
self.graph.node(node.name).position = Position(node.x, node.y + lowestY + self.yOffset)
|
||||
|
||||
return status
|
||||
|
||||
|
|
|
@ -354,7 +354,8 @@ class UIGraph(QObject):
|
|||
return status
|
||||
|
||||
@Slot(QUrl, result=bool)
|
||||
def importProject(self, filepath):
|
||||
@Slot(QUrl, QPoint, result=bool)
|
||||
def importProject(self, filepath, position=None):
|
||||
if isinstance(filepath, (QUrl)):
|
||||
# depending how the QUrl has been initialized,
|
||||
# toLocalFile() may return the local path or an empty string
|
||||
|
@ -363,8 +364,10 @@ class UIGraph(QObject):
|
|||
localFile = filepath.toString()
|
||||
else:
|
||||
localFile = filepath
|
||||
if isinstance(position, QPoint):
|
||||
position = Position(position.x(), position.y())
|
||||
yOffset = self.layout.gridSpacing + self.layout.nodeHeight
|
||||
return self.push(commands.ImportProjectCommand(self._graph, localFile, yOffset=yOffset))
|
||||
return self.push(commands.ImportProjectCommand(self._graph, localFile, position=position, yOffset=yOffset))
|
||||
|
||||
@Slot(QUrl)
|
||||
def saveAs(self, url):
|
||||
|
|
|
@ -240,7 +240,7 @@ Item {
|
|||
|
||||
if (pipelineNames.includes(pipeline)) {
|
||||
var url = Filepath.stringToUrl(pipelinePaths[pipelineNames.indexOf(pipeline)])
|
||||
uigraph.importProject(url)
|
||||
uigraph.importProject(url, spawnPosition)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
|
Loading…
Add table
Reference in a new issue