Making modulator links editable
Captain's Log: Stardate 77784.6
Whew... it's been a complex few days. I decided to take on a long-standing issue, which was to make the "modulator link" editor usable. This is sort of Anukari's replacement for a modulation matrix menu -- you drag a green line between a modulator and some other entity, and that tells it that the modulator is going to control some parameter on that other entity. When you select the green line, that's how you see the parameters like depth, exponential/multiply mode, and can select which parameter it is going to affect.
In the past, this editor was basically just a slider from -200 to 200 and a drop-down for the parameter. This was enough to get modulators working, but was not usable in general. For example, a max value of 200 is not close to enough for spring tension which goes to 5,000,000. But also, 200 was way too high for something like pulse width.
Now, the slider is intelligent: depending on what parameter it is connected to, it looks up the right value range, a good default depth value, the right units to display, whether the slider should be exponential, etc.
That part was easy, though. The hard part was dealing with all the weird edge cases that come up over and over in Anukari due to the fact that you can select any arbitrary set of entities/links and edit them in bulk. So what should the editor do if two links are selected, one with multiply mode on and the other off? Same thing for exponential? What if the target parameters are different? Etc.
Eventually I worked through all the edge cases (and combinations of edge cases), and I think I have implemented sane behavior for all of them.... knock on wood. I've got a lot more testing to do before I'm sure that things are good, but this will be a pretty huge milestone: all MIDI parameters are available for modulation, and the modulation editor is fully usable.