diff --git a/meshroom/nodes/aliceVision/ConvertSfMFormat.py b/meshroom/nodes/aliceVision/ConvertSfMFormat.py index de64850574..09822aacdf 100644 --- a/meshroom/nodes/aliceVision/ConvertSfMFormat.py +++ b/meshroom/nodes/aliceVision/ConvertSfMFormat.py @@ -38,6 +38,7 @@ class ConvertSfMFormat(desc.AVCommandLineNode): value=["dspsift"], exclusive=False, joinChar=",", + exposed=True, ), desc.ListAttribute( elementDesc=desc.File( diff --git a/meshroom/nodes/aliceVision/FeatureExtraction.py b/meshroom/nodes/aliceVision/FeatureExtraction.py index 29e7afd483..037a02631e 100644 --- a/meshroom/nodes/aliceVision/FeatureExtraction.py +++ b/meshroom/nodes/aliceVision/FeatureExtraction.py @@ -66,6 +66,7 @@ class FeatureExtraction(desc.AVCommandLineNode): value=["dspsift"], exclusive=False, joinChar=",", + exposed=True, ), desc.ChoiceParam( name="describerPreset", diff --git a/meshroom/nodes/aliceVision/FeatureMatching.py b/meshroom/nodes/aliceVision/FeatureMatching.py index 10aba6f0e0..fcff21d7a1 100644 --- a/meshroom/nodes/aliceVision/FeatureMatching.py +++ b/meshroom/nodes/aliceVision/FeatureMatching.py @@ -50,6 +50,7 @@ class FeatureMatching(desc.AVCommandLineNode): name="featuresFolders", label="Features Folders", description="Folder(s) containing the extracted features and descriptors.", + exposed=True, ), desc.File( name="imagePairsList", @@ -65,6 +66,7 @@ class FeatureMatching(desc.AVCommandLineNode): value=["dspsift"], exclusive=False, joinChar=",", + exposed=True, ), desc.ChoiceParam( name="photometricMatchingMethod", diff --git a/meshroom/nodes/aliceVision/ImageMatching.py b/meshroom/nodes/aliceVision/ImageMatching.py index c87e7be20e..e5aa0b728a 100644 --- a/meshroom/nodes/aliceVision/ImageMatching.py +++ b/meshroom/nodes/aliceVision/ImageMatching.py @@ -50,6 +50,7 @@ class ImageMatching(desc.AVCommandLineNode): name="featuresFolders", label="Features Folders", description="Folder(s) containing the extracted features and descriptors.", + exposed=True, ), desc.ChoiceParam( name="method", diff --git a/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py b/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py index 8040dce19a..ce90f20554 100644 --- a/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py +++ b/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py @@ -41,6 +41,7 @@ class ImageMatchingMultiSfM(desc.AVCommandLineNode): name="featuresFolders", label="Features Folders", description="Folder(s) containing the extracted features and descriptors.", + exposed=True, ), desc.ChoiceParam( name="method", diff --git a/meshroom/nodes/aliceVision/LdrToHdrCalibration.py b/meshroom/nodes/aliceVision/LdrToHdrCalibration.py index 1270e6e743..a461db992d 100644 --- a/meshroom/nodes/aliceVision/LdrToHdrCalibration.py +++ b/meshroom/nodes/aliceVision/LdrToHdrCalibration.py @@ -61,6 +61,7 @@ class LdrToHdrCalibration(desc.AVCommandLineNode): group="user", # not used directly on the command line errorMessage="The set number of brackets is not a multiple of the number of input images.\n" "Errors will occur during the computation.", + exposed=True, ), desc.IntParam( name="nbBrackets", @@ -78,6 +79,7 @@ class LdrToHdrCalibration(desc.AVCommandLineNode): description="Bypass HDR creation and use the medium bracket as the source for the next steps.", value=False, enabled=lambda node: node.nbBrackets.value != 1, + exposed=True, ), desc.ChoiceParam( name="calibrationMethod", @@ -92,6 +94,7 @@ class LdrToHdrCalibration(desc.AVCommandLineNode): value="auto", exclusive=True, enabled=lambda node: node.byPass.enabled and not node.byPass.value, + exposed=True, ), desc.ChoiceParam( name="calibrationWeight", @@ -114,6 +117,7 @@ class LdrToHdrCalibration(desc.AVCommandLineNode): range=(8, 14, 1), advanced=True, enabled=lambda node: node.byPass.enabled and not node.byPass.value, + exposed=True, ), desc.ChoiceParam( name="workingColorSpace", @@ -126,6 +130,7 @@ class LdrToHdrCalibration(desc.AVCommandLineNode): invalidate=False, group="user", # not used directly on the command line enabled=lambda node: node.byPass.enabled and not node.byPass.value, + exposed=True, ), desc.IntParam( name="maxTotalPoints", diff --git a/meshroom/nodes/aliceVision/LdrToHdrMerge.py b/meshroom/nodes/aliceVision/LdrToHdrMerge.py index 624e32ccb4..929de5063e 100644 --- a/meshroom/nodes/aliceVision/LdrToHdrMerge.py +++ b/meshroom/nodes/aliceVision/LdrToHdrMerge.py @@ -60,6 +60,7 @@ class LdrToHdrMerge(desc.AVCommandLineNode): group="user", # not used directly on the command line errorMessage="The set number of brackets is not a multiple of the number of input images.\n" "Errors will occur during the computation.", + exposed=True, ), desc.IntParam( name="nbBrackets", @@ -124,6 +125,7 @@ class LdrToHdrMerge(desc.AVCommandLineNode): description="Bypass HDR creation and use the medium bracket as the source for the next steps.", value=False, enabled=lambda node: node.nbBrackets.value != 1, + exposed=True, ), desc.BoolParam( name="keepSourceImageName", @@ -151,6 +153,7 @@ class LdrToHdrMerge(desc.AVCommandLineNode): range=(8, 14, 1), advanced=True, enabled=lambda node: node.byPass.enabled and not node.byPass.value, + exposed=True, ), desc.ChoiceParam( name="workingColorSpace", @@ -161,6 +164,7 @@ class LdrToHdrMerge(desc.AVCommandLineNode): value="AUTO", exclusive=True, enabled=lambda node: node.byPass.enabled and not node.byPass.value, + exposed=True, ), desc.BoolParam( name="enableHighlight", diff --git a/meshroom/nodes/aliceVision/LdrToHdrSampling.py b/meshroom/nodes/aliceVision/LdrToHdrSampling.py index 19a359fef6..061e994629 100644 --- a/meshroom/nodes/aliceVision/LdrToHdrSampling.py +++ b/meshroom/nodes/aliceVision/LdrToHdrSampling.py @@ -76,6 +76,7 @@ class LdrToHdrSampling(desc.AVCommandLineNode): group="user", # not used directly on the command line errorMessage="The set number of brackets is not a multiple of the number of input images.\n" "Errors will occur during the computation.", + exposed=True, ), desc.IntParam( name="nbBrackets", @@ -93,6 +94,7 @@ class LdrToHdrSampling(desc.AVCommandLineNode): description="Bypass HDR creation and use the medium bracket as the source for the next steps.", value=False, enabled=lambda node: node.nbBrackets.value != 1, + exposed=True, ), desc.ChoiceParam( name="calibrationMethod", @@ -107,6 +109,7 @@ class LdrToHdrSampling(desc.AVCommandLineNode): value="auto", exclusive=True, enabled=lambda node: node.byPass.enabled and not node.byPass.value, + exposed=True, ), desc.IntParam( name="channelQuantizationPower", @@ -116,6 +119,7 @@ class LdrToHdrSampling(desc.AVCommandLineNode): range=(8, 14, 1), advanced=True, enabled=lambda node: node.byPass.enabled and not node.byPass.value, + exposed=True, ), desc.ChoiceParam( name="workingColorSpace", @@ -126,6 +130,7 @@ class LdrToHdrSampling(desc.AVCommandLineNode): value="AUTO", exclusive=True, enabled=lambda node: node.byPass.enabled and not node.byPass.value, + exposed=True, ), desc.IntParam( name="blockSize", diff --git a/meshroom/nodes/aliceVision/PanoramaCompositing.py b/meshroom/nodes/aliceVision/PanoramaCompositing.py index 983f53387c..811a0ddce7 100644 --- a/meshroom/nodes/aliceVision/PanoramaCompositing.py +++ b/meshroom/nodes/aliceVision/PanoramaCompositing.py @@ -75,6 +75,7 @@ class PanoramaCompositing(desc.AVCommandLineNode): label="Use Tiling", description="Enable tiling mode for parallelization.", value=True, + exposed=True, ), desc.ChoiceParam( name="storageDataType", diff --git a/meshroom/nodes/aliceVision/PanoramaEstimation.py b/meshroom/nodes/aliceVision/PanoramaEstimation.py index e1361c0688..80034348c5 100644 --- a/meshroom/nodes/aliceVision/PanoramaEstimation.py +++ b/meshroom/nodes/aliceVision/PanoramaEstimation.py @@ -33,6 +33,7 @@ class PanoramaEstimation(desc.AVCommandLineNode): name="featuresFolders", label="Features Folders", description="Folder(s) containing the extracted features.", + exposed=True, ), desc.ListAttribute( elementDesc=desc.File( @@ -53,6 +54,7 @@ class PanoramaEstimation(desc.AVCommandLineNode): value=["sift"], exclusive=False, joinChar=",", + exposed=True, ), desc.FloatParam( name="offsetLongitude", diff --git a/meshroom/nodes/aliceVision/PanoramaMerging.py b/meshroom/nodes/aliceVision/PanoramaMerging.py index 4e5d792478..b684bd592d 100644 --- a/meshroom/nodes/aliceVision/PanoramaMerging.py +++ b/meshroom/nodes/aliceVision/PanoramaMerging.py @@ -45,6 +45,7 @@ class PanoramaMerging(desc.AVCommandLineNode): label="Use Tiling", description="Enable tiling mode for parallelization.", value=True, + exposed=True, ), desc.ChoiceParam( name="storageDataType", diff --git a/meshroom/nodes/aliceVision/SfMTriangulation.py b/meshroom/nodes/aliceVision/SfMTriangulation.py index e7a87ae540..025dbf47cf 100644 --- a/meshroom/nodes/aliceVision/SfMTriangulation.py +++ b/meshroom/nodes/aliceVision/SfMTriangulation.py @@ -31,6 +31,7 @@ class SfMTriangulation(desc.AVCommandLineNode): name="featuresFolders", label="Features Folders", description="Folder(s) containing the extracted features and descriptors.", + exposed=True, ), desc.ListAttribute( elementDesc=desc.File( @@ -42,6 +43,7 @@ class SfMTriangulation(desc.AVCommandLineNode): name="matchesFolders", label="Matches Folders", description="Folder(s) in which computed matches are stored.", + exposed=True, ), desc.ChoiceParam( name="describerTypes", diff --git a/meshroom/nodes/aliceVision/StructureFromMotion.py b/meshroom/nodes/aliceVision/StructureFromMotion.py index d9b20585db..f16c92f129 100644 --- a/meshroom/nodes/aliceVision/StructureFromMotion.py +++ b/meshroom/nodes/aliceVision/StructureFromMotion.py @@ -82,6 +82,7 @@ class StructureFromMotion(desc.AVCommandLineNode): name="featuresFolders", label="Features Folders", description="Folder(s) containing the extracted features and descriptors.", + exposed=True, ), desc.ListAttribute( elementDesc=desc.File( @@ -93,6 +94,7 @@ class StructureFromMotion(desc.AVCommandLineNode): name="matchesFolders", label="Matches Folders", description="Folder(s) in which the computed matches are stored.", + exposed=True, ), desc.ChoiceParam( name="describerTypes", @@ -102,6 +104,7 @@ class StructureFromMotion(desc.AVCommandLineNode): value=["dspsift"], exclusive=False, joinChar=",", + exposed=True, ), desc.ChoiceParam( name="localizerEstimator", diff --git a/meshroom/nodes/aliceVision/TracksBuilding.py b/meshroom/nodes/aliceVision/TracksBuilding.py index 870c6339d4..c6cb841ea2 100644 --- a/meshroom/nodes/aliceVision/TracksBuilding.py +++ b/meshroom/nodes/aliceVision/TracksBuilding.py @@ -30,6 +30,7 @@ class TracksBuilding(desc.AVCommandLineNode): name="featuresFolders", label="Features Folders", description="Folder(s) containing the extracted features and descriptors.", + exposed=True, ), desc.ListAttribute( elementDesc=desc.File( diff --git a/meshroom/ui/qml/Application.qml b/meshroom/ui/qml/Application.qml index 05b986ab43..02e02e48fa 100644 --- a/meshroom/ui/qml/Application.qml +++ b/meshroom/ui/qml/Application.qml @@ -591,9 +591,14 @@ Page { elide: Text.ElideLeft elideWidth: newPipelineMenu.maxWidth } - ToolTip.text: modelData["path"] - ToolTip.visible: hovered - ToolTip.delay: 200 + + ToolTip { + id: toolTip + + delay: 200 + text: modelData["path"] + visible: hovered + } } } } @@ -1037,7 +1042,7 @@ Page { headerBar: RowLayout { MaterialToolButton { - text: MaterialIcons.refresh + text: MaterialIcons.sync ToolTip.text: "Refresh Nodes Status" ToolTip.visible: hovered font.pointSize: 11 @@ -1051,45 +1056,30 @@ Page { enabled: !updatingStatus } MaterialToolButton { - id: filePollerRefreshStatus - text: { - if (_reconstruction.filePollerRefresh === 0) - return MaterialIcons.published_with_changes - else if (_reconstruction.filePollerRefresh === 2) - return MaterialIcons.sync - else - return MaterialIcons.sync_disabled - } + text: MaterialIcons.more_vert font.pointSize: 11 padding: 2 - enabled: true - ToolTip { - id: filePollerTooltip - property string title: "Auto-Refresh Nodes Status For External Changes. " - property string description: "Check if the status of a node is changed by another instance on the same network, " + - "such as when computing in render farm." - text: { - var status = "" - if (_reconstruction.filePollerRefresh === 0) - status = "Enabled" - else if (_reconstruction.filePollerRefresh === 2) - status = "Minimal" - else - status = "Disabled" - return title + "(Current: " + status + ")\n\n" + description - } - visible: filePollerRefreshStatus.hovered - contentWidth: 420 - } - onClicked: { - refreshFilesMenu.open() - } + onClicked: graphEditorMenu.open() + checkable: true + checked: graphEditorMenu.visible Menu { - id: refreshFilesMenu - width: 210 + id: graphEditorMenu y: parent.height x: -width + parent.width MenuItem { + text: "Clear Pending Status" + enabled: _reconstruction ? !_reconstruction.computingLocally : false + onTriggered: _reconstruction.graph.clearSubmittedNodes() + } + MenuItem { + text: "Force Unlock Nodes" + onTriggered: _reconstruction.graph.forceUnlockNodes() + } + + Menu { + title: "Refresh Nodes Status" + + MenuItem { id: enableAutoRefresh text: "Enable Auto-Refresh" checkable: true @@ -1105,8 +1095,6 @@ Page { } // Prevents cases where the user unchecks the currently checked option enableAutoRefresh.checked = true - filePollerRefreshStatus.text = MaterialIcons.published_with_changes - filePollerTooltip.text = filePollerTooltip.title + "(Current: Enabled)\n\n" + filePollerTooltip.description } } MenuItem { @@ -1125,8 +1113,6 @@ Page { } // Prevents cases where the user unchecks the currently checked option disableAutoRefresh.checked = true - filePollerRefreshStatus.text = MaterialIcons.sync_disabled - filePollerTooltip.text = filePollerTooltip.title + "(Current: Disabled)\n\n" + filePollerTooltip.description } } MenuItem { @@ -1145,31 +1131,8 @@ Page { } // Prevents cases where the user unchecks the currently checked option minimalAutoRefresh.checked = true - filePollerRefreshStatus.text = MaterialIcons.sync - filePollerTooltip.text = filePollerTooltip.title + "(Current: Minimal)\n\n" + filePollerTooltip.description } } - } - } - MaterialToolButton { - text: MaterialIcons.more_vert - font.pointSize: 11 - padding: 2 - onClicked: graphEditorMenu.open() - checkable: true - checked: graphEditorMenu.visible - Menu { - id: graphEditorMenu - y: parent.height - x: -width + parent.width - MenuItem { - text: "Clear Pending Status" - enabled: _reconstruction ? !_reconstruction.computingLocally : false - onTriggered: _reconstruction.graph.clearSubmittedNodes() - } - MenuItem { - text: "Force Unlock Nodes" - onTriggered: _reconstruction.graph.forceUnlockNodes() } } } diff --git a/meshroom/ui/qml/GraphEditor/AttributeItemDelegate.qml b/meshroom/ui/qml/GraphEditor/AttributeItemDelegate.qml index f6f1de7b9e..83f26c1288 100644 --- a/meshroom/ui/qml/GraphEditor/AttributeItemDelegate.qml +++ b/meshroom/ui/qml/GraphEditor/AttributeItemDelegate.qml @@ -33,7 +33,7 @@ RowLayout { var tooltip = "" if (!attribute.validValue && attribute.desc.errorMessage !== "") tooltip += "Error: " + Format.plainToHtml(attribute.desc.errorMessage) + "

" - tooltip += " " + attribute.desc.name + ": " + attribute.type + "
" + Format.plainToHtml(attribute.desc.description) + tooltip += " " + attribute.desc.name + ": " + attribute.type + "
" + Format.plainToHtml(attribute.desc.description) parameterTooltip.text = tooltip } @@ -78,7 +78,7 @@ RowLayout { var tooltip = "" if (!object.validValue && object.desc.errorMessage !== "") tooltip += "Error: " + Format.plainToHtml(object.desc.errorMessage) + "

" - tooltip += "" + object.desc.name + ": " + attribute.type + "
" + Format.plainToHtml(object.description) + tooltip += "" + object.desc.name + ": " + attribute.type + "
" + Format.plainToHtml(object.description) return tooltip } visible: parameterMA.containsMouse