diff --git a/src/appshell/view/appmenumodel.cpp b/src/appshell/view/appmenumodel.cpp index edffb61fab75c..90cfae77a6190 100644 --- a/src/appshell/view/appmenumodel.cpp +++ b/src/appshell/view/appmenumodel.cpp @@ -436,6 +436,7 @@ MenuItem* AppMenuModel::makeDiagnosticsMenu() MenuItemList items { makeMenuItem("diagnostic-save-diagnostic-files"), + makeMenuItem("playback-reload-cache"), makeMenu(TranslatableString("appshell/menu/diagnostics", "&System"), systemItems, "menu-system") }; diff --git a/src/notation/inotationplayback.h b/src/notation/inotationplayback.h index edc51847db1f7..86e161951a3d5 100644 --- a/src/notation/inotationplayback.h +++ b/src/notation/inotationplayback.h @@ -38,6 +38,7 @@ class INotationPlayback virtual ~INotationPlayback() = default; virtual void init() = 0; + virtual void reload() = 0; virtual const engraving::InstrumentTrackId& metronomeTrackId() const = 0; virtual engraving::InstrumentTrackId chordSymbolsTrackId(const muse::ID& partId) const = 0; diff --git a/src/notation/internal/notationplayback.cpp b/src/notation/internal/notationplayback.cpp index 38f5b8e034e8e..cbd1710ff358b 100644 --- a/src/notation/internal/notationplayback.cpp +++ b/src/notation/internal/notationplayback.cpp @@ -105,6 +105,11 @@ void NotationPlayback::init() }); } +void NotationPlayback::reload() +{ + m_playbackModel.reload(); +} + const engraving::InstrumentTrackId& NotationPlayback::metronomeTrackId() const { return m_playbackModel.metronomeTrackId(); diff --git a/src/notation/internal/notationplayback.h b/src/notation/internal/notationplayback.h index 8d369ce605ce2..fd3a17c0eedf5 100644 --- a/src/notation/internal/notationplayback.h +++ b/src/notation/internal/notationplayback.h @@ -43,6 +43,7 @@ class NotationPlayback : public INotationPlayback, public muse::async::Asyncable NotationPlayback(IGetScore* getScore, muse::async::Notification notationChanged, const muse::modularity::ContextPtr& iocCtx); void init() override; + void reload() override; const engraving::InstrumentTrackId& metronomeTrackId() const override; engraving::InstrumentTrackId chordSymbolsTrackId(const muse::ID& partId) const override; diff --git a/src/notation/internal/notationplaybackstub.cpp b/src/notation/internal/notationplaybackstub.cpp index 283ea6c396f68..26d14e3e03604 100644 --- a/src/notation/internal/notationplaybackstub.cpp +++ b/src/notation/internal/notationplaybackstub.cpp @@ -36,6 +36,10 @@ void NotationPlaybackStub::init() { } +void NotationPlaybackStub::reload() +{ +} + const engraving::InstrumentTrackId& NotationPlaybackStub::metronomeTrackId() const { static const engraving::InstrumentTrackId dummy; diff --git a/src/notation/internal/notationplaybackstub.h b/src/notation/internal/notationplaybackstub.h index ab21e87b4a146..14c6279132989 100644 --- a/src/notation/internal/notationplaybackstub.h +++ b/src/notation/internal/notationplaybackstub.h @@ -30,6 +30,7 @@ class NotationPlaybackStub : public INotationPlayback NotationPlaybackStub(); void init() override; + void reload() override; const engraving::InstrumentTrackId& metronomeTrackId() const override; engraving::InstrumentTrackId chordSymbolsTrackId(const muse::ID& partId) const override; diff --git a/src/playback/internal/playbackcontroller.cpp b/src/playback/internal/playbackcontroller.cpp index ed3288bda53a8..bdfe9935ae5ff 100644 --- a/src/playback/internal/playbackcontroller.cpp +++ b/src/playback/internal/playbackcontroller.cpp @@ -107,6 +107,7 @@ void PlaybackController::init() dispatcher()->reg(this, COUNT_IN_CODE, this, &PlaybackController::toggleCountIn); dispatcher()->reg(this, PLAYBACK_SETUP, this, &PlaybackController::openPlaybackSetupDialog); dispatcher()->reg(this, TOGGLE_HEAR_PLAYBACK_WHEN_EDITING_CODE, this, &PlaybackController::toggleHearPlaybackWhenEditing); + dispatcher()->reg(this, "playback-reload-cache", this, &PlaybackController::reloadPlaybackCache); globalContext()->currentNotationChanged().onNotify(this, [this]() { onNotationChanged(); @@ -824,6 +825,14 @@ void PlaybackController::toggleHearPlaybackWhenEditing() configuration()->setPlayNotesWhenEditing(!wasPlayNotesWhenEditing); } +void PlaybackController::reloadPlaybackCache() +{ + INotationPlaybackPtr playback = notationPlayback(); + if (playback) { + playback->reload(); + } +} + void PlaybackController::openPlaybackSetupDialog() { interactive()->open("musescore://playback/soundprofilesdialog"); diff --git a/src/playback/internal/playbackcontroller.h b/src/playback/internal/playbackcontroller.h index be1a42229a920..968e2383ee1cc 100644 --- a/src/playback/internal/playbackcontroller.h +++ b/src/playback/internal/playbackcontroller.h @@ -174,6 +174,8 @@ class PlaybackController : public IPlaybackController, public muse::actions::Act void toggleLoopPlayback(); void toggleHearPlaybackWhenEditing(); + void reloadPlaybackCache(); + void openPlaybackSetupDialog(); void addLoopBoundary(notation::LoopBoundaryType type); diff --git a/src/playback/internal/playbackuiactions.cpp b/src/playback/internal/playbackuiactions.cpp index 90025e1919ea3..21476030c60d7 100644 --- a/src/playback/internal/playbackuiactions.cpp +++ b/src/playback/internal/playbackuiactions.cpp @@ -168,6 +168,14 @@ const UiActionList PlaybackUiActions::m_loopBoundaryActions = { ), }; +const UiActionList PlaybackUiActions::m_diagnosticActions = { + UiAction("playback-reload-cache", + mu::context::UiCtxAny, + mu::context::CTX_ANY, + TranslatableString("action", "Reload playback cache") + ) +}; + PlaybackUiActions::PlaybackUiActions(std::shared_ptr controller) : m_controller(controller) { @@ -199,6 +207,7 @@ const UiActionList& PlaybackUiActions::actionsList() const alist.insert(alist.end(), m_midiInputPitchActions.cbegin(), m_midiInputPitchActions.cend()); alist.insert(alist.end(), m_settingsActions.cbegin(), m_settingsActions.cend()); alist.insert(alist.end(), m_loopBoundaryActions.cbegin(), m_loopBoundaryActions.cend()); + alist.insert(alist.end(), m_diagnosticActions.cbegin(), m_diagnosticActions.cend()); } return alist; } diff --git a/src/playback/internal/playbackuiactions.h b/src/playback/internal/playbackuiactions.h index f3ab0f98b63cb..8427059982405 100644 --- a/src/playback/internal/playbackuiactions.h +++ b/src/playback/internal/playbackuiactions.h @@ -60,6 +60,7 @@ class PlaybackUiActions : public muse::ui::IUiActionsModule, public muse::async: static const muse::ui::UiActionList m_midiInputPitchActions; static const muse::ui::UiActionList m_settingsActions; static const muse::ui::UiActionList m_loopBoundaryActions; + static const muse::ui::UiActionList m_diagnosticActions; std::shared_ptr m_controller; muse::async::Channel m_actionEnabledChanged;