>However there is still the question of how to actually define the >bindings. In the case of the almost photorealistic GUI of the bristol >synths, there should not be any additional buttons for MIDI bindings. >So what about this: Define a key (e.g. 'M') to toggle between normal >operation and MIDI definition mode of bristol. In MIDI definition mode the >user can select a GUI element by moving or clicking on it. The event loop >will store the last GUI element that has sent an event in a variable >called e.g. selected_midi_gui_object. Now the user can move the MIDI >controller of his MIDI master keyboard or MIDI controller box. this will >the bind this controller to selected_midi_gui_object. >Another possibility would be to define bindings by right-clicking on the >GUI element while moving the controller of the MIDI controller box.
All of my audio/MIDI apps use the following convention: ctrl-click (mnemonic: "control this") the GUI control element (slider, knob, whatever). this then gives you 30 seconds to cause a MIDI CC or NoteOn/NoteOff message to be delivered to the program. the first one received will cause a binding between the message and the control element. the GUI remains active as a control element. Since my code is always Model-View-Controller compliant, moving the MIDI controller moves the GUI controller as well. I use SigC++ to listen for all MIDI events; its basically a callback-registration system on steroids, or maybe on zoloft. --p