Editor::hide_track_in_display() -> EditorRoutes::hide_track_in_display()
and ensuing calls to sync the treeview may modify the selection
(de-select hidden tracks) and invalidate selection->tracks
Do that by wrapping the packed controls box in a ScrolledWindow and
making it request the same width than the box but capped to 90% of the
screen width.
Also, when the box width exceeds the maximum value, try again with
one-letter automation buttons in case the reduced width avoids showing a
scroll bar.
The generic plugin UI uses spelled-out automation state buttons for
controls, which is good for readability and usability, but some plugins
have a very big amount of controls which means we need a lot of columns.
For those plugins, prefer one-letter automation states, to save width.
When there was a knobtable in the ControlUI, the behavior of the
automation state button changed by displaying one-char state as in track
headers. Factor out that logic to depend on a new boolean property of
the ControlUI, which should be set with set_short_autostate().
This regroups sizing logic in a single place and avoids future
discrepancies between the actual caption and the size allocated for it,
when several use-cases for smaller buttons are added.
Check, in order, if the io is connected to another Ardour route, then a
user bundle, then some physical ports with simple configuration, and
lastly another client.
Before, Routes were considered connected as long as every io port
connected to that route, even if the channel order was mixed or worse if
all ports were connected to the same channel. Now Routes and Bundles are
considered connected if they are exclusively connected, in the right
order, to all their ports with matching datatype.