musescore / MuseScore

MuseScore is an open source and free music notation software. For support, contribution, bug reports, visit MuseScore.org. Fork and make pull requests!
https://musescore.org
Other
12k stars 2.59k forks source link

MS4 Plugin API onScoreStateChanged is never called #20290

Open schoettl opened 8 months ago

schoettl commented 8 months ago

Issue type

Other type of issue

Bug description

The event onScoreStateChanged in plugins is not called anymore in MS4. It used to work in MS3.6.

Maybe the reason is that scoreStateChanged is not called anymore from MuseScore?

My plugin relies on this because it needs to be informed when the note selection changes (state.selectionChanged).

Steps to reproduce

Try this plugin: test.qml


import QtQuick 2.15
import MuseScore 3.0
import QtQuick.Dialogs 1.3
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15

MuseScore {
    id: plugin
    title:      "test"
    version:    "1.0"
    description: "description"
    requiresScore: true
    pluginType: "dialog"
    onRun:

    onScoreStateChanged: {
        console.warn('onScoreStateChanged. state: ' + state)
        if (state.selectionChanged) {
            console.warn('selection changed')
        }
    }

    Pane {
        anchors.fill: parent
        Text {
            text: "Test"
            horizontalAlignment: Text.AlignHCenter
            Layout.fillWidth: true
        }
    }
}
  1. Start MS from terminal to see stdout/stderr messages
  2. Enable the plugin in the plugin manager
  3. Open a score
  4. Start the plugin

It now should print warnings to stdout when you change note selection.

But it doesn't.

Screenshots/Screen recordings

No response

MuseScore Version

4.1.0 - 4.1.2

Regression

Yes, this used to work in MuseScore 3.x and now is broken

Operating system

Linux/NixOS

Additional context

Revision: OS: NixOS 23.05 (Stoat), Arch.: x86_64, MuseScore version (64-bit): 4.0.2-, revision: github-musescore-musescore-

cbjeukendrup commented 8 months ago

Unfortunately, this is not really fixable in MuseScore 4, since this whole "score state" concept was an implementation detail of MuseScore 3 (and as such, should never have been exposed so directly in the plugin API anyway), and in MuseScore 4 the implementation is different so no longer compatible with the plugin API. So someone will have to write an adapter between MuseScore 4's implementation and the plugin API. If someone has time and would like to give it a try, feel free to do so.

schoettl commented 8 months ago

Just as a note: I worked around the missing onScoreStateChanged via this commit. Maybe someone finds this helpful.