Skip to content

Commit 1280289

Browse files
committed
Support displaying audio file status
1 parent 20080a4 commit 1280289

1 file changed

Lines changed: 74 additions & 1 deletion

File tree

src/plugins/audiovisualizer/qml/AudioThumbnail.qml

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import QtQml
22
import QtQuick
3+
import QtQuick.Controls.impl
34

45
import SVSCraft
56
import SVSCraft.UIComponents
67

78
import dev.sjimo.ScopicFlow
89

10+
import DiffScope.DspxModel as DspxModel
11+
import DiffScope.Audio
912
import DiffScope.VisualEditor
1013

1114
Item {
@@ -17,13 +20,83 @@ Item {
1720
required property double viewportOffset
1821
required property double viewportLength
1922

23+
readonly property DspxModel.AudioClip audioClip: projectViewModelContext?.getClipDocumentItemFromViewItem(clipViewModel) ?? null
24+
readonly property AudioClipAudioContext audioClipAudioContext: AudioQmlHelper.getAudioClipAudioContext(audioClip)
25+
2026
AudioThumbnailWaveformThumbnail {
2127
anchors.fill: parent
22-
audioClip: d.projectViewModelContext?.getClipDocumentItemFromViewItem(d.clipViewModel) ?? null
28+
audioClip: d.audioClip
2329
projectWindowInterface: d.projectViewModelContext?.windowHandle ?? null
2430
viewportOffset: d.viewportOffset
2531
viewportLength: d.viewportLength
2632
color: Theme.foregroundPrimaryColor
2733
}
2834

35+
Rectangle {
36+
color: Theme.backgroundQuaternaryColor
37+
x: Math.min(d.viewportOffset * d.width / (d.clipViewModel?.length ?? 0) + 8, d.width - width - 8)
38+
anchors.bottom: parent.bottom
39+
anchors.bottomMargin: 4
40+
width: label.implicitWidth + 8
41+
height: label.implicitHeight + 8
42+
opacity: 0.9
43+
visible: {
44+
switch (d.audioClipAudioContext?.status) {
45+
case AudioClipAudioContext.Unknown:
46+
case AudioClipAudioContext.Ready:
47+
return false
48+
default:
49+
return true
50+
}
51+
}
52+
IconLabel {
53+
id: label
54+
anchors.centerIn: parent
55+
icon.width: 16
56+
icon.height: 16
57+
spacing: 4
58+
font: Theme.font
59+
color: {
60+
switch (d.audioClipAudioContext?.status) {
61+
case AudioClipAudioContext.FileNotFound:
62+
case AudioClipAudioContext.FileLoadFailed:
63+
return Theme.errorColor
64+
default:
65+
return Theme.warningColor
66+
}
67+
}
68+
icon.source: {
69+
switch (d.audioClipAudioContext?.status) {
70+
case AudioClipAudioContext.FileNotFound:
71+
case AudioClipAudioContext.FileLoadFailed:
72+
return "image://fluent-system-icons/error_circle"
73+
default:
74+
return "image://fluent-system-icons/warning"
75+
}
76+
}
77+
icon.color: {
78+
switch (d.audioClipAudioContext?.status) {
79+
case AudioClipAudioContext.FileNotFound:
80+
case AudioClipAudioContext.FileLoadFailed:
81+
return Theme.errorColor
82+
default:
83+
return Theme.warningColor
84+
}
85+
}
86+
text: {
87+
switch (d.audioClipAudioContext?.status) {
88+
case AudioClipAudioContext.FileNotFound:
89+
return "Audio file not found"
90+
case AudioClipAudioContext.FileLoadFailed:
91+
return "Audio file failed to load"
92+
case AudioClipAudioContext.FileMoved:
93+
return "Audio file moved"
94+
case AudioClipAudioContext.FileContentChanged:
95+
return "Audio file content changed"
96+
}
97+
return ""
98+
}
99+
}
100+
}
101+
29102
}

0 commit comments

Comments
 (0)