commit c37c5476f4b8008ef82e887d1efd6c7ecf6d6206
parent c4058910d4ee02a9694e0e91fce29fb211f259da
Author: fundamental <mark.d.mccurry@gmail.com>
Date: Sun, 11 Aug 2013 16:16:30 -0400
Fix Broken Oscillator Views
Diffstat:
4 files changed, 28 insertions(+), 31 deletions(-)
diff --git a/src/UI/ADnoteUI.fl b/src/UI/ADnoteUI.fl
@@ -112,8 +112,9 @@ class ADvoicelistitem {open : {public Fl_Osc_Group}
}
Fl_Group voiceoscil {open
xywh {60 5 30 20} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
- code0 {oscil=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {oscil->init(false, "oscil/");}
+ code0 {voiceoscil->ext = "oscil/";}
+ code1 {oscil=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
+ code2 {oscil->init(false);}
class Fl_Osc_Group
} {}
Fl_Value_Output detunevalueoutput {
@@ -321,10 +322,10 @@ o->redraw();}
} {
Fl_Group fmoscil {open
xywh {535 440 220 140} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
- code0 {oscFM=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {//int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;}
- code2 {fmoscil->base = loc; fmoscil->ext="mod-oscil/";fmoscil->osc = osc_i;}
- code3 {oscFM->parent(fmoscil);oscFM->init(false);oscFM->update();}
+ code0 {fmoscil->base = loc; fmoscil->ext="mod-oscil/";fmoscil->osc = osc_i;fmoscil->begin();}
+ code1 {oscFM=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
+ code2 {//int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;}
+ code3 {oscFM->parent(fmoscil);oscFM->init(false);oscFM->update();fmoscil->end();}
class Fl_Osc_Group
} {}
Fl_Box {} {
@@ -505,10 +506,10 @@ o->redraw();}
}
Fl_Group voiceoscil {
xywh {80 390 445 145} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
- code0 {osc=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {voiceoscil->base = loc;voiceoscil->ext="oscil/";//int nv=nvoice; if (extoscil->value()>=0) nv=extoscil->value();}
+ code0 {voiceoscil->base = loc;voiceoscil->ext="oscil/";voiceoscil->begin();//int nv=nvoice; if (extoscil->value()>=0) nv=extoscil->value();}
+ code1 {osc=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
code2 {voiceoscil->osc = osc_i;}
- code3 {osc->parent(voiceoscil); osc->init(false);}
+ code3 {osc->parent(voiceoscil); osc->init(false);voiceoscil->end();}
class Fl_Osc_Group
} {}
Fl_Button changevoiceoscilbutton {
diff --git a/src/UI/Fl_Oscilloscope.h b/src/UI/Fl_Oscilloscope.h
@@ -9,6 +9,7 @@
#include "common.H"
#include <cassert>
#include <cstdio>
+#include "../globals.h"
class Fl_Osc_Group;
//Consider merging in Fl_OscilSpectrum
@@ -16,7 +17,7 @@ class Fl_Oscilloscope : public Fl_Box, Fl_Osc_Widget
{
public:
Fl_Oscilloscope(int x,int y, int w, int h, const char *label=0)
- :Fl_Box(x,y,w,h,label)
+ :Fl_Box(x,y,w,h,label), Fl_Osc_Widget(this)
{
smps = new float[synth->oscilsize];
memset(smps, 0, synth->oscilsize*sizeof(float));
@@ -27,34 +28,23 @@ class Fl_Oscilloscope : public Fl_Box, Fl_Osc_Widget
~Fl_Oscilloscope(void)
{
delete[] smps;
- osc->removeLink(loc, this);
}
- void init(bool base_waveform_p, std::string loc = "")
+ void init(bool base_waveform_p)
{
- Fl_Osc_Pane *og = fetch_osc_pane(this);
- assert(og);
-
- loc = og->base + loc + (base_waveform_p ? "base-waveform": "waveform");
- osc = og->osc;
+ fprintf(stderr, "PARENT BASE LEADS TO '%s'\n", loc.c_str());
+ ext = (base_waveform_p ? "base-waveform": "waveform");
assert(osc);
-
- printf("\n\n\n");
- printf("HELLO I AM HIM AT ADDRESS '%s'\n", loc.c_str());
- printf("\n\n\n");
- osc->createLink(loc, this);
- osc->requestValue(loc);
+ oscRegister(ext.c_str());
}
void update(void)
{
- printf("HELLO I AM HIM UPDATING AT ADDRESS '%s'\n", loc.c_str());
- osc->requestValue(loc);
+ oscWrite(ext);
}
virtual void OSC_value(unsigned N, void *data) override
{
- fprintf(stderr, "(oscl) OSC_value(%d,%p)\n", N, data);
assert(N==(unsigned)(synth->oscilsize*4));
memcpy(smps, data, N);
diff --git a/src/UI/MasterUI.fl b/src/UI/MasterUI.fl
@@ -162,7 +162,7 @@ bankui->show();}
}
Fl_Check_Button partenabled {
label 01
- callback {o->oscWrite("partonoff", o->value() ? "T" : "F");
+ callback {o->oscWrite("Penabled", o->value() ? "T" : "F");
if ((int) o->value()==0) panellistitemgroup->deactivate();
else {
panellistitemgroup->activate();
diff --git a/src/UI/OscilGenUI.fl b/src/UI/OscilGenUI.fl
@@ -307,8 +307,6 @@ oscildisplaygroup->redraw();}
Fl_Choice magtype {
label {Mag.Type}
callback {//oscil->Phmagtype=(int) o->value();
-basefuncdisplaygroup->redraw();
-
redrawoscil();}
xywh {75 285 65 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11
code0 {o->init("hmagtype");}
@@ -938,9 +936,11 @@ refresh();}
}
Function {OscilEditor(bool adnotep_, std::string loc_, Fl_Osc_Interface *osc_)} {open
} {
- code {assert(osc_);
+ code { assert(osc_);
assert(!loc_.empty());
+initialized = false;
+
adnotep = adnotep_;
osc = osc_;
loc = loc_;
@@ -951,6 +951,7 @@ oscils = NULL;
oscils_base = NULL;
make_window();
+initialized = true;
refresh();
osceditUI->show();} {}
@@ -1017,7 +1018,10 @@ redrawoscil();} {}
}
Function {redrawoscil()} {open
} {
- code {//get data from backend
+ code {
+ if(!initialized) //Must have been called during initialization
+ return;
+ //get data from backend
osc->requestValue(loc+"prepare");
oscilo->update();
oscils->update();
@@ -1039,4 +1043,6 @@ oscils_base->update();
}
decl {bool adnotep;} {private local
}
+ decl {bool initialized;} {private local
+ }
}