@@ -43,7 +43,7 @@ SpiralPluginGUI(w,h,o,ch) | |||
m_Gain->maximum (4.0); | |||
m_Gain->minimum (0.0); | |||
m_Gain->step (0.0001); | |||
m_Gain->value (2.0); | |||
m_Gain->value (1.0); | |||
m_Gain->callback((Fl_Callback*)cb_Gain); | |||
m_CtlGroup->add (m_Gain); | |||
@@ -73,7 +73,7 @@ SpiralPluginGUI(w,h,o,ch) | |||
m_NumGain->minimum (-2.0); | |||
m_NumGain->step (0.001); | |||
m_NumGain->lstep (0.1); | |||
m_NumGain->value (0.0); | |||
m_NumGain->value (1.0); | |||
m_NumGain->callback ((Fl_Callback*)cb_NumGain); | |||
m_NumGroup->add (m_NumGain); | |||
@@ -162,11 +162,11 @@ void AmpPluginGUI::cb_NumDC (Fl_Counter* o, void* v) { | |||
// button callbacks | |||
inline void AmpPluginGUI::cb_Reset_i (Fl_Button* o, void* v) { | |||
m_NumGain->value (0); | |||
m_Gain->value (2.0f); | |||
m_NumGain->value (1.0); | |||
m_Gain->value (1.0); | |||
m_GUICH->Set ("Gain", 0); | |||
m_NumDC->value (0); | |||
m_DC->value (2.0f); | |||
m_NumDC->value (0.0); | |||
m_DC->value (2.0); | |||
m_GUICH->Set ("DC", 0); | |||
} | |||
@@ -182,5 +182,6 @@ const string AmpPluginGUI::GetHelpText(const string &loc){ | |||
+ "the signal's DC offset (the up or down in the range of values).\n\n" | |||
+ "Handy for fine tuning CV's by hand, or modulating complex\n" | |||
+ "controls.\n\n" | |||
+ "The reset button quickly resets both controls back to 0\n"; | |||
+ "The reset button quickly resets the gain back to 1 and the\n" | |||
+ "offset back to 0\n"; | |||
} |
@@ -56,7 +56,7 @@ m_TrigThresh(0.01) | |||
{ | |||
m_PluginInfo.Name="Envelope"; | |||
m_PluginInfo.Width=142; | |||
m_PluginInfo.Height=110; | |||
m_PluginInfo.Height=132; | |||
m_PluginInfo.NumInputs=2; | |||
m_PluginInfo.NumOutputs=2; | |||
m_PluginInfo.PortTips.push_back("Trigger CV"); | |||
@@ -14,7 +14,7 @@ | |||
* You should have received a copy of the GNU General Public License | |||
* along with this program; if not, write to the Free Software | |||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
*/ | |||
*/ | |||
#include "EnvelopePluginGUI.h" | |||
#include <FL/fl_draw.h> | |||
@@ -26,251 +26,332 @@ static const float TIMED_SLIDER_MAX = 3.0f; | |||
EnvelopePluginGUI::EnvelopePluginGUI(int w, int h,EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info) : | |||
SpiralPluginGUI(w,h,o,ch) | |||
{ | |||
Thresh = new Fl_Slider(10, 20, 20, 70, "T"); | |||
Thresh->type(4); | |||
Thresh->selection_color(Info->GUI_COLOUR); | |||
Thresh->labelsize(10); | |||
Thresh->maximum(1.0); | |||
Thresh->step(0.01); | |||
Thresh->value(0.99f); | |||
Thresh->callback((Fl_Callback*)cb_Thresh); | |||
add(Thresh); | |||
Attack = new Fl_Slider(30, 20, 20, 70, "A"); | |||
Attack->type(4); | |||
Attack->selection_color(Info->GUI_COLOUR); | |||
Attack->labelsize(10); | |||
Attack->maximum(TIMED_SLIDER_MAX); | |||
Attack->step(0.01); | |||
Attack->value(3.0f); | |||
Attack->callback((Fl_Callback*)cb_Attack); | |||
add(Attack); | |||
Decay = new Fl_Slider(50, 20, 20, 70, "D"); | |||
Decay->type(4); | |||
Decay->selection_color(Info->GUI_COLOUR); | |||
Decay->labelsize(10); | |||
Decay->maximum(TIMED_SLIDER_MAX); | |||
Decay->step(0.01); | |||
Decay->value(2.29); | |||
Decay->callback((Fl_Callback*)cb_Decay); | |||
add(Decay); | |||
Sustain = new Fl_Slider(70, 20, 20, 70, "S"); | |||
Sustain->type(4); | |||
Sustain->selection_color(Info->GUI_COLOUR); | |||
Sustain->labelsize(10); | |||
Sustain->maximum(1); | |||
Sustain->step(0.01); | |||
Sustain->value(0.0); | |||
Sustain->callback((Fl_Callback*)cb_Sustain); | |||
add(Sustain); | |||
Release = new Fl_Slider(90, 20, 20, 70, "R"); | |||
Release->type(4); | |||
Release->selection_color(Info->GUI_COLOUR); | |||
Release->labelsize(10); | |||
Release->maximum(TIMED_SLIDER_MAX); | |||
Release->step(0.01); | |||
Release->value(2.0); | |||
Release->callback((Fl_Callback*)cb_Release); | |||
add(Release); | |||
Volume = new Fl_Slider(110, 20, 20, 70, "V"); | |||
Volume->type(4); | |||
Volume->selection_color(Info->GUI_COLOUR); | |||
Volume->labelsize(10); | |||
Volume->maximum(1); | |||
Volume->step(0.01); | |||
Volume->value(0.5f); | |||
Volume->callback((Fl_Callback*)cb_Volume); | |||
add(Volume); | |||
m_pop = new Fl_Button(1,h-14, 13, 13, "@>"); | |||
m_pop->type(1); | |||
m_pop->box(FL_FLAT_BOX); | |||
m_pop->down_box(FL_FLAT_BOX); | |||
m_pop->labeltype(FL_SYMBOL_LABEL); | |||
m_pop->labelsize(10); | |||
m_pop->labelcolor(25); | |||
m_pop->callback((Fl_Callback*)cb_pop); | |||
m_out_thresh = new Fl_Output(15,h+5, 48, 15, "T"); | |||
m_out_thresh->box(FL_ENGRAVED_BOX); | |||
m_out_thresh->color(16); | |||
m_out_thresh->labelsize(10); | |||
m_out_thresh->textsize(10); | |||
m_out_thresh->hide(); | |||
m_out_thresh->set_output(); | |||
m_out_attack = new Fl_Output(15,h+22, 48, 15, "A"); | |||
m_out_attack->box(FL_ENGRAVED_BOX); | |||
m_out_attack->color(16); | |||
m_out_attack->labelsize(10); | |||
m_out_attack->textsize(10); | |||
m_out_attack->hide(); | |||
m_out_attack->set_output(); | |||
m_out_decay = new Fl_Output(15,h+39, 48, 15, "D"); | |||
m_out_decay->box(FL_ENGRAVED_BOX); | |||
m_out_decay->color(16); | |||
m_out_decay->labelsize(10); | |||
m_out_decay->textsize(10); | |||
m_out_decay->hide(); | |||
m_out_decay->set_output(); | |||
m_out_sustain = new Fl_Output(87,h+5, 48, 15, "S"); | |||
m_out_sustain->box(FL_ENGRAVED_BOX); | |||
m_out_sustain->color(16); | |||
m_out_sustain->labelsize(10); | |||
m_out_sustain->textsize(10); | |||
m_out_sustain->hide(); | |||
m_out_sustain->set_output(); | |||
m_out_release = new Fl_Output(87,h+22, 48, 15, "R"); | |||
m_out_release->box(FL_ENGRAVED_BOX); | |||
m_out_release->color(16); | |||
m_out_release->labelsize(10); | |||
m_out_release->textsize(10); | |||
m_out_release->hide(); | |||
m_out_release->set_output(); | |||
m_out_volume = new Fl_Output(87,h+39, 48, 15, "V"); | |||
m_out_volume->box(FL_ENGRAVED_BOX); | |||
m_out_volume->color(16); | |||
m_out_volume->labelsize(10); | |||
m_out_volume->textsize(10); | |||
m_out_volume->hide(); | |||
m_out_volume->set_output(); | |||
end(); | |||
{ | |||
m_Tabs = new Fl_Tabs (5, 12, 132, 115, ""); | |||
m_Tabs->labelsize (10); | |||
m_Tabs->box (FL_PLASTIC_DOWN_BOX); | |||
add (m_Tabs); | |||
m_CtlGroup = new Fl_Group (5, 30, 132, 81, "Controls"); | |||
m_CtlGroup->labelsize (10); | |||
m_Tabs->add (m_CtlGroup); | |||
m_Thresh = new Fl_Slider (10, 38, 20, 70, "T"); | |||
m_Thresh->user_data ((void*)(this)); | |||
m_Thresh->type (FL_VERT_NICE_SLIDER); | |||
m_Thresh->selection_color (Info->GUI_COLOUR); | |||
m_Thresh->box (FL_PLASTIC_DOWN_BOX); | |||
m_Thresh->labelsize (10); | |||
m_Thresh->maximum (1.0); | |||
m_Thresh->step (0.01); | |||
m_Thresh->value (0.99f); | |||
m_Thresh->callback ((Fl_Callback*)cb_Thresh); | |||
m_CtlGroup->add (m_Thresh); | |||
m_Attack = new Fl_Slider (30, 38, 20, 70, "A"); | |||
m_Attack->user_data ((void*)(this)); | |||
m_Attack->type (FL_VERT_NICE_SLIDER); | |||
m_Attack->selection_color (Info->GUI_COLOUR); | |||
m_Attack->box (FL_PLASTIC_DOWN_BOX); | |||
m_Attack->labelsize (10); | |||
m_Attack->maximum (TIMED_SLIDER_MAX); | |||
m_Attack->step (0.01); | |||
m_Attack->value (3.0f); | |||
m_Attack->callback ((Fl_Callback*)cb_Attack); | |||
m_CtlGroup->add (m_Attack); | |||
m_Decay = new Fl_Slider (50, 38, 20, 70, "D"); | |||
m_Decay->user_data ((void*)(this)); | |||
m_Decay->type (FL_VERT_NICE_SLIDER); | |||
m_Decay->selection_color (Info->GUI_COLOUR); | |||
m_Decay->box (FL_PLASTIC_DOWN_BOX); | |||
m_Decay->labelsize (10); | |||
m_Decay->maximum (TIMED_SLIDER_MAX); | |||
m_Decay->step (0.01); | |||
m_Decay->value (2.29); | |||
m_Decay->callback ((Fl_Callback*)cb_Decay); | |||
m_CtlGroup->add (m_Decay); | |||
m_Sustain = new Fl_Slider (70, 38, 20, 70, "S"); | |||
m_Sustain->user_data ((void*)(this)); | |||
m_Sustain->type (FL_VERT_NICE_SLIDER); | |||
m_Sustain->selection_color (Info->GUI_COLOUR); | |||
m_Sustain->box (FL_PLASTIC_DOWN_BOX); | |||
m_Sustain->labelsize (10); | |||
m_Sustain->maximum (1); | |||
m_Sustain->step (0.01); | |||
m_Sustain->value (0.0); | |||
m_Sustain->callback ((Fl_Callback*)cb_Sustain); | |||
m_CtlGroup->add (m_Sustain); | |||
m_Release = new Fl_Slider (90, 38, 20, 70, "R"); | |||
m_Release->user_data ((void*)(this)); | |||
m_Release->type (FL_VERT_NICE_SLIDER); | |||
m_Release->selection_color (Info->GUI_COLOUR); | |||
m_Release->box (FL_PLASTIC_DOWN_BOX); | |||
m_Release->labelsize (10); | |||
m_Release->maximum (TIMED_SLIDER_MAX); | |||
m_Release->step (0.01); | |||
m_Release->value (2.0); | |||
m_Release->callback ((Fl_Callback*)cb_Release); | |||
m_CtlGroup->add (m_Release); | |||
m_Volume = new Fl_Slider (110, 38, 20, 70, "V"); | |||
m_Volume->user_data ((void*)(this)); | |||
m_Volume->type (FL_VERT_NICE_SLIDER); | |||
m_Volume->selection_color (Info->GUI_COLOUR); | |||
m_Volume->box (FL_PLASTIC_DOWN_BOX); | |||
m_Volume->labelsize (10); | |||
m_Volume->maximum (1); | |||
m_Volume->step (0.01); | |||
m_Volume->value (0.5f); | |||
m_Volume->callback ((Fl_Callback*)cb_Volume); | |||
m_CtlGroup->add (m_Volume); | |||
m_NumGroup = new Fl_Group (5, 30, 132, 81, "Numbers"); | |||
m_NumGroup->labelsize (10); | |||
m_Tabs->add (m_NumGroup); | |||
m_NumThresh = new Fl_Counter (10, 35, 60, 20, "Threshold (%)"); | |||
m_NumThresh->user_data ((void*)(this)); | |||
m_NumThresh->type (FL_SIMPLE_COUNTER); | |||
m_NumThresh->color (Info->GUI_COLOUR); | |||
m_NumThresh->box (FL_PLASTIC_UP_BOX); | |||
m_NumThresh->labelsize (8); | |||
m_NumThresh->maximum (100); | |||
m_NumThresh->minimum (0); | |||
m_NumThresh->step (1); | |||
m_NumThresh->value (1); | |||
m_NumThresh->callback ((Fl_Callback*)cb_NumThresh); | |||
m_NumGroup->add (m_NumThresh); | |||
m_NumAttack = new Fl_Counter (72, 35, 60, 20, "Attack (s)"); | |||
m_NumAttack->user_data ((void*)(this)); | |||
m_NumAttack->type (FL_SIMPLE_COUNTER); | |||
m_NumAttack->color (Info->GUI_COLOUR); | |||
m_NumAttack->box (FL_PLASTIC_UP_BOX); | |||
m_NumAttack->labelsize (8); | |||
m_NumAttack->maximum (TIMED_SLIDER_MAX * TIMED_SLIDER_MAX); | |||
m_NumAttack->minimum (0); | |||
m_NumAttack->step (0.1); | |||
m_NumAttack->value (0); | |||
m_NumAttack->callback ((Fl_Callback*)cb_NumAttack); | |||
m_NumGroup->add (m_NumAttack); | |||
m_NumDecay = new Fl_Counter (10, 65, 60, 20, "Decay (s)"); | |||
m_NumDecay->user_data ((void*)(this)); | |||
m_NumDecay->type (FL_SIMPLE_COUNTER); | |||
m_NumDecay->color (Info->GUI_COLOUR); | |||
m_NumDecay->box (FL_PLASTIC_UP_BOX); | |||
m_NumDecay->labelsize (8); | |||
m_NumDecay->maximum (TIMED_SLIDER_MAX * TIMED_SLIDER_MAX); | |||
m_NumDecay->minimum (0); | |||
m_NumDecay->step (0.1); | |||
m_NumDecay->value (0.5); | |||
m_NumDecay->callback ((Fl_Callback*)cb_NumDecay); | |||
m_NumGroup->add (m_NumDecay); | |||
m_NumSustain = new Fl_Counter (72, 65, 60, 20, "Sustain (%)"); | |||
m_NumSustain->user_data ((void*)(this)); | |||
m_NumSustain->type (FL_SIMPLE_COUNTER); | |||
m_NumSustain->color (Info->GUI_COLOUR); | |||
m_NumSustain->box (FL_PLASTIC_UP_BOX); | |||
m_NumSustain->labelsize (8); | |||
m_NumSustain->maximum (100); | |||
m_NumSustain->minimum (0); | |||
m_NumSustain->step (1); | |||
m_NumSustain->value (100); | |||
m_NumSustain->callback ((Fl_Callback*)cb_NumSustain); | |||
m_NumGroup->add (m_NumSustain); | |||
m_NumRelease = new Fl_Counter (10, 95, 60, 20, "Release (s)"); | |||
m_NumRelease->user_data ((void*)(this)); | |||
m_NumRelease->type (FL_SIMPLE_COUNTER); | |||
m_NumRelease->color (Info->GUI_COLOUR); | |||
m_NumRelease->box (FL_PLASTIC_UP_BOX); | |||
m_NumRelease->labelsize (8); | |||
m_NumRelease->maximum (TIMED_SLIDER_MAX * TIMED_SLIDER_MAX); | |||
m_NumRelease->minimum (0); | |||
m_NumRelease->step (0.1); | |||
m_NumRelease->value (1.0); | |||
m_NumRelease->callback ((Fl_Callback*)cb_NumRelease); | |||
m_NumGroup->add (m_NumRelease); | |||
m_NumVolume = new Fl_Counter (72, 95, 60, 20, "Volume (%)"); | |||
m_NumVolume->user_data ((void*)(this)); | |||
m_NumVolume->type (FL_SIMPLE_COUNTER); | |||
m_NumVolume->color (Info->GUI_COLOUR); | |||
m_NumVolume->box (FL_PLASTIC_UP_BOX); | |||
m_NumVolume->labelsize (8); | |||
m_NumVolume->maximum (100); | |||
m_NumVolume->minimum (0); | |||
m_NumVolume->step (1); | |||
m_NumVolume->value (50); | |||
m_NumVolume->callback ((Fl_Callback*)cb_NumVolume); | |||
m_NumGroup->add (m_NumVolume); | |||
end(); | |||
} | |||
extern "C" int sprintf(char *,const char *,...); | |||
void EnvelopePluginGUI::UpdateValues (SpiralPlugin *o) { | |||
float val; | |||
EnvelopePlugin *Plugin = (EnvelopePlugin*)o; | |||
void EnvelopePluginGUI::UpdateValues(SpiralPlugin *o) | |||
{ | |||
EnvelopePlugin *Plugin = (EnvelopePlugin*)o; | |||
Thresh->value(1.0f-Plugin->GetTrigThresh()); | |||
Attack->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetAttack())); | |||
Decay->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetDecay())); | |||
Sustain->value(1.0f-Plugin->GetSustain()); | |||
Release->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetRelease())); | |||
Volume->value(1.0f-Plugin->GetVolume()); | |||
char str[10]; | |||
sprintf(str,"%4.0f %%", 100*Plugin->GetTrigThresh()); | |||
m_out_thresh->value(str); | |||
sprintf(str,"%5.3f s", Plugin->GetAttack()); | |||
m_out_attack->value(str); | |||
sprintf(str,"%5.3f s", Plugin->GetDecay()); | |||
m_out_decay->value(str); | |||
sprintf(str,"%4.0f %%", 100*Plugin->GetSustain()); | |||
m_out_sustain->value(str); | |||
sprintf(str,"%5.3f s", Plugin->GetRelease()); | |||
m_out_release->value(str); | |||
sprintf(str,"%4.0f %%", 100*Plugin->GetVolume()); | |||
m_out_volume->value(str); | |||
val = Plugin->GetTrigThresh(); | |||
m_Thresh->value (1.0f - val); | |||
m_NumThresh->value (100 * val); | |||
val = Plugin->GetAttack(); | |||
m_Attack->value (TIMED_SLIDER_MAX - sqrt (val)); | |||
m_NumAttack->value (val); | |||
val = Plugin->GetDecay(); | |||
m_Decay->value (TIMED_SLIDER_MAX - sqrt (val)); | |||
m_NumDecay->value (val); | |||
val = Plugin->GetSustain(); | |||
m_Sustain->value (1.0f - val); | |||
m_NumSustain->value (100 * val); | |||
val = Plugin->GetRelease(); | |||
m_Release->value (TIMED_SLIDER_MAX - sqrt (val)); | |||
m_NumRelease->value (val); | |||
val = Plugin->GetVolume(); | |||
m_Volume->value (1.0f - val); | |||
m_NumVolume->value (100 * val); | |||
} | |||
// Slider Callbacks | |||
inline void EnvelopePluginGUI::cb_Thresh_i(Fl_Slider* o, void* v) | |||
{ | |||
char str[10]; | |||
m_GUICH->Set("Trig",(float)(1.0f-o->value())); | |||
sprintf(str,"%4.0f %%", 100*(1.0f-o->value())); | |||
m_out_thresh->value(str); | |||
inline void EnvelopePluginGUI::cb_Thresh_i (Fl_Slider* o, void* v) { | |||
float val = (float)(1.0f - o->value()); | |||
m_GUICH->Set ("Trig", val); | |||
m_NumThresh->value (100 * val); | |||
} | |||
void EnvelopePluginGUI::cb_Thresh(Fl_Slider* o, void* v) | |||
{ ((EnvelopePluginGUI*)(o->parent()))->cb_Thresh_i(o,v); } | |||
inline void EnvelopePluginGUI::cb_Attack_i(Fl_Slider* o, void* v) | |||
{ | |||
char str[10]; | |||
float value=TIMED_SLIDER_MAX-o->value(); | |||
m_GUICH->Set("Attack",value*value); | |||
sprintf(str,"%5.3f s", value*value); | |||
m_out_attack->value(str); | |||
void EnvelopePluginGUI::cb_Thresh (Fl_Slider* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_Thresh_i (o, v); | |||
} | |||
void EnvelopePluginGUI::cb_Attack(Fl_Slider* o, void* v) | |||
{ ((EnvelopePluginGUI*)(o->parent()))->cb_Attack_i(o,v); } | |||
inline void EnvelopePluginGUI::cb_Decay_i(Fl_Slider* o, void* v) | |||
{ | |||
char str[10]; | |||
float value=TIMED_SLIDER_MAX-o->value(); | |||
m_GUICH->Set("Decay",value*value); | |||
sprintf(str,"%5.3f s", value*value); | |||
m_out_decay->value(str); | |||
inline void EnvelopePluginGUI::cb_Attack_i (Fl_Slider* o, void* v) { | |||
float val = TIMED_SLIDER_MAX - o->value(); | |||
val *= val; | |||
m_GUICH->Set ("Attack", val); | |||
m_NumAttack->value (val); | |||
} | |||
void EnvelopePluginGUI::cb_Decay(Fl_Slider* o, void* v) | |||
{ ((EnvelopePluginGUI*)(o->parent()))->cb_Decay_i(o,v); } | |||
inline void EnvelopePluginGUI::cb_Sustain_i(Fl_Slider* o, void* v) | |||
{ | |||
char str[10]; | |||
m_GUICH->Set("Sustain",(float)(1.0f-o->value())); | |||
sprintf(str,"%4.0f %%", 100*(1.0f-o->value())); | |||
m_out_sustain->value(str); | |||
void EnvelopePluginGUI::cb_Attack (Fl_Slider* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_Attack_i (o, v); | |||
} | |||
void EnvelopePluginGUI::cb_Sustain(Fl_Slider* o, void* v) | |||
{ ((EnvelopePluginGUI*)(o->parent()))->cb_Sustain_i(o,v); } | |||
inline void EnvelopePluginGUI::cb_Release_i(Fl_Slider* o, void* v) | |||
{ | |||
char str[10]; | |||
float value=TIMED_SLIDER_MAX-o->value(); | |||
m_GUICH->Set("Release",value*value); | |||
sprintf(str,"%5.3f s", value*value); | |||
m_out_release->value(str); | |||
inline void EnvelopePluginGUI::cb_Decay_i (Fl_Slider* o, void* v) { | |||
float val = TIMED_SLIDER_MAX - o->value(); | |||
val *= val; | |||
m_GUICH->Set ("Decay", val); | |||
m_NumDecay->value (val); | |||
} | |||
void EnvelopePluginGUI::cb_Release(Fl_Slider* o, void* v) | |||
{ ((EnvelopePluginGUI*)(o->parent()))->cb_Release_i(o,v); } | |||
inline void EnvelopePluginGUI::cb_Volume_i(Fl_Slider* o, void* v) | |||
{ | |||
char str[10]; | |||
void EnvelopePluginGUI::cb_Decay (Fl_Slider* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_Decay_i (o, v); | |||
} | |||
inline void EnvelopePluginGUI::cb_Sustain_i (Fl_Slider* o, void* v) { | |||
float val = (float)(1.0f - o->value()); | |||
m_GUICH->Set ("Sustain", val); | |||
m_NumSustain->value (100 * val); | |||
} | |||
void EnvelopePluginGUI::cb_Sustain (Fl_Slider* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_Sustain_i (o, v); | |||
} | |||
inline void EnvelopePluginGUI::cb_Release_i (Fl_Slider* o, void* v) { | |||
float val = TIMED_SLIDER_MAX - o->value(); | |||
val *= val; | |||
m_GUICH->Set ("Release", val); | |||
m_NumRelease->value (val); | |||
} | |||
void EnvelopePluginGUI::cb_Release (Fl_Slider* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_Release_i (o, v); | |||
} | |||
inline void EnvelopePluginGUI::cb_Volume_i (Fl_Slider* o, void* v) { | |||
float val = (float)(1.0f - o->value()); | |||
m_GUICH->Set ("Volume", val); | |||
m_NumVolume->value (100 * val); | |||
} | |||
void EnvelopePluginGUI::cb_Volume (Fl_Slider* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_Volume_i (o, v); | |||
} | |||
// Counter Callbacks | |||
inline void EnvelopePluginGUI::cb_NumThresh_i (Fl_Counter* o, void* v) { | |||
float val = o->value() / 100; | |||
m_GUICH->Set ("Trig", val); | |||
m_Thresh->value (1.0f - val); | |||
} | |||
void EnvelopePluginGUI::cb_NumThresh (Fl_Counter* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_NumThresh_i (o, v); | |||
} | |||
inline void EnvelopePluginGUI::cb_NumAttack_i (Fl_Counter* o, void* v) { | |||
float val = o->value(); | |||
m_GUICH->Set ("Attack", val); | |||
m_Attack->value (TIMED_SLIDER_MAX - sqrt (val)); | |||
} | |||
void EnvelopePluginGUI::cb_NumAttack (Fl_Counter* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_NumAttack_i (o, v); | |||
} | |||
inline void EnvelopePluginGUI::cb_NumDecay_i (Fl_Counter* o, void* v) { | |||
float val = o->value(); | |||
m_GUICH->Set ("Decay", val); | |||
m_Decay->value (TIMED_SLIDER_MAX - sqrt (val)); | |||
} | |||
void EnvelopePluginGUI::cb_NumDecay (Fl_Counter* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_NumDecay_i (o, v); | |||
} | |||
m_GUICH->Set("Volume",(float)(1.0f-o->value())); | |||
sprintf(str,"%4.0f %%", (float)(100.0f*(1.0f-o->value()))); | |||
m_out_volume->value(str); | |||
inline void EnvelopePluginGUI::cb_NumSustain_i (Fl_Counter* o, void* v) { | |||
float val = o->value() / 100; | |||
m_GUICH->Set ("Sustain", val); | |||
m_Sustain->value (1.0f - val); | |||
} | |||
void EnvelopePluginGUI::cb_Volume(Fl_Slider* o, void* v) | |||
{ ((EnvelopePluginGUI*)(o->parent()))->cb_Volume_i(o,v); } | |||
inline void EnvelopePluginGUI::cb_pop_i(Fl_Button *o, void*) { | |||
if (o->value()) | |||
{ | |||
o->label("@2>"); | |||
m_out_thresh->show(); | |||
m_out_attack->show(); | |||
m_out_decay->show(); | |||
m_out_sustain->show(); | |||
m_out_release->show(); | |||
redraw(); | |||
} | |||
else | |||
{ | |||
o->label("@>"); | |||
m_out_thresh->hide(); | |||
m_out_attack->hide(); | |||
m_out_decay->hide(); | |||
m_out_sustain->hide(); | |||
m_out_release->hide(); | |||
redraw(); | |||
parent()->redraw(); | |||
} | |||
void EnvelopePluginGUI::cb_NumSustain (Fl_Counter* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_NumSustain_i (o, v); | |||
} | |||
void EnvelopePluginGUI::cb_pop(Fl_Button* o, void* v) { | |||
((EnvelopePluginGUI*)(o->parent()))->cb_pop_i(o,v); | |||
inline void EnvelopePluginGUI::cb_NumRelease_i (Fl_Counter* o, void* v) { | |||
float val = o->value(); | |||
m_GUICH->Set ("Release", val); | |||
m_Release->value (TIMED_SLIDER_MAX - sqrt (val)); | |||
} | |||
const string EnvelopePluginGUI::GetHelpText(const string &loc){ | |||
void EnvelopePluginGUI::cb_NumRelease (Fl_Counter* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_NumRelease_i (o, v); | |||
} | |||
inline void EnvelopePluginGUI::cb_NumVolume_i (Fl_Counter* o, void* v) { | |||
float val = o->value() / 100; | |||
m_GUICH->Set ("Volume", val); | |||
m_Volume->value (1.0f - val); | |||
} | |||
void EnvelopePluginGUI::cb_NumVolume (Fl_Counter* o, void* v) { | |||
((EnvelopePluginGUI*)(o->user_data()))->cb_NumVolume_i (o, v); | |||
} | |||
// Help Text | |||
const string EnvelopePluginGUI::GetHelpText (const string &loc) { | |||
return string("") | |||
+ "An ADSR envelope. This plugin also has a built in\n" | |||
+ "amplifier for signals, so data fed through the Input\n" | |||
@@ -14,65 +14,59 @@ | |||
* You should have received a copy of the GNU General Public License | |||
* along with this program; if not, write to the Free Software | |||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
*/ | |||
*/ | |||
#include <FL/Fl.H> | |||
#include <FL/Fl_Window.H> | |||
#include <FL/Fl_Group.H> | |||
#include <FL/Fl_Slider.H> | |||
#include <FL/Fl_Button.H> | |||
#include <FL/Fl_Tabs.H> | |||
#include <FL/Fl_Counter.H> | |||
#include <FL/Fl_Box.H> | |||
#include <FL/Fl_Output.H> | |||
#include "EnvelopePlugin.h" | |||
#include "../SpiralPluginGUI.h" | |||
#ifndef EnvelopeGUI | |||
#define EnvelopeGUI | |||
class EnvelopePluginGUI : public SpiralPluginGUI | |||
{ | |||
public: | |||
EnvelopePluginGUI(int w, int h, EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info); | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
Fl_Slider *Thresh; | |||
Fl_Slider *Attack; | |||
Fl_Slider *Decay; | |||
Fl_Slider *Sustain; | |||
Fl_Slider *Release; | |||
Fl_Slider *Volume; | |||
Fl_Button *m_pop; | |||
Fl_Output *m_out_thresh; | |||
Fl_Output *m_out_attack; | |||
Fl_Output *m_out_decay; | |||
Fl_Output *m_out_sustain; | |||
Fl_Output *m_out_release; | |||
Fl_Output *m_out_volume; | |||
//// Callbacks //// | |||
inline void cb_Thresh_i(Fl_Slider* o, void* v); | |||
static void cb_Thresh(Fl_Slider*, void*); | |||
inline void cb_Attack_i(Fl_Slider* o, void* v); | |||
static void cb_Attack(Fl_Slider*, void*); | |||
inline void cb_Decay_i(Fl_Slider* o, void* v); | |||
static void cb_Decay(Fl_Slider* o, void* v); | |||
inline void cb_Sustain_i(Fl_Slider* o, void* v); | |||
static void cb_Sustain(Fl_Slider* o, void* v); | |||
inline void cb_Release_i(Fl_Slider* o, void* v); | |||
static void cb_Release(Fl_Slider* o, void* v); | |||
inline void cb_Volume_i(Fl_Slider* o, void* v); | |||
static void cb_Volume(Fl_Slider* o, void* v); | |||
inline void cb_pop_i(Fl_Button *o, void *v); | |||
static void cb_pop(Fl_Button *o, void *v); | |||
class EnvelopePluginGUI : public SpiralPluginGUI { | |||
public: | |||
EnvelopePluginGUI(int w, int h, EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info); | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
Fl_Tabs *m_Tabs; | |||
Fl_Group *m_CtlGroup, *m_NumGroup; | |||
Fl_Slider *m_Thresh, *m_Attack, *m_Decay, *m_Sustain, *m_Release, *m_Volume; | |||
Fl_Counter *m_NumThresh, *m_NumAttack, *m_NumDecay, *m_NumSustain, *m_NumRelease, *m_NumVolume; | |||
// Slider Callbacks | |||
inline void cb_Thresh_i (Fl_Slider* o, void* v); | |||
static void cb_Thresh (Fl_Slider* o, void* v); | |||
inline void cb_Attack_i (Fl_Slider* o, void* v); | |||
static void cb_Attack (Fl_Slider* o, void* v); | |||
inline void cb_Decay_i (Fl_Slider* o, void* v); | |||
static void cb_Decay (Fl_Slider* o, void* v); | |||
inline void cb_Sustain_i (Fl_Slider* o, void* v); | |||
static void cb_Sustain (Fl_Slider* o, void* v); | |||
inline void cb_Release_i (Fl_Slider* o, void* v); | |||
static void cb_Release (Fl_Slider* o, void* v); | |||
inline void cb_Volume_i (Fl_Slider* o, void* v); | |||
static void cb_Volume (Fl_Slider* o, void* v); | |||
// Counter Callbacks | |||
inline void cb_NumThresh_i (Fl_Counter* o, void* v); | |||
static void cb_NumThresh (Fl_Counter* o, void* v); | |||
inline void cb_NumAttack_i (Fl_Counter* o, void* v); | |||
static void cb_NumAttack (Fl_Counter* o, void* v); | |||
inline void cb_NumDecay_i (Fl_Counter* o, void* v); | |||
static void cb_NumDecay (Fl_Counter* o, void* v); | |||
inline void cb_NumSustain_i (Fl_Counter* o, void* v); | |||
static void cb_NumSustain (Fl_Counter* o, void* v); | |||
inline void cb_NumRelease_i (Fl_Counter* o, void* v); | |||
static void cb_NumRelease (Fl_Counter* o, void* v); | |||
inline void cb_NumVolume_i (Fl_Counter* o, void* v); | |||
static void cb_NumVolume (Fl_Counter* o, void* v); | |||
}; | |||
#endif |
@@ -233,15 +233,15 @@ void MatrixPlugin::Execute() | |||
m_Current=m_PatSeq[m_CurPatSeq]; | |||
} | |||
} | |||
// An external clock pulse overrides the internal timing | |||
if ((!ExternalClock && m_Time>=m_StepTime*(1/m_Matrix[m_Current].Speed)) || | |||
(ExternalClock && ExternalClockTriggered)) | |||
{ | |||
(ExternalClock && ExternalClockTriggered)) | |||
{ | |||
m_Time=0; | |||
m_Step++; | |||
if (m_Step >= m_Matrix[m_Current].Length) | |||
if (m_Step >= m_Matrix[m_Current].Length) | |||
{ | |||
SetOutput(18, n, 1); | |||
m_Step=0; | |||
@@ -249,17 +249,17 @@ void MatrixPlugin::Execute() | |||
if (m_PatSeq[m_CurPatSeq]==-1 || m_CurPatSeq==NUM_PATSEQ) m_CurPatSeq=0; | |||
m_Current=m_PatSeq[m_CurPatSeq]; | |||
} | |||
// Reset the values | |||
m_CurrentTriggerCV=0; | |||
if (m_NoteCut) m_CurrentNoteCV=0; | |||
for (int t=0; t<NUM_PATTERNS; t++) | |||
for (int t=0; t<NUM_PATTERNS; t++) | |||
{ | |||
SetOutput(t+2,n,0); | |||
m_TriggerLevel[t]=0; | |||
} | |||
// Scan the matrix at current time | |||
// Scan the matrix at current time | |||
for (int i=0; i<MATY; i++) | |||
{ | |||
if (m_Matrix[m_Current].Matrix[m_Step][i]) | |||
@@ -269,7 +269,7 @@ void MatrixPlugin::Execute() | |||
m_TriggerLevel[i]=m_Matrix[m_Current].Volume[m_Step][i]; | |||
} | |||
} | |||
// reset the triggers between steps to clear them | |||
// otherwise consecutive events wont get triggered | |||
SetOutput(1,n,0); | |||
@@ -285,45 +285,45 @@ void MatrixPlugin::ExecuteCommands() | |||
switch (m_AudioCH->GetCommand()) | |||
{ | |||
case MAT_LENGTH : | |||
m_Matrix[m_GUICurrent].Length=m_GUIArgs.Length; | |||
m_Matrix[m_GUICurrent].Length=m_GUIArgs.Length; | |||
break; | |||
case MAT_SPEED : | |||
m_Matrix[m_GUICurrent].Speed=m_GUIArgs.Speed; | |||
break; | |||
case MAT_ACTIVATE : | |||
m_Matrix[m_GUICurrent].Matrix[m_GUIArgs.X][m_GUIArgs.Y]=true; | |||
break; | |||
case MAT_DEACTIVATE : | |||
m_Matrix[m_GUICurrent].Matrix[m_GUIArgs.X][m_GUIArgs.Y]=false; | |||
case MAT_SPEED : | |||
m_Matrix[m_GUICurrent].Speed=m_GUIArgs.Speed; | |||
break; | |||
case MAT_ACTIVATE : | |||
m_Matrix[m_GUICurrent].Matrix[m_GUIArgs.X][m_GUIArgs.Y]=true; | |||
break; | |||
case MAT_OCTAVE : | |||
m_Matrix[m_GUICurrent].Octave=m_GUIArgs.Octave; | |||
case MAT_DEACTIVATE : | |||
m_Matrix[m_GUICurrent].Matrix[m_GUIArgs.X][m_GUIArgs.Y]=false; | |||
break; | |||
case COPY : | |||
CopyPattern(); | |||
case MAT_OCTAVE : | |||
m_Matrix[m_GUICurrent].Octave=m_GUIArgs.Octave; | |||
break; | |||
case PASTE : | |||
PastePattern(); | |||
case COPY : | |||
m_CopyPattern = m_GUICurrent; | |||
break; | |||
case CLEAR : | |||
ClearPattern(); | |||
case PASTE : | |||
PastePattern(); | |||
break; | |||
case TUP : | |||
if (CanTransposeUp()) TransposeUp(); | |||
case CLEAR : | |||
ClearPattern(); | |||
break; | |||
case TDOWN : | |||
if (CanTransposeDown()) TransposeDown(); | |||
case TUP : | |||
if (CanTransposeUp()) TransposeUp(); | |||
break; | |||
case MAT_VOLUME : | |||
m_Matrix[m_GUICurrent].Volume[m_GUIArgs.X][m_GUIArgs.Y]=m_GUIArgs.Volume; | |||
case TDOWN : | |||
if (CanTransposeDown()) TransposeDown(); | |||
break; | |||
case SET_CURRENT : | |||
m_Current=m_GUIArgs.Num; | |||
case MAT_VOLUME : | |||
m_Matrix[m_GUICurrent].Volume[m_GUIArgs.X][m_GUIArgs.Y]=m_GUIArgs.Volume; | |||
break; | |||
case SET_PATSEQ : | |||
case SET_CURRENT : | |||
m_Current=m_GUIArgs.Num; | |||
break; | |||
case SET_PATSEQ : | |||
m_PatSeq[m_GUIArgs.Y]=m_GUIArgs.Num; | |||
break; | |||
} | |||
@@ -361,17 +361,17 @@ void MatrixPlugin::TransposeUp() { | |||
} | |||
} | |||
void MatrixPlugin::TransposeDown() | |||
void MatrixPlugin::TransposeDown() | |||
{ | |||
int x, y; | |||
for (y=0; y<MATY-1; y++) | |||
for (y=0; y<MATY-1; y++) | |||
{ | |||
for (x=0; x<MATX; x++) | |||
for (x=0; x<MATX; x++) | |||
{ | |||
m_Matrix[m_GUICurrent].Matrix[x][y] = m_Matrix[m_GUICurrent].Matrix[x][y+1]; | |||
} | |||
} | |||
for (x=0; x<MATX; x++) | |||
for (x=0; x<MATX; x++) | |||
{ | |||
m_Matrix[m_GUICurrent].Matrix[x][MATY-1] = 0; | |||
} | |||
@@ -397,7 +397,7 @@ void MatrixPlugin::StreamOut(ostream &s) | |||
for (int n=0; n<NUM_PATTERNS; n++) | |||
{ | |||
s<<m_Matrix[n].Length<<" "<<m_Matrix[n].Speed<<" "<<m_Matrix[n].Octave<<endl; | |||
for (int y=0; y<MATY; y++) | |||
{ | |||
for (int x=0; x<MATX; x++) | |||
@@ -408,7 +408,7 @@ void MatrixPlugin::StreamOut(ostream &s) | |||
s<<"-1 "; | |||
} | |||
s<<endl; | |||
for (int n=0; n<NUM_PATSEQ; n++) | |||
for (int n=0; n<NUM_PATSEQ; n++) | |||
{ | |||
s<<m_PatSeq[n]<<" "; | |||
} | |||
@@ -419,14 +419,14 @@ void MatrixPlugin::StreamIn(istream &s) | |||
{ | |||
int version; | |||
s>>version; | |||
switch (version) | |||
{ | |||
case 1: | |||
{ | |||
s>>m_Current>>m_Time>>m_Step>>m_Loop>>m_NoteCut; | |||
for (int n=0; n<NUM_PATTERNS; n++) | |||
for (int n=0; n<NUM_PATTERNS; n++) | |||
{ | |||
s>>m_Matrix[n].Length>>m_Matrix[n].Speed>>m_Matrix[n].Octave; | |||
@@ -73,7 +73,6 @@ private: | |||
GUIArgs m_GUIArgs; | |||
void CopyPattern() { m_CopyPattern = m_Current; } | |||
void PastePattern(); | |||
void ClearPattern(); | |||
void TransposeUp(); | |||
@@ -19,7 +19,7 @@ | |||
#include "MatrixPluginGUI.h" | |||
#include <FL/fl_draw.h> | |||
#include <FL/fl_draw.H> | |||
#include <FL/fl_file_chooser.h> | |||
//#include <FL/fl_file_chooser.h> | |||
static const char NoteText[12][3] = {"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"}; | |||
@@ -101,88 +101,118 @@ MatrixPluginGUI::MatrixPluginGUI(int w, int h,MatrixPlugin *o,ChannelHandler *ch | |||
SpiralPluginGUI(w,h,o,ch), | |||
m_LastLight(0), | |||
m_LastPatSeqLight(0) | |||
{ | |||
{ | |||
//size_range(10,10); | |||
m_NoteCut = new Fl_Button (5, h-30, 85, 20,"NoteCut"); | |||
m_NoteCut->type(1); | |||
m_NoteCut->labelsize(10); | |||
m_NoteCut->value(0); | |||
m_NoteCut->callback((Fl_Callback*)cb_NoteCut); | |||
add(m_NoteCut); | |||
m_Pattern = new Fl_Counter(5, 20, 40, 20, "View"); | |||
m_Pattern->labelsize(10); | |||
m_Pattern->type(FL_SIMPLE_COUNTER); | |||
m_Pattern->step(1); | |||
m_Pattern->value(0); | |||
m_Pattern->callback((Fl_Callback*)cb_Pattern); | |||
add(m_Pattern); | |||
m_PlayPattern = new Fl_Counter(50, 20, 40, 20, "Play"); | |||
m_PlayPattern->labelsize(10); | |||
m_PlayPattern->type(FL_SIMPLE_COUNTER); | |||
m_PlayPattern->step(1); | |||
m_PlayPattern->value(0); | |||
m_PlayPattern->callback((Fl_Callback*)cb_PlayPattern); | |||
add(m_PlayPattern); | |||
m_Length = new Fl_Counter(5, 55, 40, 20, "Length"); | |||
m_Length->labelsize(10); | |||
m_Length->type(FL_SIMPLE_COUNTER); | |||
m_Length->step(1); | |||
m_Length->value(64); | |||
m_Length->callback((Fl_Callback*)cb_Length); | |||
add(m_Length); | |||
m_Speed = new Fl_Knob (50, 60, 40, 40, "Speed"); | |||
m_Speed->color(Info->GUI_COLOUR); | |||
m_Speed->type(Fl_Knob::DOTLIN); | |||
m_Speed->labelsize(10); | |||
m_Speed->maximum(200); | |||
m_Speed->step(0.01); | |||
m_Speed->value(1.0); | |||
m_Speed->callback((Fl_Callback*)cb_Speed); | |||
add(m_Speed); | |||
m_SpeedVal = new Fl_Counter (5, 125, 85, 20, ""); | |||
m_SpeedVal->labelsize(10); | |||
m_SpeedVal->value(10); | |||
m_SpeedVal->type(FL_SIMPLE_COUNTER); | |||
m_SpeedVal->step(1); | |||
m_SpeedVal->callback((Fl_Callback*)cb_Speed); | |||
add(m_SpeedVal); | |||
m_Pattern = new Fl_Counter (5, 20, 40, 20, "View"); | |||
m_Pattern->labelsize (10); | |||
m_Pattern->type (FL_SIMPLE_COUNTER); | |||
m_Pattern->box (FL_PLASTIC_UP_BOX); | |||
m_Pattern->color (Info->GUI_COLOUR); | |||
m_Pattern->step (1); | |||
m_Pattern->minimum (0); | |||
m_Pattern->maximum (NUM_PATTERNS-1); | |||
m_Pattern->value (0); | |||
m_Pattern->callback ((Fl_Callback*)cb_Pattern); | |||
add (m_Pattern); | |||
m_PlayPattern = new Fl_Counter (50, 20, 40, 20, "Play"); | |||
m_PlayPattern->labelsize (10); | |||
m_PlayPattern->type (FL_SIMPLE_COUNTER); | |||
m_PlayPattern->box (FL_PLASTIC_UP_BOX); | |||
m_PlayPattern->color (Info->GUI_COLOUR); | |||
m_PlayPattern->step (1); | |||
m_PlayPattern->minimum (0); | |||
m_PlayPattern->maximum (NUM_PATTERNS-1); | |||
m_PlayPattern->value (0); | |||
m_PlayPattern->callback ((Fl_Callback*)cb_PlayPattern); | |||
add (m_PlayPattern); | |||
m_Length = new Fl_Counter (5, 55, 40, 20, "Length"); | |||
m_Length->labelsize (10); | |||
m_Length->type (FL_SIMPLE_COUNTER); | |||
m_Length->box (FL_PLASTIC_UP_BOX); | |||
m_Length->color (Info->GUI_COLOUR); | |||
m_Length->step (1); | |||
m_Length->value (64); | |||
m_Length->minimum (1); | |||
m_Length->maximum (64); | |||
m_Length->callback ((Fl_Callback*)cb_Length); | |||
add (m_Length); | |||
m_Octave = new Fl_Counter(5, 90, 40, 20, "Octave"); | |||
m_Octave->labelsize(10); | |||
m_Octave->type(FL_SIMPLE_COUNTER); | |||
m_Octave->step(1); | |||
m_Octave->value(0); | |||
m_Octave->labelsize(10); | |||
m_Octave->type (FL_SIMPLE_COUNTER); | |||
m_Octave->box (FL_PLASTIC_UP_BOX); | |||
m_Octave->color (Info->GUI_COLOUR); | |||
m_Octave->minimum (0); | |||
m_Octave->maximum (6); | |||
m_Octave->step (1); | |||
m_Octave->value (0); | |||
m_Octave->callback((Fl_Callback*)cb_Octave); | |||
add(m_Octave); | |||
add (m_Octave); | |||
m_Speed = new Fl_Knob (50, 60, 40, 40, "Speed"); | |||
m_Speed->color (Info->GUI_COLOUR); | |||
m_Speed->type (Fl_Knob::DOTLIN); | |||
m_Speed->labelsize (10); | |||
m_Speed->minimum (0); | |||
m_Speed->maximum (200); | |||
m_Speed->step (0.01); | |||
m_Speed->value (8); | |||
m_Speed->callback ((Fl_Callback*)cb_Speed); | |||
add (m_Speed); | |||
m_CopyBtn = new Fl_Button (5, 150, 40, 20, "Copy"); | |||
m_SpeedVal = new Fl_Counter (5, 125, 85, 20, ""); | |||
m_SpeedVal->labelsize (10); | |||
m_SpeedVal->value (10); | |||
m_SpeedVal->type (FL_SIMPLE_COUNTER); | |||
m_SpeedVal->box (FL_PLASTIC_UP_BOX); | |||
m_SpeedVal->color (Info->GUI_COLOUR); | |||
m_SpeedVal->step (1); | |||
m_SpeedVal->maximum (200); | |||
m_SpeedVal->minimum (0); | |||
m_SpeedVal->value (8); | |||
m_SpeedVal->callback ((Fl_Callback*)cb_SpeedVal); | |||
add (m_SpeedVal); | |||
m_CopyBtn = new Fl_Button (5, 150, 40, 20, "Copy"); | |||
m_CopyBtn->labelsize (10); | |||
m_CopyBtn->callback ((Fl_Callback*)cb_CopyBtn); | |||
m_CopyBtn->box (FL_PLASTIC_UP_BOX); | |||
m_CopyBtn->color (Info->GUI_COLOUR); | |||
m_CopyBtn->selection_color (Info->GUI_COLOUR); | |||
m_CopyBtn->callback ((Fl_Callback*)cb_CopyBtn); | |||
add (m_CopyBtn); | |||
m_PasteBtn = new Fl_Button (50, 150, 40, 20, "Paste"); | |||
m_PasteBtn->labelsize (10); | |||
m_PasteBtn->box (FL_PLASTIC_UP_BOX); | |||
m_PasteBtn->color (Info->GUI_COLOUR); | |||
m_PasteBtn->selection_color (Info->GUI_COLOUR); | |||
m_PasteBtn->deactivate(); | |||
m_PasteBtn->callback ((Fl_Callback*)cb_PasteBtn); | |||
add (m_PasteBtn); | |||
m_ClearBtn = new Fl_Button (5, 175, 85, 20, "Clear"); | |||
m_ClearBtn->labelsize (10); | |||
m_ClearBtn->box (FL_PLASTIC_UP_BOX); | |||
m_ClearBtn->color (Info->GUI_COLOUR); | |||
m_ClearBtn->selection_color (Info->GUI_COLOUR); | |||
m_ClearBtn->callback ((Fl_Callback*)cb_ClearBtn); | |||
add (m_ClearBtn); | |||
m_TransUpBtn = new Fl_Button (5, 200, 40, 20, "Up"); | |||
m_TransUpBtn->labelsize (10); | |||
m_TransUpBtn->box (FL_PLASTIC_UP_BOX); | |||
m_TransUpBtn->color (Info->GUI_COLOUR); | |||
m_TransUpBtn->selection_color (Info->GUI_COLOUR); | |||
m_TransUpBtn->callback ((Fl_Callback*)cb_TransUpBtn); | |||
add (m_TransUpBtn); | |||
m_TransDnBtn = new Fl_Button (50, 200, 40, 20, "Down"); | |||
m_TransDnBtn->labelsize (10); | |||
m_TransDnBtn->box (FL_PLASTIC_UP_BOX); | |||
m_TransDnBtn->color (Info->GUI_COLOUR); | |||
m_TransDnBtn->selection_color (Info->GUI_COLOUR); | |||
m_TransDnBtn->callback ((Fl_Callback*)cb_TransDnBtn); | |||
add (m_TransDnBtn); | |||
@@ -190,7 +220,17 @@ m_LastPatSeqLight(0) | |||
m_TransLbl->labelsize(10); | |||
add (m_TransLbl); | |||
int xoff=105; | |||
m_NoteCut = new Fl_Button (5, h-30, 85, 20, "NoteCut"); | |||
m_NoteCut->type (FL_TOGGLE_BUTTON); | |||
m_NoteCut->box (FL_PLASTIC_UP_BOX); | |||
m_NoteCut->color (Info->GUI_COLOUR); | |||
m_NoteCut->selection_color (Info->GUI_COLOUR); | |||
m_NoteCut->labelsize (10); | |||
m_NoteCut->value (0); | |||
m_NoteCut->callback ((Fl_Callback*)cb_NoteCut); | |||
add (m_NoteCut); | |||
int xoff=105; | |||
int yoff=40; | |||
int butsize=7; | |||
int n=0; | |||
@@ -227,7 +267,7 @@ m_LastPatSeqLight(0) | |||
box->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT); | |||
box->labelsize(8); | |||
} | |||
xoff=103; | |||
for(int x=0; x<MATX; x++) | |||
{ | |||
@@ -235,34 +275,36 @@ m_LastPatSeqLight(0) | |||
m_Flash[x]->selection_color(FL_WHITE); | |||
add(m_Flash[x]); | |||
} | |||
xoff=560; | |||
yoff=40; | |||
int height=12,gap=2; | |||
Fl_Box *patseqlabel = new Fl_Box(xoff,yoff-15,30,10,"Pat Seq"); | |||
patseqlabel->labelsize(10); | |||
add(patseqlabel); | |||
for(int y=0; y<NUM_PATSEQ; y++) | |||
{ | |||
m_PatSeq[y]= new Fl_Counter(xoff,yoff+y*(height+gap),25,height); | |||
m_PatSeq[y]->type(FL_SIMPLE_COUNTER); | |||
m_PatSeq[y]->step(1); | |||
m_PatSeq[y]->textsize(8); | |||
m_PatSeq[y]->minimum (-1); | |||
m_PatSeq[y]->maximum (NUM_PATTERNS-1); | |||
m_PatSeq[y]->callback((Fl_Callback*)cb_PatSeq,(void*)&Numbers[y]); | |||
add(m_PatSeq[y]); | |||
m_PatSeqFlash[y] = new Fl_LED_Button(xoff+25,yoff+y*(height+gap),15,15,""); | |||
m_PatSeqFlash[y]->selection_color(FL_WHITE); | |||
add(m_PatSeqFlash[y]); | |||
} | |||
end(); | |||
} | |||
void MatrixPluginGUI::Update() | |||
{ | |||
{ | |||
int Light=m_GUICH->GetInt("Step"); | |||
if (Light!=m_LastLight) | |||
{ | |||
@@ -327,167 +369,168 @@ void MatrixPluginGUI::UpdateMatrix() | |||
} | |||
inline void MatrixPluginGUI::cb_NoteCut_i(Fl_Button* o, void* v) | |||
{ | |||
m_GUICH->Set("NoteCut",o->value()); | |||
} | |||
void MatrixPluginGUI::cb_NoteCut(Fl_Button* o, void* v) | |||
{ ((MatrixPluginGUI*)(o->parent()))->cb_NoteCut_i(o,v);} | |||
// Callbacks - Side Panel - Top Section | |||
inline void MatrixPluginGUI::cb_Matrix_i(Fl_Button* o, void* v) | |||
{ | |||
m_GUICH->Set("X",*(int*)v/MATY); | |||
m_GUICH->Set("Y",*(int*)v%MATY); | |||
inline void MatrixPluginGUI::cb_Pattern_i (Fl_Counter* o, void* v) { | |||
m_GUICH->Set ("Current", (int)o->value()); | |||
UpdateMatrix(); | |||
} | |||
if (o->value()) m_GUICH->SetCommand(MatrixPlugin::MAT_ACTIVATE); | |||
else m_GUICH->SetCommand(MatrixPlugin::MAT_DEACTIVATE); | |||
void MatrixPluginGUI::cb_Pattern (Fl_Counter* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent()))->cb_Pattern_i (o, v); | |||
} | |||
m_GUICH->Wait(); | |||
inline void MatrixPluginGUI::cb_PlayPattern_i (Fl_Counter* o, void* v) { | |||
m_GUICH->Set ("Num", (int)o->value()); | |||
m_GUICH->SetCommand (MatrixPlugin::SET_CURRENT); | |||
} | |||
void MatrixPluginGUI::cb_Matrix(Fl_Button* o, void* v) | |||
{ ((MatrixPluginGUI*)(o->parent()))->cb_Matrix_i(o,v);} | |||
inline void MatrixPluginGUI::cb_MatVol_i(Fl_Button* o, void* v) | |||
{ | |||
m_GUICH->Set("X",*(int*)v/MATY); | |||
m_GUICH->Set("Y",*(int*)v%MATY); | |||
m_GUICH->Set("Volume",((Fl_MatrixButton*)o)->GetVolume()); | |||
m_GUICH->SetCommand(MatrixPlugin::MAT_VOLUME); | |||
void MatrixPluginGUI::cb_PlayPattern(Fl_Counter* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent()))->cb_PlayPattern_i (o, v); | |||
} | |||
void MatrixPluginGUI::cb_MatVol(Fl_Button* o, void* v) | |||
{ ((MatrixPluginGUI*)(o->parent()))->cb_MatVol_i(o,v);} | |||
inline void MatrixPluginGUI::cb_Pattern_i(Fl_Counter* o, void* v) | |||
{ | |||
if (o->value()<0) o->value(0); | |||
if (o->value()>NUM_PATTERNS-1) o->value(NUM_PATTERNS-1); | |||
m_GUICH->Set("Current",(int)o->value()); | |||
UpdateMatrix(); | |||
inline void MatrixPluginGUI::cb_Length_i (Fl_Counter* o, void* v) | |||
{ | |||
m_GUICH->Set ("Length", (int)o->value()); | |||
m_GUICH->SetCommand (MatrixPlugin::MAT_LENGTH); | |||
} | |||
void MatrixPluginGUI::cb_Pattern(Fl_Counter* o, void* v) | |||
{ ((MatrixPluginGUI*)(o->parent()))->cb_Pattern_i(o,v);} | |||
inline void MatrixPluginGUI::cb_PlayPattern_i(Fl_Counter* o, void* v) | |||
{ | |||
if (o->value()<0) o->value(0); | |||
if (o->value()>NUM_PATTERNS-1) o->value(NUM_PATTERNS-1); | |||
m_GUICH->Set("Num",(int)o->value()); | |||
m_GUICH->SetCommand(MatrixPlugin::SET_CURRENT); | |||
void MatrixPluginGUI::cb_Length (Fl_Counter* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent()))->cb_Length_i (o, v); | |||
} | |||
void MatrixPluginGUI::cb_PlayPattern(Fl_Counter* o, void* v) | |||
{ ((MatrixPluginGUI*)(o->parent()))->cb_PlayPattern_i(o,v);} | |||
inline void MatrixPluginGUI::cb_Length_i(Fl_Counter* o, void* v) | |||
{ | |||
if (o->value()<1) o->value(1); | |||
if (o->value()>64) o->value(64); | |||
m_GUICH->Set("Length",(int)o->value()); | |||
m_GUICH->SetCommand(MatrixPlugin::MAT_LENGTH); | |||
inline void MatrixPluginGUI::cb_Octave_i (Fl_Counter* o, void* v) { | |||
m_GUICH->Set ("Octave", (int)o->value()); | |||
m_GUICH->SetCommand (MatrixPlugin::MAT_OCTAVE); | |||
} | |||
void MatrixPluginGUI::cb_Octave (Fl_Counter* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent()))->cb_Octave_i (o, v); | |||
} | |||
void MatrixPluginGUI::cb_Length(Fl_Counter* o, void* v) | |||
{ ((MatrixPluginGUI*)(o->parent()))->cb_Length_i(o,v);} | |||
inline void MatrixPluginGUI::cb_Speed_i(Fl_Knob* o, void* v) | |||
{ | |||
inline void MatrixPluginGUI::cb_Speed_i (Fl_Knob* o, void* v) | |||
{ | |||
// Round off value, but it should be a float for tweaking | |||
float value=o->value()+((int)o->value()-o->value()); | |||
m_SpeedVal->value(value); | |||
m_GUICH->Set("Speed",(float)value/8.0f); | |||
m_GUICH->SetCommand(MatrixPlugin::MAT_SPEED); | |||
float value = o->value() + ((int)o->value() - o->value()); | |||
m_SpeedVal->value (value); | |||
m_GUICH->Set ("Speed", (float)value / 8.0f); | |||
m_GUICH->SetCommand (MatrixPlugin::MAT_SPEED); | |||
} | |||
void MatrixPluginGUI::cb_Speed(Fl_Knob* o, void* v) | |||
{ ((MatrixPluginGUI*)(o->parent()))->cb_Speed_i(o,v);} | |||
inline void MatrixPluginGUI::cb_Octave_i(Fl_Counter* o, void* v) | |||
{ | |||
if (o->value()<0) o->value(0); | |||
if (o->value()>6) o->value(6); | |||
m_GUICH->Set("Octave",(int)o->value()); | |||
m_GUICH->SetCommand(MatrixPlugin::MAT_OCTAVE); | |||
void MatrixPluginGUI::cb_Speed (Fl_Knob* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent()))->cb_Speed_i (o, v); | |||
} | |||
void MatrixPluginGUI::cb_Octave(Fl_Counter* o, void* v) | |||
{ ((MatrixPluginGUI*)(o->parent()))->cb_Octave_i(o,v);} | |||
inline void MatrixPluginGUI::cb_SpeedVal_i (Fl_Counter* o, void* v) | |||
inline void MatrixPluginGUI::cb_SpeedVal_i (Fl_Counter* o, void* v) | |||
{ | |||
m_Speed->value(o->value()); | |||
float value = o->value(); | |||
m_Speed->value (value); | |||
m_GUICH->Set ("Speed", (float)value / 8.0f); | |||
m_GUICH->SetCommand (MatrixPlugin::MAT_SPEED); | |||
} | |||
void MatrixPluginGUI::cb_SpeedVal (Fl_Counter* o, void* v) | |||
{ | |||
((MatrixPluginGUI*)(o->parent())) -> cb_SpeedVal_i (o, v); | |||
void MatrixPluginGUI::cb_SpeedVal (Fl_Counter* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent()))->cb_SpeedVal_i (o, v); | |||
} | |||
inline void MatrixPluginGUI::cb_CopyBtn_i (Fl_Button* o, void* v) | |||
{ | |||
// Callbacks - Side Panel - Editing Section | |||
inline void MatrixPluginGUI::cb_CopyBtn_i (Fl_Button* o, void* v) { | |||
m_PasteBtn->activate(); | |||
m_GUICH->SetCommand(MatrixPlugin::COPY); | |||
UpdateMatrix(); | |||
m_GUICH->SetCommand (MatrixPlugin::COPY); | |||
UpdateMatrix(); | |||
} | |||
void MatrixPluginGUI::cb_CopyBtn (Fl_Button* o, void* v) | |||
{ | |||
void MatrixPluginGUI::cb_CopyBtn (Fl_Button* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent())) -> cb_CopyBtn_i (o, v); | |||
} | |||
inline void MatrixPluginGUI::cb_PasteBtn_i (Fl_Button* o, void* v) | |||
{ | |||
m_GUICH->SetCommand(MatrixPlugin::PASTE); | |||
UpdateMatrix(); | |||
inline void MatrixPluginGUI::cb_PasteBtn_i (Fl_Button* o, void* v) { | |||
m_GUICH->SetCommand (MatrixPlugin::PASTE); | |||
UpdateMatrix(); | |||
} | |||
void MatrixPluginGUI::cb_PasteBtn (Fl_Button* o, void* v) | |||
{ | |||
void MatrixPluginGUI::cb_PasteBtn (Fl_Button* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent())) -> cb_PasteBtn_i (o, v); | |||
} | |||
inline void MatrixPluginGUI::cb_ClearBtn_i (Fl_Button* o, void* v) | |||
{ | |||
m_GUICH->SetCommand(MatrixPlugin::CLEAR); | |||
UpdateMatrix(); | |||
inline void MatrixPluginGUI::cb_ClearBtn_i (Fl_Button* o, void* v) { | |||
m_GUICH->SetCommand (MatrixPlugin::CLEAR); | |||
UpdateMatrix(); | |||
} | |||
void MatrixPluginGUI::cb_ClearBtn (Fl_Button* o, void* v) | |||
{ | |||
void MatrixPluginGUI::cb_ClearBtn (Fl_Button* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent())) -> cb_ClearBtn_i (o, v); | |||
} | |||
inline void MatrixPluginGUI::cb_TransUpBtn_i (Fl_Button* o, void* v) | |||
{ | |||
m_GUICH->SetCommand(MatrixPlugin::TUP); | |||
UpdateMatrix(); | |||
// Callbacks - Side Panel - Transpose Section | |||
inline void MatrixPluginGUI::cb_TransUpBtn_i (Fl_Button* o, void* v) { | |||
m_GUICH->SetCommand(MatrixPlugin::TUP); | |||
UpdateMatrix(); | |||
} | |||
void MatrixPluginGUI::cb_TransUpBtn (Fl_Button* o, void* v) | |||
{ | |||
void MatrixPluginGUI::cb_TransUpBtn (Fl_Button* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent())) -> cb_TransUpBtn_i (o, v); | |||
} | |||
inline void MatrixPluginGUI::cb_TransDnBtn_i (Fl_Button* o, void* v) | |||
{ | |||
m_GUICH->SetCommand(MatrixPlugin::TDOWN); | |||
UpdateMatrix(); | |||
inline void MatrixPluginGUI::cb_TransDnBtn_i (Fl_Button* o, void* v) { | |||
m_GUICH->SetCommand(MatrixPlugin::TDOWN); | |||
UpdateMatrix(); | |||
} | |||
void MatrixPluginGUI::cb_TransDnBtn (Fl_Button* o, void* v) | |||
{ | |||
void MatrixPluginGUI::cb_TransDnBtn (Fl_Button* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent())) -> cb_TransDnBtn_i (o, v); | |||
} | |||
inline void MatrixPluginGUI::cb_PatSeq_i(Fl_Counter* o, void* v) | |||
{ | |||
if (o->value()<-1) o->value(-1); | |||
if (o->value()>NUM_PATTERNS-1) o->value(NUM_PATTERNS-1); | |||
m_GUICH->Set("Num",(int)o->value()); | |||
m_GUICH->Set("Y",*(int*)v); | |||
m_GUICH->SetCommand(MatrixPlugin::SET_PATSEQ); | |||
// Callbacks - Side Panel - Bottom Section | |||
inline void MatrixPluginGUI::cb_NoteCut_i (Fl_Button* o, void* v) { | |||
m_GUICH->Set ("NoteCut",o->value()); | |||
} | |||
void MatrixPluginGUI::cb_NoteCut (Fl_Button* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent()))->cb_NoteCut_i (o,v); | |||
} | |||
// Callbacks - Matrix | |||
inline void MatrixPluginGUI::cb_Matrix_i (Fl_Button* o, void* v) { | |||
m_GUICH->Set ("X", *(int*)v/MATY); | |||
m_GUICH->Set ("Y", *(int*)v%MATY); | |||
if (o->value()) m_GUICH->SetCommand (MatrixPlugin::MAT_ACTIVATE); | |||
else m_GUICH->SetCommand (MatrixPlugin::MAT_DEACTIVATE); | |||
m_GUICH->Wait(); | |||
} | |||
void MatrixPluginGUI::cb_Matrix (Fl_Button* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent()))->cb_Matrix_i (o, v); | |||
} | |||
inline void MatrixPluginGUI::cb_MatVol_i (Fl_Button* o, void* v) { | |||
m_GUICH->Set ("X", *(int*)v/MATY); | |||
m_GUICH->Set ("Y", *(int*)v%MATY); | |||
m_GUICH->Set ("Volume", ((Fl_MatrixButton*)o)->GetVolume()); | |||
m_GUICH->SetCommand (MatrixPlugin::MAT_VOLUME); | |||
} | |||
void MatrixPluginGUI::cb_MatVol (Fl_Button* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent()))->cb_MatVol_i (o, v); | |||
} | |||
void MatrixPluginGUI::cb_PatSeq(Fl_Counter* o, void* v) | |||
{ ((MatrixPluginGUI*)(o->parent()))->cb_PatSeq_i(o,v);} | |||
// Callbacks - Pattern Sequencer | |||
inline void MatrixPluginGUI::cb_PatSeq_i (Fl_Counter* o, void* v) { | |||
m_GUICH->Set("Num", (int)o->value()); | |||
m_GUICH->Set("Y", *(int*)v); | |||
m_GUICH->SetCommand (MatrixPlugin::SET_PATSEQ); | |||
} | |||
void MatrixPluginGUI::cb_PatSeq (Fl_Counter* o, void* v) { | |||
((MatrixPluginGUI*)(o->parent()))->cb_PatSeq_i (o, v); | |||
} | |||
// Help text | |||
const string MatrixPluginGUI::GetHelpText(const string &loc){ | |||
return string("") | |||
@@ -495,7 +538,7 @@ const string MatrixPluginGUI::GetHelpText(const string &loc){ | |||
+ "drum programming, but also capable of robotic bass and melodies.\n\n" | |||
+ "Note events are turned on and off by activating the 64*32 grid of\n" | |||
+ "toggle buttons on the GUI. The speed and octave of the notes can be\n" | |||
+ "set. The length of the pattern in notes and note cut are also\n" | |||
+ "set. The length of the pattern in notes and note cut are also\n" | |||
+ "present. The current play position is indicated by the row of LED's\n" | |||
+ "along the top of the plugin window. You can copy and paste between\n" | |||
+ "different patterns and transpose the notes\n\n" | |||
@@ -56,12 +56,12 @@ private: | |||
Fl_Slider *m_Volume; | |||
float m_VolVal; | |||
Fl_Color m_SelCol; | |||
void (*cb_VolChange)(Fl_Widget*, void*); | |||
void *cb_context; | |||
inline void cb_Vol_i(Fl_Slider* o, void* v); | |||
static void cb_Vol(Fl_Slider* o, void* v); | |||
static void cb_Vol(Fl_Slider* o, void* v); | |||
}; | |||
@@ -72,19 +72,19 @@ public: | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
virtual void Update(); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
const string GetHelpText(const string &loc); | |||
private: | |||
void UpdateMatrix(); | |||
int Numbers[MATX*MATY]; | |||
Pattern m_GUIMatrix[NUM_PATTERNS]; | |||
int m_LastLight; | |||
int m_LastPatSeqLight; | |||
Fl_Button* m_NoteCut; | |||
Fl_Counter* m_Pattern; | |||
Fl_Counter* m_PlayPattern; | |||
@@ -98,43 +98,41 @@ private: | |||
Fl_Button* m_PasteBtn; | |||
Fl_Button* m_ClearBtn; | |||
Fl_Box* m_TransLbl; | |||
Fl_Button* m_TransUpBtn; | |||
Fl_Button* m_TransUpBtn; | |||
Fl_Button* m_TransDnBtn; | |||
Fl_Counter* m_PatSeq[NUM_PATSEQ]; | |||
Fl_LED_Button* m_PatSeqFlash[NUM_PATSEQ]; | |||
//// Callbacks //// | |||
inline void cb_Matrix_i(Fl_Button* o, void* v); | |||
static void cb_Matrix(Fl_Button* o, void* v); | |||
inline void cb_MatVol_i(Fl_Button* o, void* v); | |||
static void cb_MatVol(Fl_Button* o, void* v); | |||
inline void cb_Pattern_i(Fl_Counter* o, void* v); | |||
static void cb_Pattern(Fl_Counter* o, void* v); | |||
inline void cb_PlayPattern_i(Fl_Counter* o, void* v); | |||
static void cb_PlayPattern(Fl_Counter* o, void* v); | |||
inline void cb_Length_i(Fl_Counter* o, void* v); | |||
static void cb_Length(Fl_Counter* o, void* v); | |||
inline void cb_Speed_i(Fl_Knob* o, void* v); | |||
static void cb_Speed(Fl_Knob* o, void* v); | |||
inline void cb_NoteCut_i(Fl_Button* o, void* v); | |||
static void cb_NoteCut(Fl_Button* o, void* v); | |||
inline void cb_Octave_i(Fl_Counter* o, void* v); | |||
static void cb_Octave(Fl_Counter* o, void* v); | |||
inline void cb_Matrix_i (Fl_Button* o, void* v); | |||
static void cb_Matrix (Fl_Button* o, void* v); | |||
inline void cb_MatVol_i (Fl_Button* o, void* v); | |||
static void cb_MatVol (Fl_Button* o, void* v); | |||
inline void cb_Pattern_i (Fl_Counter* o, void* v); | |||
static void cb_Pattern (Fl_Counter* o, void* v); | |||
inline void cb_PlayPattern_i (Fl_Counter* o, void* v); | |||
static void cb_PlayPattern (Fl_Counter* o, void* v); | |||
inline void cb_Length_i (Fl_Counter* o, void* v); | |||
static void cb_Length (Fl_Counter* o, void* v); | |||
inline void cb_Speed_i (Fl_Knob* o, void* v); | |||
static void cb_Speed (Fl_Knob* o, void* v); | |||
inline void cb_SpeedVal_i (Fl_Counter* o, void* v); | |||
static void cb_SpeedVal (Fl_Counter* o, void* v); | |||
inline void cb_CopyBtn_i (Fl_Button* o, void* v); | |||
inline void cb_NoteCut_i (Fl_Button* o, void* v); | |||
static void cb_NoteCut (Fl_Button* o, void* v); | |||
inline void cb_Octave_i (Fl_Counter* o, void* v); | |||
static void cb_Octave (Fl_Counter* o, void* v); | |||
inline void cb_CopyBtn_i (Fl_Button* o, void* v); | |||
static void cb_CopyBtn (Fl_Button* o, void* v); | |||
inline void cb_PasteBtn_i (Fl_Button* o, void* v); | |||
inline void cb_PasteBtn_i (Fl_Button* o, void* v); | |||
static void cb_PasteBtn (Fl_Button* o, void* v); | |||
inline void cb_ClearBtn_i (Fl_Button* o, void* v); | |||
inline void cb_ClearBtn_i (Fl_Button* o, void* v); | |||
static void cb_ClearBtn (Fl_Button* o, void* v); | |||
inline void cb_TransUpBtn_i (Fl_Button* o, void* v); | |||
inline void cb_TransUpBtn_i (Fl_Button* o, void* v); | |||
static void cb_TransUpBtn (Fl_Button* o, void* v); | |||
inline void cb_TransDnBtn_i (Fl_Button* o, void* v); | |||
inline void cb_TransDnBtn_i (Fl_Button* o, void* v); | |||
static void cb_TransDnBtn (Fl_Button* o, void* v); | |||
inline void cb_PatSeq_i(Fl_Counter* o, void* v); | |||
static void cb_PatSeq(Fl_Counter* o, void* v); | |||
inline void cb_PatSeq_i (Fl_Counter* o, void* v); | |||
static void cb_PatSeq (Fl_Counter* o, void* v); | |||
}; | |||
#endif |