External plugins for Carla
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.

1337 lines
50KB

  1. // generated by Fast Light User Interface Designer (fluid) version 1.0300
  2. #include "external/zynaddsubfx/UI/OscilGenUI.h"
  3. //Copyright (c) 2002-2005 Nasca Octavian Paul
  4. //License: GNU GPL version 2 or later
  5. #include <math.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. OGSlider::OGSlider(int x,int y, int w, int h, const char *label)
  10. :Fl_Osc_TSlider(x,y,w,h,label) {
  11. phase=false;
  12. }
  13. void OGSlider::OSC_value(char c) {
  14. value(phase ? c : 127-c);
  15. selection_color(value() == reset_value ? 0 : 222);
  16. redraw();
  17. }
  18. void OGSlider::cb(void) {
  19. selection_color(value() == reset_value ? 0 : 222);
  20. if(cb_data.first) cb_data.first(this, cb_data.second);
  21. }
  22. void OGSlider::update(void) {
  23. }
  24. OGWaveChoice::OGWaveChoice(int x,int y, int w, int h, const char *label)
  25. :Fl_Osc_Choice(x,y,w,h,label) {
  26. }
  27. void OGWaveChoice::OSC_value(int i) {
  28. value(i == 127 ? size()-2 : i);
  29. ogui->setbfmodstatus(i);
  30. }
  31. void OGWaveChoice::cb(void) {
  32. int v = Fl_Osc_Choice::value();
  33. if (value() < size()-2)
  34. oscWrite(ext, "i", v);
  35. else
  36. oscWrite(ext);
  37. if(cb_data.first)
  38. cb_data.first(this, cb_data.second);
  39. }
  40. void Oscilharmonic::cb_mag_i(OGSlider* o, void*) {
  41. int x=127-(int)o->value();
  42. //if (x==64) o->selection_color(0);
  43. // else o->selection_color(222);
  44. o->osc->writeValue(o->loc+"magnitude"+to_s(n), (char)x);
  45. if (x==64) {
  46. o->osc->writeValue(o->loc+"phase"+to_s(n), (char)64);
  47. phase->value(64);
  48. phase->selection_color(0);
  49. }
  50. o->osc->requestValue(o->loc+"prepare");
  51. o->osc->requestValue(o->loc+"spectrum");
  52. o->osc->requestValue(o->loc+"waveform");
  53. display->redraw();
  54. }
  55. void Oscilharmonic::cb_mag(OGSlider* o, void* v) {
  56. ((Oscilharmonic*)(o->parent()->user_data()))->cb_mag_i(o,v);
  57. }
  58. void Oscilharmonic::cb_phase_i(OGSlider* o, void*) {
  59. o->osc->writeValue(o->loc+"phase"+to_s(n), (char) o->value());
  60. o->osc->requestValue(o->loc+"prepare");
  61. o->osc->requestValue(o->loc+"spectrum");
  62. o->osc->requestValue(o->loc+"waveform");
  63. display->redraw();
  64. }
  65. void Oscilharmonic::cb_phase(OGSlider* o, void* v) {
  66. ((Oscilharmonic*)(o->parent()->user_data()))->cb_phase_i(o,v);
  67. }
  68. Fl_Osc_Group* Oscilharmonic::make_window() {
  69. { harmonic = new Fl_Osc_Group(0, 0, 100, 225);
  70. harmonic->box(FL_NO_BOX);
  71. harmonic->color(FL_BACKGROUND_COLOR);
  72. harmonic->selection_color(FL_BACKGROUND_COLOR);
  73. harmonic->labeltype(FL_NO_LABEL);
  74. harmonic->labelfont(0);
  75. harmonic->labelsize(14);
  76. harmonic->labelcolor(FL_FOREGROUND_COLOR);
  77. harmonic->user_data((void*)(this));
  78. harmonic->align(Fl_Align(FL_ALIGN_TOP));
  79. harmonic->when(FL_WHEN_RELEASE);
  80. { OGSlider* o = mag = new OGSlider(0, 15, 15, 115);
  81. mag->type(4);
  82. mag->box(FL_NO_BOX);
  83. mag->color(FL_BACKGROUND_COLOR);
  84. mag->selection_color((Fl_Color)222);
  85. mag->labeltype(FL_NORMAL_LABEL);
  86. mag->labelfont(0);
  87. mag->labelsize(14);
  88. mag->labelcolor(FL_FOREGROUND_COLOR);
  89. mag->maximum(127);
  90. mag->step(1);
  91. mag->value(64);
  92. mag->callback((Fl_Callback*)cb_mag);
  93. mag->align(Fl_Align(FL_ALIGN_BOTTOM));
  94. mag->when(FL_WHEN_CHANGED);
  95. o->phase=false;o->ext = "magnitude"+to_s(n);//o->value(127-oscil->Phmag[n]);
  96. //if (oscil->Phmag[n]==64) o->selection_color(0);
  97. } // OGSlider* mag
  98. { OGSlider* o = phase = new OGSlider(0, 135, 15, 75);
  99. phase->type(4);
  100. phase->box(FL_NO_BOX);
  101. phase->color(FL_BACKGROUND_COLOR);
  102. phase->selection_color((Fl_Color)222);
  103. phase->labeltype(FL_NORMAL_LABEL);
  104. phase->labelfont(0);
  105. phase->labelsize(14);
  106. phase->labelcolor(FL_FOREGROUND_COLOR);
  107. phase->maximum(127);
  108. phase->step(1);
  109. phase->value(64);
  110. phase->callback((Fl_Callback*)cb_phase);
  111. phase->align(Fl_Align(FL_ALIGN_BOTTOM));
  112. phase->when(FL_WHEN_CHANGED);
  113. o->phase=true;o->ext = "phase"+to_s(n);//o->value(oscil->Phphase[n]);
  114. } // OGSlider* phase
  115. { Fl_Box* o = new Fl_Box(15, 70, 5, 5);
  116. o->box(FL_FLAT_BOX);
  117. o->color(FL_DARK2);
  118. } // Fl_Box* o
  119. { Fl_Box* o = new Fl_Box(15, 170, 5, 5);
  120. o->box(FL_FLAT_BOX);
  121. o->color(FL_DARK2);
  122. } // Fl_Box* o
  123. { Fl_Box* o = new Fl_Box(0, 210, 20, 15, "01");
  124. o->labelfont(1);
  125. o->labelsize(9);
  126. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  127. char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));
  128. } // Fl_Box* o
  129. { Fl_Box* o = new Fl_Box(0, 0, 20, 15, "01");
  130. o->labelfont(1);
  131. o->labelsize(9);
  132. o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
  133. char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));
  134. } // Fl_Box* o
  135. harmonic->end();
  136. } // Fl_Osc_Group* harmonic
  137. return harmonic;
  138. }
  139. Oscilharmonic::Oscilharmonic(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
  140. n=0;
  141. display=NULL;
  142. }
  143. void Oscilharmonic::init(int n_,Fl_Group *display_, std::string loc_, Fl_Osc_Interface *osc_) {
  144. assert(osc_);
  145. assert(!loc_.empty());
  146. n=n_;
  147. display=display_;
  148. osc = osc_;
  149. loc = loc_;
  150. make_window();
  151. mag->osc = osc;
  152. mag->loc = loc;
  153. mag->reset_value = 63;
  154. mag->set_transform([](float x){return 63.0f - x;});
  155. phase->osc = osc;
  156. phase->loc = loc;
  157. phase->reset_value = 64;
  158. phase->set_rounding(1);
  159. phase->set_transform([](float x){return 180*(1 - x/64.0f);});
  160. osc->createLink(loc+"magnitude"+to_s(n), mag);
  161. osc->createLink(loc+"phase"+to_s(n), phase);
  162. osc->requestValue(loc+"magnitude"+to_s(n));
  163. osc->requestValue(loc+"phase"+to_s(n));
  164. end();
  165. harmonic->show();
  166. }
  167. void Oscilharmonic::refresh() {
  168. osc->requestValue(loc+"magnitude"+to_s(n));//mag->value(127-oscil->Phmag[n]);
  169. osc->requestValue(loc+"phase"+to_s(n));//phase->value(oscil->Phphase[n]);
  170. }
  171. Oscilharmonic::~Oscilharmonic() {
  172. osc->removeLink(loc+"magnitude"+to_s(n), mag);
  173. osc->removeLink(loc+"phase"+to_s(n), phase);
  174. harmonic->hide();
  175. delete harmonic;
  176. }
  177. void OscilEditor::cb_applybutton_i(Fl_Button*, void*) {
  178. dummy->osc->requestValue(loc+"../prepare");
  179. }
  180. void OscilEditor::cb_applybutton(Fl_Button* o, void* v) {
  181. ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_applybutton_i(o,v);
  182. }
  183. Fl_Menu_Item OscilEditor::menu_hrndtype[] = {
  184. {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  185. {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  186. {"Sin", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  187. {0,0,0,0,0,0,0,0,0}
  188. };
  189. void OscilEditor::cb_magtype_i(Fl_Osc_Choice*, void*) {
  190. redrawoscil();
  191. }
  192. void OscilEditor::cb_magtype(Fl_Osc_Choice* o, void* v) {
  193. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_magtype_i(o,v);
  194. }
  195. Fl_Menu_Item OscilEditor::menu_magtype[] = {
  196. {"Linear", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  197. {"-40dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  198. {"-60dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  199. {"-80dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  200. {"-100dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  201. {0,0,0,0,0,0,0,0,0}
  202. };
  203. void OscilEditor::cb_bfpar_i(Fl_Osc_Dial* o, void*) {
  204. redrawoscil(); if(bfparval){bfparval->value(o->value());};
  205. }
  206. void OscilEditor::cb_bfpar(Fl_Osc_Dial* o, void* v) {
  207. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_bfpar_i(o,v);
  208. }
  209. void OscilEditor::cb_bftype_i(OGWaveChoice* o, void*) {
  210. basefuncdisplaygroup->redraw();
  211. redrawoscil();
  212. if(!basefuncmodulation) return;
  213. setbfmodstatus(o->value());
  214. }
  215. void OscilEditor::cb_bftype(OGWaveChoice* o, void* v) {
  216. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_bftype_i(o,v);
  217. }
  218. Fl_Menu_Item OscilEditor::menu_bftype[] = {
  219. {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  220. {"Triangle", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  221. {"Pulse", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  222. {"Saw", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  223. {"Power", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  224. {"Gauss", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  225. {"Diode", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  226. {"AbsSine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  227. {"PulseSine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  228. {"StrchSine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  229. {"Chirp", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  230. {"AbsStrSine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  231. {"Chebyshev", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  232. {"Sqr", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  233. {"Spike", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  234. {"Circle", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
  235. {"User", 0, 0, 0, 16, FL_NORMAL_LABEL, 1, 11, 0},
  236. {0,0,0,0,0,0,0,0,0}
  237. };
  238. void OscilEditor::cb_bfmodtype_i(Fl_Osc_Choice*, void*) {
  239. basefuncdisplaygroup->redraw();
  240. redrawoscil();
  241. }
  242. void OscilEditor::cb_bfmodtype(Fl_Osc_Choice* o, void* v) {
  243. ((OscilEditor*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_bfmodtype_i(o,v);
  244. }
  245. Fl_Menu_Item OscilEditor::menu_bfmodtype[] = {
  246. {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  247. {"Rev", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  248. {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  249. {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  250. {"Chop", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  251. {0,0,0,0,0,0,0,0,0}
  252. };
  253. void OscilEditor::cb_bfmodpar1_i(Fl_Osc_Dial*, void*) {
  254. redrawoscil();
  255. }
  256. void OscilEditor::cb_bfmodpar1(Fl_Osc_Dial* o, void* v) {
  257. ((OscilEditor*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_bfmodpar1_i(o,v);
  258. }
  259. void OscilEditor::cb_bfmodpar2_i(Fl_Osc_Dial*, void*) {
  260. redrawoscil();
  261. }
  262. void OscilEditor::cb_bfmodpar2(Fl_Osc_Dial* o, void* v) {
  263. ((OscilEditor*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_bfmodpar2_i(o,v);
  264. }
  265. void OscilEditor::cb_bfmodpar3_i(Fl_Osc_Dial*, void*) {
  266. redrawoscil();
  267. }
  268. void OscilEditor::cb_bfmodpar3(Fl_Osc_Dial* o, void* v) {
  269. ((OscilEditor*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_bfmodpar3_i(o,v);
  270. }
  271. void OscilEditor::cb_Use_i(Fl_Button*, void*) {
  272. osc->requestValue(loc+"use-as-base");
  273. if (autoclearbutton->value()){
  274. for (int i=1;i<(MAX_AD_HARMONICS - 1);i++){
  275. h[i]->mag->value(63);
  276. h[i]->mag->do_callback();
  277. h[i]->phase->value(64);
  278. h[i]->phase->do_callback();
  279. };
  280. harmonicshiftcounter->value(0);
  281. h[0]->mag->value(0);
  282. h[0]->mag->do_callback();
  283. h[0]->phase->value(64);
  284. h[0]->phase->do_callback();
  285. wshbutton->value(0);
  286. wshbutton->do_callback();
  287. fltbutton->value(0);
  288. fltbutton->do_callback();
  289. sabutton->value(0);
  290. sabutton->do_callback();
  291. bfmodtype->value(0);
  292. bfmodtype->do_callback();
  293. };
  294. osc->requestValue(loc+"prepare");
  295. bftype->update();
  296. basefuncdisplaygroup->redraw();
  297. redrawoscil();
  298. }
  299. void OscilEditor::cb_Use(Fl_Button* o, void* v) {
  300. ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_Use_i(o,v);
  301. }
  302. void OscilEditor::cb_Close_i(Fl_Button*, void*) {
  303. osceditUI->hide();
  304. }
  305. void OscilEditor::cb_Close(Fl_Button* o, void* v) {
  306. ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_Close_i(o,v);
  307. }
  308. void OscilEditor::cb_Clear_i(Fl_Button*, void*) {
  309. if (!fl_choice("Clear the harmonics settings?","No","Yes",NULL)) return;
  310. for (int i=1;i<(MAX_AD_HARMONICS - 1);i++){
  311. h[i]->mag->value(63);
  312. h[i]->mag->do_callback();
  313. h[i]->phase->value(64);
  314. h[i]->phase->do_callback();
  315. };
  316. h[0]->mag->value(0);
  317. h[0]->mag->do_callback();
  318. h[0]->phase->value(64);
  319. h[0]->phase->do_callback();
  320. //harmonics->redraw();
  321. osc->requestValue(loc+"prepare");
  322. redrawoscil();
  323. }
  324. void OscilEditor::cb_Clear(Fl_Button* o, void* v) {
  325. ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_Clear_i(o,v);
  326. }
  327. void OscilEditor::cb_wshbutton_i(Fl_Osc_Choice*, void*) {
  328. basefuncdisplaygroup->redraw();
  329. redrawoscil();
  330. }
  331. void OscilEditor::cb_wshbutton(Fl_Osc_Choice* o, void* v) {
  332. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_wshbutton_i(o,v);
  333. }
  334. Fl_Menu_Item OscilEditor::menu_wshbutton[] = {
  335. {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  336. {"Atan", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  337. {"Asym1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  338. {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  339. {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  340. {"Qnts", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  341. {"Zigzg", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  342. {"Lmt", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  343. {"LmtU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  344. {"LmtL", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  345. {"ILmt", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  346. {"Clip", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  347. {"Asym2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  348. {"Pow2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  349. {"Sgm", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  350. {0,0,0,0,0,0,0,0,0}
  351. };
  352. void OscilEditor::cb_wshpar_i(Fl_Osc_Dial* o, void*) {
  353. redrawoscil();if(wsparval){wsparval->value(o->value());};
  354. }
  355. void OscilEditor::cb_wshpar(Fl_Osc_Dial* o, void* v) {
  356. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_wshpar_i(o,v);
  357. }
  358. void OscilEditor::cb_fltbutton_i(Fl_Osc_Choice*, void*) {
  359. redrawoscil();
  360. }
  361. void OscilEditor::cb_fltbutton(Fl_Osc_Choice* o, void* v) {
  362. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_fltbutton_i(o,v);
  363. }
  364. Fl_Menu_Item OscilEditor::menu_fltbutton[] = {
  365. {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  366. {"LP1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  367. {"HP1a", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  368. {"HP1b", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  369. {"BP1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  370. {"BS1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  371. {"LP2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  372. {"HP2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  373. {"BP2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  374. {"BS2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  375. {"Cos", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  376. {"Sin", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  377. {"LSh", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  378. {"S", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  379. {0,0,0,0,0,0,0,0,0}
  380. };
  381. void OscilEditor::cb_filtervalue1_i(Fl_Osc_Dial*, void*) {
  382. redrawoscil();
  383. }
  384. void OscilEditor::cb_filtervalue1(Fl_Osc_Dial* o, void* v) {
  385. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_filtervalue1_i(o,v);
  386. }
  387. void OscilEditor::cb_filterpref_i(Fl_Check_Button*, void*) {
  388. redrawoscil();
  389. }
  390. void OscilEditor::cb_filterpref(Fl_Check_Button* o, void* v) {
  391. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_filterpref_i(o,v);
  392. }
  393. void OscilEditor::cb_filtervalue2_i(Fl_Osc_Dial*, void*) {
  394. redrawoscil();
  395. }
  396. void OscilEditor::cb_filtervalue2(Fl_Osc_Dial* o, void* v) {
  397. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_filtervalue2_i(o,v);
  398. }
  399. void OscilEditor::cb_sabutton_i(Fl_Osc_Choice*, void*) {
  400. redrawoscil();
  401. }
  402. void OscilEditor::cb_sabutton(Fl_Osc_Choice* o, void* v) {
  403. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_sabutton_i(o,v);
  404. }
  405. Fl_Menu_Item OscilEditor::menu_sabutton[] = {
  406. {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  407. {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  408. {"ThrsD", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  409. {"ThrsU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  410. {0,0,0,0,0,0,0,0,0}
  411. };
  412. void OscilEditor::cb_sadjpar_i(Fl_Osc_Dial*, void*) {
  413. redrawoscil();
  414. }
  415. void OscilEditor::cb_sadjpar(Fl_Osc_Dial* o, void* v) {
  416. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_sadjpar_i(o,v);
  417. }
  418. void OscilEditor::cb_harmonicshiftcounter_i(Fl_Osc_Counter*, void*) {
  419. redrawoscil();
  420. }
  421. void OscilEditor::cb_harmonicshiftcounter(Fl_Osc_Counter* o, void* v) {
  422. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_harmonicshiftcounter_i(o,v);
  423. }
  424. void OscilEditor::cb_harmonicshiftpre_i(Fl_Osc_Check*, void*) {
  425. redrawoscil();
  426. }
  427. void OscilEditor::cb_harmonicshiftpre(Fl_Osc_Check* o, void* v) {
  428. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_harmonicshiftpre_i(o,v);
  429. }
  430. void OscilEditor::cb_R_i(Fl_Button*, void*) {
  431. //oscil->Pharmonicshift=0;
  432. harmonicshiftcounter->value(0);
  433. redrawoscil();
  434. }
  435. void OscilEditor::cb_R(Fl_Button* o, void* v) {
  436. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_R_i(o,v);
  437. }
  438. void OscilEditor::cb_adhrtype_i(Fl_Osc_Choice*, void*) {
  439. redrawoscil();
  440. }
  441. void OscilEditor::cb_adhrtype(Fl_Osc_Choice* o, void* v) {
  442. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_adhrtype_i(o,v);
  443. }
  444. Fl_Menu_Item OscilEditor::menu_adhrtype[] = {
  445. {"OFF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  446. {"ON", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  447. {"Square", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  448. {"2xSub", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  449. {"2xAdd", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  450. {"3xSub", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  451. {"3xAdd", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  452. {"4xSub", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  453. {"4xAdd", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  454. {0,0,0,0,0,0,0,0,0}
  455. };
  456. void OscilEditor::cb_adhrpow_i(Fl_Osc_Dial*, void*) {
  457. redrawoscil();
  458. }
  459. void OscilEditor::cb_adhrpow(Fl_Osc_Dial* o, void* v) {
  460. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_adhrpow_i(o,v);
  461. }
  462. void OscilEditor::cb_adhrbf_i(Fl_Osc_Dial*, void*) {
  463. redrawoscil();
  464. }
  465. void OscilEditor::cb_adhrbf(Fl_Osc_Dial* o, void* v) {
  466. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_adhrbf_i(o,v);
  467. }
  468. void OscilEditor::cb_adhrpar_i(Fl_Osc_TSlider*, void*) {
  469. redrawoscil();
  470. }
  471. void OscilEditor::cb_adhrpar(Fl_Osc_TSlider* o, void* v) {
  472. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_adhrpar_i(o,v);
  473. }
  474. void OscilEditor::cb_modtype_i(Fl_Osc_Choice*, void*) {
  475. redrawoscil();
  476. }
  477. void OscilEditor::cb_modtype(Fl_Osc_Choice* o, void* v) {
  478. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_modtype_i(o,v);
  479. }
  480. Fl_Menu_Item OscilEditor::menu_modtype[] = {
  481. {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  482. {"Rev", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  483. {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  484. {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
  485. {0,0,0,0,0,0,0,0,0}
  486. };
  487. void OscilEditor::cb_modpar1_i(Fl_Osc_Dial*, void*) {
  488. redrawoscil();
  489. }
  490. void OscilEditor::cb_modpar1(Fl_Osc_Dial* o, void* v) {
  491. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_modpar1_i(o,v);
  492. }
  493. void OscilEditor::cb_modpar2_i(Fl_Osc_Dial*, void*) {
  494. redrawoscil();
  495. }
  496. void OscilEditor::cb_modpar2(Fl_Osc_Dial* o, void* v) {
  497. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_modpar2_i(o,v);
  498. }
  499. void OscilEditor::cb_modpar3_i(Fl_Osc_Dial*, void*) {
  500. redrawoscil();
  501. }
  502. void OscilEditor::cb_modpar3(Fl_Osc_Dial* o, void* v) {
  503. ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_modpar3_i(o,v);
  504. }
  505. void OscilEditor::cb_Sine_i(Fl_Button*, void*) {
  506. if (!fl_choice("Convert to SINE?","No","Yes",NULL)) return;
  507. osc->requestValue(loc+"convert2sine");
  508. bftype->update();
  509. bfpar->value(0);
  510. bfpar->do_callback();
  511. redrawoscil();
  512. refresh();
  513. }
  514. void OscilEditor::cb_Sine(Fl_Button* o, void* v) {
  515. ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_Sine_i(o,v);
  516. }
  517. void OscilEditor::cb_C_i(Fl_Button*, void*) {
  518. presetsui->copy(dummy->loc());
  519. }
  520. void OscilEditor::cb_C(Fl_Button* o, void* v) {
  521. ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_C_i(o,v);
  522. }
  523. void OscilEditor::cb_P_i(Fl_Button*, void*) {
  524. presetsui->paste(dummy->loc(), this);
  525. }
  526. void OscilEditor::cb_P(Fl_Button* o, void* v) {
  527. ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_P_i(o,v);
  528. }
  529. Fl_Double_Window* OscilEditor::make_window() {
  530. { Fl_Double_Window* o = osceditUI = new Fl_Double_Window(735, 595, "ADsynth Oscillator Editor");
  531. osceditUI->user_data((void*)(this));
  532. { dummy = new Fl_Osc_Group(0, 0, 735, 595);
  533. dummy->box(FL_FLAT_BOX);
  534. dummy->color(FL_BACKGROUND_COLOR);
  535. dummy->selection_color(FL_BACKGROUND_COLOR);
  536. dummy->labeltype(FL_NORMAL_LABEL);
  537. dummy->labelfont(0);
  538. dummy->labelsize(14);
  539. dummy->labelcolor(FL_FOREGROUND_COLOR);
  540. dummy->align(Fl_Align(FL_ALIGN_TOP));
  541. dummy->when(FL_WHEN_RELEASE);
  542. { Fl_Button* o = applybutton = new Fl_Button(305, 285, 60, 20, "Apply");
  543. applybutton->box(FL_THIN_UP_BOX);
  544. applybutton->labelfont(1);
  545. applybutton->callback((Fl_Callback*)cb_applybutton);
  546. if(adnotep) o->hide();
  547. dummy->base = loc;
  548. dummy->osc = osc;
  549. } // Fl_Button* applybutton
  550. { oscildisplaygroup = new Fl_Group(10, 10, 360, 300);
  551. oscildisplaygroup->box(FL_UP_FRAME);
  552. { Fl_Group* o = new Fl_Group(15, 90, 350, 190);
  553. o->box(FL_THIN_DOWN_BOX);
  554. o->color(FL_GRAY0);
  555. o->selection_color((Fl_Color)71);
  556. o->labelcolor((Fl_Color)179);
  557. oscilo=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
  558. oscilo->parent(o);oscilo->init(false);
  559. o->end();
  560. } // Fl_Group* o
  561. { Fl_Box* o = new Fl_Box(125, 15, 110, 20, "Oscillator");
  562. o->labelfont(1);
  563. } // Fl_Box* o
  564. { Fl_Osc_VSlider* o = rndslider = new Fl_Osc_VSlider(145, 290, 100, 10, "rnd");
  565. rndslider->tooltip("Oscilator Phase Randomness: smaller than 0 is \"group\", larger than 0 is for\
  566. each harmonic");
  567. rndslider->type(5);
  568. rndslider->box(FL_NO_BOX);
  569. rndslider->color(FL_BACKGROUND_COLOR);
  570. rndslider->selection_color(FL_BACKGROUND_COLOR);
  571. rndslider->labeltype(FL_NORMAL_LABEL);
  572. rndslider->labelfont(0);
  573. rndslider->labelsize(10);
  574. rndslider->labelcolor(FL_FOREGROUND_COLOR);
  575. rndslider->minimum(-64);
  576. rndslider->maximum(63);
  577. rndslider->step(1);
  578. rndslider->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  579. rndslider->when(FL_WHEN_CHANGED);
  580. (void)o->init("Prand"); if (!adnotep) o->hide();
  581. } // Fl_Osc_VSlider* rndslider
  582. { Fl_Group* o = new Fl_Group(15, 35, 350, 50);
  583. o->box(FL_THIN_DOWN_BOX);
  584. o->color(FL_GRAY0);
  585. o->selection_color((Fl_Color)218);
  586. o->labelcolor(FL_GREEN);
  587. oscils=new Fl_OscilSpectrum(o->x(),o->y(),o->w(),o->h(),"");
  588. oscils->parent(o);oscils->init(false);
  589. o->end();
  590. } // Fl_Group* o
  591. { Fl_Group* o = new Fl_Group(251, 282, 115, 25);
  592. o->box(FL_UP_FRAME);
  593. { Fl_Osc_Choice* o = hrndtype = new Fl_Osc_Choice(286, 287, 50, 15, "H.rnd");
  594. hrndtype->tooltip("Harmonic Amplitude Randomness");
  595. hrndtype->box(FL_UP_BOX);
  596. hrndtype->down_box(FL_BORDER_BOX);
  597. hrndtype->color(FL_BACKGROUND_COLOR);
  598. hrndtype->selection_color(FL_SELECTION_COLOR);
  599. hrndtype->labeltype(FL_NORMAL_LABEL);
  600. hrndtype->labelfont(0);
  601. hrndtype->labelsize(10);
  602. hrndtype->labelcolor(FL_FOREGROUND_COLOR);
  603. hrndtype->textsize(10);
  604. hrndtype->align(Fl_Align(FL_ALIGN_LEFT));
  605. hrndtype->when(FL_WHEN_RELEASE);
  606. hrndtype->menu(menu_hrndtype);
  607. o->init("Pamprandtype");
  608. } // Fl_Osc_Choice* hrndtype
  609. { Fl_Osc_Dial* o = hrnddial = new Fl_Osc_Dial(345, 285, 18, 18);
  610. hrnddial->tooltip("Oscillator\'s spectrum adjust parameter");
  611. hrnddial->box(FL_NO_BOX);
  612. hrnddial->color(FL_BACKGROUND_COLOR);
  613. hrnddial->selection_color(FL_INACTIVE_COLOR);
  614. hrnddial->labeltype(FL_NORMAL_LABEL);
  615. hrnddial->labelfont(0);
  616. hrnddial->labelsize(14);
  617. hrnddial->labelcolor(FL_FOREGROUND_COLOR);
  618. hrnddial->maximum(127);
  619. hrnddial->step(1);
  620. hrnddial->align(Fl_Align(FL_ALIGN_BOTTOM));
  621. hrnddial->when(FL_WHEN_CHANGED);
  622. o->init("Pamprandpower");o->reset_value=64;
  623. } // Fl_Osc_Dial* hrnddial
  624. if (!adnotep) o->hide();
  625. o->end();
  626. } // Fl_Group* o
  627. { Fl_Osc_Choice* o = magtype = new Fl_Osc_Choice(75, 285, 65, 20, "Mag.Type");
  628. magtype->box(FL_UP_BOX);
  629. magtype->down_box(FL_BORDER_BOX);
  630. magtype->color(FL_BACKGROUND_COLOR);
  631. magtype->selection_color(FL_SELECTION_COLOR);
  632. magtype->labeltype(FL_NORMAL_LABEL);
  633. magtype->labelfont(0);
  634. magtype->labelsize(11);
  635. magtype->labelcolor(FL_FOREGROUND_COLOR);
  636. magtype->textsize(11);
  637. magtype->callback((Fl_Callback*)cb_magtype);
  638. magtype->align(Fl_Align(FL_ALIGN_LEFT));
  639. magtype->when(FL_WHEN_CHANGED);
  640. magtype->menu(menu_magtype);
  641. o->init("Phmagtype");
  642. } // Fl_Osc_Choice* magtype
  643. oscildisplaygroup->end();
  644. } // Fl_Group* oscildisplaygroup
  645. { Fl_Osc_Group* o = basefuncdisplaygroup = new Fl_Osc_Group(370, 10, 360, 300);
  646. basefuncdisplaygroup->box(FL_UP_FRAME);
  647. basefuncdisplaygroup->color(FL_BACKGROUND_COLOR);
  648. basefuncdisplaygroup->selection_color(FL_BACKGROUND_COLOR);
  649. basefuncdisplaygroup->labeltype(FL_NORMAL_LABEL);
  650. basefuncdisplaygroup->labelfont(0);
  651. basefuncdisplaygroup->labelsize(14);
  652. basefuncdisplaygroup->labelcolor(FL_FOREGROUND_COLOR);
  653. basefuncdisplaygroup->align(Fl_Align(FL_ALIGN_TOP));
  654. basefuncdisplaygroup->when(FL_WHEN_RELEASE);
  655. { Fl_Group* o = new Fl_Group(375, 90, 350, 190);
  656. o->box(FL_THIN_DOWN_BOX);
  657. o->color(FL_GRAY0);
  658. o->selection_color((Fl_Color)71);
  659. o->labelcolor((Fl_Color)179);
  660. oscilo_base=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
  661. oscilo_base->parent(o);oscilo_base->init(true);
  662. o->end();
  663. } // Fl_Group* o
  664. { Fl_Osc_Dial* o = bfpar = new Fl_Osc_Dial(525, 285, 20, 20);
  665. bfpar->tooltip("Base Function Parameter");
  666. bfpar->box(FL_NO_BOX);
  667. bfpar->color(FL_BACKGROUND_COLOR);
  668. bfpar->selection_color(FL_INACTIVE_COLOR);
  669. bfpar->labeltype(FL_NORMAL_LABEL);
  670. bfpar->labelfont(0);
  671. bfpar->labelsize(14);
  672. bfpar->labelcolor(FL_FOREGROUND_COLOR);
  673. bfpar->minimum(-64);
  674. bfpar->maximum(63);
  675. bfpar->step(1);
  676. bfpar->callback((Fl_Callback*)cb_bfpar);
  677. bfpar->align(Fl_Align(FL_ALIGN_BOTTOM));
  678. bfpar->when(FL_WHEN_CHANGED);
  679. o->init("Pbasefuncpar");
  680. } // Fl_Osc_Dial* bfpar
  681. { bftype = new OGWaveChoice(375, 290, 90, 15, "Base.F..");
  682. bftype->box(FL_UP_BOX);
  683. bftype->down_box(FL_BORDER_BOX);
  684. bftype->color(FL_BACKGROUND_COLOR);
  685. bftype->selection_color(FL_SELECTION_COLOR);
  686. bftype->labeltype(FL_NORMAL_LABEL);
  687. bftype->labelfont(0);
  688. bftype->labelsize(10);
  689. bftype->labelcolor(FL_FOREGROUND_COLOR);
  690. bftype->textsize(11);
  691. bftype->callback((Fl_Callback*)cb_bftype);
  692. bftype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
  693. bftype->when(FL_WHEN_CHANGED);
  694. bftype->menu(menu_bftype);
  695. } // OGWaveChoice* bftype
  696. { Fl_Box* o = new Fl_Box(485, 15, 110, 20, "Base Func.");
  697. o->labelfont(1);
  698. } // Fl_Box* o
  699. { Fl_Group* o = new Fl_Group(375, 35, 350, 50);
  700. o->box(FL_THIN_DOWN_BOX);
  701. o->color(FL_GRAY0);
  702. o->selection_color((Fl_Color)218);
  703. o->labelcolor(FL_GREEN);
  704. oscils_base=new Fl_OscilSpectrum (o->x(),o->y(),o->w(),o->h(),"");
  705. oscils_base->parent(o);oscils_base->init(true);
  706. o->end();
  707. } // Fl_Group* o
  708. { Fl_Value_Output* o = bfparval = new Fl_Value_Output(495, 290, 25, 15, "Par.");
  709. bfparval->labelsize(12);
  710. bfparval->minimum(-63);
  711. bfparval->maximum(63);
  712. bfparval->step(1);
  713. o->value(bfpar->value());
  714. } // Fl_Value_Output* bfparval
  715. { basefuncmodulation = new Fl_Group(555, 281, 169, 25);
  716. basefuncmodulation->box(FL_UP_FRAME);
  717. { Fl_Osc_Choice* o = bfmodtype = new Fl_Osc_Choice(604, 286, 50, 15, "B.F.Mod.");
  718. bfmodtype->tooltip("Base function modulation");
  719. bfmodtype->box(FL_UP_BOX);
  720. bfmodtype->down_box(FL_BORDER_BOX);
  721. bfmodtype->color(FL_BACKGROUND_COLOR);
  722. bfmodtype->selection_color(FL_SELECTION_COLOR);
  723. bfmodtype->labeltype(FL_NORMAL_LABEL);
  724. bfmodtype->labelfont(0);
  725. bfmodtype->labelsize(10);
  726. bfmodtype->labelcolor(FL_FOREGROUND_COLOR);
  727. bfmodtype->textsize(10);
  728. bfmodtype->callback((Fl_Callback*)cb_bfmodtype);
  729. bfmodtype->align(Fl_Align(FL_ALIGN_LEFT));
  730. bfmodtype->when(FL_WHEN_CHANGED);
  731. bfmodtype->menu(menu_bfmodtype);
  732. o->init("Pbasefuncmodulation");
  733. } // Fl_Osc_Choice* bfmodtype
  734. { Fl_Osc_Dial* o = bfmodpar1 = new Fl_Osc_Dial(664, 286, 15, 15);
  735. bfmodpar1->tooltip("Oscillator\'s modulation parameter 1");
  736. bfmodpar1->box(FL_NO_BOX);
  737. bfmodpar1->color(FL_BACKGROUND_COLOR);
  738. bfmodpar1->selection_color(FL_INACTIVE_COLOR);
  739. bfmodpar1->labeltype(FL_NORMAL_LABEL);
  740. bfmodpar1->labelfont(0);
  741. bfmodpar1->labelsize(14);
  742. bfmodpar1->labelcolor(FL_FOREGROUND_COLOR);
  743. bfmodpar1->maximum(127);
  744. bfmodpar1->step(1);
  745. bfmodpar1->callback((Fl_Callback*)cb_bfmodpar1);
  746. bfmodpar1->align(Fl_Align(FL_ALIGN_BOTTOM));
  747. bfmodpar1->when(FL_WHEN_CHANGED);
  748. o->init("Pbasefuncmodulationpar1");o->reset_value=64;
  749. } // Fl_Osc_Dial* bfmodpar1
  750. { Fl_Osc_Dial* o = bfmodpar2 = new Fl_Osc_Dial(684, 286, 15, 15);
  751. bfmodpar2->tooltip("Oscillator\'s modulation parameter 2");
  752. bfmodpar2->box(FL_NO_BOX);
  753. bfmodpar2->color(FL_BACKGROUND_COLOR);
  754. bfmodpar2->selection_color(FL_INACTIVE_COLOR);
  755. bfmodpar2->labeltype(FL_NORMAL_LABEL);
  756. bfmodpar2->labelfont(0);
  757. bfmodpar2->labelsize(14);
  758. bfmodpar2->labelcolor(FL_FOREGROUND_COLOR);
  759. bfmodpar2->maximum(127);
  760. bfmodpar2->step(1);
  761. bfmodpar2->callback((Fl_Callback*)cb_bfmodpar2);
  762. bfmodpar2->align(Fl_Align(FL_ALIGN_BOTTOM));
  763. bfmodpar2->when(FL_WHEN_CHANGED);
  764. o->init("Pbasefuncmodulationpar2");o->reset_value=64;
  765. } // Fl_Osc_Dial* bfmodpar2
  766. { Fl_Osc_Dial* o = bfmodpar3 = new Fl_Osc_Dial(704, 286, 15, 15);
  767. bfmodpar3->tooltip("Oscillator\'s modulation parameter 3");
  768. bfmodpar3->box(FL_NO_BOX);
  769. bfmodpar3->color(FL_BACKGROUND_COLOR);
  770. bfmodpar3->selection_color(FL_INACTIVE_COLOR);
  771. bfmodpar3->labeltype(FL_NORMAL_LABEL);
  772. bfmodpar3->labelfont(0);
  773. bfmodpar3->labelsize(14);
  774. bfmodpar3->labelcolor(FL_FOREGROUND_COLOR);
  775. bfmodpar3->maximum(127);
  776. bfmodpar3->step(1);
  777. bfmodpar3->callback((Fl_Callback*)cb_bfmodpar3);
  778. bfmodpar3->align(Fl_Align(FL_ALIGN_BOTTOM));
  779. bfmodpar3->when(FL_WHEN_CHANGED);
  780. o->init("Pbasefuncmodulationpar3");o->reset_value=32;
  781. } // Fl_Osc_Dial* bfmodpar3
  782. basefuncmodulation->end();
  783. } // Fl_Group* basefuncmodulation
  784. o->base = loc;
  785. o->osc = osc; bftype->ogui = this;
  786. assert(osc);
  787. basefuncdisplaygroup->end();
  788. } // Fl_Osc_Group* basefuncdisplaygroup
  789. { Fl_Button* o = new Fl_Button(10, 318, 85, 20, "Use as base");
  790. o->tooltip("Use this Oscillator as base function");
  791. o->box(FL_THIN_UP_BOX);
  792. o->labelfont(1);
  793. o->labelsize(11);
  794. o->callback((Fl_Callback*)cb_Use);
  795. } // Fl_Button* o
  796. { Fl_Button* o = new Fl_Button(673, 570, 62, 25, "Close");
  797. o->box(FL_THIN_UP_BOX);
  798. o->callback((Fl_Callback*)cb_Close);
  799. } // Fl_Button* o
  800. { Fl_Button* o = new Fl_Button(675, 510, 55, 15, "Clear");
  801. o->box(FL_THIN_UP_BOX);
  802. o->labelfont(1);
  803. o->labelsize(11);
  804. o->callback((Fl_Callback*)cb_Clear);
  805. } // Fl_Button* o
  806. { Fl_Group* o = new Fl_Group(140, 313, 150, 30);
  807. o->box(FL_UP_FRAME);
  808. { Fl_Osc_Choice* o = wshbutton = new Fl_Osc_Choice(170, 320, 55, 20, "Wsh.");
  809. wshbutton->tooltip("Waveshaping function");
  810. wshbutton->box(FL_UP_BOX);
  811. wshbutton->down_box(FL_BORDER_BOX);
  812. wshbutton->color(FL_BACKGROUND_COLOR);
  813. wshbutton->selection_color(FL_SELECTION_COLOR);
  814. wshbutton->labeltype(FL_NORMAL_LABEL);
  815. wshbutton->labelfont(0);
  816. wshbutton->labelsize(10);
  817. wshbutton->labelcolor(FL_FOREGROUND_COLOR);
  818. wshbutton->textsize(10);
  819. wshbutton->callback((Fl_Callback*)cb_wshbutton);
  820. wshbutton->align(Fl_Align(FL_ALIGN_LEFT));
  821. wshbutton->when(FL_WHEN_CHANGED);
  822. wshbutton->menu(menu_wshbutton);
  823. o->init("Pwaveshapingfunction");
  824. } // Fl_Osc_Choice* wshbutton
  825. { Fl_Osc_Dial* o = wshpar = new Fl_Osc_Dial(265, 318, 20, 20);
  826. wshpar->tooltip("Waveshaping Parameter");
  827. wshpar->box(FL_NO_BOX);
  828. wshpar->color(FL_BACKGROUND_COLOR);
  829. wshpar->selection_color(FL_INACTIVE_COLOR);
  830. wshpar->labeltype(FL_NORMAL_LABEL);
  831. wshpar->labelfont(0);
  832. wshpar->labelsize(14);
  833. wshpar->labelcolor(FL_FOREGROUND_COLOR);
  834. wshpar->minimum(-64);
  835. wshpar->maximum(63);
  836. wshpar->step(1);
  837. wshpar->callback((Fl_Callback*)cb_wshpar);
  838. wshpar->align(Fl_Align(FL_ALIGN_BOTTOM));
  839. wshpar->when(FL_WHEN_CHANGED);
  840. o->init("Pwaveshaping");
  841. } // Fl_Osc_Dial* wshpar
  842. { Fl_Value_Output* o = wsparval = new Fl_Value_Output(233, 321, 25, 15);
  843. wsparval->labelsize(12);
  844. wsparval->minimum(-63);
  845. wsparval->maximum(63);
  846. wsparval->step(1);
  847. o->value(wshpar->value());
  848. } // Fl_Value_Output* wsparval
  849. o->end();
  850. } // Fl_Group* o
  851. { autoclearbutton = new Fl_Check_Button(98, 318, 40, 20, "Clr.");
  852. autoclearbutton->tooltip("Auto clear when using the oscillator as base function");
  853. autoclearbutton->box(FL_THIN_UP_BOX);
  854. autoclearbutton->down_box(FL_DOWN_BOX);
  855. autoclearbutton->value(1);
  856. autoclearbutton->labelfont(1);
  857. autoclearbutton->labelsize(10);
  858. } // Fl_Check_Button* autoclearbutton
  859. { Fl_Group* o = new Fl_Group(290, 313, 155, 30);
  860. o->box(FL_UP_FRAME);
  861. { Fl_Osc_Choice* o = fltbutton = new Fl_Osc_Choice(320, 318, 50, 20, "Filter");
  862. fltbutton->tooltip("Oscillator\'s filter type");
  863. fltbutton->box(FL_UP_BOX);
  864. fltbutton->down_box(FL_BORDER_BOX);
  865. fltbutton->color(FL_BACKGROUND_COLOR);
  866. fltbutton->selection_color(FL_SELECTION_COLOR);
  867. fltbutton->labeltype(FL_NORMAL_LABEL);
  868. fltbutton->labelfont(0);
  869. fltbutton->labelsize(10);
  870. fltbutton->labelcolor(FL_FOREGROUND_COLOR);
  871. fltbutton->textsize(10);
  872. fltbutton->callback((Fl_Callback*)cb_fltbutton);
  873. fltbutton->align(Fl_Align(FL_ALIGN_LEFT));
  874. fltbutton->when(FL_WHEN_CHANGED);
  875. fltbutton->menu(menu_fltbutton);
  876. o->init("Pfiltertype");
  877. } // Fl_Osc_Choice* fltbutton
  878. { Fl_Osc_Dial* o = filtervalue1 = new Fl_Osc_Dial(372, 318, 20, 20);
  879. filtervalue1->tooltip("Oscillator\'s filter parameter1");
  880. filtervalue1->box(FL_NO_BOX);
  881. filtervalue1->color(FL_BACKGROUND_COLOR);
  882. filtervalue1->selection_color(FL_INACTIVE_COLOR);
  883. filtervalue1->labeltype(FL_NORMAL_LABEL);
  884. filtervalue1->labelfont(0);
  885. filtervalue1->labelsize(14);
  886. filtervalue1->labelcolor(FL_FOREGROUND_COLOR);
  887. filtervalue1->maximum(127);
  888. filtervalue1->step(1);
  889. filtervalue1->callback((Fl_Callback*)cb_filtervalue1);
  890. filtervalue1->align(Fl_Align(FL_ALIGN_BOTTOM));
  891. filtervalue1->when(FL_WHEN_CHANGED);
  892. o->init("Pfilterpar1");o->reset_value=64;
  893. } // Fl_Osc_Dial* filtervalue1
  894. { filterpref = new Fl_Check_Button(420, 318, 20, 20, "p");
  895. filterpref->tooltip("Apply the filter before the waveshaping");
  896. filterpref->down_box(FL_DOWN_BOX);
  897. filterpref->labelsize(10);
  898. filterpref->callback((Fl_Callback*)cb_filterpref);
  899. filterpref->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
  900. } // Fl_Check_Button* filterpref
  901. { Fl_Osc_Dial* o = filtervalue2 = new Fl_Osc_Dial(395, 318, 20, 20);
  902. filtervalue2->tooltip("Oscillator\'s filter parameter2");
  903. filtervalue2->box(FL_NO_BOX);
  904. filtervalue2->color(FL_BACKGROUND_COLOR);
  905. filtervalue2->selection_color(FL_INACTIVE_COLOR);
  906. filtervalue2->labeltype(FL_NORMAL_LABEL);
  907. filtervalue2->labelfont(0);
  908. filtervalue2->labelsize(14);
  909. filtervalue2->labelcolor(FL_FOREGROUND_COLOR);
  910. filtervalue2->maximum(127);
  911. filtervalue2->step(1);
  912. filtervalue2->callback((Fl_Callback*)cb_filtervalue2);
  913. filtervalue2->align(Fl_Align(FL_ALIGN_BOTTOM));
  914. filtervalue2->when(FL_WHEN_CHANGED);
  915. o->init("Pfilterpar2");o->reset_value=64;
  916. } // Fl_Osc_Dial* filtervalue2
  917. o->end();
  918. } // Fl_Group* o
  919. { Fl_Group* o = new Fl_Group(595, 313, 135, 30);
  920. o->box(FL_UP_FRAME);
  921. { Fl_Osc_Choice* o = sabutton = new Fl_Osc_Choice(635, 318, 60, 20, "Sp.adj.");
  922. sabutton->tooltip("Oscillator\'s spectrum adjust");
  923. sabutton->box(FL_UP_BOX);
  924. sabutton->down_box(FL_BORDER_BOX);
  925. sabutton->color(FL_BACKGROUND_COLOR);
  926. sabutton->selection_color(FL_SELECTION_COLOR);
  927. sabutton->labeltype(FL_NORMAL_LABEL);
  928. sabutton->labelfont(0);
  929. sabutton->labelsize(10);
  930. sabutton->labelcolor(FL_FOREGROUND_COLOR);
  931. sabutton->textsize(10);
  932. sabutton->callback((Fl_Callback*)cb_sabutton);
  933. sabutton->align(Fl_Align(FL_ALIGN_LEFT));
  934. sabutton->when(FL_WHEN_CHANGED);
  935. sabutton->menu(menu_sabutton);
  936. o->init("Psatype");
  937. } // Fl_Osc_Choice* sabutton
  938. { Fl_Osc_Dial* o = sadjpar = new Fl_Osc_Dial(700, 318, 20, 20);
  939. sadjpar->tooltip("Oscillator\'s spectrum adjust parameter");
  940. sadjpar->box(FL_NO_BOX);
  941. sadjpar->color(FL_BACKGROUND_COLOR);
  942. sadjpar->selection_color(FL_INACTIVE_COLOR);
  943. sadjpar->labeltype(FL_NORMAL_LABEL);
  944. sadjpar->labelfont(0);
  945. sadjpar->labelsize(14);
  946. sadjpar->labelcolor(FL_FOREGROUND_COLOR);
  947. sadjpar->maximum(127);
  948. sadjpar->step(1);
  949. sadjpar->callback((Fl_Callback*)cb_sadjpar);
  950. sadjpar->align(Fl_Align(FL_ALIGN_BOTTOM));
  951. sadjpar->when(FL_WHEN_CHANGED);
  952. o->init("Psapar");o->reset_value=64;
  953. } // Fl_Osc_Dial* sadjpar
  954. o->end();
  955. } // Fl_Group* o
  956. { Fl_Group* o = new Fl_Group(670, 345, 65, 65);
  957. o->box(FL_UP_FRAME);
  958. { Fl_Osc_Counter* o = harmonicshiftcounter = new Fl_Osc_Counter(675, 370, 55, 15, "Harmonic Shift");
  959. harmonicshiftcounter->type(1);
  960. harmonicshiftcounter->box(FL_UP_BOX);
  961. harmonicshiftcounter->color(FL_BACKGROUND_COLOR);
  962. harmonicshiftcounter->selection_color(FL_INACTIVE_COLOR);
  963. harmonicshiftcounter->labeltype(FL_NORMAL_LABEL);
  964. harmonicshiftcounter->labelfont(0);
  965. harmonicshiftcounter->labelsize(10);
  966. harmonicshiftcounter->labelcolor(FL_FOREGROUND_COLOR);
  967. harmonicshiftcounter->minimum(-64);
  968. harmonicshiftcounter->maximum(64);
  969. harmonicshiftcounter->step(1);
  970. harmonicshiftcounter->textfont(1);
  971. harmonicshiftcounter->textsize(10);
  972. harmonicshiftcounter->callback((Fl_Callback*)cb_harmonicshiftcounter);
  973. harmonicshiftcounter->align(Fl_Align(129));
  974. harmonicshiftcounter->when(FL_WHEN_CHANGED);
  975. o->init("Pharmonicshift");
  976. } // Fl_Osc_Counter* harmonicshiftcounter
  977. { Fl_Osc_Check* o = harmonicshiftpre = new Fl_Osc_Check(695, 390, 34, 15, "preH");
  978. harmonicshiftpre->tooltip("Apply the harmonic shift before the waveshaping and filtering");
  979. harmonicshiftpre->box(FL_NO_BOX);
  980. harmonicshiftpre->down_box(FL_DOWN_BOX);
  981. harmonicshiftpre->color(FL_BACKGROUND_COLOR);
  982. harmonicshiftpre->selection_color(FL_FOREGROUND_COLOR);
  983. harmonicshiftpre->labeltype(FL_NORMAL_LABEL);
  984. harmonicshiftpre->labelfont(0);
  985. harmonicshiftpre->labelsize(10);
  986. harmonicshiftpre->labelcolor(FL_FOREGROUND_COLOR);
  987. harmonicshiftpre->callback((Fl_Callback*)cb_harmonicshiftpre);
  988. harmonicshiftpre->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
  989. harmonicshiftpre->when(FL_WHEN_RELEASE);
  990. o->init("Pharmonicshiftfirst");
  991. } // Fl_Osc_Check* harmonicshiftpre
  992. { Fl_Button* o = new Fl_Button(675, 390, 20, 15, "R");
  993. o->box(FL_THIN_UP_BOX);
  994. o->labelfont(1);
  995. o->labelsize(10);
  996. o->callback((Fl_Callback*)cb_R);
  997. } // Fl_Button* o
  998. o->end();
  999. } // Fl_Group* o
  1000. { Fl_Group* o = new Fl_Group(670, 415, 65, 90);
  1001. o->box(FL_UP_FRAME);
  1002. { Fl_Osc_Choice* o = adhrtype = new Fl_Osc_Choice(675, 430, 55, 15, "Adpt.Harm.");
  1003. adhrtype->tooltip("The type of the addaptive harmonics");
  1004. adhrtype->box(FL_UP_BOX);
  1005. adhrtype->down_box(FL_BORDER_BOX);
  1006. adhrtype->color(FL_BACKGROUND_COLOR);
  1007. adhrtype->selection_color(FL_SELECTION_COLOR);
  1008. adhrtype->labeltype(FL_NORMAL_LABEL);
  1009. adhrtype->labelfont(0);
  1010. adhrtype->labelsize(10);
  1011. adhrtype->labelcolor(FL_FOREGROUND_COLOR);
  1012. adhrtype->textsize(10);
  1013. adhrtype->callback((Fl_Callback*)cb_adhrtype);
  1014. adhrtype->align(Fl_Align(129));
  1015. adhrtype->when(3);
  1016. adhrtype->menu(menu_adhrtype);
  1017. o->init("Padaptiveharmonics");
  1018. } // Fl_Osc_Choice* adhrtype
  1019. { Fl_Osc_Dial* o = adhrpow = new Fl_Osc_Dial(705, 465, 25, 25, "pow");
  1020. adhrpow->tooltip("Adaptive harmonics power");
  1021. adhrpow->box(FL_NO_BOX);
  1022. adhrpow->color(FL_BACKGROUND_COLOR);
  1023. adhrpow->selection_color(FL_INACTIVE_COLOR);
  1024. adhrpow->labeltype(FL_NORMAL_LABEL);
  1025. adhrpow->labelfont(0);
  1026. adhrpow->labelsize(10);
  1027. adhrpow->labelcolor(FL_FOREGROUND_COLOR);
  1028. adhrpow->maximum(200);
  1029. adhrpow->step(1);
  1030. adhrpow->callback((Fl_Callback*)cb_adhrpow);
  1031. adhrpow->align(Fl_Align(FL_ALIGN_BOTTOM));
  1032. adhrpow->when(FL_WHEN_CHANGED);
  1033. o->init("Padaptiveharmonicspower");o->reset_value=100;
  1034. } // Fl_Osc_Dial* adhrpow
  1035. { Fl_Osc_Dial* o = adhrbf = new Fl_Osc_Dial(675, 465, 25, 25, "baseF");
  1036. adhrbf->tooltip("Adaptive harmonics base frequency");
  1037. adhrbf->box(FL_NO_BOX);
  1038. adhrbf->color(FL_BACKGROUND_COLOR);
  1039. adhrbf->selection_color(FL_INACTIVE_COLOR);
  1040. adhrbf->labeltype(FL_NORMAL_LABEL);
  1041. adhrbf->labelfont(0);
  1042. adhrbf->labelsize(10);
  1043. adhrbf->labelcolor(FL_FOREGROUND_COLOR);
  1044. adhrbf->maximum(255);
  1045. adhrbf->step(1);
  1046. adhrbf->callback((Fl_Callback*)cb_adhrbf);
  1047. adhrbf->align(Fl_Align(FL_ALIGN_BOTTOM));
  1048. adhrbf->when(FL_WHEN_CHANGED);
  1049. o->init("Padaptiveharmonicsbasefreq");o->reset_value=128;
  1050. } // Fl_Osc_Dial* adhrbf
  1051. { Fl_Osc_TSlider* o = adhrpar = new Fl_Osc_TSlider(675, 450, 55, 10);
  1052. adhrpar->type(5);
  1053. adhrpar->box(FL_NO_BOX);
  1054. adhrpar->color(FL_BACKGROUND_COLOR);
  1055. adhrpar->selection_color(FL_BACKGROUND_COLOR);
  1056. adhrpar->labeltype(FL_NORMAL_LABEL);
  1057. adhrpar->labelfont(0);
  1058. adhrpar->labelsize(14);
  1059. adhrpar->labelcolor(FL_FOREGROUND_COLOR);
  1060. adhrpar->maximum(100);
  1061. adhrpar->step(1);
  1062. adhrpar->value(50);
  1063. adhrpar->callback((Fl_Callback*)cb_adhrpar);
  1064. adhrpar->align(Fl_Align(FL_ALIGN_BOTTOM));
  1065. adhrpar->when(FL_WHEN_CHANGED);
  1066. o->init("Padaptiveharmonicspar", 'i');o->reset_value=50;
  1067. } // Fl_Osc_TSlider* adhrpar
  1068. o->end();
  1069. } // Fl_Group* o
  1070. { Fl_Group* o = new Fl_Group(445, 313, 150, 30);
  1071. o->box(FL_UP_FRAME);
  1072. { Fl_Osc_Choice* o = modtype = new Fl_Osc_Choice(475, 320, 50, 15, "Mod.");
  1073. modtype->tooltip("modulation");
  1074. modtype->box(FL_UP_BOX);
  1075. modtype->down_box(FL_BORDER_BOX);
  1076. modtype->color(FL_BACKGROUND_COLOR);
  1077. modtype->selection_color(FL_SELECTION_COLOR);
  1078. modtype->labeltype(FL_NORMAL_LABEL);
  1079. modtype->labelfont(0);
  1080. modtype->labelsize(10);
  1081. modtype->labelcolor(FL_FOREGROUND_COLOR);
  1082. modtype->textsize(10);
  1083. modtype->callback((Fl_Callback*)cb_modtype);
  1084. modtype->align(Fl_Align(FL_ALIGN_LEFT));
  1085. modtype->when(FL_WHEN_CHANGED);
  1086. modtype->menu(menu_modtype);
  1087. o->init("Pmodulation");
  1088. } // Fl_Osc_Choice* modtype
  1089. { Fl_Osc_Dial* o = modpar1 = new Fl_Osc_Dial(535, 320, 15, 15);
  1090. modpar1->tooltip("Oscillator\'s modulation parameter 1");
  1091. modpar1->box(FL_NO_BOX);
  1092. modpar1->color(FL_BACKGROUND_COLOR);
  1093. modpar1->selection_color(FL_INACTIVE_COLOR);
  1094. modpar1->labeltype(FL_NORMAL_LABEL);
  1095. modpar1->labelfont(0);
  1096. modpar1->labelsize(14);
  1097. modpar1->labelcolor(FL_FOREGROUND_COLOR);
  1098. modpar1->maximum(127);
  1099. modpar1->step(1);
  1100. modpar1->callback((Fl_Callback*)cb_modpar1);
  1101. modpar1->align(Fl_Align(FL_ALIGN_BOTTOM));
  1102. modpar1->when(FL_WHEN_CHANGED);
  1103. o->init("Pmodulationpar1");o->reset_value=64;
  1104. } // Fl_Osc_Dial* modpar1
  1105. { Fl_Osc_Dial* o = modpar2 = new Fl_Osc_Dial(555, 320, 15, 15);
  1106. modpar2->tooltip("Oscillator\'s modulation parameter 2");
  1107. modpar2->box(FL_NO_BOX);
  1108. modpar2->color(FL_BACKGROUND_COLOR);
  1109. modpar2->selection_color(FL_INACTIVE_COLOR);
  1110. modpar2->labeltype(FL_NORMAL_LABEL);
  1111. modpar2->labelfont(0);
  1112. modpar2->labelsize(14);
  1113. modpar2->labelcolor(FL_FOREGROUND_COLOR);
  1114. modpar2->maximum(127);
  1115. modpar2->step(1);
  1116. modpar2->callback((Fl_Callback*)cb_modpar2);
  1117. modpar2->align(Fl_Align(FL_ALIGN_BOTTOM));
  1118. modpar2->when(FL_WHEN_CHANGED);
  1119. o->init("Pmodulationpar2");o->reset_value=64;
  1120. } // Fl_Osc_Dial* modpar2
  1121. { Fl_Osc_Dial* o = modpar3 = new Fl_Osc_Dial(575, 320, 15, 15);
  1122. modpar3->tooltip("Oscillator\'s modulation parameter 3");
  1123. modpar3->box(FL_NO_BOX);
  1124. modpar3->color(FL_BACKGROUND_COLOR);
  1125. modpar3->selection_color(FL_INACTIVE_COLOR);
  1126. modpar3->labeltype(FL_NORMAL_LABEL);
  1127. modpar3->labelfont(0);
  1128. modpar3->labelsize(14);
  1129. modpar3->labelcolor(FL_FOREGROUND_COLOR);
  1130. modpar3->maximum(127);
  1131. modpar3->step(1);
  1132. modpar3->callback((Fl_Callback*)cb_modpar3);
  1133. modpar3->align(Fl_Align(FL_ALIGN_BOTTOM));
  1134. modpar3->when(FL_WHEN_CHANGED);
  1135. o->init("Pmodulationpar3");o->reset_value=32;
  1136. } // Fl_Osc_Dial* modpar3
  1137. o->end();
  1138. } // Fl_Group* o
  1139. { Fl_Button* o = new Fl_Button(675, 530, 55, 15, "Sine");
  1140. o->box(FL_THIN_UP_BOX);
  1141. o->labelfont(1);
  1142. o->labelsize(11);
  1143. o->callback((Fl_Callback*)cb_Sine);
  1144. } // Fl_Button* o
  1145. { Fl_Button* o = new Fl_Button(675, 550, 25, 15, "C");
  1146. o->box(FL_THIN_UP_BOX);
  1147. o->color((Fl_Color)179);
  1148. o->labelfont(1);
  1149. o->labelsize(11);
  1150. o->labelcolor((Fl_Color)55);
  1151. o->callback((Fl_Callback*)cb_C);
  1152. } // Fl_Button* o
  1153. { Fl_Button* o = new Fl_Button(705, 550, 25, 15, "P");
  1154. o->box(FL_THIN_UP_BOX);
  1155. o->color((Fl_Color)179);
  1156. o->labelfont(1);
  1157. o->labelsize(11);
  1158. o->labelcolor((Fl_Color)55);
  1159. o->callback((Fl_Callback*)cb_P);
  1160. } // Fl_Button* o
  1161. { _this_has_to_be_the_last = new Fl_Scroll(10, 345, 660, 250);
  1162. _this_has_to_be_the_last->type(1);
  1163. _this_has_to_be_the_last->box(FL_FLAT_BOX);
  1164. { Fl_Pack* o = harmonics = new Fl_Pack(15, 350, 650, 225);
  1165. harmonics->type(1);
  1166. for (int i=0;i<(MAX_AD_HARMONICS - 1);i++){h[i]=new Oscilharmonic(0,0,20,o->h(),"");h[i]->init(i,oscildisplaygroup,loc,osc);}
  1167. harmonics->end();
  1168. } // Fl_Pack* harmonics
  1169. _this_has_to_be_the_last->end();
  1170. } // Fl_Scroll* _this_has_to_be_the_last
  1171. dummy->end();
  1172. } // Fl_Osc_Group* dummy
  1173. (void)o;//if (oscil->ADvsPAD) o->label("PADsynth Harmonic Content Editor");
  1174. osceditUI->end();
  1175. } // Fl_Double_Window* osceditUI
  1176. return osceditUI;
  1177. }
  1178. OscilEditor::OscilEditor(bool adnotep_, std::string loc_, Fl_Osc_Interface *osc_) {
  1179. assert(osc_);
  1180. assert(!loc_.empty());
  1181. initialized = false;
  1182. adnotep = adnotep_;
  1183. osc = osc_;
  1184. loc = loc_;
  1185. oscilo = NULL;
  1186. oscilo_base = NULL;
  1187. oscils = NULL;
  1188. oscils_base = NULL;
  1189. osceditUI = NULL;
  1190. dummy = NULL;
  1191. applybutton = NULL;
  1192. oscildisplaygroup = NULL;
  1193. rndslider = NULL;
  1194. hrndtype = NULL;
  1195. magtype = NULL;
  1196. basefuncdisplaygroup = NULL;
  1197. bfpar = NULL;
  1198. bftype = NULL;
  1199. make_window();
  1200. bftype->init("Pcurrentbasefunc");
  1201. initialized = true;
  1202. refresh();
  1203. osceditUI->show();
  1204. }
  1205. OscilEditor::~OscilEditor() {
  1206. osceditUI->hide();
  1207. for (int i=0; i<(MAX_AD_HARMONICS - 1); ++i)
  1208. delete h[i];
  1209. delete oscilo;
  1210. delete oscilo_base;
  1211. delete oscils;
  1212. delete oscils_base;
  1213. delete osceditUI;
  1214. }
  1215. void OscilEditor::refresh() {
  1216. magtype->update();
  1217. for (int i=0;i<(MAX_AD_HARMONICS - 1);i++) h[i]->refresh();
  1218. osc->requestValue(loc+"prepare");
  1219. basefuncdisplaygroup->redraw();
  1220. redrawoscil();
  1221. }
  1222. void OscilEditor::redrawoscil() {
  1223. if(!initialized) //Must have been called during initialization
  1224. return;
  1225. //get data from backend
  1226. osc->requestValue(loc+"prepare");
  1227. oscilo->update();
  1228. oscils->update();
  1229. oscilo_base->update();
  1230. oscils_base->update();
  1231. }
  1232. void OscilEditor::setbfmodstatus(int menuentry) {
  1233. switch (menuentry){
  1234. case 0:
  1235. bfpar->deactivate();
  1236. bfparval->deactivate();
  1237. basefuncmodulation->deactivate();
  1238. break;
  1239. case 127:
  1240. bfpar->deactivate();
  1241. bfparval->deactivate();
  1242. basefuncmodulation->activate();
  1243. break;
  1244. default:
  1245. bfpar->activate();
  1246. bfparval->activate();
  1247. basefuncmodulation->activate();
  1248. }
  1249. }