| 
							- /*  SpiralPlugin
 -  *  Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
 -  *
 -  *  This program is free software; you can redistribute it and/or modify
 -  *  it under the terms of the GNU General Public License as published by
 -  *  the Free Software Foundation; either version 2 of the License, or
 -  *  (at your option) any later version.
 -  *
 -  *  This program is distributed in the hope that it will be useful,
 -  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 -  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -  *  GNU General Public License for more details.
 -  *
 -  *  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>
 - #include <FL/fl_draw.H>
 - 
 - static const int GUI_COLOUR = 179;
 - static const int GUIBG_COLOUR = 144;
 - static const int GUIBG2_COLOUR = 145;
 - 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(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(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(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(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(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(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();
 - }
 - 
 - extern "C" int sprintf(char *,const char *,...);
 - 
 - 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); 
 - }
 - 
 - 
 - 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); 
 - }
 - 
 - 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_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);
 - }
 - 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_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);
 - }
 - 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];
 - 
 - 	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); 
 - }
 - 
 - 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_pop(Fl_Button* o, void* v) {
 -   ((EnvelopePluginGUI*)(o->parent()))->cb_pop_i(o,v);
 - }
 - 
 - 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"
 -     + "and Output are amplified according to the envelope value.\n"
 -     + "The envelope is triggered with an input CV, and the output\n"
 -     + "CV is the value of the envelope at that time. The signal\n"
 -     + "level needed to trigger the envelope can be set using\n"
 -     + "the \"T\" slider, also the volume level of the output can\n"
 -     + "be set with the \"V\" slider.\n\n"
 -     + "This envelope can be used to mimic audio triggered effects\n"
 -     + "units, by feeding the audio signal into the trigger CV.\n"
 -     + "In fact, the envelope plugin itself can be made into a\n"
 -     + "compressor, by feeding the audio signal into both inputs,\n"
 -     + "and tweaking the ADSR values. \n";
 - }
 
 
  |