Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MU4] proposed fix #297458: implement "apply input state" command #5505

Closed

Conversation

MarcSabatella
Copy link
Contributor

@MarcSabatella MarcSabatella commented Dec 1, 2019

Resolves: https://musescore.org/en/node/297458

Currently in note input mode, most toolbar commands work "proactively" - to set the stage for the next note entered, as opposed to "retroactively" on the just-entered note, But sometimes you do actually want to modify the note you just entered - in particular, to add an accidental or to change duration. There are ways of accomplishing the desired result (Shift+Q/W for duration, Up/Down for accidentals) but they aren't as they don't do the same thing the actual toolbar commands would have done.

Rather than trying to address this by two versions of each toolbar command as was originally done for accidentals - one that acts proactively and one retroactively - this PR simply takes the current toolbar state and goes ahead and applies it retroactively.

So for instance if you type "G" and get a quarter note G then realize, shoot, I meant to have it be a whole note, and be G#, just do the whole note and sharp command normally to set the toolbar state, then issue this new command to retroactively apply that to the just-entered note.

Note: this code was written for MU3 and would need to be updated for MU4. It should probably also consider the articulation buttons and perhaps others. But I have reopened it to get feedback on the idea and see if it's something we want to move forward with, or perhaps to to design a different solution.

Resolves: https://musescore.org/en/node/297458

The new behavior of the accidental commands in note input mode
is mostly an improvement, but sometimes one needs to apply an accidental
to a note that is already entered (eg, the most recent note).
While you can use the arrow keys to change pitch, they cannot be used
to enter courtesy accidentals.

This commit adds a new command, "apply input state",
that looks at the accidental state and applies it to the current note.
Because it is easy and also useful, it does the same for duration.
Normally after entering a note, the duration state matches the note,
and the accidental state is cleared (NONE), so this command does nothing
unless you explicitly press the accidental or duration button first.

The intended use is, a user enters a note, realizes too late it has
the wrong duration or is missing an accidental,
so he changes the duration and/or accidental using the toolbar commands
but this of course doesn't affect the current note, just the next one.
The new command simply applies his change retroactively.
It does it by checking the InputState.
If the accidental state is not none, it is applied to the current note.
If the duration is not the same as that of the current note,
it is applied as well.
@worldwideweary
Copy link
Contributor

worldwideweary commented Jan 9, 2020

Hey Marc, I think the idea of applying input state is a nice idea as a sort-of 'back-up' plan for people getting acclimated to the 'toggle-first' necessity. Didn't check the code, but it seems appropriate to have the accidental toggle be toggled-off after an application of "apply input state" in my opinion. Update: After checking code, it looks like you toggled-off afterwards :)

Then again, the argument could be made that one need only 'exit' note entry mode and then can apply using the same regular shortcuts, so it depends on how you look at it as to its worth. The fact that it also would apply to duration makes it that much more useful, though not sure if it would feel natural to utilize it without some practice.

@MarcSabatella
Copy link
Contributor Author

MarcSabatella commented Jan 9, 2020

All of those are good points. I would add though that exiting note input mode is less than ideal because you need to renter it again, so it’s three extra clicks total. On the other hand, I’m pretty ambivalent about this whole PR. It’s an interesting idea but I have no idea if it’s really something people would use.

@worldwideweary
Copy link
Contributor

Yeah, that's understandable. Personally am getting acquainted to the new input method as time goes on.

Just like with the [next/previous system] commands you saw, I know I would use it and will use it when copying scores into MuseScore even if it doesn't merge (can always make my own builds of releases with it in), but I don't know how many other people would actually find a use case for it depending on their workflow habits.

@dmitrio95 dmitrio95 added the strings Affects translatable strings label Jan 21, 2020
@MarcSabatella
Copy link
Contributor Author

Crazy idea I'm developing: what if the duration change didn't just change the duration in the usual way, but actually worked more like how "insert note" or "remove selected range work" - pushing the subsequent notes later/earlier, adjusting measure duration? Could be a simple solution to the problem of rewriting rhythms. Thinking about that further...

@dmitrio95
Copy link
Contributor

Rebase is needed here (if this PR is still actual)

@MarcSabatella
Copy link
Contributor Author

Well, no one seemed all that enthusiastic about it. And there is further talk about the ability to change durations in a manner that moves subsequent notes earlier/later, probably this could be combined with any such proposal. So I don't see much point of keeping this open.

@MarcSabatella
Copy link
Contributor Author

I'm reopening this for two reasons. One, it still bugs me that I can't easily apply accidentals retroactively using the toolbar. But more importantly, the duration bit is starting to sound a little like an "issue of the moment" based on several different forum discussions centering around use of the "R" command.

Basically, some people coming from Sibelius have stumbled on a workflow where they use R to repeat the previous note, then adjust its pitch and duration. It's perceived as being more "intuitive" in some cases even if it is objectively less efficient than simply typing letter names (I could imagine using this, for instance, copying an existing part written on alto clef, which I read only with some effort).

The new command I have hear solves both problems at once with a single command.

Upside of this for 3.x is, no risk since nothing changes if you don't use the command. Downside is, new command means new strings, new documentation. So maybe we are ruling things like this out for 3.5, but maybe could be considered for 3.5.1?

And yes, I know there are merge conflicts I need to resolve in any case.

@worldwideweary
Copy link
Contributor

Hey Marc, any news about the idea of maybe having duration changes act like what you mentioned in the past?

pushing the subsequent notes later/earlier, adjusting measure duration

It'd be interesting to try. . .

@MarcSabatella
Copy link
Contributor Author

No news, it was just a few bits of conversation here and there, mostly in the context of talking about what a “scratch pad” mode might look like.

@igorkorsukov igorkorsukov changed the title proposed fix #297458: implement "apply input state" command [MU4] proposed fix #297458: implement "apply input state" command Feb 5, 2021
@Jojo-Schmitz
Copy link
Contributor

Jojo-Schmitz commented Apr 24, 2021

So this is for 3.x, "MU3", not (anymore) for master, "MU4". So a) the base branch and b) the title is wrong. And c) it still needs a rebase ;-)

@MarcSabatella
Copy link
Contributor Author

I don't think it's worth updating as is. I do think this would be a fantastic facility to provide, but this may or may not be a desirable way to do it from a design standpoint. I'll let the core team consider whether a way to retroactively apply accidentals and/or durations in note input is worthwhile and how it should work if so.

@Jojo-Schmitz
Copy link
Contributor

Maybe rebase on top of 3.x (first)?

@MarcSabatella
Copy link
Contributor Author

I'd still like to see some discussion of the feature from a UI / design / usability standpoint first.

Now that there is already a command to retroactively apply an accidental, this feels much less needed. Also, I've hit on the trick of using Q,W (in that order) as a quick way of retroactively applying whatever duration command I just gave.

@RomanPudashkin
Copy link
Contributor

Unfortunately, this PR was completely ignored by the in-house team (and now it can't be merged because it's based on the MS3 code). Please reopen if you still think that this new shortcut could be useful (and assign @bkunda to check it from the UX perspective)

@RomanPudashkin RomanPudashkin added the archived PRs that have gone stale but could potentially be revived in the future label Jul 7, 2023
Jojo-Schmitz pushed a commit to Jojo-Schmitz/MuseScore that referenced this pull request Jul 7, 2023
@Jojo-Schmitz
Copy link
Contributor

@MarcSabatella check Jojo-Schmitz#136 for a backport into my 3.x branch/fork

@MarcSabatella
Copy link
Contributor Author

I do still like the idea of this command, although indeed it could use some design input and maybe there are better solutions.

I've updated the description here and will see about actually recreating it in MU4 when I have a moment.

Jojo-Schmitz pushed a commit to Jojo-Schmitz/MuseScore that referenced this pull request Aug 2, 2023
Jojo-Schmitz pushed a commit to Jojo-Schmitz/MuseScore that referenced this pull request Aug 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
archived PRs that have gone stale but could potentially be revived in the future strings Affects translatable strings
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants