Collection of tools useful for audio production
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.

877 lines
25KB

  1. # data file for the Fltk User Interface Designer (fluid)
  2. version 1.0300
  3. header_name {.h}
  4. code_name {.cc}
  5. decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {private local
  6. }
  7. decl {//License: GNU GPL version 2 or later} {private local
  8. }
  9. decl {\#include "WidgetPDial.h"} {public local
  10. }
  11. decl {\#include <stdio.h>} {public local
  12. }
  13. decl {\#include <stdlib.h>} {public local
  14. }
  15. decl {\#include "../globals.h"} {public local
  16. }
  17. decl {\#include <FL/Fl_Group.H>} {public local
  18. }
  19. decl {\#include "../Params/EnvelopeParams.h"} {public local
  20. }
  21. decl {\#include <FL/Fl_Box.H>} {public local
  22. }
  23. decl {\#include <FL/fl_draw.H>} {public local
  24. }
  25. decl {\#include <FL/fl_ask.H>} {public local
  26. }
  27. decl {\#include "PresetsUI.h"} {public local
  28. }
  29. decl {\#include "common.H"} {public local
  30. }
  31. class EnvelopeFreeEdit {: {public Fl_Box}
  32. } {
  33. Function {EnvelopeFreeEdit(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
  34. code {env=NULL;
  35. pair=NULL;} {}
  36. }
  37. Function {init(EnvelopeParams *env_)} {} {
  38. code {env=env_;
  39. oldx=-1;
  40. currentpoint=-1;
  41. cpx=0;
  42. lastpoint=-1;} {}
  43. }
  44. Function {setpair(Fl_Box *pair_)} {} {
  45. code {pair=pair_;} {}
  46. }
  47. Function {getpointx(int n)} {return_type int
  48. } {
  49. code {int lx=w()-10;
  50. int npoints=env->Penvpoints;
  51. float sum=0;
  52. for (int i=1;i<npoints;i++) sum+=env->getdt(i)+1;
  53. float sumbefore=0;//the sum of all points before the computed point
  54. for (int i=1;i<=n;i++) sumbefore+=env->getdt(i)+1;
  55. return((int) (sumbefore/(float) sum*lx));} {}
  56. }
  57. Function {getpointy(int n)} {return_type int
  58. } {
  59. code {int ly=h()-10;
  60. return((int) ((1.0-env->Penvval[n]/127.0)*ly));} {}
  61. }
  62. Function {getnearest(int x,int y)} {return_type int
  63. } {
  64. code {x-=5;y-=5;
  65. int nearestpoint=0;
  66. int nearestval=1000000;//a big value
  67. for (int i=0;i<env->Penvpoints;i++){
  68. int distance=abs(x-getpointx(i))+abs(y-getpointy(i));
  69. if (distance<nearestval) {
  70. nearestpoint=i;
  71. nearestval=distance;
  72. };
  73. };
  74. return(nearestpoint);} {}
  75. }
  76. Function {draw()} {private
  77. } {
  78. code {int ox=x(),oy=y(),lx=w(),ly=h();
  79. if (env->Pfreemode==0) env->converttofree();
  80. int npoints=env->Penvpoints;
  81. if (active_r()) fl_color(FL_BLACK);
  82. else fl_color(90,90,90);
  83. if (!active_r()) currentpoint=-1;
  84. fl_rectf(ox,oy,lx,ly);
  85. ox+=5;oy+=5;lx-=10;ly-=10;
  86. //draw the lines
  87. fl_color(FL_GRAY);
  88. fl_line_style(FL_SOLID);
  89. fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
  90. //draws the evelope points and lines
  91. Fl_Color alb=FL_WHITE;
  92. if (!active_r()) alb=fl_rgb_color(180,180,180);
  93. fl_color(alb);
  94. int oldxx=0,xx=0,oldyy=0,yy=getpointy(0);
  95. fl_rectf(ox-3,oy+yy-3,6,6);
  96. for (int i=1;i<npoints;i++){
  97. oldxx=xx;oldyy=yy;
  98. xx=getpointx(i);yy=getpointy(i);
  99. if (i==currentpoint) fl_color(FL_RED);
  100. else fl_color(alb);
  101. fl_line(ox+oldxx,oy+oldyy,ox+xx,oy+yy);
  102. fl_rectf(ox+xx-3,oy+yy-3,6,6);
  103. };
  104. //draw the last moved point point (if exists)
  105. if (lastpoint>=0){
  106. fl_color(FL_CYAN);
  107. fl_rectf(ox+getpointx(lastpoint)-5,oy+getpointy(lastpoint)-5,10,10);
  108. };
  109. //draw the sustain position
  110. if (env->Penvsustain>0){
  111. fl_color(FL_YELLOW);
  112. xx=getpointx(env->Penvsustain);
  113. fl_line(ox+xx,oy+0,ox+xx,oy+ly);
  114. };
  115. //Show the envelope duration and the current line duration
  116. fl_font(FL_HELVETICA|FL_BOLD,10);
  117. float time=0.0;
  118. if (currentpoint<=0){
  119. fl_color(alb);
  120. for (int i=1;i<npoints;i++) time+=env->getdt(i);
  121. } else {
  122. fl_color(255,0,0);
  123. time=env->getdt(currentpoint);
  124. };
  125. char tmpstr[20];
  126. if (time<1000.0) snprintf((char *)&tmpstr,20,"%.1fms",time);
  127. else snprintf((char *)&tmpstr,20,"%.2fs",time/1000.0);
  128. fl_draw(tmpstr,ox+lx-20,oy+ly-10,20,10,FL_ALIGN_RIGHT,NULL,0);} {}
  129. }
  130. Function {handle(int event)} {return_type int
  131. } {
  132. code {int x_=Fl::event_x()-x();
  133. int y_=Fl::event_y()-y();
  134. if (event==FL_PUSH) {
  135. currentpoint=getnearest(x_,y_);
  136. cpx=x_;
  137. cpdt=env->Penvdt[currentpoint];
  138. lastpoint=currentpoint;
  139. redraw();
  140. if (pair!=NULL) pair->redraw();
  141. };
  142. if (event==FL_RELEASE){
  143. currentpoint=-1;
  144. redraw();
  145. if (pair!=NULL) pair->redraw();
  146. };
  147. if ((event==FL_DRAG)&&(currentpoint>=0)){
  148. int ny=127-(int) (y_*127.0/h());
  149. if (ny<0) ny=0;if (ny>127) ny=127;
  150. env->Penvval[currentpoint]=ny;
  151. int dx=(int)((x_-cpx)*0.1);
  152. int newdt=cpdt+dx;
  153. if (newdt<0) newdt=0;if (newdt>127) newdt=127;
  154. if (currentpoint!=0) env->Penvdt[currentpoint]=newdt;
  155. else env->Penvdt[currentpoint]=0;
  156. redraw();
  157. if (pair!=NULL) pair->redraw();
  158. };
  159. return(1);} {}
  160. }
  161. decl {Fl_Box *pair;} {private local
  162. }
  163. decl {EnvelopeParams *env;} {private local
  164. }
  165. decl {int oldx,oldy;} {private local
  166. }
  167. decl {int currentpoint,cpx,cpdt;} {private local
  168. }
  169. decl {int lastpoint;} {public local
  170. }
  171. }
  172. class EnvelopeUI {open : {public Fl_Group,PresetsUI_}
  173. } {
  174. Function {EnvelopeUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
  175. code {env=NULL;
  176. freemodeeditwindow=NULL;
  177. envADSR=NULL;
  178. envASR=NULL;
  179. envADSRfilter=NULL;
  180. envASRbw=NULL;
  181. envfree=NULL;} {}
  182. }
  183. Function {~EnvelopeUI()} {} {
  184. code {envwindow->hide();
  185. hide();
  186. freemodeeditwindow->hide();
  187. delete (freemodeeditwindow);} {}
  188. }
  189. Function {make_freemode_edit_window()} {open
  190. } {
  191. Fl_Window freemodeeditwindow {
  192. label Envelope
  193. xywh {948 246 575 180} type Double visible
  194. } {
  195. Fl_Box freeedit {
  196. label Envelope
  197. xywh {5 5 565 145} box FLAT_BOX color 0
  198. code0 {o->init(env);}
  199. class EnvelopeFreeEdit
  200. }
  201. Fl_Button addpoint {
  202. label {Add point}
  203. callback {int curpoint=freeedit->lastpoint;
  204. if (curpoint<0) return;
  205. //if (curpoint>=env->Penvpoints-1) return;
  206. if (env->Penvpoints>=MAX_ENVELOPE_POINTS) return;
  207. for (int i=env->Penvpoints;i>=curpoint+1;i--){
  208. env->Penvdt[i]=env->Penvdt[i-1];
  209. env->Penvval[i]=env->Penvval[i-1];
  210. };
  211. if (curpoint==0) {
  212. env->Penvdt[1]=64;
  213. };
  214. env->Penvpoints++;
  215. if (curpoint<=env->Penvsustain) env->Penvsustain++;
  216. freeedit->lastpoint+=1;
  217. freeedit->redraw();
  218. envfree->redraw();
  219. sustaincounter->value(env->Penvsustain);
  220. sustaincounter->maximum(env->Penvpoints-2);}
  221. xywh {115 155 80 20} box THIN_UP_BOX labelsize 11
  222. code0 {if (env->Pfreemode==0) o->hide();}
  223. }
  224. Fl_Button deletepoint {
  225. label {Delete point}
  226. callback {int curpoint=freeedit->lastpoint;
  227. if (curpoint<1) return;
  228. if (curpoint>=env->Penvpoints-1) return;
  229. if (env->Penvpoints<=3) return;
  230. for (int i=curpoint+1;i<env->Penvpoints;i++){
  231. env->Penvdt[i-1]=env->Penvdt[i];
  232. env->Penvval[i-1]=env->Penvval[i];
  233. };
  234. env->Penvpoints--;
  235. if (curpoint<=env->Penvsustain) env->Penvsustain--;
  236. freeedit->lastpoint-=1;
  237. freeedit->redraw();
  238. envfree->redraw();
  239. sustaincounter->value(env->Penvsustain);
  240. sustaincounter->maximum(env->Penvpoints-2);}
  241. xywh {200 155 80 20} box THIN_UP_BOX labelsize 11
  242. code0 {if (env->Pfreemode==0) o->hide();}
  243. }
  244. Fl_Light_Button freemodebutton {
  245. label FreeMode
  246. callback {reinit();
  247. freeedit->lastpoint=-1;
  248. freeedit->redraw();}
  249. tooltip {Enable or disable the freemode} xywh {10 155 95 20} labelsize 11
  250. }
  251. Fl_Check_Button forcedreleasecheck {
  252. label frcR
  253. callback {env->Pforcedrelease=(int)o->value();}
  254. tooltip {Forced Relase} xywh {410 165 40 15} down_box DOWN_BOX labelsize 10
  255. code0 {o->value(env->Pforcedrelease);}
  256. code1 {if (env->Pfreemode==0) o->hide();}
  257. }
  258. Fl_Dial envstretchdial {
  259. label {Str.}
  260. callback {env->Penvstretch=(int)o->value();}
  261. tooltip {Envelope stretch (on lower notes make the envelope longer)} xywh {380 155 25 25} box ROUND_UP_BOX labelsize 10 align 4 maximum 127 step 1
  262. code0 {o->value(env->Penvstretch);}
  263. code1 {if (env->Pfreemode==0) o->hide();}
  264. class WidgetPDial
  265. }
  266. Fl_Button {} {
  267. label Close
  268. callback {freemodeeditwindow->hide();}
  269. xywh {510 155 60 20} box THIN_UP_BOX
  270. }
  271. Fl_Check_Button linearenvelopecheck {
  272. label L
  273. callback {env->Plinearenvelope=(int)o->value();}
  274. tooltip {Linear Envelope} xywh {410 151 30 15} down_box DOWN_BOX labelsize 10
  275. code0 {o->value(env->Plinearenvelope);}
  276. code1 {if ((env->Pfreemode==0)||(env->Envmode>2)) o->hide();}
  277. }
  278. Fl_Counter sustaincounter {
  279. label Sust
  280. callback {env->Penvsustain=(int) o->value();
  281. freeedit->redraw();
  282. envfree->redraw();}
  283. tooltip {Sustain (0 is disabled)} xywh {315 155 40 15} type Simple labelsize 11 align 4 minimum 0 maximum 127 step 1
  284. code0 {o->value(env->Penvsustain);}
  285. code1 {if (env->Pfreemode==0) o->hide();}
  286. code2 {o->maximum(env->Penvpoints-2);}
  287. }
  288. Fl_Button {} {
  289. label C
  290. callback {presetsui->copy(env);}
  291. xywh {465 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  292. }
  293. Fl_Button {} {
  294. label P
  295. callback {presetsui->paste(env,this);}
  296. xywh {482 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  297. }
  298. }
  299. }
  300. Function {make_ADSR_window()} {open
  301. } {
  302. Fl_Window envADSR {open
  303. xywh {341 765 205 70} type Double color 50 labelfont 1
  304. class Fl_Group visible
  305. } {
  306. Fl_Group {} {
  307. label {Amplitude Envelope}
  308. xywh {0 0 205 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
  309. code0 {set_module_parameters(o);}
  310. } {
  311. Fl_Dial e1adt {
  312. label {A.dt}
  313. callback {env->PA_dt=(int)o->value();
  314. freeedit->redraw();}
  315. tooltip {Attack time} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  316. code0 {o->value(env->PA_dt);}
  317. class WidgetPDial
  318. }
  319. Fl_Dial e1ddt {
  320. label {D.dt}
  321. callback {env->PD_dt=(int)o->value();
  322. freeedit->redraw();}
  323. tooltip {Decay time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  324. code0 {o->value(env->PD_dt);}
  325. class WidgetPDial
  326. }
  327. Fl_Dial e1rdt {
  328. label {R.dt}
  329. callback {env->PR_dt=(int)o->value();
  330. freeedit->redraw();}
  331. tooltip {Release time} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  332. code0 {o->value(env->PR_dt);}
  333. class WidgetPDial
  334. }
  335. Fl_Dial e1sval {
  336. label {S.val}
  337. callback {env->PS_val=(int)o->value();
  338. freeedit->redraw();}
  339. tooltip {Sustain value} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  340. code0 {o->value(env->PS_val);}
  341. class WidgetPDial
  342. }
  343. Fl_Check_Button e1forcedrelease {
  344. label frcR
  345. callback {env->Pforcedrelease=(int)o->value();}
  346. tooltip {Forced Relase} xywh {180 35 20 15} down_box DOWN_BOX labelsize 10 align 6
  347. code0 {o->value(env->Pforcedrelease);}
  348. }
  349. Fl_Dial e1envstretch {
  350. label Stretch
  351. callback {env->Penvstretch=(int)o->value();}
  352. tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  353. code0 {o->value(env->Penvstretch);}
  354. class WidgetPDial
  355. }
  356. Fl_Button {} {
  357. label E
  358. callback {freemodeeditwindow->show();}
  359. tooltip {Envelope window} xywh {185 5 15 15} labelfont 1 labelsize 10
  360. }
  361. Fl_Check_Button e1linearenvelope {
  362. label L
  363. callback {env->Plinearenvelope=(int)o->value();}
  364. tooltip {The evelope is linear} xywh {180 20 15 15} down_box DOWN_BOX labelsize 10 align 4
  365. code0 {o->value(env->Plinearenvelope);}
  366. }
  367. Fl_Button {} {
  368. label C
  369. callback {presetsui->copy(env);}
  370. xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  371. }
  372. Fl_Button {} {
  373. label P
  374. callback {presetsui->paste(env,this);}
  375. xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  376. }
  377. }
  378. }
  379. }
  380. Function {make_ASR_window()} {open
  381. } {
  382. Fl_Window envASR {open
  383. xywh {645 644 210 70} type Double
  384. class Fl_Group visible
  385. } {
  386. Fl_Group {} {
  387. label {Frequency Envelope}
  388. xywh {0 0 210 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
  389. code0 {set_module_parameters(o);}
  390. } {
  391. Fl_Dial e2aval {
  392. label {A.val}
  393. callback {env->PA_val=(int)o->value();
  394. freeedit->redraw();}
  395. tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  396. code0 {o->value(env->PA_val);}
  397. class WidgetPDial
  398. }
  399. Fl_Dial e2adt {
  400. label {A.dt}
  401. callback {env->PA_dt=(int)o->value();
  402. freeedit->redraw();}
  403. tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  404. code0 {o->value(env->PA_dt);}
  405. class WidgetPDial
  406. }
  407. Fl_Dial e2rval {
  408. label {R.val}
  409. callback {env->PR_val=(int)o->value();
  410. freeedit->redraw();}
  411. tooltip {Release value} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  412. code0 {o->value(env->PR_val);}
  413. class WidgetPDial
  414. }
  415. Fl_Dial e2rdt {
  416. label {R.dt}
  417. callback {env->PR_dt=(int)o->value();
  418. freeedit->redraw();}
  419. tooltip {Release time} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  420. code0 {o->value(env->PR_dt);}
  421. class WidgetPDial
  422. }
  423. Fl_Dial e2envstretch {
  424. label Stretch
  425. callback {env->Penvstretch=(int)o->value();}
  426. tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  427. code0 {o->value(env->Penvstretch);}
  428. class WidgetPDial
  429. }
  430. Fl_Check_Button e2forcedrelease {
  431. label frcR
  432. callback {env->Pforcedrelease=(int)o->value();}
  433. tooltip {Forced release} xywh {180 25 15 25} down_box DOWN_BOX labelsize 10 align 6
  434. code0 {o->value(env->Pforcedrelease);}
  435. }
  436. Fl_Button {} {
  437. label C
  438. callback {presetsui->copy(env);}
  439. xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  440. }
  441. Fl_Button {} {
  442. label P
  443. callback {presetsui->paste(env,this);}
  444. xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  445. }
  446. }
  447. Fl_Button {} {
  448. label E
  449. callback {freemodeeditwindow->show();}
  450. tooltip {Envelope window} xywh {190 5 15 15} labelfont 1 labelsize 10
  451. }
  452. }
  453. }
  454. Function {make_ADSRfilter_window()} {open
  455. } {
  456. Fl_Window envADSRfilter {open selected
  457. xywh {624 546 275 70} type Double color 50 labelfont 1
  458. class Fl_Group visible
  459. } {
  460. Fl_Group {} {
  461. label {Filter Envelope}
  462. xywh {0 0 275 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
  463. code0 {set_module_parameters(o);}
  464. } {
  465. Fl_Dial e3aval {
  466. label {A.val}
  467. callback {env->PA_val=(int)o->value();
  468. freeedit->redraw();}
  469. tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  470. code0 {o->value(env->PA_val);}
  471. class WidgetPDial
  472. }
  473. Fl_Dial e3adt {
  474. label {A.dt}
  475. callback {env->PA_dt=(int)o->value();
  476. freeedit->redraw();}
  477. tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  478. code0 {o->value(env->PA_dt);}
  479. class WidgetPDial
  480. }
  481. Fl_Dial e3dval {
  482. label {D.val}
  483. callback {env->PD_val=(int)o->value();
  484. freeedit->redraw();}
  485. tooltip {decay value} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  486. code0 {o->value(env->PD_val);}
  487. class WidgetPDial
  488. }
  489. Fl_Dial e3ddt {
  490. label {D.dt}
  491. callback {env->PD_dt=(int)o->value();
  492. freeedit->redraw();}
  493. tooltip {decay time} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  494. code0 {o->value(env->PD_dt);}
  495. class WidgetPDial
  496. }
  497. Fl_Dial e3rdt {
  498. label {R.dt}
  499. callback {env->PR_dt=(int)o->value();
  500. freeedit->redraw();}
  501. tooltip {Release time} xywh {145 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  502. code0 {o->value(env->PR_dt);}
  503. class WidgetPDial
  504. }
  505. Fl_Dial e3rval {
  506. label {R.val}
  507. callback {env->PR_val=(int)o->value();
  508. freeedit->redraw();}
  509. tooltip {Release value} xywh {180 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  510. code0 {o->value(env->PR_val);}
  511. class WidgetPDial
  512. }
  513. Fl_Dial e3envstretch {
  514. label Stretch
  515. callback {env->Penvstretch=(int)o->value();}
  516. tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {215 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  517. code0 {o->value(env->Penvstretch);}
  518. class WidgetPDial
  519. }
  520. Fl_Check_Button e3forcedrelease {
  521. label frcR
  522. callback {env->Pforcedrelease=(int)o->value();}
  523. tooltip {Forced Relase} xywh {250 30 15 20} down_box DOWN_BOX labelsize 10 align 6
  524. code0 {o->value(env->Pforcedrelease);}
  525. }
  526. Fl_Button {} {
  527. label E
  528. callback {freemodeeditwindow->show();}
  529. xywh {255 5 15 15} labelfont 1 labelsize 10
  530. }
  531. Fl_Button {} {
  532. label C
  533. callback {presetsui->copy(env);}
  534. xywh {220 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  535. }
  536. Fl_Button {} {
  537. label P
  538. callback {presetsui->paste(env,this);}
  539. xywh {237 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  540. }
  541. }
  542. }
  543. }
  544. Function {make_ASRbw_window()} {open
  545. } {
  546. Fl_Window envASRbw {open
  547. xywh {359 619 210 71} type Double
  548. code0 {set_module_parameters(o);}
  549. class Fl_Group visible
  550. } {
  551. Fl_Group {} {
  552. label {BandWidth Envelope}
  553. xywh {0 0 210 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
  554. code0 {set_module_parameters(o);}
  555. } {
  556. Fl_Dial e4aval {
  557. label {A.val}
  558. callback {env->PA_val=(int)o->value();
  559. freeedit->redraw();}
  560. tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  561. code0 {o->value(env->PA_val);}
  562. class WidgetPDial
  563. }
  564. Fl_Dial e4adt {
  565. label {A.dt}
  566. callback {env->PA_dt=(int)o->value();
  567. freeedit->redraw();}
  568. tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  569. code0 {o->value(env->PA_dt);}
  570. class WidgetPDial
  571. }
  572. Fl_Dial e4rval {
  573. label {R.val}
  574. callback {env->PR_val=(int)o->value();
  575. freeedit->redraw();}
  576. tooltip {Release value} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  577. code0 {o->value(env->PR_val);}
  578. class WidgetPDial
  579. }
  580. Fl_Dial e4rdt {
  581. label {R.dt}
  582. callback {env->PR_dt=(int)o->value();
  583. freeedit->redraw();}
  584. tooltip {Release time} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  585. code0 {o->value(env->PR_dt);}
  586. class WidgetPDial
  587. }
  588. Fl_Dial e4envstretch {
  589. label Stretch
  590. callback {env->Penvstretch=(int)o->value();}
  591. tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
  592. code0 {o->value(env->Penvstretch);}
  593. class WidgetPDial
  594. }
  595. Fl_Check_Button e4forcedrelease {
  596. label frcR
  597. callback {env->Pforcedrelease=(int)o->value();}
  598. tooltip {Forced release} xywh {180 25 15 25} down_box DOWN_BOX labelsize 10 align 6
  599. code0 {o->value(env->Pforcedrelease);}
  600. }
  601. Fl_Button {} {
  602. label C
  603. callback {presetsui->copy(env);}
  604. xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  605. }
  606. Fl_Button {} {
  607. label P
  608. callback {presetsui->paste(env,this);}
  609. xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  610. }
  611. }
  612. Fl_Button {} {
  613. label E
  614. callback {freemodeeditwindow->show();}
  615. xywh {190 5 15 15} labelfont 1 labelsize 10
  616. }
  617. }
  618. }
  619. Function {make_free_window()} {open
  620. } {
  621. Fl_Window envfree {open
  622. xywh {373 413 205 70} type Double color 50 labelfont 1 resizable
  623. code0 {set_module_parameters(o);}
  624. class Fl_Group visible
  625. } {
  626. Fl_Group envfreegroup {
  627. label {Amplitude Envelope}
  628. xywh {0 0 205 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17 resizable
  629. code0 {set_module_parameters(o);}
  630. } {
  631. Fl_Box freeeditsmall {
  632. label Envelope
  633. callback {envfree->redraw();}
  634. xywh {5 20 195 45} box FLAT_BOX color 0 resizable
  635. code0 {o->init(env);}
  636. class EnvelopeFreeEdit
  637. }
  638. Fl_Button {} {
  639. label E
  640. callback {freemodeeditwindow->show();}
  641. xywh {185 5 15 15} labelfont 1 labelsize 10
  642. }
  643. Fl_Button {} {
  644. label C
  645. callback {presetsui->copy(env);}
  646. xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  647. }
  648. Fl_Button {} {
  649. label P
  650. callback {presetsui->paste(env,this);}
  651. xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
  652. }
  653. }
  654. }
  655. }
  656. Function {init(EnvelopeParams *env_)} {open
  657. } {
  658. code {env=env_;
  659. make_ADSR_window();
  660. make_ASR_window();
  661. make_ADSRfilter_window();
  662. make_ASRbw_window();
  663. make_free_window();
  664. make_freemode_edit_window();
  665. envwindow=NULL;
  666. if (env->Envmode==3) envfreegroup->label("Frequency Envelope");
  667. if (env->Envmode==4) envfreegroup->label("Filter Envelope");
  668. if (env->Envmode==5) envfreegroup->label("Bandwidth Envelope");
  669. freemodeeditwindow->label(this->label());
  670. freeeditsmall->setpair(freeedit);
  671. freeedit->setpair(freeeditsmall);
  672. refresh();} {}
  673. }
  674. Function {reinit()} {} {
  675. code {if (env->Pfreemode!=0){
  676. int answer=fl_choice("Disable the free mode of the Envelope?","No","Yes",NULL);
  677. if (env->Pfreemode!=0) freemodebutton->value(1);
  678. else freemodebutton->value(0);
  679. if (answer==0) return;
  680. };
  681. if (env->Pfreemode==0) env->Pfreemode=1;
  682. else env->Pfreemode=0;
  683. hide();
  684. int winx=freemodeeditwindow->x();
  685. int winy=freemodeeditwindow->y();
  686. freemodeeditwindow->hide();
  687. envwindow->hide();
  688. Fl_Group *par=envwindow->parent();
  689. par->hide();
  690. refresh();
  691. envwindow->show();
  692. par->redraw();
  693. par->show();
  694. show();
  695. freemodeeditwindow->position(winx,winy);
  696. freemodeeditwindow->show();
  697. if (env->Pfreemode!=0) {
  698. freemodebutton->value(1);
  699. addpoint->show();
  700. deletepoint->show();
  701. forcedreleasecheck->show();
  702. }else{
  703. freemodebutton->value(0);
  704. addpoint->hide();
  705. deletepoint->hide();
  706. forcedreleasecheck->hide();
  707. };} {}
  708. }
  709. Function {refresh()} {open
  710. } {
  711. code {freemodebutton->value(env->Pfreemode);
  712. sustaincounter->value(env->Penvsustain);
  713. if (env->Pfreemode==0) sustaincounter->hide();
  714. else sustaincounter->show();
  715. sustaincounter->maximum(env->Penvpoints-2);
  716. envstretchdial->value(env->Penvstretch);
  717. if (env->Pfreemode==0) envstretchdial->hide();
  718. else envstretchdial->show();
  719. linearenvelopecheck->value(env->Plinearenvelope);
  720. if ((env->Pfreemode==0)||(env->Envmode>2)) linearenvelopecheck->hide();
  721. else linearenvelopecheck->show();
  722. forcedreleasecheck->value(env->Pforcedrelease);
  723. if (env->Pfreemode==0) forcedreleasecheck->hide();
  724. freeedit->redraw();
  725. if (env->Pfreemode==0){
  726. switch(env->Envmode){
  727. case(1):
  728. case(2):
  729. e1adt->value(env->PA_dt);
  730. e1ddt->value(env->PD_dt);
  731. e1sval->value(env->PS_val);
  732. e1rdt->value(env->PR_dt);
  733. e1envstretch->value(env->Penvstretch);
  734. e1linearenvelope->value(env->Plinearenvelope);
  735. e1forcedrelease->value(env->Pforcedrelease);
  736. break;
  737. case(3):
  738. e2aval->value(env->PA_val);
  739. e2adt->value(env->PA_dt);
  740. e2rdt->value(env->PR_dt);
  741. e2rval->value(env->PR_val);
  742. e2envstretch->value(env->Penvstretch);
  743. e2forcedrelease->value(env->Pforcedrelease);
  744. break;
  745. case(4):
  746. e3aval->value(env->PA_val);
  747. e3adt->value(env->PA_dt);
  748. e3dval->value(env->PD_val);
  749. e3ddt->value(env->PD_dt);
  750. e3rdt->value(env->PR_dt);
  751. e3rval->value(env->PR_val);
  752. e3envstretch->value(env->Penvstretch);
  753. e3forcedrelease->value(env->Pforcedrelease);
  754. break;
  755. case(5):
  756. e4aval->value(env->PA_val);
  757. e4adt->value(env->PA_dt);
  758. e4rdt->value(env->PR_dt);
  759. e4rval->value(env->PR_val);
  760. e4envstretch->value(env->Penvstretch);
  761. e4forcedrelease->value(env->Pforcedrelease);
  762. break;
  763. default:
  764. break;
  765. };
  766. }else{
  767. envfree->redraw();
  768. };
  769. envADSR->hide();
  770. envASR->hide();
  771. envADSRfilter->hide();
  772. envASRbw->hide();
  773. envfree->hide();
  774. if (env->Pfreemode==0){
  775. switch(env->Envmode){
  776. case(1):
  777. case(2):
  778. envwindow=envADSR;
  779. break;
  780. case(3):
  781. envwindow=envASR;
  782. break;
  783. case(4):
  784. envwindow=envADSRfilter;
  785. break;
  786. case(5):
  787. envwindow=envASRbw;
  788. break;
  789. default:
  790. break;
  791. };
  792. }else{
  793. envwindow=envfree;
  794. };
  795. envwindow->resize(this->x(),this->y(),this->w(),this->h());
  796. envwindow->show();} {}
  797. }
  798. decl {EnvelopeParams *env;} {private local
  799. }
  800. decl {Fl_Group *envwindow;} {private local
  801. }
  802. }