Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion meshroom/ui/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,14 @@ def __init__(self, inputArgs):
self.engine.addImportPath(qmlDir)

# expose available node types that can be instantiated
self.engine.rootContext().setContextProperty("_nodeTypes", {n: {"category": pluginManager.getRegisteredNodePlugins()[n].nodeDescriptor.category} for n in sorted(pluginManager.getRegisteredNodePlugins().keys())})
def _nodeTypeInfo(nodePlugin):
desc = nodePlugin.nodeDescriptor
documentation = getattr(desc, 'documentation', '') or getattr(desc, '__doc__', '') or ''
return {
"category": desc.category,
"documentation": documentation.strip() if documentation else '',
}
self.engine.rootContext().setContextProperty("_nodeTypes", {n: _nodeTypeInfo(pluginManager.getRegisteredNodePlugins()[n]) for n in sorted(pluginManager.getRegisteredNodePlugins().keys())})

# instantiate the 3D Scene object
self._undoStack = commands.UndoStack(self)
Expand Down
57 changes: 57 additions & 0 deletions meshroom/ui/qml/GraphEditor/GraphEditor.qml
Original file line number Diff line number Diff line change
Expand Up @@ -1540,4 +1540,61 @@ Item {
draggable.x = bbox.x * draggable.scale * -1 + (root.width - bbox.width * draggable.scale) * 0.5
draggable.y = bbox.y * draggable.scale * -1 + (root.height - bbox.height * draggable.scale) * 0.5
}

// Node type browser panel (left side)
NodeTypeBrowser {
id: nodeTypeBrowser
anchors.top: parent.top
anchors.left: parent.left
anchors.bottom: parent.bottom
width: browserWidthProxy.x
visible: false
nodeTypesModel: root.nodeTypesModel

onNodeTypeDoubleClicked: function(nodeType) {
var position = getCenterPosition()
var node = uigraph.addNewNode(nodeType, position)
uigraph.selectedNode = node
uigraph.selectNodes([node])
nodeTypeBrowser.visible = false
}
}

// Invisible proxy item whose x-coordinate defines the NodeTypeBrowser width (default: 500)
Item {
id: browserWidthProxy
x: 500
visible: false
}

// Drag handle on the right edge of the NodeTypeBrowser to resize it
MouseArea {
id: browserResizeHandle
anchors.top: nodeTypeBrowser.top
anchors.bottom: nodeTypeBrowser.bottom
anchors.left: nodeTypeBrowser.right
width: 5
visible: nodeTypeBrowser.visible
cursorShape: Qt.SizeHorCursor
drag.target: browserWidthProxy
drag.axis: Drag.XAxis
drag.minimumX: 300
drag.maximumX: root.width - 100
}

// Button to toggle node type browser panel (top-left)
FloatingPane {
padding: 2
anchors.top: parent.top
anchors.left: parent.left

MaterialToolButton {
text: MaterialIcons.category
ToolTip.text: "Node Types"
checked: nodeTypeBrowser.visible
Accessible.name: "Toggle Node Types Browser"
Accessible.role: Accessible.Button
onClicked: nodeTypeBrowser.visible = !nodeTypeBrowser.visible
}
}
}
Loading