MCP: Allow the current bank to move right one channel even if this results in a parti...
authorAlbert Graef <aggraef@gmail.com>
Mon, 24 Sep 2018 07:31:16 +0000 (09:31 +0200)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 27 Sep 2018 15:31:13 +0000 (11:31 -0400)
Rationale: This change is trivial, but Ardour's behavior of refusing to move right one channel unless a full bank remains has been there for a long time, and there are probably good reasons for it. This design was likely conceived when all MCP-compatible devices had banks of 8 faders anyway. However, with the advent of affordable single-strip devices like the X-Touch ONE it becomes a real issue.

Single-strip devices can only access the first channel in the current bank, so relaxing this restriction is the easiest way to enable such devices to access all strips, while still maintaining the usual bank size of 8. Note that maintaining a bank size of 8 is beneficial even with single-strip devices for several reasons:

- It allows use of the bank switch buttons to flip through a large number of strips more quickly.

- It maintains compatibility with existing device descriptions. E.g., the X-Touch ONE can be used with the existing X-Touch device description without any ado.

- Most importantly, it maintains compatibility with other MCP-compatible controllers which do have 8 strips and may be connected to Ardour at the same time. E.g., one might want to use an X-Touch Mini, or even a full-size X-Touch along with the X-Touch ONE in some use cases. Changing the bank size to 1 affects all connected MCP devices, so you'd rather keep the bank size to 8 in such scenarios. (Ardour should preferably have separate bank size settings for each connected MCP device, but that isn't possible right now since only one MCP device description can be active at the same time.)

libs/surfaces/mackie/mackie_control_protocol.cc

index f4ed70c426d7d0fc865dc2853cc2edb6a9c090d5..ba9973728382e90dd44b06de00e8b5306f57f070 100755 (executable)
@@ -218,7 +218,7 @@ void
 MackieControlProtocol::next_track()
 {
        Sorted sorted = get_sorted_stripables();
-       if (_current_initial_bank + n_strips() < sorted.size()) {
+       if (_current_initial_bank + 1 < sorted.size()) {
                switch_banks (_current_initial_bank + 1);
        }
 }