Skip to content

Commit 277ee2b

Browse files
committed
Fix #41
1 parent e7675de commit 277ee2b

6 files changed

Lines changed: 62 additions & 7 deletions

File tree

src/plugins/audio/internal/addon/ProjectAudioAddOn.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,15 +451,18 @@ namespace Audio::Internal {
451451
Q_ASSERT(trackContext);
452452
auto context = AudioClipAudioContextPrivate::create(windowHandle()->cast<Core::ProjectWindowInterface>(), audioClip, TrackAudioContextPrivate::of(trackContext)->trackContext);
453453
syncAudioClip(audioClip, context);
454+
Q_EMIT audioClipAudioContextChanged(audioClip, context);
454455
}
455456

456457
void ProjectAudioAddOn::removeClip(dspx::Clip *clip) {
457458
if (!clip || clip->type() != dspx::Clip::Audio) {
458459
return;
459460
}
460-
auto context = AudioClipAudioContext::of(static_cast<dspx::AudioClip *>(clip));
461+
auto audioClip = static_cast<dspx::AudioClip *>(clip);
462+
auto context = AudioClipAudioContext::of(audioClip);
461463
if (context) {
462464
delete context;
465+
Q_EMIT audioClipAudioContextChanged(audioClip, nullptr);
463466
}
464467
}
465468

src/plugins/audio/internal/addon/ProjectAudioAddOn.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ namespace Audio::Internal {
5959
void addAudioClipCache(dspx::AudioClip *clip, talcs::AbstractAudioFormatIO *io);
6060
talcs::AbstractAudioFormatIO *takeAudioClipCache(dspx::AudioClip *clip);
6161

62+
Q_SIGNALS:
63+
void audioClipAudioContextChanged(dspx::AudioClip *clip, AudioClipAudioContext *context);
64+
6265
private Q_SLOTS:
6366
void addTrack(int index, dspx::Track *track);
6467
void removeTrack(int index, dspx::Track *track);

src/plugins/audio/internal/utils/AudioQmlHelper.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include <audio/AudioClipAudioContext.h>
1313
#include <audio/internal/AudioClipAddOn.h>
14+
#include <audio/internal/ProjectAudioAddOn.h>
1415

1516
namespace Audio::Internal {
1617

@@ -42,6 +43,10 @@ namespace Audio::Internal {
4243
return AudioClipAddOn::of(win);
4344
}
4445

46+
QObject *AudioQmlHelper::getProjectAudioAddOn(Core::ProjectWindowInterface *win) {
47+
return win ? ProjectAudioAddOn::of(win) : nullptr;
48+
}
49+
4550
}
4651

4752
#include "moc_AudioQmlHelper.cpp"

src/plugins/audio/internal/utils/AudioQmlHelper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ namespace Audio::Internal {
3939
Q_INVOKABLE static AudioClipAudioContext *getAudioClipAudioContext(QObject *object);
4040
Q_INVOKABLE static QString getNativeSeparatorPath(const QString &path);
4141
Q_INVOKABLE static AudioClipAddOn *getAudioClipAddOn(Core::ProjectWindowInterface *win);
42+
Q_INVOKABLE static QObject *getProjectAudioAddOn(Core::ProjectWindowInterface *win);
4243
};
4344

4445
}

src/plugins/audio/qml/propertyeditors/AudioPropertyEditor.qml

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,28 @@ PropertyEditorGroupBox {
1717
required property ProjectWindowInterface windowHandle
1818
required property QtObject propertyMapper
1919
readonly property QtObject audioClip: groupBox.windowHandle?.projectDocumentContext.document.selectionModel.clipSelectionModel.selectedItems[0] ?? null
20-
readonly property QtObject audioClipAudioContext: AudioQmlHelper.getAudioClipAudioContext(groupBox.audioClip)
20+
readonly property QtObject projectAudioAddOn: AudioQmlHelper.getProjectAudioAddOn(groupBox.windowHandle)
21+
property QtObject audioClipAudioContext: null
22+
23+
function refreshAudioClipAudioContext() {
24+
audioClipAudioContext = AudioQmlHelper.getAudioClipAudioContext(audioClip)
25+
}
26+
27+
onAudioClipChanged: refreshAudioClipAudioContext()
28+
onProjectAudioAddOnChanged: refreshAudioClipAudioContext()
29+
30+
Component.onCompleted: refreshAudioClipAudioContext()
31+
32+
Connections {
33+
target: groupBox.projectAudioAddOn
34+
35+
function onAudioClipAudioContextChanged(audioClip, context) {
36+
if (audioClip === groupBox.audioClip) {
37+
groupBox.audioClipAudioContext = context
38+
}
39+
}
40+
}
41+
2142
title: qsTr("Audio")
2243
visualVisible: propertyMapper?.type === 0
2344
StackLayout {

src/plugins/audiovisualizer/qml/AudioThumbnail.qml

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,27 @@ Item {
2424
required property double viewportLength
2525

2626
readonly property DspxModel.AudioClip audioClip: projectViewModelContext?.getClipDocumentItemFromViewItem(clipViewModel) ?? null
27-
readonly property AudioClipAudioContext audioClipAudioContext: AudioQmlHelper.getAudioClipAudioContext(audioClip)
27+
readonly property QtObject projectAudioAddOn: AudioQmlHelper.getProjectAudioAddOn(projectViewModelContext?.windowHandle ?? null)
28+
property AudioClipAudioContext audioClipAudioContext: null
29+
30+
function refreshAudioClipAudioContext() {
31+
audioClipAudioContext = AudioQmlHelper.getAudioClipAudioContext(audioClip)
32+
}
33+
34+
onAudioClipChanged: refreshAudioClipAudioContext()
35+
onProjectAudioAddOnChanged: refreshAudioClipAudioContext()
36+
37+
Component.onCompleted: refreshAudioClipAudioContext()
38+
39+
Connections {
40+
target: d.projectAudioAddOn
41+
42+
function onAudioClipAudioContextChanged(audioClip, context) {
43+
if (audioClip === d.audioClip) {
44+
d.audioClipAudioContext = context
45+
}
46+
}
47+
}
2848

2949
AudioThumbnailWaveformThumbnail {
3050
anchors.fill: parent
@@ -45,11 +65,13 @@ Item {
4565
opacity: 0.9
4666
visible: {
4767
switch (d.audioClipAudioContext?.status) {
48-
case AudioClipAudioContext.Unknown:
49-
case AudioClipAudioContext.Ready:
50-
return false
51-
default:
68+
case AudioClipAudioContext.FileNotFound:
69+
case AudioClipAudioContext.FileLoadFailed:
70+
case AudioClipAudioContext.FileMoved:
71+
case AudioClipAudioContext.FileContentChanged:
5272
return true
73+
default:
74+
return false
5375
}
5476
}
5577
IconLabel {

0 commit comments

Comments
 (0)