This progresses this bug. Specifically on Windows, Left and Right arrows and Enter (non keypad version) should now no longer be a problem. The fix is to not show these shortcuts in menus, because otherwise the menus will catch the events. Unfortunately attempts to show these specific shortcuts in the menus bring back the bug.
Steps to reproduce for 1637 will need to be updated.
Additionally, fix the UI portions of these, and fix Trim for note tracks
(the code already existed, but due to flags would not work). As PRL
requested, this is gated only behind USE_MIDI.
This fix works by detecting whether the focus window is the TrackPanel, in which case all keys are handled normally. If it isn't the TrackPanel, then the problematic keys do not get sent to our own CommandHandler and proceed on to wxWidgets.
A problem that then follows is that the menu accelerators (which normally don't get a look in) may then convert the event to a menu event and stop it going any further.So it does not get to the focus window.
The fix/workaround for that is to NOT provide accelerators for up, down, left and right arrow in the menus. I'd much rather be able to turn off those accelerators completely, yet still show them to users as hints.
This commit adds note tracks into the mixerboard. It's done as a separate
slider this time instead of via subclasses (as PRL requested), so which
should be easier to use.
This also changes some of the gaurds to EXPERIMENTAL_MIDI_OUT from
USE_MIDI, as it's meaningless to have the note track code in mixerboard
when it cannot do anything (depends on methods that exist behind
EXPERIMENTAL_MIDI_OUT).
... A non-narrowing conversion out to long long is a necessity, but the
conversions to float and double are simply conveniences.
Conversion from floating is explicit, to avoid unintended consequences with
arithmetic operators, when later sampleCount ceases to be an alias for an
integral type.
Some conversions are not made explicit, where I expect to change the type of
the variable later to have mere size_t width.
... And in some places where a library uses signed types, assert that
the reported number is not negative.
What led me to this, is that there are many places where a size_t value for
an allocation is the product of a number of channels and some other number.
These changes fix a broken build in Windows.
#include <algorithm> needed for min/max to be in std.
decltype(+name) was declaring a const variable, that could not be incremented. Changed to auto.