@@ -43,7 +43,7 @@ SpiralPluginGUI(w,h,o,ch) | |||||
m_Gain->maximum (4.0); | m_Gain->maximum (4.0); | ||||
m_Gain->minimum (0.0); | m_Gain->minimum (0.0); | ||||
m_Gain->step (0.0001); | m_Gain->step (0.0001); | ||||
m_Gain->value (2.0); | |||||
m_Gain->value (1.0); | |||||
m_Gain->callback((Fl_Callback*)cb_Gain); | m_Gain->callback((Fl_Callback*)cb_Gain); | ||||
m_CtlGroup->add (m_Gain); | m_CtlGroup->add (m_Gain); | ||||
@@ -73,7 +73,7 @@ SpiralPluginGUI(w,h,o,ch) | |||||
m_NumGain->minimum (-2.0); | m_NumGain->minimum (-2.0); | ||||
m_NumGain->step (0.001); | m_NumGain->step (0.001); | ||||
m_NumGain->lstep (0.1); | m_NumGain->lstep (0.1); | ||||
m_NumGain->value (0.0); | |||||
m_NumGain->value (1.0); | |||||
m_NumGain->callback ((Fl_Callback*)cb_NumGain); | m_NumGain->callback ((Fl_Callback*)cb_NumGain); | ||||
m_NumGroup->add (m_NumGain); | m_NumGroup->add (m_NumGain); | ||||
@@ -162,11 +162,11 @@ void AmpPluginGUI::cb_NumDC (Fl_Counter* o, void* v) { | |||||
// button callbacks | // button callbacks | ||||
inline void AmpPluginGUI::cb_Reset_i (Fl_Button* o, void* v) { | 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_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); | 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" | + "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" | + "Handy for fine tuning CV's by hand, or modulating complex\n" | ||||
+ "controls.\n\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.Name="Envelope"; | ||||
m_PluginInfo.Width=142; | m_PluginInfo.Width=142; | ||||
m_PluginInfo.Height=110; | |||||
m_PluginInfo.Height=132; | |||||
m_PluginInfo.NumInputs=2; | m_PluginInfo.NumInputs=2; | ||||
m_PluginInfo.NumOutputs=2; | m_PluginInfo.NumOutputs=2; | ||||
m_PluginInfo.PortTips.push_back("Trigger CV"); | m_PluginInfo.PortTips.push_back("Trigger CV"); | ||||
@@ -14,7 +14,7 @@ | |||||
* You should have received a copy of the GNU General Public License | * You should have received a copy of the GNU General Public License | ||||
* along with this program; if not, write to the Free Software | * along with this program; if not, write to the Free Software | ||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
*/ | |||||
*/ | |||||
#include "EnvelopePluginGUI.h" | #include "EnvelopePluginGUI.h" | ||||
#include <FL/fl_draw.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) : | EnvelopePluginGUI::EnvelopePluginGUI(int w, int h,EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info) : | ||||
SpiralPluginGUI(w,h,o,ch) | 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("") | return string("") | ||||
+ "An ADSR envelope. This plugin also has a built in\n" | + "An ADSR envelope. This plugin also has a built in\n" | ||||
+ "amplifier for signals, so data fed through the Input\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 | * You should have received a copy of the GNU General Public License | ||||
* along with this program; if not, write to the Free Software | * along with this program; if not, write to the Free Software | ||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
*/ | |||||
*/ | |||||
#include <FL/Fl.H> | #include <FL/Fl.H> | ||||
#include <FL/Fl_Window.H> | #include <FL/Fl_Window.H> | ||||
#include <FL/Fl_Group.H> | #include <FL/Fl_Group.H> | ||||
#include <FL/Fl_Slider.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_Box.H> | ||||
#include <FL/Fl_Output.H> | #include <FL/Fl_Output.H> | ||||
#include "EnvelopePlugin.h" | #include "EnvelopePlugin.h" | ||||
#include "../SpiralPluginGUI.h" | #include "../SpiralPluginGUI.h" | ||||
#ifndef EnvelopeGUI | #ifndef EnvelopeGUI | ||||
#define 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 | #endif |
@@ -233,15 +233,15 @@ void MatrixPlugin::Execute() | |||||
m_Current=m_PatSeq[m_CurPatSeq]; | m_Current=m_PatSeq[m_CurPatSeq]; | ||||
} | } | ||||
} | } | ||||
// An external clock pulse overrides the internal timing | // An external clock pulse overrides the internal timing | ||||
if ((!ExternalClock && m_Time>=m_StepTime*(1/m_Matrix[m_Current].Speed)) || | if ((!ExternalClock && m_Time>=m_StepTime*(1/m_Matrix[m_Current].Speed)) || | ||||
(ExternalClock && ExternalClockTriggered)) | |||||
{ | |||||
(ExternalClock && ExternalClockTriggered)) | |||||
{ | |||||
m_Time=0; | m_Time=0; | ||||
m_Step++; | m_Step++; | ||||
if (m_Step >= m_Matrix[m_Current].Length) | |||||
if (m_Step >= m_Matrix[m_Current].Length) | |||||
{ | { | ||||
SetOutput(18, n, 1); | SetOutput(18, n, 1); | ||||
m_Step=0; | m_Step=0; | ||||
@@ -249,17 +249,17 @@ void MatrixPlugin::Execute() | |||||
if (m_PatSeq[m_CurPatSeq]==-1 || m_CurPatSeq==NUM_PATSEQ) m_CurPatSeq=0; | if (m_PatSeq[m_CurPatSeq]==-1 || m_CurPatSeq==NUM_PATSEQ) m_CurPatSeq=0; | ||||
m_Current=m_PatSeq[m_CurPatSeq]; | m_Current=m_PatSeq[m_CurPatSeq]; | ||||
} | } | ||||
// Reset the values | // Reset the values | ||||
m_CurrentTriggerCV=0; | m_CurrentTriggerCV=0; | ||||
if (m_NoteCut) m_CurrentNoteCV=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); | SetOutput(t+2,n,0); | ||||
m_TriggerLevel[t]=0; | m_TriggerLevel[t]=0; | ||||
} | } | ||||
// Scan the matrix at current time | |||||
// Scan the matrix at current time | |||||
for (int i=0; i<MATY; i++) | for (int i=0; i<MATY; i++) | ||||
{ | { | ||||
if (m_Matrix[m_Current].Matrix[m_Step][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]; | m_TriggerLevel[i]=m_Matrix[m_Current].Volume[m_Step][i]; | ||||
} | } | ||||
} | } | ||||
// reset the triggers between steps to clear them | // reset the triggers between steps to clear them | ||||
// otherwise consecutive events wont get triggered | // otherwise consecutive events wont get triggered | ||||
SetOutput(1,n,0); | SetOutput(1,n,0); | ||||
@@ -285,45 +285,45 @@ void MatrixPlugin::ExecuteCommands() | |||||
switch (m_AudioCH->GetCommand()) | switch (m_AudioCH->GetCommand()) | ||||
{ | { | ||||
case MAT_LENGTH : | case MAT_LENGTH : | ||||
m_Matrix[m_GUICurrent].Length=m_GUIArgs.Length; | |||||
m_Matrix[m_GUICurrent].Length=m_GUIArgs.Length; | |||||
break; | 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; | 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; | break; | ||||
case COPY : | |||||
CopyPattern(); | |||||
case MAT_OCTAVE : | |||||
m_Matrix[m_GUICurrent].Octave=m_GUIArgs.Octave; | |||||
break; | break; | ||||
case PASTE : | |||||
PastePattern(); | |||||
case COPY : | |||||
m_CopyPattern = m_GUICurrent; | |||||
break; | break; | ||||
case CLEAR : | |||||
ClearPattern(); | |||||
case PASTE : | |||||
PastePattern(); | |||||
break; | break; | ||||
case TUP : | |||||
if (CanTransposeUp()) TransposeUp(); | |||||
case CLEAR : | |||||
ClearPattern(); | |||||
break; | break; | ||||
case TDOWN : | |||||
if (CanTransposeDown()) TransposeDown(); | |||||
case TUP : | |||||
if (CanTransposeUp()) TransposeUp(); | |||||
break; | break; | ||||
case MAT_VOLUME : | |||||
m_Matrix[m_GUICurrent].Volume[m_GUIArgs.X][m_GUIArgs.Y]=m_GUIArgs.Volume; | |||||
case TDOWN : | |||||
if (CanTransposeDown()) TransposeDown(); | |||||
break; | 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; | break; | ||||
case SET_PATSEQ : | |||||
case SET_CURRENT : | |||||
m_Current=m_GUIArgs.Num; | |||||
break; | |||||
case SET_PATSEQ : | |||||
m_PatSeq[m_GUIArgs.Y]=m_GUIArgs.Num; | m_PatSeq[m_GUIArgs.Y]=m_GUIArgs.Num; | ||||
break; | break; | ||||
} | } | ||||
@@ -361,17 +361,17 @@ void MatrixPlugin::TransposeUp() { | |||||
} | } | ||||
} | } | ||||
void MatrixPlugin::TransposeDown() | |||||
void MatrixPlugin::TransposeDown() | |||||
{ | { | ||||
int x, y; | 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]; | 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; | 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++) | for (int n=0; n<NUM_PATTERNS; n++) | ||||
{ | { | ||||
s<<m_Matrix[n].Length<<" "<<m_Matrix[n].Speed<<" "<<m_Matrix[n].Octave<<endl; | s<<m_Matrix[n].Length<<" "<<m_Matrix[n].Speed<<" "<<m_Matrix[n].Octave<<endl; | ||||
for (int y=0; y<MATY; y++) | for (int y=0; y<MATY; y++) | ||||
{ | { | ||||
for (int x=0; x<MATX; x++) | for (int x=0; x<MATX; x++) | ||||
@@ -408,7 +408,7 @@ void MatrixPlugin::StreamOut(ostream &s) | |||||
s<<"-1 "; | s<<"-1 "; | ||||
} | } | ||||
s<<endl; | s<<endl; | ||||
for (int n=0; n<NUM_PATSEQ; n++) | |||||
for (int n=0; n<NUM_PATSEQ; n++) | |||||
{ | { | ||||
s<<m_PatSeq[n]<<" "; | s<<m_PatSeq[n]<<" "; | ||||
} | } | ||||
@@ -419,14 +419,14 @@ void MatrixPlugin::StreamIn(istream &s) | |||||
{ | { | ||||
int version; | int version; | ||||
s>>version; | s>>version; | ||||
switch (version) | switch (version) | ||||
{ | { | ||||
case 1: | case 1: | ||||
{ | { | ||||
s>>m_Current>>m_Time>>m_Step>>m_Loop>>m_NoteCut; | 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; | s>>m_Matrix[n].Length>>m_Matrix[n].Speed>>m_Matrix[n].Octave; | ||||
@@ -73,7 +73,6 @@ private: | |||||
GUIArgs m_GUIArgs; | GUIArgs m_GUIArgs; | ||||
void CopyPattern() { m_CopyPattern = m_Current; } | |||||
void PastePattern(); | void PastePattern(); | ||||
void ClearPattern(); | void ClearPattern(); | ||||
void TransposeUp(); | void TransposeUp(); | ||||
@@ -19,7 +19,7 @@ | |||||
#include "MatrixPluginGUI.h" | #include "MatrixPluginGUI.h" | ||||
#include <FL/fl_draw.h> | #include <FL/fl_draw.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"}; | 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), | SpiralPluginGUI(w,h,o,ch), | ||||
m_LastLight(0), | m_LastLight(0), | ||||
m_LastPatSeqLight(0) | m_LastPatSeqLight(0) | ||||
{ | |||||
{ | |||||
//size_range(10,10); | //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 = 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); | 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->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); | add (m_CopyBtn); | ||||
m_PasteBtn = new Fl_Button (50, 150, 40, 20, "Paste"); | m_PasteBtn = new Fl_Button (50, 150, 40, 20, "Paste"); | ||||
m_PasteBtn->labelsize (10); | 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->deactivate(); | ||||
m_PasteBtn->callback ((Fl_Callback*)cb_PasteBtn); | m_PasteBtn->callback ((Fl_Callback*)cb_PasteBtn); | ||||
add (m_PasteBtn); | add (m_PasteBtn); | ||||
m_ClearBtn = new Fl_Button (5, 175, 85, 20, "Clear"); | m_ClearBtn = new Fl_Button (5, 175, 85, 20, "Clear"); | ||||
m_ClearBtn->labelsize (10); | 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); | m_ClearBtn->callback ((Fl_Callback*)cb_ClearBtn); | ||||
add (m_ClearBtn); | add (m_ClearBtn); | ||||
m_TransUpBtn = new Fl_Button (5, 200, 40, 20, "Up"); | m_TransUpBtn = new Fl_Button (5, 200, 40, 20, "Up"); | ||||
m_TransUpBtn->labelsize (10); | 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); | m_TransUpBtn->callback ((Fl_Callback*)cb_TransUpBtn); | ||||
add (m_TransUpBtn); | add (m_TransUpBtn); | ||||
m_TransDnBtn = new Fl_Button (50, 200, 40, 20, "Down"); | m_TransDnBtn = new Fl_Button (50, 200, 40, 20, "Down"); | ||||
m_TransDnBtn->labelsize (10); | 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); | m_TransDnBtn->callback ((Fl_Callback*)cb_TransDnBtn); | ||||
add (m_TransDnBtn); | add (m_TransDnBtn); | ||||
@@ -190,7 +220,17 @@ m_LastPatSeqLight(0) | |||||
m_TransLbl->labelsize(10); | m_TransLbl->labelsize(10); | ||||
add (m_TransLbl); | 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 yoff=40; | ||||
int butsize=7; | int butsize=7; | ||||
int n=0; | int n=0; | ||||
@@ -227,7 +267,7 @@ m_LastPatSeqLight(0) | |||||
box->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT); | box->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT); | ||||
box->labelsize(8); | box->labelsize(8); | ||||
} | } | ||||
xoff=103; | xoff=103; | ||||
for(int x=0; x<MATX; x++) | for(int x=0; x<MATX; x++) | ||||
{ | { | ||||
@@ -235,34 +275,36 @@ m_LastPatSeqLight(0) | |||||
m_Flash[x]->selection_color(FL_WHITE); | m_Flash[x]->selection_color(FL_WHITE); | ||||
add(m_Flash[x]); | add(m_Flash[x]); | ||||
} | } | ||||
xoff=560; | xoff=560; | ||||
yoff=40; | yoff=40; | ||||
int height=12,gap=2; | int height=12,gap=2; | ||||
Fl_Box *patseqlabel = new Fl_Box(xoff,yoff-15,30,10,"Pat Seq"); | Fl_Box *patseqlabel = new Fl_Box(xoff,yoff-15,30,10,"Pat Seq"); | ||||
patseqlabel->labelsize(10); | patseqlabel->labelsize(10); | ||||
add(patseqlabel); | add(patseqlabel); | ||||
for(int y=0; y<NUM_PATSEQ; y++) | for(int y=0; y<NUM_PATSEQ; y++) | ||||
{ | { | ||||
m_PatSeq[y]= new Fl_Counter(xoff,yoff+y*(height+gap),25,height); | m_PatSeq[y]= new Fl_Counter(xoff,yoff+y*(height+gap),25,height); | ||||
m_PatSeq[y]->type(FL_SIMPLE_COUNTER); | m_PatSeq[y]->type(FL_SIMPLE_COUNTER); | ||||
m_PatSeq[y]->step(1); | m_PatSeq[y]->step(1); | ||||
m_PatSeq[y]->textsize(8); | 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]); | m_PatSeq[y]->callback((Fl_Callback*)cb_PatSeq,(void*)&Numbers[y]); | ||||
add(m_PatSeq[y]); | add(m_PatSeq[y]); | ||||
m_PatSeqFlash[y] = new Fl_LED_Button(xoff+25,yoff+y*(height+gap),15,15,""); | m_PatSeqFlash[y] = new Fl_LED_Button(xoff+25,yoff+y*(height+gap),15,15,""); | ||||
m_PatSeqFlash[y]->selection_color(FL_WHITE); | m_PatSeqFlash[y]->selection_color(FL_WHITE); | ||||
add(m_PatSeqFlash[y]); | add(m_PatSeqFlash[y]); | ||||
} | } | ||||
end(); | end(); | ||||
} | } | ||||
void MatrixPluginGUI::Update() | void MatrixPluginGUI::Update() | ||||
{ | |||||
{ | |||||
int Light=m_GUICH->GetInt("Step"); | int Light=m_GUICH->GetInt("Step"); | ||||
if (Light!=m_LastLight) | 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 | // 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_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); | ((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); | ((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); | ((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); | ((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); | ((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){ | const string MatrixPluginGUI::GetHelpText(const string &loc){ | ||||
return string("") | 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" | + "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" | + "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" | + "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" | + "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" | + "along the top of the plugin window. You can copy and paste between\n" | ||||
+ "different patterns and transpose the notes\n\n" | + "different patterns and transpose the notes\n\n" | ||||
@@ -56,12 +56,12 @@ private: | |||||
Fl_Slider *m_Volume; | Fl_Slider *m_Volume; | ||||
float m_VolVal; | float m_VolVal; | ||||
Fl_Color m_SelCol; | Fl_Color m_SelCol; | ||||
void (*cb_VolChange)(Fl_Widget*, void*); | void (*cb_VolChange)(Fl_Widget*, void*); | ||||
void *cb_context; | void *cb_context; | ||||
inline void cb_Vol_i(Fl_Slider* o, void* v); | 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 UpdateValues(SpiralPlugin *o); | ||||
virtual void Update(); | virtual void Update(); | ||||
protected: | protected: | ||||
const string GetHelpText(const string &loc); | |||||
const string GetHelpText(const string &loc); | |||||
private: | private: | ||||
void UpdateMatrix(); | void UpdateMatrix(); | ||||
int Numbers[MATX*MATY]; | int Numbers[MATX*MATY]; | ||||
Pattern m_GUIMatrix[NUM_PATTERNS]; | Pattern m_GUIMatrix[NUM_PATTERNS]; | ||||
int m_LastLight; | int m_LastLight; | ||||
int m_LastPatSeqLight; | int m_LastPatSeqLight; | ||||
Fl_Button* m_NoteCut; | Fl_Button* m_NoteCut; | ||||
Fl_Counter* m_Pattern; | Fl_Counter* m_Pattern; | ||||
Fl_Counter* m_PlayPattern; | Fl_Counter* m_PlayPattern; | ||||
@@ -98,43 +98,41 @@ private: | |||||
Fl_Button* m_PasteBtn; | Fl_Button* m_PasteBtn; | ||||
Fl_Button* m_ClearBtn; | Fl_Button* m_ClearBtn; | ||||
Fl_Box* m_TransLbl; | Fl_Box* m_TransLbl; | ||||
Fl_Button* m_TransUpBtn; | |||||
Fl_Button* m_TransUpBtn; | |||||
Fl_Button* m_TransDnBtn; | Fl_Button* m_TransDnBtn; | ||||
Fl_Counter* m_PatSeq[NUM_PATSEQ]; | Fl_Counter* m_PatSeq[NUM_PATSEQ]; | ||||
Fl_LED_Button* m_PatSeqFlash[NUM_PATSEQ]; | Fl_LED_Button* m_PatSeqFlash[NUM_PATSEQ]; | ||||
//// Callbacks //// | //// 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); | inline void cb_SpeedVal_i (Fl_Counter* o, void* v); | ||||
static void cb_SpeedVal (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); | 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); | 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); | 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); | 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); | 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 | #endif |