Skip to content

Commit

Permalink
Merge pull request #26818 from Eism/notation_interaction_dialogs_fix_4.5
Browse files Browse the repository at this point in the history
fixed #26594: "No note selected" and similar messages appear multiple times. 4.5
  • Loading branch information
RomanPudashkin authored Feb 28, 2025
2 parents b05197f + f9247cc commit 0398ca8
Show file tree
Hide file tree
Showing 14 changed files with 219 additions and 156 deletions.
24 changes: 23 additions & 1 deletion src/context/internal/uicontextresolver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ using namespace muse::ui;

static const muse::Uri HOME_PAGE_URI("musescore://home");
static const muse::Uri NOTATION_PAGE_URI("musescore://notation");
static const muse::Uri PUBLISH_PAGE_URI("musescore://publish");
static const muse::Uri DEVTOOLS_PAGE_URI("musescore://devtools");

static const muse::Uri EXTENSIONS_DIALOG_URI("muse://extensions/viewer");

static const QString NOTATION_NAVIGATION_PANEL("ScoreView");

Expand Down Expand Up @@ -119,6 +123,21 @@ UiContext UiContextResolver::currentUiContext() const
return context::UiCtxProjectOpened;
}

if (currentUri == PUBLISH_PAGE_URI) {
return context::UiCtxPublishOpened;
}

if (currentUri == DEVTOOLS_PAGE_URI) {
return context::UiCtxDevToolsOpened;
}

if (interactive()->isCurrentUriDialog().val) {
bool isExtensionDialog = currentUri == EXTENSIONS_DIALOG_URI;
if (!isExtensionDialog) {
return context::UiCtxDialogOpened;
}
}

return context::UiCtxUnknown;
}

Expand All @@ -128,7 +147,10 @@ bool UiContextResolver::match(const muse::ui::UiContext& currentCtx, const muse:
return true;
}

if (actCtx == context::UiCtxProjectOpened && globalContext()->currentNotation()) {
//! NOTE: Context could be unknown if a plugin is currently open, in which case we should return true under
//! the following circumstances (see issue #24673)...
if ((currentCtx == context::UiCtxProjectFocused || currentCtx == context::UiCtxUnknown)
&& actCtx == context::UiCtxProjectOpened && globalContext()->currentNotation()) {
return true;
}

Expand Down
6 changes: 6 additions & 0 deletions src/context/uicontext.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ static constexpr muse::ui::UiContext UiCtxAny = muse::ui::UiCtxAny;
static constexpr muse::ui::UiContext UiCtxHomeOpened = muse::ui::UiCtxHomeOpened;
static constexpr muse::ui::UiContext UiCtxProjectOpened = muse::ui::UiCtxProjectOpened;
static constexpr muse::ui::UiContext UiCtxProjectFocused = muse::ui::UiCtxProjectFocused;

static constexpr muse::ui::UiContext UiCtxDialogOpened = muse::ui::UiCtxDialogOpened;

// application-specific contexts
static constexpr muse::ui::UiContext UiCtxPublishOpened = "UiCtxPublishOpened";
static constexpr muse::ui::UiContext UiCtxDevToolsOpened = "UiCtxDevToolsOpened";
}

#endif // MU_CONTEXT_UICONTEXT_H
5 changes: 5 additions & 0 deletions src/framework/autobot/internal/autobotinteractive.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,11 @@ ValCh<Uri> AutobotInteractive::currentUri() const
return m_real->currentUri();
}

RetVal<bool> AutobotInteractive::isCurrentUriDialog() const
{
return m_real->isCurrentUriDialog();
}

std::vector<Uri> AutobotInteractive::stack() const
{
return m_real->stack();
Expand Down
1 change: 1 addition & 0 deletions src/framework/autobot/internal/autobotinteractive.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ class AutobotInteractive : public IInteractive
void closeAllDialogs() override;

ValCh<Uri> currentUri() const override;
RetVal<bool> isCurrentUriDialog() const override;
std::vector<Uri> stack() const override;

Ret openUrl(const std::string& url) const override;
Expand Down
1 change: 1 addition & 0 deletions src/framework/global/iinteractive.h
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ class IInteractive : MODULE_EXPORT_INTERFACE
virtual void closeAllDialogs() = 0;

virtual ValCh<Uri> currentUri() const = 0;
virtual RetVal<bool> isCurrentUriDialog() const = 0;
virtual std::vector<Uri> stack() const = 0;

virtual Ret openUrl(const std::string& url) const = 0;
Expand Down
5 changes: 5 additions & 0 deletions src/framework/global/internal/interactive.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,11 @@ ValCh<Uri> Interactive::currentUri() const
return provider()->currentUri();
}

RetVal<bool> Interactive::isCurrentUriDialog() const
{
return provider()->isCurrentUriDialog();
}

std::vector<Uri> Interactive::stack() const
{
return provider()->stack();
Expand Down
1 change: 1 addition & 0 deletions src/framework/global/internal/interactive.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ class Interactive : public IInteractive, public Injectable, public async::Asynca
void closeAllDialogs() override;

ValCh<Uri> currentUri() const override;
RetVal<bool> isCurrentUriDialog() const override;
std::vector<Uri> stack() const override;

Ret openUrl(const std::string& url) const override;
Expand Down
1 change: 1 addition & 0 deletions src/framework/global/tests/mocks/interactivemock.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ class InteractiveMock : public IInteractive
MOCK_METHOD(void, closeAllDialogs, (), (override));

MOCK_METHOD(ValCh<Uri>, currentUri, (), (const, override));
MOCK_METHOD(RetVal<bool>, isCurrentUriDialog, (), (const, override));
MOCK_METHOD(std::vector<Uri>, stack, (), (const, override));

MOCK_METHOD(Ret, openUrl, (const std::string&), (const, override));
Expand Down
1 change: 1 addition & 0 deletions src/framework/ui/iinteractiveprovider.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ class IInteractiveProvider : MODULE_EXPORT_INTERFACE
virtual void closeAllDialogs() = 0;

virtual ValCh<Uri> currentUri() const = 0;
virtual RetVal<bool> isCurrentUriDialog() const = 0;
virtual async::Notification currentUriAboutToBeChanged() const = 0;
virtual std::vector<Uri> stack() const = 0;

Expand Down
3 changes: 3 additions & 0 deletions src/framework/ui/uiaction.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ static constexpr ui::UiContext UiCtxHomeOpened = "UiCtxHomeOpened";
static constexpr ui::UiContext UiCtxProjectOpened = "UiCtxProjectOpened";
static constexpr ui::UiContext UiCtxProjectFocused = "UiCtxProjectFocused";

// dialogs
static constexpr ui::UiContext UiCtxDialogOpened = "UiCtxDialogOpened";

enum class Checkable {
No = 0,
Yes
Expand Down
14 changes: 14 additions & 0 deletions src/framework/ui/view/interactiveprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,20 @@ ValCh<Uri> InteractiveProvider::currentUri() const
return v;
}

RetVal<bool> InteractiveProvider::isCurrentUriDialog() const
{
if (m_stack.empty()) {
return RetVal<bool>::make_ok(false);
}

const ObjectInfo& last = m_stack.last();
if (!last.window) {
return RetVal<bool>::make_ok(false);
}

return RetVal<bool>::make_ok(last.window != mainWindow()->qWindow());
}

async::Notification InteractiveProvider::currentUriAboutToBeChanged() const
{
return m_currentUriAboutToBeChanged;
Expand Down
1 change: 1 addition & 0 deletions src/framework/ui/view/interactiveprovider.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ class InteractiveProvider : public QObject, public IInteractiveProvider, public
void closeAllDialogs() override;

ValCh<Uri> currentUri() const override;
RetVal<bool> isCurrentUriDialog() const override;
async::Notification currentUriAboutToBeChanged() const override;
std::vector<Uri> stack() const override;

Expand Down
Loading

0 comments on commit 0398ca8

Please sign in to comment.