Skip to content

Commit 8c297cb

Browse files
authored
Merge pull request #2250 from alicevision/dev/catchMissingFile
[Viewer] Display error labels when an image cannot be loaded
2 parents 35b69f1 + 64c56e0 commit 8c297cb

File tree

2 files changed

+49
-13
lines changed

2 files changed

+49
-13
lines changed

meshroom/ui/qml/Viewer/FloatImage.qml

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,19 @@ AliceVision.FloatImageViewer {
1515
height: sourceSize.height
1616
visible: true
1717

18-
// paintedWidth / paintedHeight / status for compatibility with standard Image
18+
// paintedWidth / paintedHeight / imageStatus for compatibility with standard Image
1919
property int paintedWidth: sourceSize.width
2020
property int paintedHeight: sourceSize.height
21-
property var status: {
22-
if (root.loading)
23-
return Image.Loading;
24-
else if ((root.source === "") ||
25-
(root.sourceSize.height <= 0) ||
26-
(root.sourceSize.width <= 0))
21+
property var imageStatus: {
22+
if (root.status === AliceVision.FloatImageViewer.EStatus.LOADING) {
23+
return Image.Loading
24+
} else if (root.status === AliceVision.FloatImageViewer.EStatus.ERROR ||
25+
root.status === AliceVision.FloatImageViewer.EStatus.MISSING_FILE ||
26+
root.status === AliceVision.FloatImageViewer.EStatus.OUTDATED_LOADING) {
27+
return Image.Error
28+
} else if ((root.source === "") || (root.sourceSize.height <= 0) || (root.sourceSize.width <= 0)) {
2729
return Image.Null
30+
}
2831

2932
return Image.Ready
3033
}

meshroom/ui/qml/Viewer/Viewer2D.qml

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -463,11 +463,11 @@ FocusScope {
463463
'gamma': Qt.binding(function() { return hdrImageToolbar.gammaValue }),
464464
'gain': Qt.binding(function() { return hdrImageToolbar.gainValue }),
465465
'channelModeString': Qt.binding(function() { return hdrImageToolbar.channelModeValue }),
466-
'isPrincipalPointsDisplayed' : Qt.binding(function() { return lensDistortionImageToolbar.displayPrincipalPoint }),
467-
'surface.displayGrid' : Qt.binding(function() { return lensDistortionImageToolbar.visible && lensDistortionImageToolbar.displayGrid }),
468-
'surface.gridOpacity' : Qt.binding(function() { return lensDistortionImageToolbar.opacityValue }),
469-
'surface.gridColor' : Qt.binding(function() { return lensDistortionImageToolbar.color }),
470-
'surface.subdivisions' : Qt.binding(function() { return root.useFloatImageViewer ? 1 : lensDistortionImageToolbar.subdivisionsValue }),
466+
'isPrincipalPointsDisplayed': Qt.binding(function() { return lensDistortionImageToolbar.displayPrincipalPoint }),
467+
'surface.displayGrid': Qt.binding(function() { return lensDistortionImageToolbar.visible && lensDistortionImageToolbar.displayGrid }),
468+
'surface.gridOpacity': Qt.binding(function() { return lensDistortionImageToolbar.opacityValue }),
469+
'surface.gridColor': Qt.binding(function() { return lensDistortionImageToolbar.color }),
470+
'surface.subdivisions': Qt.binding(function() { return root.useFloatImageViewer ? 1 : lensDistortionImageToolbar.subdivisionsValue }),
471471
'viewerTypeString': Qt.binding(function() { return displayLensDistortionViewer.checked ? "distortion" : "hdr" }),
472472
'sfmRequired': Qt.binding(function() { return displayLensDistortionViewer.checked ? true : false }),
473473
'surface.msfmData': Qt.binding(function() { return (msfmDataLoader.status === Loader.Ready && msfmDataLoader.item != null && msfmDataLoader.item.status === 2) ? msfmDataLoader.item : null }),
@@ -476,7 +476,7 @@ FocusScope {
476476
'cropFisheye': false,
477477
'sequence': Qt.binding(function() { return ((root.enableSequencePlayer && _reconstruction && _reconstruction.viewpoints.count > 0) ? getSequence() : []) }),
478478
'targetSize': Qt.binding(function() { return floatImageViewerLoader.targetSize }),
479-
'useSequence': Qt.binding(function() { return root.enableSequencePlayer && !useExternal && _reconstruction }),
479+
'useSequence': Qt.binding(function() { return root.enableSequencePlayer && !useExternal && _reconstruction })
480480
})
481481
} else {
482482
// Forcing the unload (instead of using Component.onCompleted to load it once and for all) is necessary since Qt 5.14
@@ -745,6 +745,39 @@ FocusScope {
745745
}
746746
}
747747
}
748+
749+
FloatingPane {
750+
Layout.fillWidth: true
751+
Layout.fillHeight: false
752+
Layout.preferredHeight: childrenRect.height
753+
visible: floatImageViewerLoader.item.imageStatus === Image.Error
754+
Layout.alignment: Qt.AlignHCenter
755+
756+
RowLayout {
757+
anchors.fill: parent
758+
759+
Label {
760+
font.pointSize: 8
761+
text: {
762+
switch (floatImageViewerLoader.item.status) {
763+
case 2: // AliceVision.FloatImageViewer.EStatus.OUTDATED_LOADING
764+
return "Outdated Loading"
765+
case 3: // AliceVision.FloatImageViewer.EStatus.MISSING_FILE
766+
return "Missing File"
767+
case 4: // AliceVision.FloatImageViewer.EStatus.ERROR
768+
return "Error"
769+
default:
770+
return ""
771+
}
772+
}
773+
horizontalAlignment: Text.AlignHCenter
774+
verticalAlignment: Text.AlignVCenter
775+
Layout.fillWidth: true
776+
Layout.alignment: Qt.AlignHCenter
777+
}
778+
}
779+
}
780+
748781
Item {
749782
id: imgPlaceholder
750783
Layout.fillWidth: true

0 commit comments

Comments
 (0)