zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit 88ba4923bf2f148eb89755a581dc06b24cf6c8c4
parent ef5a57606fd5671601f57f0a1e7f8ab5b76c1317
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Sun, 22 Feb 2015 15:32:51 -0500

UI: Add Middle Mouse MIDI Learn To Fl_Osc_Dial

Diffstat:
Msrc/UI/Fl_Osc_Dial.H | 3+++
Msrc/UI/Fl_Osc_Dial.cpp | 21++++++++++++++++-----
2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/UI/Fl_Osc_Dial.H b/src/UI/Fl_Osc_Dial.H @@ -26,6 +26,9 @@ class Fl_Osc_Dial:public WidgetPDial, public Fl_Osc_Widget void update(void); void callback(Fl_Callback *cb, void *p = NULL); + //Midi learn handler + int handle(int); + void mark_dead(void); virtual void rebase(std::string new_base) override; diff --git a/src/UI/Fl_Osc_Dial.cpp b/src/UI/Fl_Osc_Dial.cpp @@ -1,3 +1,4 @@ +#include <FL/Fl.H> #include "Fl_Osc_Dial.H" #include "Fl_Osc_Interface.h" #include "Fl_Osc_Pane.H" @@ -37,7 +38,7 @@ void Fl_Osc_Dial::init(std::string path_) ext = path_; oscRegister(path_.c_str()); }; - + void Fl_Osc_Dial::alt_init(std::string base, std::string path_) { Fl_Osc_Pane *pane = fetch_osc_pane(this); @@ -59,6 +60,16 @@ void Fl_Osc_Dial::callback(Fl_Callback *cb, void *p) cb_data.second = p; } +int Fl_Osc_Dial::handle(int ev) +{ + if(ev == FL_PUSH && Fl::event_state(FL_BUTTON2)) { + printf("Trying to learn...\n"); + osc->write("/learn", "s", (loc+ext).c_str()); + return 1; + } + return WidgetPDial::handle(ev); +} + void Fl_Osc_Dial::OSC_value(int v) { value(v+minimum()); @@ -68,7 +79,7 @@ void Fl_Osc_Dial::OSC_value(char v) { value(v+minimum()); } - + void Fl_Osc_Dial::update(void) { osc->requestValue(loc+ext); @@ -83,7 +94,7 @@ void Fl_Osc_Dial::cb(void) } else*/ oscWrite(ext, "i", (int)(value()-minimum())); - + if(cb_data.first) cb_data.first(this, cb_data.second); } @@ -93,7 +104,7 @@ void Fl_Osc_Dial::mark_dead(void) dead = true; } - + void Fl_Osc_Dial::rebase(std::string new_base) { if(dead || loc == "/") @@ -122,7 +133,7 @@ void Fl_Osc_Dial::rebase(std::string new_base) //well, that didn't work assert(!"good enough hack"); } - + std::string new_loc = new_base.substr(0, match_pos+1); printf("Moving '%s' to\n", (loc+ext).c_str()); printf(" '%s'\n", (new_loc+ext).c_str());