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.

276 lines
9.6KB

  1. /* SpiralPlugin
  2. * Copyleft (C) 2002 Andy Preston <andy@clubunix.co.uk>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. */
  18. #include "LFOPluginGUI.h"
  19. #include <FL/fl_draw.h>
  20. #include <FL/fl_draw.H>
  21. static const int GUI_COLOUR = 179;
  22. static const int GUIBG_COLOUR = 144;
  23. static const int GUIBG2_COLOUR = 145;
  24. static unsigned char *image_Sine[] = {
  25. (unsigned char*)"20 20 2 1",
  26. (unsigned char*)" \tc None",
  27. (unsigned char*)".\tc #000000",
  28. (unsigned char*)" ",
  29. (unsigned char*)" ",
  30. (unsigned char*)" .. ",
  31. (unsigned char*)" . . ",
  32. (unsigned char*)" . . ",
  33. (unsigned char*)" . . ",
  34. (unsigned char*)" . . ",
  35. (unsigned char*)" . . ",
  36. (unsigned char*)" . . ",
  37. (unsigned char*)" . . . ",
  38. (unsigned char*)" . . . ",
  39. (unsigned char*)" . . ",
  40. (unsigned char*)" . . ",
  41. (unsigned char*)" . . ",
  42. (unsigned char*)" . . ",
  43. (unsigned char*)" . . ",
  44. (unsigned char*)" . . ",
  45. (unsigned char*)" .. ",
  46. (unsigned char*)" ",
  47. (unsigned char*)" "};
  48. static unsigned char *image_Tri[] = {
  49. (unsigned char*)"20 20 2 1",
  50. (unsigned char*)" \tc None",
  51. (unsigned char*)".\tc #000000",
  52. (unsigned char*)" ",
  53. (unsigned char*)" ",
  54. (unsigned char*)" . ",
  55. (unsigned char*)" . ",
  56. (unsigned char*)" . . ",
  57. (unsigned char*)" . . ",
  58. (unsigned char*)" . . ",
  59. (unsigned char*)" . . ",
  60. (unsigned char*)" . . ",
  61. (unsigned char*)" . . ",
  62. (unsigned char*)" . . . ",
  63. (unsigned char*)" . . ",
  64. (unsigned char*)" . . ",
  65. (unsigned char*)" . . ",
  66. (unsigned char*)" . . ",
  67. (unsigned char*)" . . ",
  68. (unsigned char*)" . ",
  69. (unsigned char*)" . ",
  70. (unsigned char*)" ",
  71. (unsigned char*)" "};
  72. static unsigned char *image_Square[] = {
  73. (unsigned char*)"20 20 2 1",
  74. (unsigned char*)" \tc None",
  75. (unsigned char*)".\tc #000000",
  76. (unsigned char*)" ",
  77. (unsigned char*)" ",
  78. (unsigned char*)" ...... ",
  79. (unsigned char*)" . . ",
  80. (unsigned char*)" . . ",
  81. (unsigned char*)" . . ",
  82. (unsigned char*)" . . ",
  83. (unsigned char*)" . . ",
  84. (unsigned char*)" . . ",
  85. (unsigned char*)" . . ",
  86. (unsigned char*)" ... . ... ",
  87. (unsigned char*)" . . ",
  88. (unsigned char*)" . . ",
  89. (unsigned char*)" . . ",
  90. (unsigned char*)" . . ",
  91. (unsigned char*)" . . ",
  92. (unsigned char*)" . . ",
  93. (unsigned char*)" ...... ",
  94. (unsigned char*)" ",
  95. (unsigned char*)" "};
  96. static unsigned char *image_Saw[] = {
  97. (unsigned char*)"20 20 2 1",
  98. (unsigned char*)" \tc None",
  99. (unsigned char*)".\tc #000000",
  100. (unsigned char*)" ",
  101. (unsigned char*)" ",
  102. (unsigned char*)" .. ",
  103. (unsigned char*)" .. ",
  104. (unsigned char*)" . . ",
  105. (unsigned char*)" . . ",
  106. (unsigned char*)" . . ",
  107. (unsigned char*)" . . ",
  108. (unsigned char*)" . . ",
  109. (unsigned char*)" . . ",
  110. (unsigned char*)" ... . .... ",
  111. (unsigned char*)" . . ",
  112. (unsigned char*)" . . ",
  113. (unsigned char*)" . . ",
  114. (unsigned char*)" . . ",
  115. (unsigned char*)" . . ",
  116. (unsigned char*)" .. ",
  117. (unsigned char*)" .. ",
  118. (unsigned char*)" ",
  119. (unsigned char*)" "};
  120. LFOPluginGUI::LFOPluginGUI(int w, int h,LFOPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
  121. SpiralPluginGUI(w,h,o,ch),
  122. pixmap_Sine(image_Sine),
  123. pixmap_Tri(image_Tri),
  124. pixmap_Square(image_Square),
  125. pixmap_Saw(image_Saw) {
  126. ShapeSine = new Fl_Check_Button (5, 15, 55, 30);
  127. ShapeSine->type (FL_RADIO_BUTTON);
  128. ShapeSine->down_box (FL_DIAMOND_DOWN_BOX);
  129. ShapeSine->selection_color (GUI_COLOUR);
  130. pixmap_Sine.label (ShapeSine);
  131. ShapeSine->set();
  132. ShapeSine->callback ((Fl_Callback*)cb_Sine);
  133. ShapeTri = new Fl_Check_Button (5, 46, 55, 30);
  134. ShapeTri->type (FL_RADIO_BUTTON);
  135. ShapeTri->down_box (FL_DIAMOND_DOWN_BOX);
  136. ShapeTri->selection_color (GUI_COLOUR);
  137. pixmap_Tri.label (ShapeTri);
  138. ShapeTri->callback ((Fl_Callback*)cb_Tri);
  139. ShapeSquare = new Fl_Check_Button (5, 77, 55, 30);
  140. ShapeSquare->type (FL_RADIO_BUTTON);
  141. ShapeSquare->down_box (FL_DIAMOND_DOWN_BOX);
  142. ShapeSquare->selection_color (GUI_COLOUR);
  143. pixmap_Square.label (ShapeSquare);
  144. ShapeSquare->callback ((Fl_Callback*)cb_Square);
  145. ShapeSaw = new Fl_Check_Button (5, 108, 55, 30);
  146. ShapeSaw->type (FL_RADIO_BUTTON);
  147. ShapeSaw->down_box (FL_DIAMOND_DOWN_BOX);
  148. ShapeSaw->selection_color (GUI_COLOUR);
  149. pixmap_Saw.label (ShapeSaw);
  150. ShapeSaw->callback ((Fl_Callback*)cb_Saw);
  151. Perd = new Fl_Knob (75, 15, 60, 60, "");
  152. Perd->color (GUI_COLOUR);
  153. Perd->type (Fl_Knob::LINELIN);
  154. Perd->labelsize (10);
  155. Perd->scaleticks (20);
  156. Perd->maximum (120);
  157. Perd->minimum (0.1);
  158. Perd->step (0.001);
  159. Perd->value (10);
  160. Perd->callback ((Fl_Callback*)cb_Perd);
  161. NumPerd = new Fl_Counter (50, 80, 110, 20, "Period (Secs)");
  162. NumPerd->textsize (10);
  163. NumPerd->labelsize (10);
  164. NumPerd->value (Perd->value());
  165. NumPerd->step (Perd->step());
  166. NumPerd->lstep (0.1);
  167. NumPerd->maximum (Perd->maximum());
  168. NumPerd->minimum (Perd->minimum());
  169. NumPerd->callback ((Fl_Callback*)cb_NumPerd);
  170. NumFreq = new Fl_Counter (50, 115, 110, 20, "Freq (Hz)");
  171. NumFreq->textsize (10);
  172. NumFreq->labelsize (10);
  173. NumFreq->value (1 / Perd->value());
  174. NumFreq->step (0.001);
  175. NumFreq->lstep (0.1);
  176. NumFreq->maximum (1 / Perd->minimum());
  177. NumFreq->minimum (1 / Perd->maximum());
  178. NumFreq->callback ((Fl_Callback*)cb_NumFreq);
  179. end();
  180. }
  181. void LFOPluginGUI::UpdateValues(SpiralPlugin *o) {
  182. LFOPlugin* Plugin = (LFOPlugin*)o;
  183. ShapeSine->value (0);
  184. ShapeTri->value (0);
  185. ShapeSquare->value (0);
  186. ShapeSaw->value (0);
  187. switch (Plugin->GetType()) {
  188. case LFOPlugin::SINE : ShapeSine->value (1); break;
  189. case LFOPlugin::TRIANGLE : ShapeTri->value (1); break;
  190. case LFOPlugin::SQUARE : ShapeSquare->value (1); break;
  191. case LFOPlugin::SAW : ShapeSaw->value (1); break;
  192. }
  193. float x = Plugin->GetFreq();
  194. NumFreq->value (x);
  195. x = 1 / x;
  196. Perd->value (x);
  197. NumPerd->value (x);
  198. }
  199. // Callbacks for knobs and counters
  200. inline void LFOPluginGUI::cb_Perd_i (Fl_Knob* o, void* v) {
  201. m_GUICH->Set("Freq",(float)(1.0f / o->value()));
  202. }
  203. void LFOPluginGUI::cb_Perd (Fl_Knob* o, void* v) {
  204. ((LFOPluginGUI*)(o->parent()))->cb_Perd_i (o, v);
  205. }
  206. inline void LFOPluginGUI::cb_NumPerd_i (Fl_Knob* o, void* v) {
  207. m_GUICH->Set("Freq",(float)(1.0f / o->value()));
  208. }
  209. void LFOPluginGUI::cb_NumPerd (Fl_Knob* o, void* v) {
  210. ((LFOPluginGUI*)(o->parent()))->cb_NumPerd_i (o, v);
  211. }
  212. inline void LFOPluginGUI::cb_NumFreq_i (Fl_Knob* o, void* v) {
  213. m_GUICH->Set("Freq",(float)(o->value()));
  214. }
  215. void LFOPluginGUI::cb_NumFreq (Fl_Knob* o, void* v) {
  216. ((LFOPluginGUI*)(o->parent()))->cb_NumFreq_i (o, v);
  217. }
  218. // Callbacks for waveform buttons
  219. inline void LFOPluginGUI::cb_Sine_i (Fl_Check_Button* o, void* v) {
  220. m_GUICH->Set("Type",(char)(LFOPlugin::SINE));
  221. }
  222. void LFOPluginGUI::cb_Sine(Fl_Check_Button* o, void* v) {
  223. ((LFOPluginGUI*)(o->parent()))->cb_Sine_i (o, v);
  224. }
  225. inline void LFOPluginGUI::cb_Tri_i (Fl_Check_Button* o, void* v) {
  226. m_GUICH->Set("Type",(char)(LFOPlugin::TRIANGLE));
  227. }
  228. void LFOPluginGUI::cb_Tri (Fl_Check_Button* o, void* v) {
  229. ((LFOPluginGUI*)(o->parent()))->cb_Tri_i (o, v);
  230. }
  231. inline void LFOPluginGUI::cb_Square_i (Fl_Check_Button* o, void* v) {
  232. m_GUICH->Set("Type",(char)(LFOPlugin::SQUARE));
  233. }
  234. void LFOPluginGUI::cb_Square (Fl_Check_Button* o, void* v) {
  235. ((LFOPluginGUI*)(o->parent()))->cb_Square_i (o, v);
  236. }
  237. inline void LFOPluginGUI::cb_Saw_i (Fl_Check_Button* o, void* v) {
  238. m_GUICH->Set("Type",(LFOPlugin::SAW));
  239. }
  240. void LFOPluginGUI::cb_Saw (Fl_Check_Button* o, void* v) {
  241. ((LFOPluginGUI*)(o->parent()))->cb_Saw_i (o, v);
  242. }