Audio plugin host https://kx.studio/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.

1530 lines
51KB

  1. // generated by Fast Light User Interface Designer (fluid) version 1.0300
  2. #include "zynaddsubfx/UI/EnvelopeUI.h"
  3. //Copyright (c) 2002-2005 Nasca Octavian Paul
  4. //License: GNU GPL version 2 or later
  5. EnvelopeFreeEdit::EnvelopeFreeEdit(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
  6. env=NULL;
  7. pair=NULL;
  8. }
  9. void EnvelopeFreeEdit::init(EnvelopeParams *env_) {
  10. env=env_;
  11. oldx=-1;
  12. currentpoint=-1;
  13. cpx=0;
  14. lastpoint=-1;
  15. }
  16. void EnvelopeFreeEdit::setpair(Fl_Box *pair_) {
  17. pair=pair_;
  18. }
  19. int EnvelopeFreeEdit::getpointx(int n) {
  20. int lx=w()-10;
  21. int npoints=env->Penvpoints;
  22. float sum=0;
  23. for (int i=1;i<npoints;i++) sum+=env->getdt(i)+1;
  24. float sumbefore=0;//the sum of all points before the computed point
  25. for (int i=1;i<=n;i++) sumbefore+=env->getdt(i)+1;
  26. return((int) (sumbefore/(float) sum*lx));
  27. }
  28. int EnvelopeFreeEdit::getpointy(int n) {
  29. int ly=h()-10;
  30. return((int) ((1.0-env->Penvval[n]/127.0)*ly));
  31. }
  32. int EnvelopeFreeEdit::getnearest(int x,int y) {
  33. x-=5;y-=5;
  34. int nearestpoint=0;
  35. int nearestval=1000000;//a big value
  36. for (int i=0;i<env->Penvpoints;i++){
  37. int distance=abs(x-getpointx(i))+abs(y-getpointy(i));
  38. if (distance<nearestval) {
  39. nearestpoint=i;
  40. nearestval=distance;
  41. };
  42. };
  43. return(nearestpoint);
  44. }
  45. void EnvelopeFreeEdit::draw() {
  46. int ox=x(),oy=y(),lx=w(),ly=h();
  47. if (env->Pfreemode==0) env->converttofree();
  48. int npoints=env->Penvpoints;
  49. if (active_r()) fl_color(FL_BLACK);
  50. else fl_color(90,90,90);
  51. if (!active_r()) currentpoint=-1;
  52. fl_rectf(ox,oy,lx,ly);
  53. ox+=5;oy+=5;lx-=10;ly-=10;
  54. //draw the lines
  55. fl_color(FL_GRAY);
  56. fl_line_style(FL_SOLID);
  57. fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
  58. //draws the evelope points and lines
  59. Fl_Color alb=FL_WHITE;
  60. if (!active_r()) alb=fl_rgb_color(180,180,180);
  61. fl_color(alb);
  62. int oldxx=0,xx=0,oldyy=0,yy=getpointy(0);
  63. fl_rectf(ox-3,oy+yy-3,6,6);
  64. for (int i=1;i<npoints;i++){
  65. oldxx=xx;oldyy=yy;
  66. xx=getpointx(i);yy=getpointy(i);
  67. if (i==currentpoint) fl_color(FL_RED);
  68. else fl_color(alb);
  69. fl_line(ox+oldxx,oy+oldyy,ox+xx,oy+yy);
  70. fl_rectf(ox+xx-3,oy+yy-3,6,6);
  71. };
  72. //draw the last moved point point (if exists)
  73. if (lastpoint>=0){
  74. fl_color(FL_CYAN);
  75. fl_rectf(ox+getpointx(lastpoint)-5,oy+getpointy(lastpoint)-5,10,10);
  76. };
  77. //draw the sustain position
  78. if (env->Penvsustain>0){
  79. fl_color(FL_YELLOW);
  80. xx=getpointx(env->Penvsustain);
  81. fl_line(ox+xx,oy+0,ox+xx,oy+ly);
  82. };
  83. //Show the envelope duration and the current line duration
  84. fl_font(FL_HELVETICA|FL_BOLD,10);
  85. float time=0.0;
  86. if (currentpoint<=0){
  87. fl_color(alb);
  88. for (int i=1;i<npoints;i++) time+=env->getdt(i);
  89. } else {
  90. fl_color(255,0,0);
  91. time=env->getdt(currentpoint);
  92. };
  93. char tmpstr[20];
  94. if (time<1000.0) snprintf((char *)&tmpstr,20,"%.1fms",time);
  95. else snprintf((char *)&tmpstr,20,"%.2fs",time/1000.0);
  96. fl_draw(tmpstr,ox+lx-20,oy+ly-10,20,10,FL_ALIGN_RIGHT,NULL,0);
  97. }
  98. int EnvelopeFreeEdit::handle(int event) {
  99. int x_=Fl::event_x()-x();
  100. int y_=Fl::event_y()-y();
  101. if (event==FL_PUSH) {
  102. currentpoint=getnearest(x_,y_);
  103. cpx=x_;
  104. cpdt=env->Penvdt[currentpoint];
  105. lastpoint=currentpoint;
  106. redraw();
  107. if (pair!=NULL) pair->redraw();
  108. };
  109. if (event==FL_RELEASE){
  110. currentpoint=-1;
  111. redraw();
  112. if (pair!=NULL) pair->redraw();
  113. };
  114. if ((event==FL_DRAG)&&(currentpoint>=0)){
  115. int ny=127-(int) (y_*127.0/h());
  116. if (ny<0) ny=0;if (ny>127) ny=127;
  117. env->Penvval[currentpoint]=ny;
  118. int dx=(int)((x_-cpx)*0.1);
  119. int newdt=cpdt+dx;
  120. if (newdt<0) newdt=0;if (newdt>127) newdt=127;
  121. if (currentpoint!=0) env->Penvdt[currentpoint]=newdt;
  122. else env->Penvdt[currentpoint]=0;
  123. redraw();
  124. if (pair!=NULL) pair->redraw();
  125. };
  126. return(1);
  127. }
  128. void EnvelopeUI::cb_addpoint_i(Fl_Button*, void*) {
  129. int curpoint=freeedit->lastpoint;
  130. if (curpoint<0) return;
  131. //if (curpoint>=env->Penvpoints-1) return;
  132. if (env->Penvpoints>=MAX_ENVELOPE_POINTS) return;
  133. for (int i=env->Penvpoints;i>=curpoint+1;i--){
  134. env->Penvdt[i]=env->Penvdt[i-1];
  135. env->Penvval[i]=env->Penvval[i-1];
  136. };
  137. if (curpoint==0) {
  138. env->Penvdt[1]=64;
  139. };
  140. env->Penvpoints++;
  141. if (curpoint<=env->Penvsustain) env->Penvsustain++;
  142. freeedit->lastpoint+=1;
  143. freeedit->redraw();
  144. envfree->redraw();
  145. sustaincounter->value(env->Penvsustain);
  146. sustaincounter->maximum(env->Penvpoints-2);
  147. }
  148. void EnvelopeUI::cb_addpoint(Fl_Button* o, void* v) {
  149. ((EnvelopeUI*)(o->parent()->user_data()))->cb_addpoint_i(o,v);
  150. }
  151. void EnvelopeUI::cb_deletepoint_i(Fl_Button*, void*) {
  152. int curpoint=freeedit->lastpoint;
  153. if (curpoint<1) return;
  154. if (curpoint>=env->Penvpoints-1) return;
  155. if (env->Penvpoints<=3) return;
  156. for (int i=curpoint+1;i<env->Penvpoints;i++){
  157. env->Penvdt[i-1]=env->Penvdt[i];
  158. env->Penvval[i-1]=env->Penvval[i];
  159. };
  160. env->Penvpoints--;
  161. if (curpoint<=env->Penvsustain) env->Penvsustain--;
  162. freeedit->lastpoint-=1;
  163. freeedit->redraw();
  164. envfree->redraw();
  165. sustaincounter->value(env->Penvsustain);
  166. sustaincounter->maximum(env->Penvpoints-2);
  167. }
  168. void EnvelopeUI::cb_deletepoint(Fl_Button* o, void* v) {
  169. ((EnvelopeUI*)(o->parent()->user_data()))->cb_deletepoint_i(o,v);
  170. }
  171. void EnvelopeUI::cb_freemodebutton_i(Fl_Light_Button*, void*) {
  172. reinit();
  173. freeedit->lastpoint=-1;
  174. freeedit->redraw();
  175. }
  176. void EnvelopeUI::cb_freemodebutton(Fl_Light_Button* o, void* v) {
  177. ((EnvelopeUI*)(o->parent()->user_data()))->cb_freemodebutton_i(o,v);
  178. }
  179. void EnvelopeUI::cb_forcedreleasecheck_i(Fl_Check_Button* o, void*) {
  180. env->Pforcedrelease=(int)o->value();
  181. }
  182. void EnvelopeUI::cb_forcedreleasecheck(Fl_Check_Button* o, void* v) {
  183. ((EnvelopeUI*)(o->parent()->user_data()))->cb_forcedreleasecheck_i(o,v);
  184. }
  185. void EnvelopeUI::cb_envstretchdial_i(WidgetPDial* o, void*) {
  186. env->Penvstretch=(int)o->value();
  187. }
  188. void EnvelopeUI::cb_envstretchdial(WidgetPDial* o, void* v) {
  189. ((EnvelopeUI*)(o->parent()->user_data()))->cb_envstretchdial_i(o,v);
  190. }
  191. void EnvelopeUI::cb_Close_i(Fl_Button*, void*) {
  192. freemodeeditwindow->hide();
  193. }
  194. void EnvelopeUI::cb_Close(Fl_Button* o, void* v) {
  195. ((EnvelopeUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
  196. }
  197. void EnvelopeUI::cb_linearenvelopecheck_i(Fl_Check_Button* o, void*) {
  198. env->Plinearenvelope=(int)o->value();
  199. }
  200. void EnvelopeUI::cb_linearenvelopecheck(Fl_Check_Button* o, void* v) {
  201. ((EnvelopeUI*)(o->parent()->user_data()))->cb_linearenvelopecheck_i(o,v);
  202. }
  203. void EnvelopeUI::cb_sustaincounter_i(Fl_Counter* o, void*) {
  204. env->Penvsustain=(int) o->value();
  205. freeedit->redraw();
  206. envfree->redraw();
  207. }
  208. void EnvelopeUI::cb_sustaincounter(Fl_Counter* o, void* v) {
  209. ((EnvelopeUI*)(o->parent()->user_data()))->cb_sustaincounter_i(o,v);
  210. }
  211. void EnvelopeUI::cb_C_i(Fl_Button*, void*) {
  212. presetsui->copy(env);
  213. }
  214. void EnvelopeUI::cb_C(Fl_Button* o, void* v) {
  215. ((EnvelopeUI*)(o->parent()->user_data()))->cb_C_i(o,v);
  216. }
  217. void EnvelopeUI::cb_P_i(Fl_Button*, void*) {
  218. presetsui->paste(env,this);
  219. }
  220. void EnvelopeUI::cb_P(Fl_Button* o, void* v) {
  221. ((EnvelopeUI*)(o->parent()->user_data()))->cb_P_i(o,v);
  222. }
  223. void EnvelopeUI::cb_e1adt_i(WidgetPDial* o, void*) {
  224. env->PA_dt=(int)o->value();
  225. freeedit->redraw();
  226. }
  227. void EnvelopeUI::cb_e1adt(WidgetPDial* o, void* v) {
  228. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1adt_i(o,v);
  229. }
  230. void EnvelopeUI::cb_e1ddt_i(WidgetPDial* o, void*) {
  231. env->PD_dt=(int)o->value();
  232. freeedit->redraw();
  233. }
  234. void EnvelopeUI::cb_e1ddt(WidgetPDial* o, void* v) {
  235. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1ddt_i(o,v);
  236. }
  237. void EnvelopeUI::cb_e1rdt_i(WidgetPDial* o, void*) {
  238. env->PR_dt=(int)o->value();
  239. freeedit->redraw();
  240. }
  241. void EnvelopeUI::cb_e1rdt(WidgetPDial* o, void* v) {
  242. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1rdt_i(o,v);
  243. }
  244. void EnvelopeUI::cb_e1sval_i(WidgetPDial* o, void*) {
  245. env->PS_val=(int)o->value();
  246. freeedit->redraw();
  247. }
  248. void EnvelopeUI::cb_e1sval(WidgetPDial* o, void* v) {
  249. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1sval_i(o,v);
  250. }
  251. void EnvelopeUI::cb_e1forcedrelease_i(Fl_Check_Button* o, void*) {
  252. env->Pforcedrelease=(int)o->value();
  253. }
  254. void EnvelopeUI::cb_e1forcedrelease(Fl_Check_Button* o, void* v) {
  255. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1forcedrelease_i(o,v);
  256. }
  257. void EnvelopeUI::cb_e1envstretch_i(WidgetPDial* o, void*) {
  258. env->Penvstretch=(int)o->value();
  259. }
  260. void EnvelopeUI::cb_e1envstretch(WidgetPDial* o, void* v) {
  261. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1envstretch_i(o,v);
  262. }
  263. void EnvelopeUI::cb_E_i(Fl_Button*, void*) {
  264. freemodeeditwindow->show();
  265. }
  266. void EnvelopeUI::cb_E(Fl_Button* o, void* v) {
  267. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_E_i(o,v);
  268. }
  269. void EnvelopeUI::cb_e1linearenvelope_i(Fl_Check_Button* o, void*) {
  270. env->Plinearenvelope=(int)o->value();
  271. }
  272. void EnvelopeUI::cb_e1linearenvelope(Fl_Check_Button* o, void* v) {
  273. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1linearenvelope_i(o,v);
  274. }
  275. void EnvelopeUI::cb_C1_i(Fl_Button*, void*) {
  276. presetsui->copy(env);
  277. }
  278. void EnvelopeUI::cb_C1(Fl_Button* o, void* v) {
  279. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_C1_i(o,v);
  280. }
  281. void EnvelopeUI::cb_P1_i(Fl_Button*, void*) {
  282. presetsui->paste(env,this);
  283. }
  284. void EnvelopeUI::cb_P1(Fl_Button* o, void* v) {
  285. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_P1_i(o,v);
  286. }
  287. void EnvelopeUI::cb_e2aval_i(WidgetPDial* o, void*) {
  288. env->PA_val=(int)o->value();
  289. freeedit->redraw();
  290. }
  291. void EnvelopeUI::cb_e2aval(WidgetPDial* o, void* v) {
  292. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2aval_i(o,v);
  293. }
  294. void EnvelopeUI::cb_e2adt_i(WidgetPDial* o, void*) {
  295. env->PA_dt=(int)o->value();
  296. freeedit->redraw();
  297. }
  298. void EnvelopeUI::cb_e2adt(WidgetPDial* o, void* v) {
  299. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2adt_i(o,v);
  300. }
  301. void EnvelopeUI::cb_e2rval_i(WidgetPDial* o, void*) {
  302. env->PR_val=(int)o->value();
  303. freeedit->redraw();
  304. }
  305. void EnvelopeUI::cb_e2rval(WidgetPDial* o, void* v) {
  306. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2rval_i(o,v);
  307. }
  308. void EnvelopeUI::cb_e2rdt_i(WidgetPDial* o, void*) {
  309. env->PR_dt=(int)o->value();
  310. freeedit->redraw();
  311. }
  312. void EnvelopeUI::cb_e2rdt(WidgetPDial* o, void* v) {
  313. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2rdt_i(o,v);
  314. }
  315. void EnvelopeUI::cb_e2envstretch_i(WidgetPDial* o, void*) {
  316. env->Penvstretch=(int)o->value();
  317. }
  318. void EnvelopeUI::cb_e2envstretch(WidgetPDial* o, void* v) {
  319. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2envstretch_i(o,v);
  320. }
  321. void EnvelopeUI::cb_e2forcedrelease_i(Fl_Check_Button* o, void*) {
  322. env->Pforcedrelease=(int)o->value();
  323. }
  324. void EnvelopeUI::cb_e2forcedrelease(Fl_Check_Button* o, void* v) {
  325. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2forcedrelease_i(o,v);
  326. }
  327. void EnvelopeUI::cb_C2_i(Fl_Button*, void*) {
  328. presetsui->copy(env);
  329. }
  330. void EnvelopeUI::cb_C2(Fl_Button* o, void* v) {
  331. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_C2_i(o,v);
  332. }
  333. void EnvelopeUI::cb_P2_i(Fl_Button*, void*) {
  334. presetsui->paste(env,this);
  335. }
  336. void EnvelopeUI::cb_P2(Fl_Button* o, void* v) {
  337. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_P2_i(o,v);
  338. }
  339. void EnvelopeUI::cb_E1_i(Fl_Button*, void*) {
  340. freemodeeditwindow->show();
  341. }
  342. void EnvelopeUI::cb_E1(Fl_Button* o, void* v) {
  343. ((EnvelopeUI*)(o->parent()->user_data()))->cb_E1_i(o,v);
  344. }
  345. void EnvelopeUI::cb_e3aval_i(WidgetPDial* o, void*) {
  346. env->PA_val=(int)o->value();
  347. freeedit->redraw();
  348. }
  349. void EnvelopeUI::cb_e3aval(WidgetPDial* o, void* v) {
  350. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3aval_i(o,v);
  351. }
  352. void EnvelopeUI::cb_e3adt_i(WidgetPDial* o, void*) {
  353. env->PA_dt=(int)o->value();
  354. freeedit->redraw();
  355. }
  356. void EnvelopeUI::cb_e3adt(WidgetPDial* o, void* v) {
  357. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3adt_i(o,v);
  358. }
  359. void EnvelopeUI::cb_e3dval_i(WidgetPDial* o, void*) {
  360. env->PD_val=(int)o->value();
  361. freeedit->redraw();
  362. }
  363. void EnvelopeUI::cb_e3dval(WidgetPDial* o, void* v) {
  364. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3dval_i(o,v);
  365. }
  366. void EnvelopeUI::cb_e3ddt_i(WidgetPDial* o, void*) {
  367. env->PD_dt=(int)o->value();
  368. freeedit->redraw();
  369. }
  370. void EnvelopeUI::cb_e3ddt(WidgetPDial* o, void* v) {
  371. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3ddt_i(o,v);
  372. }
  373. void EnvelopeUI::cb_e3rdt_i(WidgetPDial* o, void*) {
  374. env->PR_dt=(int)o->value();
  375. freeedit->redraw();
  376. }
  377. void EnvelopeUI::cb_e3rdt(WidgetPDial* o, void* v) {
  378. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3rdt_i(o,v);
  379. }
  380. void EnvelopeUI::cb_e3rval_i(WidgetPDial* o, void*) {
  381. env->PR_val=(int)o->value();
  382. freeedit->redraw();
  383. }
  384. void EnvelopeUI::cb_e3rval(WidgetPDial* o, void* v) {
  385. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3rval_i(o,v);
  386. }
  387. void EnvelopeUI::cb_e3envstretch_i(WidgetPDial* o, void*) {
  388. env->Penvstretch=(int)o->value();
  389. }
  390. void EnvelopeUI::cb_e3envstretch(WidgetPDial* o, void* v) {
  391. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3envstretch_i(o,v);
  392. }
  393. void EnvelopeUI::cb_e3forcedrelease_i(Fl_Check_Button* o, void*) {
  394. env->Pforcedrelease=(int)o->value();
  395. }
  396. void EnvelopeUI::cb_e3forcedrelease(Fl_Check_Button* o, void* v) {
  397. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3forcedrelease_i(o,v);
  398. }
  399. void EnvelopeUI::cb_E2_i(Fl_Button*, void*) {
  400. freemodeeditwindow->show();
  401. }
  402. void EnvelopeUI::cb_E2(Fl_Button* o, void* v) {
  403. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_E2_i(o,v);
  404. }
  405. void EnvelopeUI::cb_C3_i(Fl_Button*, void*) {
  406. presetsui->copy(env);
  407. }
  408. void EnvelopeUI::cb_C3(Fl_Button* o, void* v) {
  409. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_C3_i(o,v);
  410. }
  411. void EnvelopeUI::cb_P3_i(Fl_Button*, void*) {
  412. presetsui->paste(env,this);
  413. }
  414. void EnvelopeUI::cb_P3(Fl_Button* o, void* v) {
  415. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_P3_i(o,v);
  416. }
  417. void EnvelopeUI::cb_e4aval_i(WidgetPDial* o, void*) {
  418. env->PA_val=(int)o->value();
  419. freeedit->redraw();
  420. }
  421. void EnvelopeUI::cb_e4aval(WidgetPDial* o, void* v) {
  422. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4aval_i(o,v);
  423. }
  424. void EnvelopeUI::cb_e4adt_i(WidgetPDial* o, void*) {
  425. env->PA_dt=(int)o->value();
  426. freeedit->redraw();
  427. }
  428. void EnvelopeUI::cb_e4adt(WidgetPDial* o, void* v) {
  429. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4adt_i(o,v);
  430. }
  431. void EnvelopeUI::cb_e4rval_i(WidgetPDial* o, void*) {
  432. env->PR_val=(int)o->value();
  433. freeedit->redraw();
  434. }
  435. void EnvelopeUI::cb_e4rval(WidgetPDial* o, void* v) {
  436. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4rval_i(o,v);
  437. }
  438. void EnvelopeUI::cb_e4rdt_i(WidgetPDial* o, void*) {
  439. env->PR_dt=(int)o->value();
  440. freeedit->redraw();
  441. }
  442. void EnvelopeUI::cb_e4rdt(WidgetPDial* o, void* v) {
  443. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4rdt_i(o,v);
  444. }
  445. void EnvelopeUI::cb_e4envstretch_i(WidgetPDial* o, void*) {
  446. env->Penvstretch=(int)o->value();
  447. }
  448. void EnvelopeUI::cb_e4envstretch(WidgetPDial* o, void* v) {
  449. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4envstretch_i(o,v);
  450. }
  451. void EnvelopeUI::cb_e4forcedrelease_i(Fl_Check_Button* o, void*) {
  452. env->Pforcedrelease=(int)o->value();
  453. }
  454. void EnvelopeUI::cb_e4forcedrelease(Fl_Check_Button* o, void* v) {
  455. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4forcedrelease_i(o,v);
  456. }
  457. void EnvelopeUI::cb_C4_i(Fl_Button*, void*) {
  458. presetsui->copy(env);
  459. }
  460. void EnvelopeUI::cb_C4(Fl_Button* o, void* v) {
  461. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_C4_i(o,v);
  462. }
  463. void EnvelopeUI::cb_P4_i(Fl_Button*, void*) {
  464. presetsui->paste(env,this);
  465. }
  466. void EnvelopeUI::cb_P4(Fl_Button* o, void* v) {
  467. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_P4_i(o,v);
  468. }
  469. void EnvelopeUI::cb_E3_i(Fl_Button*, void*) {
  470. freemodeeditwindow->show();
  471. }
  472. void EnvelopeUI::cb_E3(Fl_Button* o, void* v) {
  473. ((EnvelopeUI*)(o->parent()->user_data()))->cb_E3_i(o,v);
  474. }
  475. void EnvelopeUI::cb_freeeditsmall_i(EnvelopeFreeEdit*, void*) {
  476. envfree->redraw();
  477. }
  478. void EnvelopeUI::cb_freeeditsmall(EnvelopeFreeEdit* o, void* v) {
  479. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_freeeditsmall_i(o,v);
  480. }
  481. void EnvelopeUI::cb_E4_i(Fl_Button*, void*) {
  482. freemodeeditwindow->show();
  483. }
  484. void EnvelopeUI::cb_E4(Fl_Button* o, void* v) {
  485. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_E4_i(o,v);
  486. }
  487. void EnvelopeUI::cb_C5_i(Fl_Button*, void*) {
  488. presetsui->copy(env);
  489. }
  490. void EnvelopeUI::cb_C5(Fl_Button* o, void* v) {
  491. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_C5_i(o,v);
  492. }
  493. void EnvelopeUI::cb_P5_i(Fl_Button*, void*) {
  494. presetsui->paste(env,this);
  495. }
  496. void EnvelopeUI::cb_P5(Fl_Button* o, void* v) {
  497. ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_P5_i(o,v);
  498. }
  499. EnvelopeUI::EnvelopeUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
  500. env=NULL;
  501. freemodeeditwindow=NULL;
  502. envADSR=NULL;
  503. envASR=NULL;
  504. envADSRfilter=NULL;
  505. envASRbw=NULL;
  506. envfree=NULL;
  507. }
  508. EnvelopeUI::~EnvelopeUI() {
  509. envwindow->hide();
  510. hide();
  511. freemodeeditwindow->hide();
  512. delete (freemodeeditwindow);
  513. }
  514. Fl_Double_Window* EnvelopeUI::make_freemode_edit_window() {
  515. { freemodeeditwindow = new Fl_Double_Window(575, 180, "Envelope");
  516. freemodeeditwindow->user_data((void*)(this));
  517. { EnvelopeFreeEdit* o = freeedit = new EnvelopeFreeEdit(5, 5, 565, 145, "Envelope");
  518. freeedit->box(FL_FLAT_BOX);
  519. freeedit->color(FL_FOREGROUND_COLOR);
  520. freeedit->selection_color(FL_BACKGROUND_COLOR);
  521. freeedit->labeltype(FL_NORMAL_LABEL);
  522. freeedit->labelfont(0);
  523. freeedit->labelsize(14);
  524. freeedit->labelcolor(FL_FOREGROUND_COLOR);
  525. freeedit->align(Fl_Align(FL_ALIGN_CENTER));
  526. freeedit->when(FL_WHEN_RELEASE);
  527. o->init(env);
  528. } // EnvelopeFreeEdit* freeedit
  529. { Fl_Button* o = addpoint = new Fl_Button(115, 155, 80, 20, "Add point");
  530. addpoint->box(FL_THIN_UP_BOX);
  531. addpoint->labelsize(11);
  532. addpoint->callback((Fl_Callback*)cb_addpoint);
  533. if (env->Pfreemode==0) o->hide();
  534. } // Fl_Button* addpoint
  535. { Fl_Button* o = deletepoint = new Fl_Button(200, 155, 80, 20, "Delete point");
  536. deletepoint->box(FL_THIN_UP_BOX);
  537. deletepoint->labelsize(11);
  538. deletepoint->callback((Fl_Callback*)cb_deletepoint);
  539. if (env->Pfreemode==0) o->hide();
  540. } // Fl_Button* deletepoint
  541. { freemodebutton = new Fl_Light_Button(10, 155, 95, 20, "FreeMode");
  542. freemodebutton->tooltip("Enable or disable the freemode");
  543. freemodebutton->labelsize(11);
  544. freemodebutton->callback((Fl_Callback*)cb_freemodebutton);
  545. } // Fl_Light_Button* freemodebutton
  546. { Fl_Check_Button* o = forcedreleasecheck = new Fl_Check_Button(410, 165, 40, 15, "frcR");
  547. forcedreleasecheck->tooltip("Forced Relase");
  548. forcedreleasecheck->down_box(FL_DOWN_BOX);
  549. forcedreleasecheck->labelsize(10);
  550. forcedreleasecheck->callback((Fl_Callback*)cb_forcedreleasecheck);
  551. o->value(env->Pforcedrelease);
  552. if (env->Pfreemode==0) o->hide();
  553. } // Fl_Check_Button* forcedreleasecheck
  554. { WidgetPDial* o = envstretchdial = new WidgetPDial(380, 155, 25, 25, "Str.");
  555. envstretchdial->tooltip("Envelope stretch (on lower notes make the envelope longer)");
  556. envstretchdial->box(FL_ROUND_UP_BOX);
  557. envstretchdial->color(FL_BACKGROUND_COLOR);
  558. envstretchdial->selection_color(FL_INACTIVE_COLOR);
  559. envstretchdial->labeltype(FL_NORMAL_LABEL);
  560. envstretchdial->labelfont(0);
  561. envstretchdial->labelsize(10);
  562. envstretchdial->labelcolor(FL_FOREGROUND_COLOR);
  563. envstretchdial->maximum(127);
  564. envstretchdial->step(1);
  565. envstretchdial->callback((Fl_Callback*)cb_envstretchdial);
  566. envstretchdial->align(Fl_Align(FL_ALIGN_LEFT));
  567. envstretchdial->when(FL_WHEN_CHANGED);
  568. o->value(env->Penvstretch);
  569. if (env->Pfreemode==0) o->hide();
  570. } // WidgetPDial* envstretchdial
  571. { Fl_Button* o = new Fl_Button(510, 155, 60, 20, "Close");
  572. o->box(FL_THIN_UP_BOX);
  573. o->callback((Fl_Callback*)cb_Close);
  574. } // Fl_Button* o
  575. { Fl_Check_Button* o = linearenvelopecheck = new Fl_Check_Button(410, 151, 30, 15, "L");
  576. linearenvelopecheck->tooltip("Linear Envelope");
  577. linearenvelopecheck->down_box(FL_DOWN_BOX);
  578. linearenvelopecheck->labelsize(10);
  579. linearenvelopecheck->callback((Fl_Callback*)cb_linearenvelopecheck);
  580. o->value(env->Plinearenvelope);
  581. if ((env->Pfreemode==0)||(env->Envmode>2)) o->hide();
  582. } // Fl_Check_Button* linearenvelopecheck
  583. { Fl_Counter* o = sustaincounter = new Fl_Counter(315, 155, 40, 15, "Sust");
  584. sustaincounter->tooltip("Sustain (0 is disabled)");
  585. sustaincounter->type(1);
  586. sustaincounter->labelsize(11);
  587. sustaincounter->minimum(0);
  588. sustaincounter->maximum(127);
  589. sustaincounter->step(1);
  590. sustaincounter->callback((Fl_Callback*)cb_sustaincounter);
  591. sustaincounter->align(Fl_Align(FL_ALIGN_LEFT));
  592. o->value(env->Penvsustain);
  593. if (env->Pfreemode==0) o->hide();
  594. o->maximum(env->Penvpoints-2);
  595. } // Fl_Counter* sustaincounter
  596. { Fl_Button* o = new Fl_Button(465, 160, 15, 15, "C");
  597. o->box(FL_THIN_UP_BOX);
  598. o->color((Fl_Color)179);
  599. o->labelfont(1);
  600. o->labelsize(10);
  601. o->labelcolor(FL_BACKGROUND2_COLOR);
  602. o->callback((Fl_Callback*)cb_C);
  603. } // Fl_Button* o
  604. { Fl_Button* o = new Fl_Button(482, 160, 15, 15, "P");
  605. o->box(FL_THIN_UP_BOX);
  606. o->color((Fl_Color)179);
  607. o->labelfont(1);
  608. o->labelsize(10);
  609. o->labelcolor(FL_BACKGROUND2_COLOR);
  610. o->callback((Fl_Callback*)cb_P);
  611. } // Fl_Button* o
  612. freemodeeditwindow->end();
  613. } // Fl_Double_Window* freemodeeditwindow
  614. return freemodeeditwindow;
  615. }
  616. Fl_Group* EnvelopeUI::make_ADSR_window() {
  617. { envADSR = new Fl_Group(0, 0, 205, 70);
  618. envADSR->box(FL_FLAT_BOX);
  619. envADSR->color(FL_LIGHT1);
  620. envADSR->selection_color(FL_BACKGROUND_COLOR);
  621. envADSR->labeltype(FL_NO_LABEL);
  622. envADSR->labelfont(1);
  623. envADSR->labelsize(14);
  624. envADSR->labelcolor(FL_FOREGROUND_COLOR);
  625. envADSR->user_data((void*)(this));
  626. envADSR->align(Fl_Align(FL_ALIGN_TOP));
  627. envADSR->when(FL_WHEN_RELEASE);
  628. { Fl_Group* o = new Fl_Group(0, 0, 205, 70, "Amplitude Envelope");
  629. o->box(FL_UP_BOX);
  630. o->color(FL_CYAN);
  631. o->labeltype(FL_ENGRAVED_LABEL);
  632. o->labelsize(10);
  633. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  634. { WidgetPDial* o = e1adt = new WidgetPDial(5, 20, 30, 30, "A.dt");
  635. e1adt->tooltip("Attack time");
  636. e1adt->box(FL_ROUND_UP_BOX);
  637. e1adt->color(FL_BACKGROUND_COLOR);
  638. e1adt->selection_color(FL_INACTIVE_COLOR);
  639. e1adt->labeltype(FL_NORMAL_LABEL);
  640. e1adt->labelfont(0);
  641. e1adt->labelsize(10);
  642. e1adt->labelcolor(FL_FOREGROUND_COLOR);
  643. e1adt->maximum(127);
  644. e1adt->step(1);
  645. e1adt->callback((Fl_Callback*)cb_e1adt);
  646. e1adt->align(Fl_Align(FL_ALIGN_BOTTOM));
  647. e1adt->when(FL_WHEN_CHANGED);
  648. o->value(env->PA_dt);
  649. } // WidgetPDial* e1adt
  650. { WidgetPDial* o = e1ddt = new WidgetPDial(40, 20, 30, 30, "D.dt");
  651. e1ddt->tooltip("Decay time");
  652. e1ddt->box(FL_ROUND_UP_BOX);
  653. e1ddt->color(FL_BACKGROUND_COLOR);
  654. e1ddt->selection_color(FL_INACTIVE_COLOR);
  655. e1ddt->labeltype(FL_NORMAL_LABEL);
  656. e1ddt->labelfont(0);
  657. e1ddt->labelsize(10);
  658. e1ddt->labelcolor(FL_FOREGROUND_COLOR);
  659. e1ddt->maximum(127);
  660. e1ddt->step(1);
  661. e1ddt->callback((Fl_Callback*)cb_e1ddt);
  662. e1ddt->align(Fl_Align(FL_ALIGN_BOTTOM));
  663. e1ddt->when(FL_WHEN_CHANGED);
  664. o->value(env->PD_dt);
  665. } // WidgetPDial* e1ddt
  666. { WidgetPDial* o = e1rdt = new WidgetPDial(110, 20, 30, 30, "R.dt");
  667. e1rdt->tooltip("Release time");
  668. e1rdt->box(FL_ROUND_UP_BOX);
  669. e1rdt->color(FL_BACKGROUND_COLOR);
  670. e1rdt->selection_color(FL_INACTIVE_COLOR);
  671. e1rdt->labeltype(FL_NORMAL_LABEL);
  672. e1rdt->labelfont(0);
  673. e1rdt->labelsize(10);
  674. e1rdt->labelcolor(FL_FOREGROUND_COLOR);
  675. e1rdt->maximum(127);
  676. e1rdt->step(1);
  677. e1rdt->callback((Fl_Callback*)cb_e1rdt);
  678. e1rdt->align(Fl_Align(FL_ALIGN_BOTTOM));
  679. e1rdt->when(FL_WHEN_CHANGED);
  680. o->value(env->PR_dt);
  681. } // WidgetPDial* e1rdt
  682. { WidgetPDial* o = e1sval = new WidgetPDial(75, 20, 30, 30, "S.val");
  683. e1sval->tooltip("Sustain value");
  684. e1sval->box(FL_ROUND_UP_BOX);
  685. e1sval->color(FL_BACKGROUND_COLOR);
  686. e1sval->selection_color(FL_INACTIVE_COLOR);
  687. e1sval->labeltype(FL_NORMAL_LABEL);
  688. e1sval->labelfont(0);
  689. e1sval->labelsize(10);
  690. e1sval->labelcolor(FL_FOREGROUND_COLOR);
  691. e1sval->maximum(127);
  692. e1sval->step(1);
  693. e1sval->callback((Fl_Callback*)cb_e1sval);
  694. e1sval->align(Fl_Align(FL_ALIGN_BOTTOM));
  695. e1sval->when(FL_WHEN_CHANGED);
  696. o->value(env->PS_val);
  697. } // WidgetPDial* e1sval
  698. { Fl_Check_Button* o = e1forcedrelease = new Fl_Check_Button(180, 35, 20, 15, "frcR");
  699. e1forcedrelease->tooltip("Forced Relase");
  700. e1forcedrelease->down_box(FL_DOWN_BOX);
  701. e1forcedrelease->labelsize(10);
  702. e1forcedrelease->callback((Fl_Callback*)cb_e1forcedrelease);
  703. e1forcedrelease->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
  704. o->value(env->Pforcedrelease);
  705. } // Fl_Check_Button* e1forcedrelease
  706. { WidgetPDial* o = e1envstretch = new WidgetPDial(145, 25, 25, 25, "Stretch");
  707. e1envstretch->tooltip("Envelope stretch (on lower notes makes the envelope longer)");
  708. e1envstretch->box(FL_ROUND_UP_BOX);
  709. e1envstretch->color(FL_BACKGROUND_COLOR);
  710. e1envstretch->selection_color(FL_INACTIVE_COLOR);
  711. e1envstretch->labeltype(FL_NORMAL_LABEL);
  712. e1envstretch->labelfont(0);
  713. e1envstretch->labelsize(10);
  714. e1envstretch->labelcolor(FL_FOREGROUND_COLOR);
  715. e1envstretch->maximum(127);
  716. e1envstretch->step(1);
  717. e1envstretch->callback((Fl_Callback*)cb_e1envstretch);
  718. e1envstretch->align(Fl_Align(FL_ALIGN_BOTTOM));
  719. e1envstretch->when(FL_WHEN_CHANGED);
  720. o->value(env->Penvstretch);
  721. } // WidgetPDial* e1envstretch
  722. { Fl_Button* o = new Fl_Button(185, 5, 15, 15, "E");
  723. o->tooltip("Envelope window");
  724. o->labelfont(1);
  725. o->labelsize(10);
  726. o->callback((Fl_Callback*)cb_E);
  727. } // Fl_Button* o
  728. { Fl_Check_Button* o = e1linearenvelope = new Fl_Check_Button(180, 20, 15, 15, "L");
  729. e1linearenvelope->tooltip("The evelope is linear");
  730. e1linearenvelope->down_box(FL_DOWN_BOX);
  731. e1linearenvelope->labelsize(10);
  732. e1linearenvelope->callback((Fl_Callback*)cb_e1linearenvelope);
  733. e1linearenvelope->align(Fl_Align(FL_ALIGN_LEFT));
  734. o->value(env->Plinearenvelope);
  735. } // Fl_Check_Button* e1linearenvelope
  736. { Fl_Button* o = new Fl_Button(150, 5, 15, 15, "C");
  737. o->box(FL_THIN_UP_BOX);
  738. o->color((Fl_Color)179);
  739. o->labelfont(1);
  740. o->labelsize(10);
  741. o->labelcolor(FL_BACKGROUND2_COLOR);
  742. o->callback((Fl_Callback*)cb_C1);
  743. } // Fl_Button* o
  744. { Fl_Button* o = new Fl_Button(167, 5, 15, 15, "P");
  745. o->box(FL_THIN_UP_BOX);
  746. o->color((Fl_Color)179);
  747. o->labelfont(1);
  748. o->labelsize(10);
  749. o->labelcolor(FL_BACKGROUND2_COLOR);
  750. o->callback((Fl_Callback*)cb_P1);
  751. } // Fl_Button* o
  752. set_module_parameters(o);
  753. o->end();
  754. } // Fl_Group* o
  755. envADSR->end();
  756. } // Fl_Group* envADSR
  757. return envADSR;
  758. }
  759. Fl_Group* EnvelopeUI::make_ASR_window() {
  760. { envASR = new Fl_Group(0, 0, 210, 70);
  761. envASR->box(FL_FLAT_BOX);
  762. envASR->color(FL_BACKGROUND_COLOR);
  763. envASR->selection_color(FL_BACKGROUND_COLOR);
  764. envASR->labeltype(FL_NO_LABEL);
  765. envASR->labelfont(0);
  766. envASR->labelsize(14);
  767. envASR->labelcolor(FL_FOREGROUND_COLOR);
  768. envASR->user_data((void*)(this));
  769. envASR->align(Fl_Align(FL_ALIGN_TOP));
  770. envASR->when(FL_WHEN_RELEASE);
  771. { Fl_Group* o = new Fl_Group(0, 0, 210, 70, "Frequency Envelope");
  772. o->box(FL_UP_BOX);
  773. o->color(FL_CYAN);
  774. o->labeltype(FL_ENGRAVED_LABEL);
  775. o->labelsize(10);
  776. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  777. { WidgetPDial* o = e2aval = new WidgetPDial(5, 20, 30, 30, "A.val");
  778. e2aval->tooltip("Starting value");
  779. e2aval->box(FL_ROUND_UP_BOX);
  780. e2aval->color(FL_BACKGROUND_COLOR);
  781. e2aval->selection_color(FL_INACTIVE_COLOR);
  782. e2aval->labeltype(FL_NORMAL_LABEL);
  783. e2aval->labelfont(0);
  784. e2aval->labelsize(10);
  785. e2aval->labelcolor(FL_FOREGROUND_COLOR);
  786. e2aval->maximum(127);
  787. e2aval->step(1);
  788. e2aval->callback((Fl_Callback*)cb_e2aval);
  789. e2aval->align(Fl_Align(FL_ALIGN_BOTTOM));
  790. e2aval->when(FL_WHEN_CHANGED);
  791. o->value(env->PA_val);
  792. } // WidgetPDial* e2aval
  793. { WidgetPDial* o = e2adt = new WidgetPDial(40, 20, 30, 30, "A.dt");
  794. e2adt->tooltip("Attack time");
  795. e2adt->box(FL_ROUND_UP_BOX);
  796. e2adt->color(FL_BACKGROUND_COLOR);
  797. e2adt->selection_color(FL_INACTIVE_COLOR);
  798. e2adt->labeltype(FL_NORMAL_LABEL);
  799. e2adt->labelfont(0);
  800. e2adt->labelsize(10);
  801. e2adt->labelcolor(FL_FOREGROUND_COLOR);
  802. e2adt->maximum(127);
  803. e2adt->step(1);
  804. e2adt->callback((Fl_Callback*)cb_e2adt);
  805. e2adt->align(Fl_Align(FL_ALIGN_BOTTOM));
  806. e2adt->when(FL_WHEN_CHANGED);
  807. o->value(env->PA_dt);
  808. } // WidgetPDial* e2adt
  809. { WidgetPDial* o = e2rval = new WidgetPDial(110, 20, 30, 30, "R.val");
  810. e2rval->tooltip("Release value");
  811. e2rval->box(FL_ROUND_UP_BOX);
  812. e2rval->color(FL_BACKGROUND_COLOR);
  813. e2rval->selection_color(FL_INACTIVE_COLOR);
  814. e2rval->labeltype(FL_NORMAL_LABEL);
  815. e2rval->labelfont(0);
  816. e2rval->labelsize(10);
  817. e2rval->labelcolor(FL_FOREGROUND_COLOR);
  818. e2rval->maximum(127);
  819. e2rval->step(1);
  820. e2rval->callback((Fl_Callback*)cb_e2rval);
  821. e2rval->align(Fl_Align(FL_ALIGN_BOTTOM));
  822. e2rval->when(FL_WHEN_CHANGED);
  823. o->value(env->PR_val);
  824. } // WidgetPDial* e2rval
  825. { WidgetPDial* o = e2rdt = new WidgetPDial(75, 20, 30, 30, "R.dt");
  826. e2rdt->tooltip("Release time");
  827. e2rdt->box(FL_ROUND_UP_BOX);
  828. e2rdt->color(FL_BACKGROUND_COLOR);
  829. e2rdt->selection_color(FL_INACTIVE_COLOR);
  830. e2rdt->labeltype(FL_NORMAL_LABEL);
  831. e2rdt->labelfont(0);
  832. e2rdt->labelsize(10);
  833. e2rdt->labelcolor(FL_FOREGROUND_COLOR);
  834. e2rdt->maximum(127);
  835. e2rdt->step(1);
  836. e2rdt->callback((Fl_Callback*)cb_e2rdt);
  837. e2rdt->align(Fl_Align(FL_ALIGN_BOTTOM));
  838. e2rdt->when(FL_WHEN_CHANGED);
  839. o->value(env->PR_dt);
  840. } // WidgetPDial* e2rdt
  841. { WidgetPDial* o = e2envstretch = new WidgetPDial(145, 25, 25, 25, "Stretch");
  842. e2envstretch->tooltip("Envelope stretch (on lower notes makes the envelope longer)");
  843. e2envstretch->box(FL_ROUND_UP_BOX);
  844. e2envstretch->color(FL_BACKGROUND_COLOR);
  845. e2envstretch->selection_color(FL_INACTIVE_COLOR);
  846. e2envstretch->labeltype(FL_NORMAL_LABEL);
  847. e2envstretch->labelfont(0);
  848. e2envstretch->labelsize(10);
  849. e2envstretch->labelcolor(FL_FOREGROUND_COLOR);
  850. e2envstretch->maximum(127);
  851. e2envstretch->step(1);
  852. e2envstretch->callback((Fl_Callback*)cb_e2envstretch);
  853. e2envstretch->align(Fl_Align(FL_ALIGN_BOTTOM));
  854. e2envstretch->when(FL_WHEN_CHANGED);
  855. o->value(env->Penvstretch);
  856. } // WidgetPDial* e2envstretch
  857. { Fl_Check_Button* o = e2forcedrelease = new Fl_Check_Button(180, 25, 15, 25, "frcR");
  858. e2forcedrelease->tooltip("Forced release");
  859. e2forcedrelease->down_box(FL_DOWN_BOX);
  860. e2forcedrelease->labelsize(10);
  861. e2forcedrelease->callback((Fl_Callback*)cb_e2forcedrelease);
  862. e2forcedrelease->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
  863. o->value(env->Pforcedrelease);
  864. } // Fl_Check_Button* e2forcedrelease
  865. { Fl_Button* o = new Fl_Button(155, 5, 15, 15, "C");
  866. o->box(FL_THIN_UP_BOX);
  867. o->color((Fl_Color)179);
  868. o->labelfont(1);
  869. o->labelsize(10);
  870. o->labelcolor(FL_BACKGROUND2_COLOR);
  871. o->callback((Fl_Callback*)cb_C2);
  872. } // Fl_Button* o
  873. { Fl_Button* o = new Fl_Button(172, 5, 15, 15, "P");
  874. o->box(FL_THIN_UP_BOX);
  875. o->color((Fl_Color)179);
  876. o->labelfont(1);
  877. o->labelsize(10);
  878. o->labelcolor(FL_BACKGROUND2_COLOR);
  879. o->callback((Fl_Callback*)cb_P2);
  880. } // Fl_Button* o
  881. set_module_parameters(o);
  882. o->end();
  883. } // Fl_Group* o
  884. { Fl_Button* o = new Fl_Button(190, 5, 15, 15, "E");
  885. o->tooltip("Envelope window");
  886. o->labelfont(1);
  887. o->labelsize(10);
  888. o->callback((Fl_Callback*)cb_E1);
  889. } // Fl_Button* o
  890. envASR->end();
  891. } // Fl_Group* envASR
  892. return envASR;
  893. }
  894. Fl_Group* EnvelopeUI::make_ADSRfilter_window() {
  895. { envADSRfilter = new Fl_Group(0, 0, 275, 70);
  896. envADSRfilter->box(FL_FLAT_BOX);
  897. envADSRfilter->color(FL_LIGHT1);
  898. envADSRfilter->selection_color(FL_BACKGROUND_COLOR);
  899. envADSRfilter->labeltype(FL_NO_LABEL);
  900. envADSRfilter->labelfont(1);
  901. envADSRfilter->labelsize(14);
  902. envADSRfilter->labelcolor(FL_FOREGROUND_COLOR);
  903. envADSRfilter->user_data((void*)(this));
  904. envADSRfilter->align(Fl_Align(FL_ALIGN_TOP));
  905. envADSRfilter->when(FL_WHEN_RELEASE);
  906. { Fl_Group* o = new Fl_Group(0, 0, 275, 70, "Filter Envelope");
  907. o->box(FL_UP_BOX);
  908. o->color(FL_CYAN);
  909. o->labeltype(FL_ENGRAVED_LABEL);
  910. o->labelsize(10);
  911. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  912. { WidgetPDial* o = e3aval = new WidgetPDial(5, 20, 30, 30, "A.val");
  913. e3aval->tooltip("Starting value");
  914. e3aval->box(FL_ROUND_UP_BOX);
  915. e3aval->color(FL_BACKGROUND_COLOR);
  916. e3aval->selection_color(FL_INACTIVE_COLOR);
  917. e3aval->labeltype(FL_NORMAL_LABEL);
  918. e3aval->labelfont(0);
  919. e3aval->labelsize(10);
  920. e3aval->labelcolor(FL_FOREGROUND_COLOR);
  921. e3aval->maximum(127);
  922. e3aval->step(1);
  923. e3aval->callback((Fl_Callback*)cb_e3aval);
  924. e3aval->align(Fl_Align(FL_ALIGN_BOTTOM));
  925. e3aval->when(FL_WHEN_CHANGED);
  926. o->value(env->PA_val);
  927. } // WidgetPDial* e3aval
  928. { WidgetPDial* o = e3adt = new WidgetPDial(40, 20, 30, 30, "A.dt");
  929. e3adt->tooltip("Attack time");
  930. e3adt->box(FL_ROUND_UP_BOX);
  931. e3adt->color(FL_BACKGROUND_COLOR);
  932. e3adt->selection_color(FL_INACTIVE_COLOR);
  933. e3adt->labeltype(FL_NORMAL_LABEL);
  934. e3adt->labelfont(0);
  935. e3adt->labelsize(10);
  936. e3adt->labelcolor(FL_FOREGROUND_COLOR);
  937. e3adt->maximum(127);
  938. e3adt->step(1);
  939. e3adt->callback((Fl_Callback*)cb_e3adt);
  940. e3adt->align(Fl_Align(FL_ALIGN_BOTTOM));
  941. e3adt->when(FL_WHEN_CHANGED);
  942. o->value(env->PA_dt);
  943. } // WidgetPDial* e3adt
  944. { WidgetPDial* o = e3dval = new WidgetPDial(75, 20, 30, 30, "D.val");
  945. e3dval->tooltip("decay value");
  946. e3dval->box(FL_ROUND_UP_BOX);
  947. e3dval->color(FL_BACKGROUND_COLOR);
  948. e3dval->selection_color(FL_INACTIVE_COLOR);
  949. e3dval->labeltype(FL_NORMAL_LABEL);
  950. e3dval->labelfont(0);
  951. e3dval->labelsize(10);
  952. e3dval->labelcolor(FL_FOREGROUND_COLOR);
  953. e3dval->maximum(127);
  954. e3dval->step(1);
  955. e3dval->callback((Fl_Callback*)cb_e3dval);
  956. e3dval->align(Fl_Align(FL_ALIGN_BOTTOM));
  957. e3dval->when(FL_WHEN_CHANGED);
  958. o->value(env->PD_val);
  959. } // WidgetPDial* e3dval
  960. { WidgetPDial* o = e3ddt = new WidgetPDial(110, 20, 30, 30, "D.dt");
  961. e3ddt->tooltip("decay time");
  962. e3ddt->box(FL_ROUND_UP_BOX);
  963. e3ddt->color(FL_BACKGROUND_COLOR);
  964. e3ddt->selection_color(FL_INACTIVE_COLOR);
  965. e3ddt->labeltype(FL_NORMAL_LABEL);
  966. e3ddt->labelfont(0);
  967. e3ddt->labelsize(10);
  968. e3ddt->labelcolor(FL_FOREGROUND_COLOR);
  969. e3ddt->maximum(127);
  970. e3ddt->step(1);
  971. e3ddt->callback((Fl_Callback*)cb_e3ddt);
  972. e3ddt->align(Fl_Align(FL_ALIGN_BOTTOM));
  973. e3ddt->when(FL_WHEN_CHANGED);
  974. o->value(env->PD_dt);
  975. } // WidgetPDial* e3ddt
  976. { WidgetPDial* o = e3rdt = new WidgetPDial(145, 20, 30, 30, "R.dt");
  977. e3rdt->tooltip("Release time");
  978. e3rdt->box(FL_ROUND_UP_BOX);
  979. e3rdt->color(FL_BACKGROUND_COLOR);
  980. e3rdt->selection_color(FL_INACTIVE_COLOR);
  981. e3rdt->labeltype(FL_NORMAL_LABEL);
  982. e3rdt->labelfont(0);
  983. e3rdt->labelsize(10);
  984. e3rdt->labelcolor(FL_FOREGROUND_COLOR);
  985. e3rdt->maximum(127);
  986. e3rdt->step(1);
  987. e3rdt->callback((Fl_Callback*)cb_e3rdt);
  988. e3rdt->align(Fl_Align(FL_ALIGN_BOTTOM));
  989. e3rdt->when(FL_WHEN_CHANGED);
  990. o->value(env->PR_dt);
  991. } // WidgetPDial* e3rdt
  992. { WidgetPDial* o = e3rval = new WidgetPDial(180, 20, 30, 30, "R.val");
  993. e3rval->tooltip("Release value");
  994. e3rval->box(FL_ROUND_UP_BOX);
  995. e3rval->color(FL_BACKGROUND_COLOR);
  996. e3rval->selection_color(FL_INACTIVE_COLOR);
  997. e3rval->labeltype(FL_NORMAL_LABEL);
  998. e3rval->labelfont(0);
  999. e3rval->labelsize(10);
  1000. e3rval->labelcolor(FL_FOREGROUND_COLOR);
  1001. e3rval->maximum(127);
  1002. e3rval->step(1);
  1003. e3rval->callback((Fl_Callback*)cb_e3rval);
  1004. e3rval->align(Fl_Align(FL_ALIGN_BOTTOM));
  1005. e3rval->when(FL_WHEN_CHANGED);
  1006. o->value(env->PR_val);
  1007. } // WidgetPDial* e3rval
  1008. { WidgetPDial* o = e3envstretch = new WidgetPDial(215, 25, 25, 25, "Stretch");
  1009. e3envstretch->tooltip("Envelope stretch (on lower notes makes the envelope longer)");
  1010. e3envstretch->box(FL_ROUND_UP_BOX);
  1011. e3envstretch->color(FL_BACKGROUND_COLOR);
  1012. e3envstretch->selection_color(FL_INACTIVE_COLOR);
  1013. e3envstretch->labeltype(FL_NORMAL_LABEL);
  1014. e3envstretch->labelfont(0);
  1015. e3envstretch->labelsize(10);
  1016. e3envstretch->labelcolor(FL_FOREGROUND_COLOR);
  1017. e3envstretch->maximum(127);
  1018. e3envstretch->step(1);
  1019. e3envstretch->callback((Fl_Callback*)cb_e3envstretch);
  1020. e3envstretch->align(Fl_Align(FL_ALIGN_BOTTOM));
  1021. e3envstretch->when(FL_WHEN_CHANGED);
  1022. o->value(env->Penvstretch);
  1023. } // WidgetPDial* e3envstretch
  1024. { Fl_Check_Button* o = e3forcedrelease = new Fl_Check_Button(250, 30, 15, 20, "frcR");
  1025. e3forcedrelease->tooltip("Forced Relase");
  1026. e3forcedrelease->down_box(FL_DOWN_BOX);
  1027. e3forcedrelease->labelsize(10);
  1028. e3forcedrelease->callback((Fl_Callback*)cb_e3forcedrelease);
  1029. e3forcedrelease->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
  1030. o->value(env->Pforcedrelease);
  1031. } // Fl_Check_Button* e3forcedrelease
  1032. { Fl_Button* o = new Fl_Button(255, 5, 15, 15, "E");
  1033. o->labelfont(1);
  1034. o->labelsize(10);
  1035. o->callback((Fl_Callback*)cb_E2);
  1036. } // Fl_Button* o
  1037. { Fl_Button* o = new Fl_Button(220, 5, 15, 15, "C");
  1038. o->box(FL_THIN_UP_BOX);
  1039. o->color((Fl_Color)179);
  1040. o->labelfont(1);
  1041. o->labelsize(10);
  1042. o->labelcolor(FL_BACKGROUND2_COLOR);
  1043. o->callback((Fl_Callback*)cb_C3);
  1044. } // Fl_Button* o
  1045. { Fl_Button* o = new Fl_Button(237, 5, 15, 15, "P");
  1046. o->box(FL_THIN_UP_BOX);
  1047. o->color((Fl_Color)179);
  1048. o->labelfont(1);
  1049. o->labelsize(10);
  1050. o->labelcolor(FL_BACKGROUND2_COLOR);
  1051. o->callback((Fl_Callback*)cb_P3);
  1052. } // Fl_Button* o
  1053. set_module_parameters(o);
  1054. o->end();
  1055. } // Fl_Group* o
  1056. envADSRfilter->end();
  1057. } // Fl_Group* envADSRfilter
  1058. return envADSRfilter;
  1059. }
  1060. Fl_Group* EnvelopeUI::make_ASRbw_window() {
  1061. { Fl_Group* o = envASRbw = new Fl_Group(0, 0, 210, 70);
  1062. envASRbw->box(FL_FLAT_BOX);
  1063. envASRbw->color(FL_BACKGROUND_COLOR);
  1064. envASRbw->selection_color(FL_BACKGROUND_COLOR);
  1065. envASRbw->labeltype(FL_NO_LABEL);
  1066. envASRbw->labelfont(0);
  1067. envASRbw->labelsize(14);
  1068. envASRbw->labelcolor(FL_FOREGROUND_COLOR);
  1069. envASRbw->user_data((void*)(this));
  1070. envASRbw->align(Fl_Align(FL_ALIGN_TOP));
  1071. envASRbw->when(FL_WHEN_RELEASE);
  1072. { Fl_Group* o = new Fl_Group(0, 0, 210, 70, "BandWidth Envelope");
  1073. o->box(FL_UP_BOX);
  1074. o->color(FL_CYAN);
  1075. o->labeltype(FL_ENGRAVED_LABEL);
  1076. o->labelsize(10);
  1077. o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  1078. { WidgetPDial* o = e4aval = new WidgetPDial(5, 20, 30, 30, "A.val");
  1079. e4aval->tooltip("Starting value");
  1080. e4aval->box(FL_ROUND_UP_BOX);
  1081. e4aval->color(FL_BACKGROUND_COLOR);
  1082. e4aval->selection_color(FL_INACTIVE_COLOR);
  1083. e4aval->labeltype(FL_NORMAL_LABEL);
  1084. e4aval->labelfont(0);
  1085. e4aval->labelsize(10);
  1086. e4aval->labelcolor(FL_FOREGROUND_COLOR);
  1087. e4aval->maximum(127);
  1088. e4aval->step(1);
  1089. e4aval->callback((Fl_Callback*)cb_e4aval);
  1090. e4aval->align(Fl_Align(FL_ALIGN_BOTTOM));
  1091. e4aval->when(FL_WHEN_CHANGED);
  1092. o->value(env->PA_val);
  1093. } // WidgetPDial* e4aval
  1094. { WidgetPDial* o = e4adt = new WidgetPDial(40, 20, 30, 30, "A.dt");
  1095. e4adt->tooltip("Attack time");
  1096. e4adt->box(FL_ROUND_UP_BOX);
  1097. e4adt->color(FL_BACKGROUND_COLOR);
  1098. e4adt->selection_color(FL_INACTIVE_COLOR);
  1099. e4adt->labeltype(FL_NORMAL_LABEL);
  1100. e4adt->labelfont(0);
  1101. e4adt->labelsize(10);
  1102. e4adt->labelcolor(FL_FOREGROUND_COLOR);
  1103. e4adt->maximum(127);
  1104. e4adt->step(1);
  1105. e4adt->callback((Fl_Callback*)cb_e4adt);
  1106. e4adt->align(Fl_Align(FL_ALIGN_BOTTOM));
  1107. e4adt->when(FL_WHEN_CHANGED);
  1108. o->value(env->PA_dt);
  1109. } // WidgetPDial* e4adt
  1110. { WidgetPDial* o = e4rval = new WidgetPDial(110, 20, 30, 30, "R.val");
  1111. e4rval->tooltip("Release value");
  1112. e4rval->box(FL_ROUND_UP_BOX);
  1113. e4rval->color(FL_BACKGROUND_COLOR);
  1114. e4rval->selection_color(FL_INACTIVE_COLOR);
  1115. e4rval->labeltype(FL_NORMAL_LABEL);
  1116. e4rval->labelfont(0);
  1117. e4rval->labelsize(10);
  1118. e4rval->labelcolor(FL_FOREGROUND_COLOR);
  1119. e4rval->maximum(127);
  1120. e4rval->step(1);
  1121. e4rval->callback((Fl_Callback*)cb_e4rval);
  1122. e4rval->align(Fl_Align(FL_ALIGN_BOTTOM));
  1123. e4rval->when(FL_WHEN_CHANGED);
  1124. o->value(env->PR_val);
  1125. } // WidgetPDial* e4rval
  1126. { WidgetPDial* o = e4rdt = new WidgetPDial(75, 20, 30, 30, "R.dt");
  1127. e4rdt->tooltip("Release time");
  1128. e4rdt->box(FL_ROUND_UP_BOX);
  1129. e4rdt->color(FL_BACKGROUND_COLOR);
  1130. e4rdt->selection_color(FL_INACTIVE_COLOR);
  1131. e4rdt->labeltype(FL_NORMAL_LABEL);
  1132. e4rdt->labelfont(0);
  1133. e4rdt->labelsize(10);
  1134. e4rdt->labelcolor(FL_FOREGROUND_COLOR);
  1135. e4rdt->maximum(127);
  1136. e4rdt->step(1);
  1137. e4rdt->callback((Fl_Callback*)cb_e4rdt);
  1138. e4rdt->align(Fl_Align(FL_ALIGN_BOTTOM));
  1139. e4rdt->when(FL_WHEN_CHANGED);
  1140. o->value(env->PR_dt);
  1141. } // WidgetPDial* e4rdt
  1142. { WidgetPDial* o = e4envstretch = new WidgetPDial(145, 25, 25, 25, "Stretch");
  1143. e4envstretch->tooltip("Envelope stretch (on lower notes makes the envelope longer)");
  1144. e4envstretch->box(FL_ROUND_UP_BOX);
  1145. e4envstretch->color(FL_BACKGROUND_COLOR);
  1146. e4envstretch->selection_color(FL_INACTIVE_COLOR);
  1147. e4envstretch->labeltype(FL_NORMAL_LABEL);
  1148. e4envstretch->labelfont(0);
  1149. e4envstretch->labelsize(10);
  1150. e4envstretch->labelcolor(FL_FOREGROUND_COLOR);
  1151. e4envstretch->maximum(127);
  1152. e4envstretch->step(1);
  1153. e4envstretch->callback((Fl_Callback*)cb_e4envstretch);
  1154. e4envstretch->align(Fl_Align(FL_ALIGN_BOTTOM));
  1155. e4envstretch->when(FL_WHEN_CHANGED);
  1156. o->value(env->Penvstretch);
  1157. } // WidgetPDial* e4envstretch
  1158. { Fl_Check_Button* o = e4forcedrelease = new Fl_Check_Button(180, 25, 15, 25, "frcR");
  1159. e4forcedrelease->tooltip("Forced release");
  1160. e4forcedrelease->down_box(FL_DOWN_BOX);
  1161. e4forcedrelease->labelsize(10);
  1162. e4forcedrelease->callback((Fl_Callback*)cb_e4forcedrelease);
  1163. e4forcedrelease->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
  1164. o->value(env->Pforcedrelease);
  1165. } // Fl_Check_Button* e4forcedrelease
  1166. { Fl_Button* o = new Fl_Button(155, 5, 15, 15, "C");
  1167. o->box(FL_THIN_UP_BOX);
  1168. o->color((Fl_Color)179);
  1169. o->labelfont(1);
  1170. o->labelsize(10);
  1171. o->labelcolor(FL_BACKGROUND2_COLOR);
  1172. o->callback((Fl_Callback*)cb_C4);
  1173. } // Fl_Button* o
  1174. { Fl_Button* o = new Fl_Button(172, 5, 15, 15, "P");
  1175. o->box(FL_THIN_UP_BOX);
  1176. o->color((Fl_Color)179);
  1177. o->labelfont(1);
  1178. o->labelsize(10);
  1179. o->labelcolor(FL_BACKGROUND2_COLOR);
  1180. o->callback((Fl_Callback*)cb_P4);
  1181. } // Fl_Button* o
  1182. set_module_parameters(o);
  1183. o->end();
  1184. } // Fl_Group* o
  1185. { Fl_Button* o = new Fl_Button(190, 5, 15, 15, "E");
  1186. o->labelfont(1);
  1187. o->labelsize(10);
  1188. o->callback((Fl_Callback*)cb_E3);
  1189. } // Fl_Button* o
  1190. set_module_parameters(o);
  1191. envASRbw->end();
  1192. } // Fl_Group* envASRbw
  1193. return envASRbw;
  1194. }
  1195. Fl_Group* EnvelopeUI::make_free_window() {
  1196. { Fl_Group* o = envfree = new Fl_Group(0, 0, 205, 70);
  1197. envfree->box(FL_FLAT_BOX);
  1198. envfree->color(FL_LIGHT1);
  1199. envfree->selection_color(FL_BACKGROUND_COLOR);
  1200. envfree->labeltype(FL_NO_LABEL);
  1201. envfree->labelfont(1);
  1202. envfree->labelsize(14);
  1203. envfree->labelcolor(FL_FOREGROUND_COLOR);
  1204. envfree->user_data((void*)(this));
  1205. envfree->align(Fl_Align(FL_ALIGN_TOP));
  1206. envfree->when(FL_WHEN_RELEASE);
  1207. { Fl_Group* o = envfreegroup = new Fl_Group(0, 0, 205, 70, "Amplitude Envelope");
  1208. envfreegroup->box(FL_UP_BOX);
  1209. envfreegroup->color(FL_CYAN);
  1210. envfreegroup->labeltype(FL_ENGRAVED_LABEL);
  1211. envfreegroup->labelsize(10);
  1212. envfreegroup->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
  1213. { EnvelopeFreeEdit* o = freeeditsmall = new EnvelopeFreeEdit(5, 20, 195, 45, "Envelope");
  1214. freeeditsmall->box(FL_FLAT_BOX);
  1215. freeeditsmall->color(FL_FOREGROUND_COLOR);
  1216. freeeditsmall->selection_color(FL_BACKGROUND_COLOR);
  1217. freeeditsmall->labeltype(FL_NORMAL_LABEL);
  1218. freeeditsmall->labelfont(0);
  1219. freeeditsmall->labelsize(14);
  1220. freeeditsmall->labelcolor(FL_FOREGROUND_COLOR);
  1221. freeeditsmall->callback((Fl_Callback*)cb_freeeditsmall);
  1222. freeeditsmall->align(Fl_Align(FL_ALIGN_CENTER));
  1223. freeeditsmall->when(FL_WHEN_RELEASE);
  1224. Fl_Group::current()->resizable(freeeditsmall);
  1225. o->init(env);
  1226. } // EnvelopeFreeEdit* freeeditsmall
  1227. { Fl_Button* o = new Fl_Button(185, 5, 15, 15, "E");
  1228. o->labelfont(1);
  1229. o->labelsize(10);
  1230. o->callback((Fl_Callback*)cb_E4);
  1231. } // Fl_Button* o
  1232. { Fl_Button* o = new Fl_Button(150, 5, 15, 15, "C");
  1233. o->box(FL_THIN_UP_BOX);
  1234. o->color((Fl_Color)179);
  1235. o->labelfont(1);
  1236. o->labelsize(10);
  1237. o->labelcolor(FL_BACKGROUND2_COLOR);
  1238. o->callback((Fl_Callback*)cb_C5);
  1239. } // Fl_Button* o
  1240. { Fl_Button* o = new Fl_Button(167, 5, 15, 15, "P");
  1241. o->box(FL_THIN_UP_BOX);
  1242. o->color((Fl_Color)179);
  1243. o->labelfont(1);
  1244. o->labelsize(10);
  1245. o->labelcolor(FL_BACKGROUND2_COLOR);
  1246. o->callback((Fl_Callback*)cb_P5);
  1247. } // Fl_Button* o
  1248. set_module_parameters(o);
  1249. envfreegroup->end();
  1250. Fl_Group::current()->resizable(envfreegroup);
  1251. } // Fl_Group* envfreegroup
  1252. set_module_parameters(o);
  1253. envfree->end();
  1254. } // Fl_Group* envfree
  1255. return envfree;
  1256. }
  1257. void EnvelopeUI::init(EnvelopeParams *env_) {
  1258. env=env_;
  1259. make_ADSR_window();
  1260. make_ASR_window();
  1261. make_ADSRfilter_window();
  1262. make_ASRbw_window();
  1263. make_free_window();
  1264. make_freemode_edit_window();
  1265. envwindow=NULL;
  1266. if (env->Envmode==3) envfreegroup->label("Frequency Envelope");
  1267. if (env->Envmode==4) envfreegroup->label("Filter Envelope");
  1268. if (env->Envmode==5) envfreegroup->label("Bandwidth Envelope");
  1269. freemodeeditwindow->label(this->label());
  1270. freeeditsmall->setpair(freeedit);
  1271. freeedit->setpair(freeeditsmall);
  1272. refresh();
  1273. }
  1274. void EnvelopeUI::reinit() {
  1275. if (env->Pfreemode!=0){
  1276. int answer=fl_choice("Disable the free mode of the Envelope?","No","Yes",NULL);
  1277. if (env->Pfreemode!=0) freemodebutton->value(1);
  1278. else freemodebutton->value(0);
  1279. if (answer==0) return;
  1280. };
  1281. if (env->Pfreemode==0) env->Pfreemode=1;
  1282. else env->Pfreemode=0;
  1283. hide();
  1284. int winx=freemodeeditwindow->x();
  1285. int winy=freemodeeditwindow->y();
  1286. freemodeeditwindow->hide();
  1287. envwindow->hide();
  1288. Fl_Group *par=envwindow->parent();
  1289. par->hide();
  1290. refresh();
  1291. envwindow->show();
  1292. par->redraw();
  1293. par->show();
  1294. show();
  1295. freemodeeditwindow->position(winx,winy);
  1296. freemodeeditwindow->show();
  1297. if (env->Pfreemode!=0) {
  1298. freemodebutton->value(1);
  1299. addpoint->show();
  1300. deletepoint->show();
  1301. forcedreleasecheck->show();
  1302. }else{
  1303. freemodebutton->value(0);
  1304. addpoint->hide();
  1305. deletepoint->hide();
  1306. forcedreleasecheck->hide();
  1307. };
  1308. }
  1309. void EnvelopeUI::refresh() {
  1310. freemodebutton->value(env->Pfreemode);
  1311. sustaincounter->value(env->Penvsustain);
  1312. if (env->Pfreemode==0) sustaincounter->hide();
  1313. else sustaincounter->show();
  1314. sustaincounter->maximum(env->Penvpoints-2);
  1315. envstretchdial->value(env->Penvstretch);
  1316. if (env->Pfreemode==0) envstretchdial->hide();
  1317. else envstretchdial->show();
  1318. linearenvelopecheck->value(env->Plinearenvelope);
  1319. if ((env->Pfreemode==0)||(env->Envmode>2)) linearenvelopecheck->hide();
  1320. else linearenvelopecheck->show();
  1321. forcedreleasecheck->value(env->Pforcedrelease);
  1322. if (env->Pfreemode==0) forcedreleasecheck->hide();
  1323. freeedit->redraw();
  1324. if (env->Pfreemode==0){
  1325. switch(env->Envmode){
  1326. case(1):
  1327. case(2):
  1328. e1adt->value(env->PA_dt);
  1329. e1ddt->value(env->PD_dt);
  1330. e1sval->value(env->PS_val);
  1331. e1rdt->value(env->PR_dt);
  1332. e1envstretch->value(env->Penvstretch);
  1333. e1linearenvelope->value(env->Plinearenvelope);
  1334. e1forcedrelease->value(env->Pforcedrelease);
  1335. break;
  1336. case(3):
  1337. e2aval->value(env->PA_val);
  1338. e2adt->value(env->PA_dt);
  1339. e2rdt->value(env->PR_dt);
  1340. e2rval->value(env->PR_val);
  1341. e2envstretch->value(env->Penvstretch);
  1342. e2forcedrelease->value(env->Pforcedrelease);
  1343. break;
  1344. case(4):
  1345. e3aval->value(env->PA_val);
  1346. e3adt->value(env->PA_dt);
  1347. e3dval->value(env->PD_val);
  1348. e3ddt->value(env->PD_dt);
  1349. e3rdt->value(env->PR_dt);
  1350. e3rval->value(env->PR_val);
  1351. e3envstretch->value(env->Penvstretch);
  1352. e3forcedrelease->value(env->Pforcedrelease);
  1353. break;
  1354. case(5):
  1355. e4aval->value(env->PA_val);
  1356. e4adt->value(env->PA_dt);
  1357. e4rdt->value(env->PR_dt);
  1358. e4rval->value(env->PR_val);
  1359. e4envstretch->value(env->Penvstretch);
  1360. e4forcedrelease->value(env->Pforcedrelease);
  1361. break;
  1362. default:
  1363. break;
  1364. };
  1365. }else{
  1366. envfree->redraw();
  1367. };
  1368. envADSR->hide();
  1369. envASR->hide();
  1370. envADSRfilter->hide();
  1371. envASRbw->hide();
  1372. envfree->hide();
  1373. if (env->Pfreemode==0){
  1374. switch(env->Envmode){
  1375. case(1):
  1376. case(2):
  1377. envwindow=envADSR;
  1378. break;
  1379. case(3):
  1380. envwindow=envASR;
  1381. break;
  1382. case(4):
  1383. envwindow=envADSRfilter;
  1384. break;
  1385. case(5):
  1386. envwindow=envASRbw;
  1387. break;
  1388. default:
  1389. break;
  1390. };
  1391. }else{
  1392. envwindow=envfree;
  1393. };
  1394. envwindow->resize(this->x(),this->y(),this->w(),this->h());
  1395. envwindow->show();
  1396. }