Exceptions to hidden staves for specific systems

• Jan 10, 2015 - 09:41
Reported version
P2 - Medium
S5 - Suggestion

We have the option 'Don't hide empty staves in first system' available when hiding empty staves, but I want a function allowing the user to select exceptions to this - potentially in the form of a list of entries with a tickbox.

An example: In some band scores, empty tablature staves are hidden in the first system to make room for all the instruments (their otherwise accompanying pitched staves remain):
Exceptions to staves not hidden in first system.jpg


You can already do that easily enough by hiding the empty staves in the first system then using hidden notes to suppress that.

If we were to provde more options here, it should not be specialized to the first system, as this is a special corner case. It would be much more useful, and simpler, to solve the more general case where you want to suppress a staff from being hidden at any given point in the score. An obvious way to do that would be a special "not empty" element you could attach anywhere. This would appear on screen but not print and would suppress the staff being considered empty. Basically, an invisible note, but one that doesn't have to be manually set to silent and doesn't risk interfering with layout in any way.


The only potential issue I can think of is the rests of voice 1 moving away from the centre if a multi-voice note is entered. Maybe the element could be specially configured not to do this.

Title Exceptions to staves not hidden in first system Exceptions to hidden staves for specific systems

Exactly the sort of thing I mean, yes. This also could relate to #10217: Add option to preserve all staves of multi-stave instrument. Although a simple global control as proposed there would be nice, the current workaround of adding a hidden note where necessary is more painful than one would like when it has be done in many spots, so an element like this could be useful.

For that matter, we *could* simply change the existing algorithm to not consider a staff with text to be empty. Then all you would need to do is place an invisible staff text. I can't really think of a good reason why we shouldn't be doing this (considering staff text to be "non-empty") anyhow.

In reply to by Marc Sabatella

I like your idea about changing the existing algorithm to not consider a staff with text to be empty. Has anything been done about that since you wrote that in 2015? I am writing a musical and there are many instances in which I would love to hide empty staves but I can't because that also wipes out any staves that have text but are otherwise empty.

Any other thoughts on the text idea? This would be very simple to implement, and pretty easy to use - we could have an invisible (greyed out) "Non-empty" text in the text palette you just add wherever you like. Kind of kludgy, but simple. But are there downsides to considering staves with text non-empty? One complication I see already - we'd probably need to exclude system text, otherwise the top staff would never show as empty.

Really, though, as I think about about attributes that could sensibly be applied to systems - like a "don't fill" property, or a "fit all measures up until the line break" property, or a "change scaling" property, or a few others that have come up over the year, I think a better approach is probably to make these be attributes on the line break that ends the system, or on a new "system properties" element that would be generated at the beginning of each system.

In reply to by Marc Sabatella

My first choice would to be to add another column in the Measure Properties box next to Stemless and Visible that says never hide. When this is checked that measure and the entire staff on that system would be visible (as when a measure has a note). I suspect this might cause backward compatibility and could not be implemented until 3.0.

As a temporary fix, text is also an option. I would make any text that does not have the System attribute (system text, tempo...) cause a measure to not be empty. MuseScore would act the same as if there were notes in a measure. The user would have the responsibility to make it invisible if desired. Text without the system attribute would include figured bass, chords, dynamics and fingerings along with many others.

I could imagine both:

Inside the measure properties with a selection box for each staff. Or the introduce of a "system properties..." element/entry, if there are other adjustable options for settings that affect a system (not sure how it would look like inside a line break as suggested).
For this feature it would be important that's adjustable for each particular staff/instrument within a system (to select empty staves visible, where other staves stay hidden).

In reply to by kuwitt

Status (old) active fixed
Status active fixed

This feature is found under the staff properties in version 3, so I would call this fixed. I'll let GIT close it in case there are bugs found in it in the next couple of weeks.

Status (old) fixed active
Status fixed active

Sure, It's fixed? This feature request means the possibility for a single empty staff of a single system and a single instrument to select visible, unattached/unaffiliated of other systems within the same staff/instrument (in one system I want to have an empty staff visible, in other not). Will it be possible inside the staff properties in the actual state? Please correct me, if I'm wrong.

In reply to by kuwitt

I guess I didn't test it sufficiently. I saw

hide staff.PNG

and did not play with it enough. It looked like it should allow for hiding or not hiding the staff in a given system. In stead it seems the "Do not hide if staff is empty" has ceased to work all together. The systems seem to always be hidden when empty and always visible when there is a note in it.

Yes, and the feature request means for a specific system (of particular instruments), not for all systems of a specific instrument (so I understand this setting in staff properties).

Priority P2 - Medium
Regression No
Workaround No

Since staff text now prevents a staff from being considered empty (and has for a long time now in 3.0 builds), there is now a very easy solution: just add an invisible staff text to a measure to mark it not empty. So, what if we just added an invisible "not empty" text to the (advanced) palette?

BTW, "Do not hide if system is empty" works as it should. The point is to designate a staff to display if all staves are empty for the system. For 2.x, literally nothing would be shown unless you picked a staff to set this option on. Now, for 3.0, it seems the top staff will be chosen if you don't set this option, but if you do set it for another staff, then that staff is chosen instead.

Sure something, that isn't desired for parts to breaking mmrests. The workaround is to delete this staff text inside the parts.

Such an element inside the (advanced) palette should take effect only for the score, but not for parts (or is there a need for such an option inside parts, I don't see?).
Maybe for mmrests it could be applied a rule "if there's no visible element inside a measure to handle it as empty measure".
The other way I wonder (and as already suggested) is to have such an option inside the measure properties ("don't hide the measures of this system, if they're empty") and handle it in the same way as an inserted invisible element in a system.

I checked it superficial (adding two instruments to a score, inserting some notes, inserting to a measure of a desired visible empty system an invisible staff text, creating parts and deleting the staff text inside the part), and it seems to work, that it take effect for the mmrest inside the part, but the empty staff of the specific system stays visible inside the sore. But maybe I missed something in a rush (?).

Edit: Yes you're right, I missed something, deleting a staff text in a part will also delete the staff text inside the score. But what do I miss in the attached score (empty staves of the piano stay visible inside the score)?

Attachment Size
emptysystem.mscz 10.46 KB

For 3.0, if all staves in a system are empty, then the top staff is displayed anyhow, so there isn't a big empty hole like there was in 2.x. Or can use "Do not hide if system is empty" staff property to select a different stave to be the token staff still displayed on empty systems.

Thank's, so I missed, inserting a note to a staff below the top staff will hide the top staff (if it's selected in general settings). Sorry for confusing.

OK, not quite giving up yet - so maybe staff text breaks mmrests, but what if we made it so they don't if they're invisible? Trivial code change I'm thinking...

I don't see any reason, why a invisible element should break a mmrest. So this solution should be workable.

Alternatively such a text element would need attributes of a break (adding it to the score, it will not be taken over in parts)

? This issue is about finding a way to disable "hide empty staves" for a given measure without breaking multimeasure rests (which, BTW, the invisible note trick definitely does). Or were you responding to kuwitt's second paragraph? I think he was suggest we have a special "not linked" element (like breaks are) that would prevent the hiding but not affect mmrests in parts. Clever too and maybe useful for other situations, but not as ideal here, because you might actually want to enable mmrests in the score as well (might be a "score" that is actually a lead sheet or educational handout that needs just a couple of staves but also uses mmrests for whatever purpose).

Wait a minute, does this mean I can't label rests with what instrument is playing there? Cue notes already break hidden staves, will I not be able to do this either?

I'm not understanding your question. Why would you not be able to labels rests with the instrument name? Why would anything change about cue notes?

All I am proposing is making it so invisible staff texts will no longer break multimeasure rests. I can't think of any reason why one would want them to - except if people were maybe using this as a substitute for actually breaking multimeasure rests the normal way (eg, with double barlines, rehearsal marks, tempo changes, the appropriate option in Measure Properties). Certainly invisible staff texts are useless for labeling anything.

In reply to by Marc Sabatella

Because from what I'm reading, staff text now - or will? - prevent empty staves from hiding. Cue notes are already a problem because they make staves count as not empty. If staff text makes staves count as not empty, then I can't add staff text instrument label cues to rests without that also messing up scores.

No, invisible staff text will prevent multimeasure rests from breaking (which it does now, without good reason). (Visible) Cue notes still will and rightfully so.

In reply to by Jojo-Schmitz

I'm not talking about breaking rests. The issue is about unhiding specific staves, and it reads like staff text will now unhide empty staves... but I regularly use staff text during rests.

I'm not talking about whether or not it's invisible, or breaking multimeasure rests, though I do like it breaking mmrests as it makes my labeling life easier. But if it causes staves to unhide on the score, I can't use it in parts to let players know who is playing during rests - I use it almost like cues, because I can't use cues, they ruin scores.

It now sounds like staff text will ruin scores if I use it on resting measures.

I think you have misunderstood a couple of things. Let me try to be clear:

For 2.3.2, staff text would break an mmrest, but it would not prevent a staff from being hidden with "Hide empty staves". This is a bug - clearly, the presence of text means a staff isn't empty after all. This bug was fixed several years ago for 3.0. I'm not going to break that gain. Staff text will continue to prevent a staff from being considered "empty" for the purpose of hide empty staves, just as it has in all 3.0 builds for the past several years.

My change here is simply to make it so invisible staff text won't break the mmrest. Nothing whatsoever changes about hide empty staves as a result of my change - visible or invisible, staff text will continue to prevent a staff from being considered empty.

Now, it sounds like you were maybe relying on the bug - you may have been adding staff text to a part to get it to break mmrests, but hoping the staff would still hide in 3.0. As mentioned, this bug was fixed long ago, so this particular hack already doens't work, with or without my proposed change.

Now, this does seem like a legitimate use case, so perhaps we should consider making it so that marking the staff text invisible in the score would allow the staff to still be hidden - that solves your case. But it ruins mine :-(, as it quite depended on invisible staff text preventing staves from being hidden.

Are we understanding each other now? Your scores have perhaps already been "ruined" if you were relying on that bug. Test it and see. My proposed change wouldn't ruin them any further.

In reply to by Marc Sabatella

I think we're together, then. It sounds like my scores have already been ruined, although the parts will be fine...
To be clear, I used staff text to label rests with which instrument had the lead for players with long rests. It wasn't invisible, and I wasn't using it to break mmrests - it was added at rehearsal marks and barlines, so it didn't need to.

I'll take it to the development forum, although I think musescore's general 'cues make scores unusable' (yes, this use of staff text was a form of cues) is a major problem and that using staff text to unhide staves instead of using some more generic 'unhide staff' element doesn't especially help.

But yeah, if that boat has sailed then I'm not pointing out a potential problem with the fix here like I thought I was, so carry on!

Workaround No Yes

Invisible staff text is the easiest workaround, except that this doesn't seem to work anymore?
A hidden and sile note in a voice ozhet than 1 is another and does work

Going forward I would still favor seeing an explicit "not empty" element that would be guaranteed to have exactly the right semantics with respect to hide empty staves and also mmrests, and perhaps its own customizable properties in the Inspector.

Another way of looking at it, though, would be in measure properties, an additional checkbox in the list of staves. Under the hood it's entirely possible that's actually what the special "not empty" element might do anyhow.

I could also see a property ion a system break that disabled hide empty staves for that system, which could be useful occasionally as well.

In this way I could imagine selecting a measure and and having a "never hide the staff of this system" checkbox in the inspector - without being sure if this is implementable/realistic.
Or in a similar way as possible for other individual element, that the checkbox "visible" also works for measures at once.

Good point - I think in the MuseScore 4 version fo the Inspector (renamed Properties), it will be possible to set measure properties directly. Of course most measure properties are not staff-specific so I don't really know how that might be supported. But it's a good reminded that any design should really be more forward-thinking - how would it best be integrated in MuseScore 4, not 3.6.

In reply to by Marc Sabatella

If measure properties are heading to the inspector, it would be nice to allow at least some of the properties to be set for a range of measures. This would help with the actions needed to exclude a range of measures from a multimeasure rest as discussed here https://musescore.org/en/node/18902. Other properties that could be usefully included might be visibility and exclusion from measure count.

Does having such properties in the inspector make this easier to manage?