11import QtQml
22import QtQuick
3+ import QtQuick.Controls.impl
34
45import SVSCraft
56import SVSCraft.UIComponents
67
78import dev.sjimo.ScopicFlow
89
10+ import DiffScope.DspxModel as DspxModel
11+ import DiffScope.Audio
912import DiffScope.VisualEditor
1013
1114Item {
@@ -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