| @@ -105,7 +105,6 @@ void ControllerPlugin::ExecuteCommands() | |||
| switch (m_AudioCH->GetCommand()) | |||
| { | |||
| case (SETCHANNEL) : | |||
| cerr<<m_GUIArgs.Name<<endl; | |||
| SetChannel(m_GUIArgs.Number,m_GUIArgs.Value,m_GUIArgs.Min,m_GUIArgs.Max,m_GUIArgs.Name); | |||
| break; | |||
| case (SETNUM) : | |||
| @@ -164,7 +163,7 @@ void ControllerPlugin::StreamOut(ostream &s) | |||
| { | |||
| s<<m_ChannelVal[n]<<" "; | |||
| } | |||
| s<<1<<endl; | |||
| s<<m_Num<<" "; | |||
| for (int n=0; n<m_Num; n++) | |||
| { | |||
| @@ -201,8 +200,8 @@ void ControllerPlugin::StreamIn(istream &s) | |||
| } | |||
| char Buf[4096]; | |||
| int size; | |||
| int size,dummy; | |||
| s>>dummy; | |||
| s>>m_Num; | |||
| for (int n=0; n<m_Num; n++) | |||
| { | |||
| @@ -154,9 +154,9 @@ inline void ControllerPluginGUI::cb_Chan_i(Fl_Slider* o, void* v) | |||
| int num=*(int*)(v); | |||
| // swap em over, cos it's the easiqest way to reverse | |||
| // the fltk slider, which is upside down imho | |||
| long max=strtol(m_GuiVec[num]->m_Min->value(),NULL,10); | |||
| long min=strtol(m_GuiVec[num]->m_Max->value(),NULL,10); | |||
| float val=o->value()*(max-min)+min; | |||
| long max=strtol(m_GuiVec[num]->m_Max->value(),NULL,10); | |||
| long min=strtol(m_GuiVec[num]->m_Min->value(),NULL,10); | |||
| float val=(1.0f-o->value())*(max-min)+min; | |||
| m_GUICH->Set("Number",(int)num); | |||
| m_GUICH->Set("Value",(float)val); | |||
| m_GUICH->Set("Min",(float)min); | |||
| @@ -37,19 +37,6 @@ cb_context(NULL) | |||
| m_SliderHidden=true; | |||
| m_VolVal=255; | |||
| } | |||
| void Fl_MatrixButton::draw() | |||
| { | |||
| if (m_Volume) | |||
| { | |||
| m_VolVal=255-m_Volume->value(); | |||
| fl_color((char)m_VolVal,(char)m_VolVal,255); | |||
| selection_color(fl_color()); | |||
| if (cb_VolChange) cb_VolChange(this,cb_context); | |||
| } | |||
| Fl_Button::draw(); | |||
| } | |||
| int Fl_MatrixButton::handle(int event) | |||
| { | |||
| @@ -63,6 +50,8 @@ int Fl_MatrixButton::handle(int event) | |||
| m_Volume->maximum(255); | |||
| m_Volume->step(1); | |||
| m_Volume->value(255-m_VolVal); | |||
| m_Volume->user_data((void*)this); | |||
| m_Volume->callback((Fl_Callback*)cb_Vol); | |||
| m_Volume->show(); | |||
| parent()->add(m_Volume); | |||
| parent()->redraw(); | |||
| @@ -71,7 +60,7 @@ int Fl_MatrixButton::handle(int event) | |||
| else | |||
| { | |||
| m_Volume->hide(); | |||
| m_VolVal=m_Volume->value(); | |||
| m_VolVal=255-m_Volume->value(); | |||
| parent()->remove(m_Volume); | |||
| parent()->redraw(); | |||
| m_Volume=NULL; | |||
| @@ -81,11 +70,33 @@ int Fl_MatrixButton::handle(int event) | |||
| return 1; | |||
| } | |||
| if (event==FL_PUSH && Fl::event_button()==1 && !m_SliderHidden) | |||
| { | |||
| m_Volume->hide(); | |||
| m_VolVal=255-m_Volume->value(); | |||
| parent()->remove(m_Volume); | |||
| parent()->redraw(); | |||
| m_Volume=NULL; | |||
| m_SliderHidden=true; | |||
| } | |||
| if (Fl::event_button()!=3) return Fl_Button::handle(event); | |||
| return 1; | |||
| } | |||
| inline void Fl_MatrixButton::cb_Vol_i(Fl_Slider* o, void* v) | |||
| { | |||
| m_VolVal=255-m_Volume->value(); | |||
| fl_color((char)m_VolVal,(char)m_VolVal,255); | |||
| selection_color(fl_color()); | |||
| if (cb_VolChange) cb_VolChange(this,cb_context); | |||
| redraw(); | |||
| } | |||
| void Fl_MatrixButton::cb_Vol(Fl_Slider* o, void* v) | |||
| { ((Fl_MatrixButton*)(o->user_data()))->cb_Vol_i(o,v);} | |||
| //////////////////////////////////////////// | |||
| MatrixPluginGUI::MatrixPluginGUI(int w, int h,MatrixPlugin *o,ChannelHandler *ch,const HostInfo *Info) : | |||
| @@ -39,7 +39,6 @@ public: | |||
| Fl_MatrixButton(int x, int y, int w, int h, char* n); | |||
| ~Fl_MatrixButton() {} | |||
| virtual void draw(); | |||
| virtual int handle(int event); | |||
| float GetVolume() { return m_VolVal/255.0f; } | |||
| @@ -58,6 +57,10 @@ private: | |||
| 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); | |||
| }; | |||
| class MatrixPluginGUI : public SpiralPluginGUI | |||
| @@ -80,6 +80,7 @@ SpiralPluginGUI(w,h,o,ch) | |||
| m_DeviceNum = new Fl_Counter(20,30,40,20,"Channel"); | |||
| m_DeviceNum->type(FL_SIMPLE_COUNTER); | |||
| m_DeviceNum->step(1); | |||
| m_DeviceNum->value(1); | |||
| m_DeviceNum->callback((Fl_Callback*)cb_DeviceNum, NULL); | |||
| m_NoteCut = new Fl_Button(5,70,75,20,"Note Cut"); | |||
| @@ -109,7 +110,12 @@ void MidiPluginGUI::UpdateValues(SpiralPlugin *o) | |||
| //// Callbacks //// | |||
| inline void MidiPluginGUI::cb_DeviceNum_i(Fl_Counter* o, void* v) | |||
| { m_GUICH->Set("DeviceNum",(int)o->value()); } | |||
| { | |||
| if (o->value()<1) o->value(1); | |||
| if (o->value()>128) o->value(128); | |||
| m_GUICH->Set("DeviceNum",(int)o->value()-1); | |||
| } | |||
| void MidiPluginGUI::cb_DeviceNum(Fl_Counter* o, void* v) | |||
| { ((MidiPluginGUI*)(o->parent()))->cb_DeviceNum_i(o,v);} | |||
| @@ -115,16 +115,18 @@ void Fl_WaveDisplay::draw() | |||
| Value = NextValue; | |||
| // get max | |||
| NextValue=(*m_Sample)[n]; | |||
| float max=(*m_Sample)[n]; | |||
| float min=(*m_Sample)[n]; | |||
| for (int m=n; m<n+Jump; m++) | |||
| { | |||
| if (NextValue<(*m_Sample)[m]) NextValue=(*m_Sample)[m]; | |||
| if (max<(*m_Sample)[m]) max=(*m_Sample)[m]; | |||
| if (min>(*m_Sample)[m]) min=(*m_Sample)[m]; | |||
| } | |||
| NextValue*=ho; | |||
| min*=ho; max*=ho; | |||
| fl_line(x()+pos-2, y()+ho-(int)Value, | |||
| x()+pos-1, y()+ho-(int)NextValue); | |||
| fl_line(x()+pos-1, y()+ho-(int)min, | |||
| x()+pos-1, y()+ho-(int)max); | |||
| pos++; | |||
| } | |||
| } | |||
| @@ -386,11 +388,11 @@ m_UpdateMe(false) | |||
| m_ZoomIn = new Fl_Button(bx+(n++*bs),by,bw,bh,"Zoom +"); | |||
| m_ZoomIn->labelsize(10); | |||
| m_ZoomIn->callback((Fl_Callback*)cb_ZoomIn); | |||
| //m_ZoomIn->callback((Fl_Callback*)cb_ZoomIn); | |||
| m_ZoomOut = new Fl_Button(bx+(n++*bs),by,bw,bh,"Zoom -"); | |||
| m_ZoomOut->labelsize(10); | |||
| m_ZoomOut->callback((Fl_Callback*)cb_ZoomOut); | |||
| //m_ZoomOut->callback((Fl_Callback*)cb_ZoomOut); | |||
| end(); | |||
| @@ -417,6 +419,9 @@ void PoshSamplerPluginGUI::Update() | |||
| { | |||
| SetPlayPos(m_GUICH->GetLong("PlayPos")); | |||
| if (m_ZoomIn->value()) m_Display->ZoomIn(); | |||
| if (m_ZoomOut->value()) m_Display->ZoomOut(); | |||
| if (m_UpdateMe) | |||
| { | |||
| UpdateSampleDisplay((int)m_SampleNum->value()); | |||
| @@ -82,6 +82,11 @@ void ScopePluginGUI::Display(const float *data) | |||
| if (!m_Bypass) m_Scope->redraw(); | |||
| } | |||
| void ScopePluginGUI::Update() | |||
| { | |||
| redraw(); | |||
| } | |||
| void ScopePluginGUI::draw() | |||
| { | |||
| SpiralGUIType::draw(); | |||
| @@ -54,7 +54,8 @@ public: | |||
| ScopePluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info); | |||
| virtual void UpdateValues(SpiralPlugin* o); | |||
| virtual void draw(); | |||
| virtual void Update(); | |||
| virtual void draw(); | |||
| void Display(const float *data); | |||
| private: | |||
| @@ -40,6 +40,7 @@ | |||
| #include "GUI/Widgets/PawfalYesNo.h" | |||
| //#define DEBUG_PLUGINS | |||
| #define DEBUG_STREAM | |||
| const static string LABEL = "SpiralSynthModular "+VER_STRING; | |||
| static string TITLEBAR; | |||
| @@ -687,7 +688,7 @@ istream &operator>>(istream &s, SynthModular &o) | |||
| { | |||
| o.PauseAudio(); | |||
| string dummy; | |||
| string dummy,dummy2; | |||
| int ver; | |||
| s>>dummy>>dummy>>dummy>>ver; | |||
| @@ -714,13 +715,20 @@ istream &operator>>(istream &s, SynthModular &o) | |||
| for(int n=0; n<Num; n++) | |||
| { | |||
| //cerr<<"Loading Device "<<n<<endl; | |||
| #ifdef DEBUG_STREAM | |||
| cerr<<"Loading Device "<<n<<endl; | |||
| #endif | |||
| s>>dummy; //cerr<<dummy<<" "; | |||
| s>>ID; //cerr<<ID<<" "; | |||
| s>>dummy; //cerr<<dummy<<" "; | |||
| s>>PluginID; //cerr<<PluginID<<endl; | |||
| s>>dummy; | |||
| s>>ID; | |||
| s>>dummy2; | |||
| s>>PluginID; | |||
| s>>x>>y; | |||
| #ifdef DEBUG_STREAM | |||
| cerr<<dummy<<" "<<ID<<" "<<dummy2<<" "<<PluginID<<" "<<x<<" "<<y<<endl; | |||
| #endif | |||
| if (ver>1) s>>ps>>px>>py; | |||
| // Check we're not duplicating an ID | |||