You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
6.9KB

  1. /* SpiralPlugin
  2. * Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
  3. * LADSPA Plugin by Nicolas Noble <nicolas@nobis-crew.org>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  18. */
  19. #include "LADSPAPluginGUI.h"
  20. #include <FL/fl_draw.h>
  21. #include <FL/fl_draw.H>
  22. #include "ladspa.h"
  23. #include <stdio.h>
  24. #include <math.h>
  25. #include <dlfcn.h>
  26. #include <vector>
  27. #include "utils.h"
  28. static const int GUI_COLOUR = 179;
  29. static const int GUIBG_COLOUR = 144;
  30. static const int GUIBG2_COLOUR = 145;
  31. LADSPAPluginGUI::LADSPAPluginGUI(int w, int h,LADSPAPlugin *o, ChannelHandler *ch,const HostInfo *Info, const vector<LPluginInfo> &PVec) :
  32. SpiralPluginGUI(w,h,o,ch)
  33. {
  34. PluginList=PVec;
  35. m_Filename="None";
  36. int Width=20;
  37. int Height=100;
  38. m_Browser= new Fl_Hold_Browser(5,20,290,260,"LADSPA Plugins");
  39. m_Browser->callback((Fl_Callback*)cb_Select);
  40. for (vector<LPluginInfo>::iterator i=PluginList.begin();
  41. i!=PluginList.end(); i++)
  42. {
  43. m_Browser->add((*i).Name.c_str());
  44. }
  45. m_InputScroll = new Fl_Scroll(300,80,290,150," Value Min Max Clamp?");
  46. m_InputScroll->align(FL_ALIGN_TOP_LEFT);
  47. m_InputScroll->type(Fl_Scroll::VERTICAL);
  48. m_InputScroll->box(FL_DOWN_BOX);
  49. add(m_InputScroll);
  50. m_InputPack = new Fl_Pack(300,85,300,100,"");
  51. m_InputScroll->add(m_InputPack);
  52. m_Name = new Fl_Box(290,20,10,20,"None");
  53. m_Name->align(FL_ALIGN_RIGHT);
  54. m_Name->labelcolor(GUI_COLOUR);
  55. m_Name->labelsize(10);
  56. add(m_Name);
  57. m_Maker = new Fl_Box(290,40,10,20,"None");
  58. m_Maker->align(FL_ALIGN_RIGHT);
  59. m_Maker->labelcolor(GUI_COLOUR);
  60. m_Maker->labelsize(10);
  61. add(m_Maker);
  62. m_OutputGain = new Fl_Knob(545,240,40,40,"Output Gain");
  63. m_OutputGain->color(GUI_COLOUR);
  64. m_OutputGain->type(Fl_Knob::DOTLIN);
  65. m_OutputGain->maximum(2);
  66. m_OutputGain->step(0.001);
  67. m_OutputGain->value(1.0);
  68. m_OutputGain->labelsize(10);
  69. m_OutputGain->callback((Fl_Callback*)cb_Gain);
  70. add(m_OutputGain);
  71. m_UpdateInputs = new Fl_Button(480,252,50,25,"Refresh");
  72. m_UpdateInputs->labelsize(10);
  73. m_UpdateInputs->value(1);
  74. m_UpdateInputs->type(1);
  75. add(m_UpdateInputs);
  76. m_UpdateMinMax = new Fl_Button(400,252,85,25,"Update Min/Max");
  77. m_UpdateMinMax->labelsize(10);
  78. m_UpdateMinMax->callback((Fl_Callback*)cb_MinMax);
  79. add(m_UpdateMinMax);
  80. m_PowerAmp = new Fl_Button(320,252,80,25,"PowerAmp");
  81. m_PowerAmp->labelsize(10);
  82. m_PowerAmp->value(0);
  83. m_PowerAmp->type(1);
  84. m_PowerAmp->callback((Fl_Callback*)cb_PowerAmp);
  85. add(m_PowerAmp);
  86. end();
  87. }
  88. LADSPAPluginGUI::~LADSPAPluginGUI(void)
  89. {
  90. Fl::check();
  91. }
  92. void LADSPAPluginGUI::UpdatePortDisplay(int n, float v)
  93. {
  94. if (!m_UpdateInputs->value()) return;
  95. char temp[256];
  96. sprintf(temp,"%f",v);
  97. m_PortOutput[n]->value(temp);
  98. }
  99. void LADSPAPluginGUI::SetMinMax(int n, float min, float max, bool clamp)
  100. {
  101. char temp[256];
  102. sprintf(temp,"%f",min);
  103. m_PortMin[n]->value(temp);
  104. sprintf(temp,"%f",max);
  105. m_PortMax[n]->value(temp);
  106. sprintf(temp, "%d",clamp);
  107. m_PortClamp[n]->value(atoi(temp));
  108. }
  109. void LADSPAPluginGUI::GetMinMax(int n, float &min, float &max, bool &clamp)
  110. {
  111. min = atof(m_PortMin[n]->value());
  112. max = atof(m_PortMax[n]->value());
  113. clamp = m_PortClamp[n]->value();
  114. }
  115. void LADSPAPluginGUI::SetName(const char *s)
  116. {
  117. m_Name->label(s);
  118. }
  119. void LADSPAPluginGUI::SetMaker(const char *s)
  120. {
  121. m_Maker->label(s);
  122. }
  123. void LADSPAPluginGUI::ClearPortInfo()
  124. {
  125. for (vector<Fl_Group*>::iterator i=m_PackVec.begin();
  126. i!=m_PackVec.end(); i++)
  127. {
  128. m_InputPack->remove((*i));
  129. }
  130. m_InputScroll->remove(m_InputPack);
  131. delete m_InputPack;
  132. m_InputPack = new Fl_Pack(x()+300,y()+85,300,100,"");
  133. m_InputScroll->add(m_InputPack);
  134. m_PortOutput.clear();
  135. m_PackVec.clear();
  136. m_PortMin.clear();
  137. m_PortMax.clear();
  138. m_PortClamp.clear();
  139. }
  140. void LADSPAPluginGUI::AddPortInfo(const char *Info)
  141. {
  142. Fl_Group* NewGroup = new Fl_Group(0,85,150,15,"");
  143. NewGroup->box(FL_FLAT_BOX);
  144. m_InputPack->add(NewGroup);
  145. m_PackVec.push_back(NewGroup);
  146. Fl_Box* NewText = new Fl_Box(100,85,80,15,"");
  147. NewText->label(Info);
  148. NewText->labelsize(8);
  149. NewText->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
  150. NewGroup->add(NewText);
  151. Fl_Output* NewOutput = new Fl_Output(5,85,20,15,"");
  152. NewOutput->value(0);
  153. NewOutput->textsize(10);
  154. NewGroup->add(NewOutput);
  155. m_PortOutput.push_back(NewOutput);
  156. Fl_Input* NewInput = new Fl_Input(26,85,20,15,"");
  157. NewInput->value(0);
  158. NewInput->textsize(10);
  159. NewGroup->add(NewInput);
  160. m_PortMin.push_back(NewInput);
  161. NewInput = new Fl_Input(47,85,20,15,"");
  162. NewInput->value(0);
  163. NewInput->textsize(10);
  164. NewGroup->add(NewInput);
  165. m_PortMax.push_back(NewInput);
  166. Fl_Check_Button* NewCheckButton = new Fl_Check_Button(80,85,15,15,"");
  167. NewCheckButton->value(0);
  168. NewGroup->add(NewCheckButton);
  169. m_PortClamp.push_back(NewCheckButton);
  170. NewGroup->redraw();
  171. m_InputPack->redraw();
  172. m_InputScroll->redraw();
  173. redraw();
  174. }
  175. void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o)
  176. {
  177. LADSPAPlugin* Plugin = (LADSPAPlugin*)o;
  178. m_OutputGain->value(Plugin->GetGain());
  179. }
  180. inline void LADSPAPluginGUI::cb_Gain_i(Fl_Knob* o, void* v)
  181. { m_GUICH->Set("Gain",(float)(o->value())); }
  182. void LADSPAPluginGUI::cb_Gain(Fl_Knob* o, void* v)
  183. { ((LADSPAPluginGUI*)(o->parent()))->cb_Gain_i(o,v); }
  184. inline void LADSPAPluginGUI::cb_Select_i(Fl_Hold_Browser* o)
  185. {
  186. m_Filename=PluginList[o->value()-1].Filename;
  187. m_Label=PluginList[o->value()-1].Label;
  188. m_GUICH->Set("Num",o->value()-1);
  189. m_GUICH->SetCommand(LADSPAPlugin::UPDATEPLUGIN);
  190. }
  191. void LADSPAPluginGUI::cb_Select(Fl_Hold_Browser* o)
  192. { ((LADSPAPluginGUI*)(o->parent()))->cb_Select_i(o);}
  193. inline void LADSPAPluginGUI::cb_MinMax_i(Fl_Button* o, void* v)
  194. {
  195. int n=0;
  196. for (vector<Fl_Input*>::iterator i=m_PortMin.begin();
  197. i!=m_PortMin.end(); i++)
  198. {
  199. m_GUICH->Set("Min",(float)(n,atof((*i)->value())));
  200. n++;
  201. }
  202. n=0;
  203. for (vector<Fl_Input*>::iterator i=m_PortMax.begin();
  204. i!=m_PortMax.end(); i++)
  205. {
  206. m_GUICH->Set("Max",(n,atof((*i)->value())));
  207. n++;
  208. }
  209. n=0;
  210. for (vector<Fl_Check_Button*>::iterator i=m_PortClamp.begin();
  211. i!=m_PortClamp.end(); i++)
  212. {
  213. m_GUICH->Set("Clamp",(bool)(n,(*i)->value()));
  214. n++;
  215. }
  216. }
  217. void LADSPAPluginGUI::cb_MinMax(Fl_Button* o, void* v)
  218. { ((LADSPAPluginGUI*)(o->parent()))->cb_MinMax_i(o,v);}
  219. inline void LADSPAPluginGUI::cb_PowerAmp_i(Fl_Button* o, void* v)
  220. {
  221. m_GUICH->Set("Amped",(bool)(o->value()));
  222. }
  223. void LADSPAPluginGUI::cb_PowerAmp(Fl_Button* o, void* v)
  224. { ((LADSPAPluginGUI*)(o->parent()))->cb_PowerAmp_i(o,v);}