commit 5a61d2043f4738a200fd3273adc568fae246fa21
parent 5a6134383b11211d38365dbd89fe914996a25f76
Author: fundamental <mark.d.mccurry@gmail.com>
Date: Sat, 7 Nov 2015 09:01:39 -0500
PADnoteUI: Fix Apply Button Via OSC Message Snoop
It's not a perfect heuristic, but it should work well
enough for the time being.
Diffstat:
4 files changed, 57 insertions(+), 10 deletions(-)
diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp
@@ -325,13 +325,22 @@ struct NonRtObjStore
void handlePad(const char *msg, rtosc::RtData &d) {
string obj_rl(d.message, msg);
void *pad = get(obj_rl);
- if(!strcmp(msg, "prepare"))
+ if(!strcmp(msg, "prepare")) {
preparePadSynth(obj_rl, (PADnoteParameters*)pad, d);
- else {
+ d.matches++;
+ d.reply((obj_rl+"needPrepare").c_str(), "F");
+ } else {
assert(pad);
strcpy(d.loc, obj_rl.c_str());
d.obj = pad;
PADnoteParameters::non_realtime_ports.dispatch(msg, d);
+ if(rtosc_narguments(msg)) {
+ if(!strcmp(msg, "oscilgen/prepare"))
+ ; //ignore
+ else {
+ d.reply((obj_rl+"needPrepare").c_str(), "T");
+ }
+ }
}
}
};
diff --git a/src/UI/Osc_IntModel.h b/src/UI/Osc_IntModel.h
@@ -40,6 +40,14 @@ class Osc_IntModel:public Fl_Osc_Widget
value = rtosc_argument(msg, 0).i;
if(callback)
callback(value);
+ } else if(args == "T") {
+ value = 1;
+ if(callback)
+ callback(value);
+ } else if(args == "F") {
+ value = 0;
+ if(callback)
+ callback(value);
}
}
};
diff --git a/src/UI/OscilGenUI.fl b/src/UI/OscilGenUI.fl
@@ -247,13 +247,8 @@ class OscilEditor {open : {public PresetsUI_}
} {
Fl_Button applybutton {
label Apply
- callback {//applybutton->color(FL_GRAY);
-//applybutton->redraw();
-//if (cbapplywidget!=NULL) {
-// cbapplywidget->do_callback();
-// cbapplywidget->color(FL_GRAY);
-// cbapplywidget->redraw();
-//};}
+ callback {
+ dummy->osc->requestValue(loc+"../prepare");}
xywh {305 285 60 20} box THIN_UP_BOX labelfont 1
code0 {if(adnotep) o->hide();}
code1 {dummy->base = loc;}
diff --git a/src/UI/PADnoteUI.fl b/src/UI/PADnoteUI.fl
@@ -32,6 +32,9 @@ decl {\#include <string.h>} {private local
decl {\#include <string>} {public local
}
+decl {\#include "Osc_IntModel.h"} {private local
+}
+
decl {\#include "Fl_Osc_TSlider.H"} {public local
}
@@ -73,6 +76,33 @@ resui=new ResonanceUI(osc_i, location+"resonance/");
initialized = false;
applybutton = NULL;
make_window();
+apply_watcher = new Osc_IntModel(osc_i);
+apply_watcher->callback=[this](int needsPrepare) {
+ if(needsPrepare) {
+ applybutton->color(FL_RED);
+ applybutton->redraw();
+ if(oscui) {
+ oscui->applybutton->color(FL_RED);
+ oscui->applybutton->redraw();
+ }
+ if(resui) {
+ resui->applybutton->color(FL_RED);
+ resui->applybutton->redraw();
+ }
+ } else {
+ applybutton->color(FL_GRAY);
+ applybutton->redraw();
+ if(oscui) {
+ oscui->applybutton->color(FL_GRAY);
+ oscui->applybutton->redraw();
+ }
+ if(resui) {
+ resui->applybutton->color(FL_GRAY);
+ resui->applybutton->redraw();
+ }
+ }
+};
+apply_watcher->doUpdate(location+"needPrepare");
initialized = true;} {}
}
Function {make_window()} {open
@@ -877,9 +907,12 @@ applybutton->color(FL_GRAY);
applybutton->parent()->redraw();} {}
}
Function {~PADnoteUI()} {} {
- code {delete(oscui);
+ code {
+delete apply_watcher;
+delete(oscui);
delete(resui);
+
padnotewindow->hide();
delete padnotewindow;} {}
}
@@ -899,4 +932,6 @@ delete padnotewindow;} {}
}
decl {PADnoteOvertonePosition *opui;} {private local
}
+ decl {class Osc_IntModel *apply_watcher;} {private local
+ }
}