Introducing New To-Do List and Navigation Plugins
Hi all, I've been lurking around these waters for a while and finally decided to write some plugins. These are mainly things inspired from IDE features/extensions for ease of life.
There are currently two projects:
- MuseScore To-Do List: This finds and lists
TODO
andFIXME
text elements in the current score, and provides a jump button to navigate to the element. Usually when I listen through a score I composed, I might notice several problems and list them in a text file to follow up later. This plugin embeds this idea into MS. - MuseScore Navigation: This provides mostly action plugins (no dialog/dock) for navigating to saved (bookmarked) measures and navigating back into the cursor's history. Handy for large scores and when jumping back & forth a lot. (Maybe better to be built-into core functionality itself? Perhaps in MS4?)
I'm planning to make some other plugins as well, so any feedback here would help me improve future plugins too!
Happy Musing!
Comments
Wow, these seem like very ambitious projects for a first introduction, but well done - looking forward to checking them out!
In reply to Wow, these seem like very… by Marc Sabatella
Thanks. I've played around with QML/JS before, so it wasn't too bad, haha. I suppose some of the areas are a bit hacky—and probably would need a lot of changes to port into MS4—but eh, snuffling through documentation and forums is a good exercise for me. :)
Beautiful logic in your bookmark plugin, codes are so clean. The other day I was digging api doc for custom data layer like DOM dataset, your invisible staff text method is nice. Mr. Sabatella do you know whether musescore3 has any custom data layer writable thru api and savable to mscz?
In reply to Beautiful logic in your… by msfp
Me? No, I know almost nothing about the plugin architecture. But I do believe one plugin at least has used (custom?) score properties as a way of recording comments.
In reply to Me? No, I know almost… by Marc Sabatella
Ah, I was on my way back from the other post, I though you were dev team.
In reply to Ah, I was on my way back… by msfp
I have done a lot of development as one of many community contributors, but almost nothing relating to plugins specifically.
In reply to Me? No, I know almost… by Marc Sabatella
It was @jeetee and his https://musescore.org/en/project/annotations
And just now https://musescore.org/en/node/334711#comment-1139804
In reply to It was @jeetee and his https… by Jojo-Schmitz
Thank you
In reply to It was @jeetee and his https… by Jojo-Schmitz
I nicked the idea for score properties from lasconic back in the day with his generic "comments" plugin PoC.
In reply to I nicked the idea for score… by jeetee
Annotations is a good example, I think, I used it as a starting point. I took (abused? 😬) the score properties method further with my nav-history plugins. It's how the action plugins would update the data from the main history dock plugin.
In reply to Beautiful logic in your… by msfp
Oo thanks for your comment. Persisting/transferring data across plugins was one of more annoying issues I faced. I used QML Settings to store user-configurable properties (e.g. to-do list regex/case sensitivity) or in general, data which persists across sessions.
However, this was insufficient for transferring data across plugins because of sync issues. (By transferring data, I mean: suppose I have a dock plugin, then I run an action/non-UI-based plugin and need to send something to first plugin.) So instead I (ab)used score properties and it ended up working. :P
In reply to Oo thanks for your comment… by TrebledJ
Thanks for the QML Settings tips, I'm gonna try it out later.
For data sharing across plugins, @dmitrio95 released some code involving singleton last year. Crawled the web, cannot figure out how to use it. How do you install them? Do you know any plugins use similar singleton code?
I saw a plugin use timer to do something similar to sharing, but I'm put off, fear such logic would cause bug later on.
In reply to Thanks for the QML Settings… by msfp
I use the QML.labs.Settings object only for plugin-related settings; anything score-related goes into the score metadata. Feel free to look at any of my exporter plugins or the DailyLog one (or the older reset dialogpositions one) to see possible usages of it.