Maniphest T76213

Avoid Dynamic Menu Text
Confirmed, NormalDESIGN

Assigned To
None
Authored By
Campbell Barton (campbellbarton)
Apr 29 2020, 6:27 AM
Tags
  • User Interface
Subscribers
Campbell Barton (campbellbarton)
Duarte Farrajota Ramos (duarteframos)
Harley Acheson (harley)
Tokens
"Like" token, awarded by harley.

Description

This tasks proposes that dynamic menu should not be used (with some exceptions, below).

Examples of dynamic menu text include terms generated by blend-file data and text that changes based on the current selection.

This causes the following problems:

  • Visual Noise

    To take this to some logical extreme, imagine we could do this everywhere:
    • Delete "Cube"
    • Parent to "Sphere.001"
    • Save "my_filename.blend"
    • Revert "my_filename.blend"

      ... etc.

      This adds more information in the interface in a way that's not very helpful.

      When using an interface users learn to quickly identify unique terms. Having the text changed based on data-block names means you have the hint that something is changing when you visually scan the menu, when the changes are only based on the selection.

      Aside from the distraction of changing text, some names are already quite long, adding data / operator names as part of other actions means we will end up with awkwardly cramped text in some cases.
  • Unpredictable Menu Search

    If data-block names are included in menu item labels, search will give less predictable results as the names of data in the scene will be included in the search too.

    So if you know searching for a short combination of letters can activate a tool, this change means there would be a chance that typing in this sequence will perform a different action based on the current selection.
  • Complicates Documentation

    If you have to clearly describe steps which include dynamic names, it means you need to

    Edit -> Rename "{active object or bone name}"
  • Complicates Translations

    We need to take care to handle translations properly, currently this patch doesn't account for this (translating the operator names but not the data-names).
  • Complicates Menu Memory

    Currently popup menus remember the last action based on the text, with dynamic changing text, our menu hashing function ui_popup_menu_memory would need to somehow support this too, at least if this is used for menu items in popup menus.
Exceptions
  • Menus where their only purpose is to list data-blocks, the "Add -> Collection Instance" menu for example.
  • Undo / Redo may include the name of the action they're operating on.

Related Objects

StatusSubtypeAssignedTask
ConfirmedDESIGNNone
ArchivedDESIGNWilliam Reynish (billreynish)
ConfirmedDESIGNNone
ConfirmedDESIGNNone

Event Timeline

Campbell Barton (campbellbarton) changed the task status from Needs Triage to Confirmed.Apr 29 2020, 6:27 AM
Campbell Barton (campbellbarton) created this task.
Campbell Barton (campbellbarton) mentioned this in T76211: User Interface Policies.Apr 29 2020, 6:29 AM
Campbell Barton (campbellbarton) added a comment.EditedApr 29 2020, 6:45 AM

*Edit*, comment removed.

Campbell Barton (campbellbarton) updated the task description.Apr 29 2020, 6:45 AM
Campbell Barton (campbellbarton) added a project: User Interface.
Harley Acheson (harley) awarded a token.Apr 29 2020, 6:48 AM
Julian Eisel (Severin) changed the subtype of this task from "Report" to "Design".May 18 2020, 5:00 PM
Harley Acheson (harley) added a subscriber: Harley Acheson (harley).EditedMay 18 2020, 7:30 PM

Some of these described reasons I agree with, but many of these reasons stated above are simply defenses of status quo.

"Visual Noise" can be used as a cudgel against making anything longer, more detailed, or more descriptive. It gives examples of taking it to "logical extreme" but at the other extreme it should be an argument for making menu items SHORTER. Because if longer items are bad then shorter must be better. But that isn't the case and we aren't recommending shortening menu items. This is just arguing for keeping things exactly as they are.

"Unpredictable Menu Search" is describing only shortcomings in search as that feature could, or could not, include dynamic text.

"Complicates Documentation" is a straw man argument as the example is not that complex. The example item is now "Rename Active Item". Therefore the "bad" documentation example would be "Edit -> Rename "Name of Active Item"

"Complicates Translations" is merely a note that we'd have to do so with translations in mind. And it specifically mentions a shortcoming in a specific version of a patch of mine that would be fixed in review, not accepted as-is.

"Complicates Menu Memory" is only saying that a function would need to support this. That is not a argument against, but only an argument that any change is work. But all changes are work, good or bad.

In my mind the reasons for DOING dynamic text is for when the action or target of the action is not clear. Having an menu item that just says "UNDO" or "REDO" tells you nothing of what is being done and is helped by adding specific information.

And "Rename" is helped by the name of the object just because it is not always clear what the active item is. Quite often it is hard to differentiate an active item from among a group of selected items. And there are times when the active item is not even shown, even when there are selected items (looking at you box select).

Similarly "repeat last" may as well be "repeat random action" as it is often unclear what will be repeated. And "Adjust Last Operation" might not be the last operation as far as the user is concerned.

Duarte Farrajota Ramos (duarteframos) added a subscriber: Duarte Farrajota Ramos (duarteframos).May 18 2020, 9:53 PM

Mostly agree with Harley Acheson points, I'm sure there are places where having names of items is useless at best or harmful at worse. In search menus or results I'd mostly agree they should be absent.

In T76213#934190, @Harley Acheson (harley) wrote:

Having an menu item that just says "UNDO" or "REDO" tells you nothing of what is being done
Similarly "repeat last" may as well be "repeat random action" as it is often unclear what will be repeated. And "Adjust Last Operation" might not be the last operation as far as the user is concerned.

In undo/redo they make sense to know which operation you are undoing exactly. It is not always clear what actions push an undo which don't, or at which stage of stack you stand after a few "blind pushes" of Ctrl+Z.
Repeat last also benefits from knowing exactly what will be done, not all actions push a history entry, and it is not always clear what will be repeated

In T76213#934190, @Harley Acheson (harley) wrote:

And "Rename" is helped by the name of the object just because it is not always clear what the active item is.

This will be particularly true if/when we finally have multi-object properties editing. Could be made particularly useful to know if an operator will affect all selected items or just the active one.
Say Move X Selected items, or Rename 'Cube' vs Batch Rename X Selected items or Parent to Suzanne.

Names however should be presented in the UI in a distinctive manner that differentiates from the actual operator, maybe dimmed or in a different color like we currently do for menu paths, python tooltips or other "accessory" information.

Campbell Barton (campbellbarton) added a comment.EditedMay 19 2020, 3:12 AM

@Harley Acheson (harley),

In T76213#934190, @Harley Acheson (harley) wrote:

Some of these described reasons I agree with, but many of these reasons stated above are simply defenses of status quo.

I can see where you're coming from, nevertheless, changing the status-quo can introduce new problems.
If those problems aren't accounted for, then we're adding new bugs/technical-debt.

"Visual Noise" can be used as a cudgel against making anything longer, more detailed, or more descriptive. It gives examples of taking it to "logical extreme" but at the other extreme it should be an argument for making menu items SHORTER. Because if longer items are bad then shorter must be better. But that isn't the case and we aren't recommending shortening menu items. This is just arguing for keeping things exactly as they are.

I wouldn't use this as an argument to make things shorter (it's a separate issue - if we have too much information to present - how to manage that).

The noise part comes from the tenancy for people to pay attention to things that change.

If you access a menu regularly you become familier with the order of items and the text, then one day it looks different, it draws attention to the change (maybe a short menu item is suddenly the longest menu item in the list).

If that change isn't important, your attention is captured for no good reason, making the UI more noisy.

"Unpredictable Menu Search" is describing only shortcomings in search as that feature could, or could not, include dynamic text.

Right, we can disable dynamic text for search, there is still a small disadvantage to having different text for search and the menu.

"Complicates Documentation" is a straw man argument as the example is not that complex. The example item is now "Rename Active Item". Therefore the "bad" documentation example would be "Edit -> Rename "Name of Active Item"

I'd argue any time you need to express that some part of UI text is dynamic - there is some overhead for people reading/writing docs.

Although in some cases it's not so bad, it's still a down-side.

"Complicates Translations" is merely a note that we'd have to do so with translations in mind. And it specifically mentions a shortcoming in a specific version of a patch of mine that would be fixed in review, not accepted as-is.

This is yet another thing we need to be aware of when reviewing code, something we could easily miss by accident and end up in a release.

"Complicates Menu Memory" is only saying that a function would need to support this. That is not a argument against, but only an argument that any change is work. But all changes are work, good or bad.

The reason I included this is this is not simply some feature to support with an obvious solution (a bug to be fixed for e.g).

Looking into the code and how it works, we would need to dedicate time to solving this problem - perhaps having a separate identifier for menu items which isn't dynamic, or detecting unique menu items using something besides their text...

The resulting code will be more complicated then the current code, and isn't obvious exactly how it should be solved.

In my mind the reasons for DOING dynamic text is for when the action or target of the action is not clear. Having an menu item that just says "UNDO" or "REDO" tells you nothing of what is being done and is helped by adding specific information.

Right, undo/redo can be exceptions.

And "Rename" is helped by the name of the object just because it is not always clear what the active item is. Quite often it is hard to differentiate an active item from among a group of selected items. And there are times when the active item is not even shown, even when there are selected items (looking at you box select).

I don't think rename is all that helpful, the active object / bone etc should always be obvious.

Many actions use the active object, and don't mention it by name.

Similarly "repeat last" may as well be "repeat random action" as it is often unclear what will be repeated. And "Adjust Last Operation" might not be the last operation as far as the user is concerned.

This is similar to Undo, an exception could be made for that.


Note that all of this isn't to say "never have dynamic text", just that we should have a high-bar for it's inclusion, given the issues it introduces.

Julian Eisel (Severin) moved this task from Backlog to Human Interface Guidelines (HIG) on the User Interface board.Jun 25 2020, 12:12 PM