home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 November / CMCD1104.ISO / Software / Complet / ZynAddFX / Setup_ZynAddSubFX-2.1.1.exe / ADnoteUI.fl < prev    next >
Encoding:
FLTK User Interface Designer  |  2004-09-27  |  45.1 KB  |  1,094 lines

  1. # data file for the Fltk User Interface Designer (fluid)
  2. version 1.0104 
  3. header_name {.h} 
  4. code_name {.cc}
  5. decl {//Copyright (c) 2002-2004 Nasca Octavian Paul} {} 
  6.  
  7. decl {//License: GNU GPL version 2} {} 
  8.  
  9. decl {\#include "../Params/ADnoteParameters.h"} {public
  10.  
  11. decl {\#include "../Misc/Util.h"} {public
  12.  
  13. decl {\#include "../Misc/Master.h"} {public
  14.  
  15. decl {\#include "ResonanceUI.h"} {public
  16.  
  17. decl {\#include <FL/Fl_Box.H>} {public
  18.  
  19. decl {\#include <FL/Fl_Group.H>} {public
  20.  
  21. decl {\#include <math.h>} {} 
  22.  
  23. decl {\#include <stdio.h>} {} 
  24.  
  25. decl {\#include <stdlib.h>} {} 
  26.  
  27. decl {\#include <string.h>} {} 
  28.  
  29. decl {\#include "WidgetPDial.h"} {public
  30.  
  31. decl {\#include "EnvelopeUI.h"} {public
  32.  
  33. decl {\#include "LFOUI.h"} {public
  34.  
  35. decl {\#include "FilterUI.h"} {public
  36.  
  37. decl {\#include "OscilGenUI.h"} {public
  38.  
  39. decl {\#include "PresetsUI.h"} {public
  40.  
  41. class ADvoicelistitem {: {public Fl_Group}
  42. } {
  43.   Function {make_window()} {private
  44.   } {
  45.     Fl_Window ADnoteVoiceListItem {
  46.       private xywh {335 489 615 30} type Double hide
  47.       class Fl_Group
  48.     } {
  49.       Fl_Group voicelistitemgroup {
  50.         private xywh {50 0 570 25} box FLAT_BOX
  51.         code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();}
  52.       } {
  53.         Fl_Value_Slider voicevolume {
  54.           callback {pars->VoicePar[nvoice].PVolume=(int)o->value();}
  55.           tooltip Volume xywh {90 5 115 20} type {Horz Knob} box FLAT_BOX labelsize 8 align 5 maximum 127 step 1
  56.           code0 {o->value(pars->VoicePar[nvoice].PVolume);}
  57.         }
  58.         Fl_Check_Button voiceresonanceenabled {
  59.           callback {pars->VoicePar[nvoice].Presonance=(int)o->value();}
  60.           tooltip {Resonance On/Off} xywh {245 7 15 17} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 12 align 4
  61.           code0 {o->value(pars->VoicePar[nvoice].Presonance);}
  62.         }
  63.         Fl_Value_Slider voicelfofreq {
  64.           callback {pars->VoicePar[nvoice].FreqLfo->Pintensity=(int)o->value();}
  65.           tooltip {Frequency LFO amount} xywh {500 5 115 20} type {Horz Knob} box FLAT_BOX labelsize 8 align 5 maximum 127 step 1
  66.           code0 {o->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);}
  67.         }
  68.         Fl_Dial voicepanning {
  69.           callback {pars->VoicePar[nvoice].PPanning=(int) o->value();}
  70.           tooltip {Panning (leftmost is Random)} xywh {215 5 20 20} box ROUND_UP_BOX labelsize 11 align 4 maximum 127 step 1
  71.           code0 {o->value(pars->VoicePar[nvoice].PPanning);}
  72.           class WidgetPDial
  73.         }
  74.         Fl_Group voiceoscil {open
  75.           xywh {60 5 30 20} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
  76.           code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  77.           code1 {osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);}
  78.           code2 {if (pars->VoicePar[nvoice].Pextoscil != -1) {osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,master);}}
  79.         } {}
  80.         Fl_Value_Output detunevalueoutput {
  81.           callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune));}
  82.           xywh {265 5 45 20} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  83.           code0 {o->value(getdetune(pars->VoicePar[nvoice].PDetuneType,0,pars->VoicePar[nvoice].PDetune));}
  84.         }
  85.         Fl_Slider voicedetune {
  86.           callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
  87. detunevalueoutput->do_callback();}
  88.           tooltip {Fine Detune (cents)} xywh {315 5 185 20} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
  89.           code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);}
  90.         }
  91.         Fl_Box noiselabel {
  92.           label N
  93.           callback {if (pars->VoicePar[nvoice].Type==0) {
  94.   o->hide();
  95.   voiceresonanceenabled->activate();
  96.   detunevalueoutput->activate();
  97.   voicedetune->activate();
  98.   voicelfofreq->activate();
  99.   voiceoscil->activate();
  100. } else {
  101.   o->show();
  102.   voiceresonanceenabled->deactivate();
  103.   detunevalueoutput->deactivate();
  104.   voicedetune->deactivate();
  105.   voicelfofreq->deactivate();
  106.   voiceoscil->deactivate();
  107. };}
  108.           xywh {65 5 20 20} labelfont 1 labelsize 16 labelcolor 7
  109.           code0 {if (pars->VoicePar[nvoice].Type==0) o->hide();}
  110.         }
  111.       }
  112.       Fl_Check_Button voiceenabled {
  113.         label 01
  114.         callback {pars->VoicePar[nvoice].Enabled=(int)o->value();
  115. if (o->value()==0) voicelistitemgroup->deactivate();
  116. else voicelistitemgroup->activate();
  117. o->redraw();} selected
  118.         private xywh {30 5 20 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 4
  119.         code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));}
  120.         code1 {o->value(pars->VoicePar[nvoice].Enabled);}
  121.       }
  122.     }
  123.   }
  124.   Function {ADvoicelistitem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
  125.     code {nvoice=0;
  126. pars=NULL;} {}
  127.   }
  128.   Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {} {
  129.     code {pars=parameters;
  130. nvoice=nvoice_;
  131. master=master_;
  132. make_window();
  133. ADnoteVoiceListItem->show();
  134. end();} {}
  135.   }
  136.   Function {refreshlist()} {} {
  137.     code {voiceenabled->value(pars->VoicePar[nvoice].Enabled);
  138. voiceresonanceenabled->value(pars->VoicePar[nvoice].Presonance);
  139. voicevolume->value(pars->VoicePar[nvoice].PVolume);
  140. voicedetune->value(pars->VoicePar[nvoice].PDetune-8192);
  141. voicepanning->value(pars->VoicePar[nvoice].PPanning);
  142. voicelfofreq->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);
  143. if (pars->VoicePar[nvoice].Pextoscil != -1) {
  144.   osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
  145. } else 
  146.   osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
  147. if (pars->VoicePar[nvoice].Enabled==0) voicelistitemgroup->deactivate();
  148.     else voicelistitemgroup->activate();
  149. detunevalueoutput->do_callback();
  150. noiselabel->do_callback();
  151. ADnoteVoiceListItem->redraw();} {}
  152.   }
  153.   Function {~ADvoicelistitem()} {} {
  154.     code {ADnoteVoiceListItem->hide();
  155. //delete(ADnoteVoiceListItem);} {}
  156.   }
  157.   decl {ADnoteParameters *pars;} {}
  158.   decl {int nvoice;} {}
  159.   decl {Oscilloscope *osc;} {}
  160.   decl {Master *master;} {}
  161.  
  162. class ADvoiceUI {: {public Fl_Group}
  163. } {
  164.   Function {make_window()} {} {
  165.     Fl_Window ADnoteVoiceParameters {
  166.       label Voice
  167.       xywh {231 132 765 525} type Double hide
  168.       class Fl_Group
  169.     } {
  170.       Fl_Group voiceparametersgroup {
  171.         xywh {0 0 765 525} box THIN_UP_BOX color 48
  172.         code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();}
  173.       } {
  174.         Fl_Group voicemodegroup {
  175.           xywh {0 5 760 515}
  176.         } {
  177.           Fl_Group voiceFMparametersgroup {
  178.             label MODULATOR
  179.             xywh {530 5 230 515} box THIN_UP_FRAME color 48 labeltype EMBOSSED_LABEL labelfont 1 labelsize 18 align 17
  180.             code0 {if (pars->VoicePar[nvoice].PFMEnabled==0) o->deactivate();}
  181.           } {
  182.             Fl_Group modfrequency {
  183.               label {Mod.FREQUENCY}
  184.               xywh {535 220 220 145} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  185.             } {
  186.               Fl_Group voiceFMfreqenvgroup {
  187.                 label {ADSynth Modulator - Frequency Envelope}
  188.                 xywh {540 290 205 70} box FLAT_BOX color 51 align 144
  189.                 code0 {o->init(pars->VoicePar[nvoice].FMFreqEnvelope);}
  190.                 code1 {if (pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled==0) o->deactivate();}
  191.                 class EnvelopeUI
  192.               } {}
  193.               Fl_Check_Button {} {
  194.                 label Enable
  195.                 callback {pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled=(int)o->value();
  196. if (o->value()==0) voiceFMfreqenvgroup->deactivate();
  197. else voiceFMfreqenvgroup->activate();
  198. o->redraw();}
  199.                 tooltip {Forced Relase} xywh {545 295 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  200.                 code0 {o->value(pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled);}
  201.               }
  202.               Fl_Counter {} {
  203.                 label {Coarse Det.}
  204.                 callback {int k=(int) o->value();
  205. if (k<0) k+=1024;
  206. pars->VoicePar[nvoice].PFMCoarseDetune = k+
  207.    (pars->VoicePar[nvoice].PFMCoarseDetune/1024)*1024;}
  208.                 tooltip {Coarse Detune} xywh {685 270 60 15} labelsize 11 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 12
  209.                 code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune%1024;}
  210.                 code1 {if (k>=512) k-=1024;}
  211.                 code2 {o->value(k);}
  212.                 code3 {o->lstep(10);}
  213.               }
  214.               Fl_Counter {} {
  215.                 label Octave
  216.                 callback {int k=(int) o->value();
  217. if (k<0) k+=16;
  218. pars->VoicePar[nvoice].PFMCoarseDetune = k*1024+
  219.    pars->VoicePar[nvoice].PFMCoarseDetune%1024;}
  220.                 tooltip Octave xywh {625 270 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 12
  221.                 code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune/1024;}
  222.                 code1 {if (k>=8) k-=16;}
  223.                 code2 {o->value(k);}
  224.               }
  225.               Fl_Slider {} {
  226.                 callback {pars->VoicePar[nvoice].PFMDetune=(int)o->value()+8192;
  227. fmdetunevalueoutput->do_callback();}
  228.                 tooltip {Fine Detune (cents)} xywh {590 245 160 10} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
  229.                 code0 {o->value(pars->VoicePar[nvoice].PFMDetune-8192);}
  230.               }
  231.               Fl_Value_Output fmdetunevalueoutput {
  232.                 label Detune
  233.                 callback {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));}
  234.                 xywh {540 245 45 13} labelsize 8 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 8
  235.                 code0 {o->value(getdetune(pars->VoicePar[nvoice].PFMDetuneType,0,pars->VoicePar[nvoice].PFMDetune));}
  236.               }
  237.               Fl_Choice {} {
  238.                 label {Detune Type}
  239.                 callback {pars->VoicePar[nvoice].PFMDetuneType=(int) o->value();
  240. fmdetunevalueoutput->do_callback();} open
  241.                 xywh {540 270 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  242.                 code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  243.                 code1 {o->value(pars->VoicePar[nvoice].PFMDetuneType);}
  244.               } {}
  245.             }
  246.             Fl_Group {} {
  247.               label {Mod.AMPLITUDE}
  248.               xywh {535 60 220 160} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  249.             } {
  250.               Fl_Value_Slider {} {
  251.                 label Vol
  252.                 callback {pars->VoicePar[nvoice].PFMVolume=(int)o->value();}
  253.                 tooltip Volume xywh {540 80 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  254.                 code0 {o->value(pars->VoicePar[nvoice].PFMVolume);}
  255.               }
  256.               Fl_Value_Slider {} {
  257.                 label {V.Sns}
  258.                 callback {pars->VoicePar[nvoice].PFMVelocityScaleFunction=(int) o->value();}
  259.                 tooltip {Velocity Sensing Function (rightmost to disable)} xywh {540 100 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  260.                 code0 {o->value(pars->VoicePar[nvoice].PFMVelocityScaleFunction);}
  261.               }
  262.               Fl_Group voiceFMampenvgroup {
  263.                 label {ADSynth Modulator - Amplitude Envelope} open
  264.                 xywh {540 145 205 70} box FLAT_BOX color 51 align 144
  265.                 code0 {o->init(pars->VoicePar[nvoice].FMAmpEnvelope);}
  266.                 code1 {if (pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled==0) o->deactivate();}
  267.                 class EnvelopeUI
  268.               } {}
  269.               Fl_Check_Button {} {
  270.                 label Enable
  271.                 callback {pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled=(int)o->value();
  272. if (o->value()==0) voiceFMampenvgroup->deactivate();
  273. else voiceFMampenvgroup->activate();
  274. o->redraw();}
  275.                 tooltip {Forced Relase} xywh {545 150 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  276.                 code0 {o->value(pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled);}
  277.               }
  278.               Fl_Value_Slider {} {
  279.                 label {F.Damp}
  280.                 callback {pars->VoicePar[nvoice].PFMVolumeDamp=(int) o->value()+64;}
  281.                 tooltip {Modulator Damp at Higher frequency} xywh {540 120 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 minimum -64 maximum 63 step 1
  282.                 code0 {o->value(pars->VoicePar[nvoice].PFMVolumeDamp-64);}
  283.               }
  284.             }
  285.             Fl_Group modoscil {
  286.               xywh {535 365 220 150}
  287.             } {
  288.               Fl_Group fmoscil {open
  289.                 xywh {535 405 220 110} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
  290.                 code0 {oscFM=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  291.                 code1 {int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;}
  292.                 code2 {oscFM->init(pars->VoicePar[nv].FMSmp,0,pars->VoicePar[nvoice].PFMoscilphase,master);}
  293.               } {}
  294.               Fl_Box {} {
  295.                 label {Mod.Oscillator}
  296.                 xywh {535 365 155 20} labelfont 1 align 20
  297.               }
  298.               Fl_Button changeFMoscilbutton {
  299.                 label Change
  300.                 callback {if (oscedit!=NULL) delete(oscedit);
  301.  
  302. int nv=nvoice;
  303. if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;
  304.  
  305. oscedit=new OscilEditor(pars->VoicePar[nv].FMSmp,fmoscil,NULL,master);}
  306.                 xywh {700 370 55 15} box THIN_UP_BOX labelfont 1 labelsize 12
  307.                 code0 {if (pars->VoicePar[nvoice].PextFMoscil>=0) o->labelcolor(FL_BLUE);}
  308.               }
  309.               Fl_Slider {} {
  310.                 label Phase
  311.                 callback {pars->VoicePar[nvoice].PFMoscilphase=64-(int)o->value();
  312. oscFM->phase=64-(int) o->value();
  313. fmoscil->redraw();}
  314.                 xywh {665 395 65 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
  315.                 code0 {o->value(64-pars->VoicePar[nvoice].PFMoscilphase);}
  316.               }
  317.               Fl_Choice {} {
  318.                 label Use
  319.                 callback {pars->VoicePar[nvoice].PextFMoscil=(int)o->value()-1;
  320. if ((int) o->value() != 0) {
  321.     oscFM->init(pars->VoicePar[(int) o->value()-1].FMSmp,master);
  322.     changeFMoscilbutton->labelcolor(FL_BLUE);
  323. } else { 
  324.     oscFM->init(pars->VoicePar[nvoice].FMSmp,master);
  325.     changeFMoscilbutton->labelcolor(FL_BLACK);
  326. };
  327. voiceFMparametersgroup->redraw();} open
  328.                 xywh {560 390 75 15} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
  329.                 code0 {o->add("Internal");}
  330.                 code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtM.%2d",i+1);o->add(tmp);};}
  331.                 code3 {o->value(pars->VoicePar[nvoice].PextFMoscil+1);}
  332.               } {}
  333.             }
  334.             Fl_Choice {} {
  335.               label {External Mod.}
  336.               callback {pars->VoicePar[nvoice].PFMVoice=(int)o->value()-1;
  337. if ((int) o->value() != 0) {
  338.     modoscil->deactivate();
  339.     modfrequency->deactivate();
  340. } else { 
  341.     modoscil->activate();
  342.     modfrequency->activate();
  343. };
  344. voiceFMparametersgroup->redraw();} open
  345.               xywh {635 40 85 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  346.               code0 {o->add("OFF");}
  347.               code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtMod.%2d",i+1);o->add(tmp);};}
  348.               code2 {o->value(pars->VoicePar[nvoice].PFMVoice+1);}
  349.               code3 {if ((int) o->value() != 0) {modoscil->deactivate();modfrequency->deactivate();}}
  350.             } {}
  351.           }
  352.           Fl_Choice {} {
  353.             label {Type:}
  354.             callback {pars->VoicePar[nvoice].PFMEnabled=(int)o->value();
  355. if (o->value()==0) voiceFMparametersgroup->deactivate();
  356. else voiceFMparametersgroup->activate();
  357. o->redraw();}
  358.             xywh {535 40 80 20} down_box BORDER_BOX align 5
  359.             code0 {o->value(pars->VoicePar[nvoice].PFMEnabled);}
  360.           } {
  361.             menuitem {} {
  362.               label OFF
  363.               xywh {40 40 100 20} labelfont 1
  364.             }
  365.             menuitem {} {
  366.               label MORPH
  367.               xywh {50 50 100 20} labelfont 1
  368.             }
  369.             menuitem {} {
  370.               label RING
  371.               xywh {60 60 100 20} labelfont 1
  372.             }
  373.             menuitem {} {
  374.               label PM
  375.               xywh {70 70 100 20} labelfont 1
  376.             }
  377.             menuitem {} {
  378.               label FM
  379.               xywh {80 80 100 20} labelfont 1
  380.             }
  381.             menuitem {} {
  382.               label PITCH
  383.               xywh {90 90 100 20} labelfont 1 deactivate
  384.             }
  385.           }
  386.           Fl_Group {} {
  387.             label FREQUENCY
  388.             xywh {5 250 525 120} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  389.           } {
  390.             Fl_Group voicefreqenvgroup {
  391.               label {ADSynth Voice - Frequency Envelope} open
  392.               xywh {10 290 205 70} box FLAT_BOX color 51 align 144
  393.               code0 {o->init(pars->VoicePar[nvoice].FreqEnvelope);}
  394.               code1 {if (pars->VoicePar[nvoice].PFreqEnvelopeEnabled==0) o->deactivate();}
  395.               class EnvelopeUI
  396.             } {}
  397.             Fl_Check_Button {} {
  398.               label Enable
  399.               callback {pars->VoicePar[nvoice].PFreqEnvelopeEnabled=(int)o->value();
  400. if (o->value()==0) voicefreqenvgroup->deactivate();
  401. else voicefreqenvgroup->activate();
  402. o->redraw();}
  403.               tooltip {Forced Relase} xywh {15 295 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  404.               code0 {o->value(pars->VoicePar[nvoice].PFreqEnvelopeEnabled);}
  405.             }
  406.             Fl_Group voicefreqlfogroup {
  407.               label {Frequency LFO     } open
  408.               xywh {215 290 230 70} box FLAT_BOX color 47 align 144
  409.               code0 {o->init(pars->VoicePar[nvoice].FreqLfo);}
  410.               code1 {if (pars->VoicePar[nvoice].PFreqLfoEnabled==0) o->deactivate();}
  411.               class LFOUI
  412.             } {}
  413.             Fl_Check_Button {} {
  414.               label Enable
  415.               callback {pars->VoicePar[nvoice].PFreqLfoEnabled=(int)o->value();
  416. if (o->value()==0) voicefreqlfogroup->deactivate();
  417. else voicefreqlfogroup->activate();
  418. o->redraw();}
  419.               tooltip {Forced Relase} xywh {220 295 55 10} down_box DOWN_BOX labelfont 1 labelsize 12 align 24
  420.               code0 {o->value(pars->VoicePar[nvoice].PFreqLfoEnabled);}
  421.             }
  422.             Fl_Counter {} {
  423.               label Octave
  424.               callback {int k=(int) o->value();
  425. if (k<0) k+=16;
  426. pars->VoicePar[nvoice].PCoarseDetune = k*1024+
  427.    pars->VoicePar[nvoice].PCoarseDetune%1024;}
  428.               tooltip Octave xywh {470 270 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 12
  429.               code0 {int k=pars->VoicePar[nvoice].PCoarseDetune/1024;}
  430.               code1 {if (k>=8) k-=16;}
  431.               code2 {o->value(k);}
  432.             }
  433.             Fl_Counter {} {
  434.               label {Coarse Det.}
  435.               callback {int k=(int) o->value();
  436. if (k<0) k+=1024;
  437. pars->VoicePar[nvoice].PCoarseDetune = k+
  438.    (pars->VoicePar[nvoice].PCoarseDetune/1024)*1024;}
  439.               tooltip {Coarse Detune} xywh {455 340 60 20} labelsize 11 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 12
  440.               code0 {int k=pars->VoicePar[nvoice].PCoarseDetune%1024;}
  441.               code1 {if (k>=512) k-=1024;}
  442.               code2 {o->value(k);}
  443.               code3 {o->lstep(10);}
  444.             }
  445.             Fl_Slider {} {
  446.               callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
  447. detunevalueoutput->do_callback();}
  448.               tooltip {Fine Detune (cents)} xywh {58 272 392 13} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
  449.               code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);}
  450.             }
  451.             Fl_Value_Output detunevalueoutput {
  452.               label Detune
  453.               callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune));}
  454.               xywh {10 272 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  455.               code0 {o->value(getdetune(pars->VoicePar[nvoice].PDetuneType,0,pars->VoicePar[nvoice].PDetune));}
  456.             }
  457.             Fl_Check_Button {} {
  458.               label 440Hz
  459.               callback {int x=(int) o->value();
  460. pars->VoicePar[nvoice].Pfixedfreq=x;
  461. if (x==0) fixedfreqetdial->deactivate();
  462.     else fixedfreqetdial->activate();}
  463.               tooltip {Set the voice base frequency to 440Hz} xywh {345 253 55 15} down_box DOWN_BOX labelfont 1 labelsize 12
  464.               code0 {o->value(pars->VoicePar[nvoice].Pfixedfreq);}
  465.             }
  466.             Fl_Dial fixedfreqetdial {
  467.               label {Eq.T.}
  468.               callback {pars->VoicePar[nvoice].PfixedfreqET=(int) o->value();}
  469.               tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {405 255 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
  470.               code0 {o->value(pars->VoicePar[nvoice].PfixedfreqET);}
  471.               code1 {if (pars->VoicePar[nvoice].Pfixedfreq==0) o->deactivate();}
  472.               class WidgetPDial
  473.             }
  474.             Fl_Choice {} {
  475.               label {Detune Type}
  476.               callback {pars->VoicePar[nvoice].PDetuneType=(int) o->value();
  477. detunevalueoutput->do_callback();} open
  478.               xywh {450 305 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  479.               code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  480.               code1 {o->value(pars->VoicePar[nvoice].PDetuneType);}
  481.             } {}
  482.           }
  483.           Fl_Group voiceoscil {
  484.             xywh {80 375 445 145} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
  485.             code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  486.             code1 {int nv=nvoice; if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;}
  487.             code2 {osc->init(pars->VoicePar[nv].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);}
  488.           } {}
  489.           Fl_Button changevoiceoscilbutton {
  490.             label Change
  491.             callback {if (oscedit!=NULL) delete(oscedit);
  492.  
  493. int nv=nvoice;
  494. if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;
  495.  
  496. oscedit=new OscilEditor(pars->VoicePar[nv].OscilSmp,voiceoscil,NULL,master);}
  497.             xywh {5 475 65 20} box THIN_UP_BOX labelfont 1 labelsize 12
  498.             code0 {if (pars->VoicePar[nvoice].Pextoscil>=0) o->labelcolor(FL_BLUE);}
  499.           }
  500.           Fl_Box {} {
  501.             label {Voice Oscillator}
  502.             xywh {5 375 75 35} labelfont 1 align 128
  503.           }
  504.           Fl_Slider {} {
  505.             label Phase
  506.             callback {pars->VoicePar[nvoice].Poscilphase=64-(int)o->value();
  507. osc->phase=64-(int) o->value();
  508. voiceoscil->redraw();}
  509.             xywh {10 420 65 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
  510.             code0 {o->value(64-pars->VoicePar[nvoice].Poscilphase);}
  511.           }
  512.           Fl_Check_Button {} {
  513.             label {R.}
  514.             callback {pars->VoicePar[nvoice].Presonance=(int) o->value();}
  515.             tooltip {Resonance On/Off} xywh {210 5 35 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 12
  516.             code0 {o->value(pars->VoicePar[nvoice].Presonance);}
  517.           }
  518.           Fl_Choice {} {
  519.             label {Use Oscil.}
  520.             callback {pars->VoicePar[nvoice].Pextoscil=(int)o->value()-1;
  521. if ((int) o->value() != 0) {
  522.     osc->init(pars->VoicePar[(int) o->value()-1].OscilSmp,master);
  523.     changevoiceoscilbutton->labelcolor(FL_BLUE);
  524. } else { 
  525.     osc->init(pars->VoicePar[nvoice].OscilSmp,master);
  526.     changevoiceoscilbutton->labelcolor(FL_BLACK);
  527. };
  528.  
  529. voiceparametersgroup->redraw();
  530. voiceonbutton->redraw();} open
  531.             xywh {5 455 65 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  532.             code0 {o->add("Internal");}
  533.             code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"Ext.%2d",i+1);o->add(tmp);};}
  534.             code3 {o->value(pars->VoicePar[nvoice].Pextoscil+1);}
  535.           } {}
  536.         }
  537.         Fl_Group {} {
  538.           label AMPLITUDE
  539.           xywh {5 40 240 210} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  540.         } {
  541.           Fl_Value_Slider {} {
  542.             label Vol
  543.             callback {pars->VoicePar[nvoice].PVolume=(int)o->value();}
  544.             tooltip Volume xywh {10 60 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  545.             code0 {o->value(pars->VoicePar[nvoice].PVolume);}
  546.           }
  547.           Fl_Value_Slider {} {
  548.             label {V.Sns}
  549.             callback {pars->VoicePar[nvoice].PAmpVelocityScaleFunction=(int) o->value();}
  550.             tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 80 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  551.             code0 {o->value(pars->VoicePar[nvoice].PAmpVelocityScaleFunction);}
  552.           }
  553.           Fl_Group voiceampenvgroup {
  554.             label {ADSynth Voice - Amplitude Envelope} open
  555.             xywh {10 105 205 70} box FLAT_BOX color 51 align 144
  556.             code0 {o->init(pars->VoicePar[nvoice].AmpEnvelope);}
  557.             code1 {if (pars->VoicePar[nvoice].PAmpEnvelopeEnabled==0) o->deactivate();}
  558.             class EnvelopeUI
  559.           } {}
  560.           Fl_Dial {} {
  561.             label Pan
  562.             callback {pars->VoicePar[nvoice].PPanning=(int) o->value();}
  563.             tooltip {Panning (leftmost is Random)} xywh {210 60 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
  564.             code0 {o->value(pars->VoicePar[nvoice].PPanning);}
  565.             class WidgetPDial
  566.           }
  567.           Fl_Check_Button {} {
  568.             label Enable
  569.             callback {pars->VoicePar[nvoice].PAmpEnvelopeEnabled=(int)o->value();
  570. if (o->value()==0) voiceampenvgroup->deactivate();
  571. else voiceampenvgroup->activate();
  572. o->redraw();}
  573.             tooltip {Forced Relase} xywh {15 110 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  574.             code0 {o->value(pars->VoicePar[nvoice].PAmpEnvelopeEnabled);}
  575.           }
  576.           Fl_Group voiceamplfogroup {
  577.             label {Amplitude LFO     } open
  578.             xywh {10 175 230 70} box FLAT_BOX color 47 align 144
  579.             code0 {o->init(pars->VoicePar[nvoice].AmpLfo);}
  580.             code1 {if (pars->VoicePar[nvoice].PAmpLfoEnabled==0) o->deactivate();}
  581.             class LFOUI
  582.           } {}
  583.           Fl_Check_Button {} {
  584.             label Enable
  585.             callback {pars->VoicePar[nvoice].PAmpLfoEnabled=(int)o->value();
  586. if (o->value()==0) voiceamplfogroup->deactivate();
  587. else voiceamplfogroup->activate();
  588. o->redraw();}
  589.             tooltip {Forced Relase} xywh {15 180 55 10} down_box DOWN_BOX labelfont 1 labelsize 12 align 24
  590.             code0 {o->value(pars->VoicePar[nvoice].PAmpLfoEnabled);}
  591.           }
  592.           Fl_Check_Button {} {
  593.             label Minus
  594.             callback {pars->VoicePar[nvoice].PVolumeminus=(int)o->value();}
  595.             xywh {10 45 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  596.             code0 {o->value(pars->VoicePar[nvoice].PVolumeminus);}
  597.           }
  598.         }
  599.         Fl_Group voicefiltergroup {
  600.           label FILTER
  601.           xywh {245 5 285 245} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  602.           code0 {if (pars->VoicePar[nvoice].PFilterEnabled==0) o->deactivate();}
  603.         } {
  604.           Fl_Group {} {
  605.             label {ADsynth Voice - Filter} open
  606.             xywh {250 30 275 75} box FLAT_BOX color 50 align 144
  607.             code0 {o->init(pars->VoicePar[nvoice].VoiceFilter,NULL,NULL);}
  608.             class FilterUI
  609.           } {}
  610.           Fl_Group voicefilterenvgroup {
  611.             label {ADSynth Voice - Filter Envelope} open
  612.             xywh {250 105 275 70} box FLAT_BOX color 51 align 144
  613.             code0 {o->init(pars->VoicePar[nvoice].FilterEnvelope);}
  614.             code1 {if (pars->VoicePar[nvoice].PFilterEnvelopeEnabled==0) o->deactivate();}
  615.             class EnvelopeUI
  616.           } {}
  617.           Fl_Check_Button {} {
  618.             label Enable
  619.             callback {pars->VoicePar[nvoice].PFilterEnvelopeEnabled=(int)o->value();
  620. if (o->value()==0) voicefilterenvgroup->deactivate();
  621. else voicefilterenvgroup->activate();
  622. o->redraw();}
  623.             tooltip {Forced Relase} xywh {255 110 55 10} down_box DOWN_BOX labelfont 1 labelsize 10
  624.             code0 {o->value(pars->VoicePar[nvoice].PFilterEnvelopeEnabled);}
  625.           }
  626.           Fl_Group voicefilterlfogroup {
  627.             label {Filter LFO     } open
  628.             xywh {250 175 230 70} box FLAT_BOX color 47 align 144
  629.             code0 {o->init(pars->VoicePar[nvoice].FilterLfo);}
  630.             code1 {if (pars->VoicePar[nvoice].PFilterLfoEnabled==0) o->deactivate();}
  631.             class LFOUI
  632.           } {}
  633.           Fl_Check_Button {} {
  634.             label Enable
  635.             callback {pars->VoicePar[nvoice].PFilterLfoEnabled=(int)o->value();
  636. if (o->value()==0) voicefilterlfogroup->deactivate();
  637. else voicefilterlfogroup->activate();
  638. o->redraw();}
  639.             tooltip {Forced Relase} xywh {255 180 55 10} down_box DOWN_BOX labelfont 1 labelsize 12 align 24
  640.             code0 {o->value(pars->VoicePar[nvoice].PFilterLfoEnabled);}
  641.           }
  642.         }
  643.         Fl_Group {} {
  644.           label 01
  645.           xywh {5 5 55 35} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 30 align 16
  646.           code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));}
  647.         } {}
  648.         Fl_Choice {} {
  649.           callback {int x=(int) o->value();
  650. pars->VoicePar[nvoice].Type=x;
  651. if (x==0) voicemodegroup->activate();
  652.   else voicemodegroup->deactivate();
  653. noiselabel->do_callback();}
  654.           tooltip {Oscillator Type (sound/noise)} xywh {5 500 65 20} down_box BORDER_BOX labelsize 11 textfont 1 textsize 11
  655.           code0 {o->value(pars->VoicePar[nvoice].Type);}
  656.           code1 {if (pars->VoicePar[nvoice].Type!=0) voicemodegroup->deactivate();}
  657.         } {
  658.           menuitem {} {
  659.             label Sound
  660.             xywh {5 5 100 20} labelfont 1 labelsize 13
  661.           }
  662.           menuitem {} {
  663.             label NOISE
  664.             xywh {15 15 100 20} labelfont 1 labelsize 13 labelcolor 1
  665.           }
  666.         }
  667.         Fl_Check_Button bypassfiltercheckbutton {
  668.           label {Bypass Global F.}
  669.           callback {pars->VoicePar[nvoice].Pfilterbypass=(int)o->value();}
  670.           xywh {425 10 100 20} down_box DOWN_BOX labelfont 1 labelsize 10 align 148
  671.           code0 {o->value(pars->VoicePar[nvoice].Pfilterbypass);}
  672.         }
  673.         Fl_Group {} {
  674.           xywh {115 5 95 35} box THIN_UP_BOX
  675.         } {
  676.           Fl_Value_Slider {} {
  677.             label Delay
  678.             callback {pars->VoicePar[nvoice].PDelay=(int)o->value();}
  679.             tooltip Volume xywh {120 21 84 12} type {Horz Knob} box FLAT_BOX labelsize 12 align 5 maximum 127 step 1
  680.             code0 {o->value(pars->VoicePar[nvoice].PDelay);}
  681.           }
  682.         }
  683.         Fl_Check_Button {} {
  684.           label Enable
  685.           callback {pars->VoicePar[nvoice].PFilterEnabled=(int)o->value();
  686. if (o->value()==0) voicefiltergroup->deactivate();
  687. else voicefiltergroup->activate();
  688. o->redraw();
  689. bypassfiltercheckbutton->redraw();}
  690.           tooltip {Enable Filter} xywh {250 15 60 15} down_box DOWN_BOX labelfont 1 labelsize 12
  691.           code0 {o->value(pars->VoicePar[nvoice].PFilterEnabled);}
  692.         }
  693.         Fl_Box noiselabel {
  694.           label {White Noise}
  695.           callback {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();}
  696.           xywh {150 415 300 65} labelfont 1 labelsize 50 labelcolor 7
  697.           code0 {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();}
  698.         }
  699.       }
  700.       Fl_Check_Button voiceonbutton {
  701.         label On
  702.         callback {pars->VoicePar[nvoice].Enabled=(int)o->value();
  703. if (o->value()==0) voiceparametersgroup->deactivate();
  704. else voiceparametersgroup->activate();
  705. o->redraw();}
  706.         xywh {60 5 55 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 16
  707.         code0 {o->value(pars->VoicePar[nvoice].Enabled);}
  708.       }
  709.     }
  710.   }
  711.   Function {ADvoiceUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
  712.     code {nvoice=0;
  713. pars=NULL;
  714. oscedit=NULL;} {}
  715.   }
  716.   Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {} {
  717.     code {pars=parameters;
  718. nvoice=nvoice_;
  719. master=master_;
  720. make_window();
  721. end();
  722. ADnoteVoiceParameters->show();} {}
  723.   }
  724.   Function {~ADvoiceUI()} {} {
  725.     code {ADnoteVoiceParameters->hide();
  726. hide();
  727. if (oscedit!=NULL) {
  728.     delete(oscedit);
  729. };
  730. //delete (ADnoteVoiceParameters);} {}
  731.   }
  732.   decl {int nvoice;} {}
  733.   decl {ADnoteParameters *pars;} {}
  734.   decl {OscilEditor *oscedit;} {}
  735.   decl {Oscilloscope *osc;} {}
  736.   decl {Oscilloscope *oscFM;} {}
  737.   decl {Master *master;} {}
  738.  
  739. class ADnoteUI {: {public PresetsUI_}
  740. } {
  741.   Function {make_window()} {private
  742.   } {
  743.     Fl_Window ADnoteGlobalParameters {
  744.       label {ADsynth Global Parameters of the Instrument}
  745.       xywh {66 187 535 405} type Double hide
  746.     } {
  747.       Fl_Group {} {
  748.         label FREQUENCY
  749.         xywh {5 255 525 115} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  750.       } {
  751.         Fl_Group freqenv {
  752.           label {ADSynth Global - Frequency Envelope} open
  753.           xywh {10 295 205 70} box FLAT_BOX color 51 align 144
  754.           code0 {o->init(pars->GlobalPar.FreqEnvelope);}
  755.           class EnvelopeUI
  756.         } {}
  757.         Fl_Counter octave {
  758.           label Octave
  759.           callback {int k=(int) o->value();
  760. if (k<0) k+=16;
  761. pars->GlobalPar.PCoarseDetune = k*1024+
  762.    pars->GlobalPar.PCoarseDetune%1024;}
  763.           tooltip Octave xywh {470 275 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 12
  764.           code0 {int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;}
  765.           code2 {o->value(k);}
  766.         }
  767.         Fl_Counter coarsedet {
  768.           label {Coarse det.}
  769.           callback {int k=(int) o->value();
  770. if (k<0) k+=1024;
  771. pars->GlobalPar.PCoarseDetune = k+
  772.    (pars->GlobalPar.PCoarseDetune/1024)*1024;}
  773.           tooltip {Coarse Detune} xywh {455 345 60 20} labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 12
  774.           code0 {int k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;}
  775.           code2 {o->value(k);}
  776.           code3 {o->lstep(10);}
  777.         }
  778.         Fl_Group freqlfo {
  779.           label {Frequency LFO     } open
  780.           xywh {215 295 230 70} box FLAT_BOX color 47 align 144
  781.           code0 {o->init(pars->GlobalPar.FreqLfo);}
  782.           class LFOUI
  783.         } {}
  784.         Fl_Slider freq {
  785.           callback {pars->GlobalPar.PDetune=(int)o->value()+8192;
  786. detunevalueoutput->do_callback();}
  787.           tooltip {Fine Detune (cents)} xywh {60 275 390 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
  788.           code0 {o->value(pars->GlobalPar.PDetune-8192);}
  789.         }
  790.         Fl_Value_Output detunevalueoutput {
  791.           label Detune
  792.           callback {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));}
  793.           xywh {12 275 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  794.           code0 {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));}
  795.         }
  796.         Fl_Choice detunetype {
  797.           label {Detune Type}
  798.           callback {pars->GlobalPar.PDetuneType=(int) o->value()+1;
  799. detunevalueoutput->do_callback();} open
  800.           xywh {450 315 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  801.           code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  802.           code1 {o->value(pars->GlobalPar.PDetuneType-1);}
  803.         } {}
  804.       }
  805.       Fl_Group {} {
  806.         label AMPLITUDE
  807.         xywh {5 5 240 250} box THIN_UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  808.       } {
  809.         Fl_Value_Slider volume {
  810.           label Vol
  811.           callback {pars->GlobalPar.PVolume=(int)o->value();}
  812.           tooltip Volume xywh {10 30 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  813.           code0 {o->value(pars->GlobalPar.PVolume);}
  814.         }
  815.         Fl_Value_Slider vsns {
  816.           label {V.Sns}
  817.           callback {pars->GlobalPar.PAmpVelocityScaleFunction=(int) o->value();}
  818.           tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 50 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  819.           code0 {o->value(pars->GlobalPar.PAmpVelocityScaleFunction);}
  820.         }
  821.         Fl_Dial pan {
  822.           label Pan
  823.           callback {pars->GlobalPar.PPanning=(int) o->value();}
  824.           tooltip {Panning (leftmost is Random)} xywh {210 25 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
  825.           code0 {o->value(pars->GlobalPar.PPanning);}
  826.           class WidgetPDial
  827.         }
  828.         Fl_Dial pstr {
  829.           label {P.Str.}
  830.           callback {pars->GlobalPar.PPunchStrength=(int) o->value();}
  831.           tooltip {Punch Strength} xywh {125 227 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  832.           code0 {o->value(pars->GlobalPar.PPunchStrength);}
  833.           class WidgetPDial
  834.         }
  835.         Fl_Dial pt {
  836.           label {P.t.}
  837.           callback {pars->GlobalPar.PPunchTime=(int) o->value();}
  838.           tooltip {Punch Time (duration)} xywh {155 227 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  839.           code0 {o->value(pars->GlobalPar.PPunchTime);}
  840.           class WidgetPDial
  841.         }
  842.         Fl_Dial pstc {
  843.           label {P.Stc.}
  844.           callback {pars->GlobalPar.PPunchStretch=(int) o->value();}
  845.           tooltip {Punch Stretch} xywh {185 227 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  846.           code0 {o->value(pars->GlobalPar.PPunchStretch);}
  847.           class WidgetPDial
  848.         }
  849.         Fl_Dial pvel {
  850.           label {P.Vel.}
  851.           callback {pars->GlobalPar.PPunchVelocitySensing=(int) o->value();}
  852.           tooltip {Punch Velocity Sensing} xywh {215 227 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  853.           code0 {o->value(pars->GlobalPar.PPunchVelocitySensing);}
  854.           class WidgetPDial
  855.         }
  856.         Fl_Group ampenv {
  857.           label {ADSynth Global - Amplitude Envelope} open
  858.           xywh {10 75 205 70} box FLAT_BOX color 51 align 144
  859.           code0 {o->init(pars->GlobalPar.AmpEnvelope);}
  860.           class EnvelopeUI
  861.         } {}
  862.         Fl_Group amplfo {
  863.           label {Amplitude LFO          } open
  864.           xywh {10 145 230 70} box FLAT_BOX color 47 align 144
  865.           code0 {o->init(pars->GlobalPar.AmpLfo);}
  866.           class LFOUI
  867.         } {}
  868.         Fl_Check_Button rndgrp {
  869.           label {Rnd Grp}
  870.           callback {pars->GlobalPar.Hrandgrouping=(int) o->value();}
  871.           tooltip {How the Harmonic Amplitude is applied to voices that use the same oscillator} xywh {70 225 40 25} down_box DOWN_BOX labelsize 10 align 148
  872.           code0 {o->value(pars->GlobalPar.Hrandgrouping);}
  873.         }
  874.       }
  875.       Fl_Group {} {
  876.         label FILTER
  877.         xywh {245 5 285 250} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  878.       } {
  879.         Fl_Group filterenv {
  880.           label {ADSynth Global - Filter Envelope} open
  881.           xywh {250 110 275 70} box FLAT_BOX color 51 align 144
  882.           code0 {o->init(pars->GlobalPar.FilterEnvelope);}
  883.           class EnvelopeUI
  884.         } {}
  885.         Fl_Group filterlfo {
  886.           label {Filter LFO} open
  887.           xywh {250 180 230 70} box FLAT_BOX color 47 align 144
  888.           code0 {o->init(pars->GlobalPar.FilterLfo);}
  889.           class LFOUI
  890.         } {}
  891.         Fl_Group filterui {
  892.           label {ADsynth Global - Filter} open
  893.           xywh {250 35 275 75} box FLAT_BOX color 50 align 144
  894.           code0 {o->init(pars->GlobalPar.GlobalFilter,&pars->GlobalPar.PFilterVelocityScale,&pars->GlobalPar.PFilterVelocityScaleFunction);}
  895.           class FilterUI
  896.         } {}
  897.       }
  898.       Fl_Check_Button stereo {
  899.         label Stereo
  900.         callback {pars->GlobalPar.PStereo=(int) o->value();}
  901.         xywh {5 220 65 35} box ENGRAVED_BOX down_box DOWN_BOX labelfont 1 labelsize 12
  902.         code0 {o->value(pars->GlobalPar.PStereo);}
  903.       }
  904.       Fl_Button {} {
  905.         label {Show Voice List}
  906.         callback {for (int i=0;i<NUM_VOICES;i++){
  907.   voicelistitem[i]->refreshlist();
  908. }
  909. ADnoteVoiceList->show();}
  910.         xywh {180 375 125 25}
  911.       }
  912.       Fl_Button {} {
  913.         label {Show Voice Parameters}
  914.         callback {ADnoteVoice->show();}
  915.         xywh {5 375 170 25} labelfont 1
  916.       }
  917.       Fl_Button {} {
  918.         label Close
  919.         callback {ADnoteGlobalParameters->hide();}
  920.         xywh {470 375 60 25} box THIN_UP_BOX
  921.       }
  922.       Fl_Button {} {
  923.         label Resonance
  924.         callback {resui->resonancewindow->redraw();
  925. resui->resonancewindow->show();}
  926.         tooltip Resonance xywh {309 375 86 25} box THIN_UP_BOX
  927.       }
  928.       Fl_Button {} {
  929.         label C
  930.         callback {presetsui->copy(pars);}
  931.         xywh {405 380 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  932.       }
  933.       Fl_Button {} {
  934.         label P
  935.         callback {presetsui->paste(pars,this);}
  936.         xywh {435 380 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  937.       }
  938.     }
  939.     Fl_Window ADnoteVoice {
  940.       label {ADsynth Voice Parameters}
  941.       xywh {53 58 765 560} type Double hide
  942.     } {
  943.       Fl_Group advoice {
  944.         xywh {0 0 760 525} box BORDER_BOX
  945.         code0 {o->init(pars,nvoice,master);}
  946.         code1 {o->show();}
  947.         class ADvoiceUI
  948.       } {}
  949.       Fl_Button {} {
  950.         label {Close Window}
  951.         callback {ADnoteVoice->hide();}
  952.         xywh {300 530 195 25} box THIN_UP_BOX labelfont 1
  953.       }
  954.       Fl_Counter currentvoicecounter {
  955.         label {Current Voice}
  956.         callback {nvoice=(int)o->value()-1;
  957. advoice->hide();
  958. ADnoteVoice->remove(advoice);
  959. delete advoice;
  960. advoice=new ADvoiceUI(0,0,765,525);
  961. ADnoteVoice->add(advoice);
  962. advoice->init(pars,nvoice,master);
  963. advoice->show();
  964. ADnoteVoice->redraw();}
  965.         xywh {5 530 130 25} type Simple labelfont 1 align 8 minimum 0 maximum 2 step 1 value 1 textfont 1 textsize 18
  966.         code0 {o->bounds(1,NUM_VOICES);}
  967.       }
  968.       Fl_Button {} {
  969.         label C
  970.         callback {presetsui->copy(pars,nvoice);}
  971.         xywh {700 535 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  972.       }
  973.       Fl_Button {} {
  974.         label P
  975.         callback {presetsui->paste(pars,this,nvoice);}
  976.         xywh {730 535 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  977.       }
  978.     }
  979.     Fl_Window ADnoteVoiceList {
  980.       label {ADsynth Voices list}
  981.       xywh {32 266 650 260} type Double hide
  982.     } {
  983.       Fl_Text_Display {} {
  984.         label {No.}
  985.         xywh {10 15 30 10} box NO_BOX labelfont 1 labelsize 13
  986.       }
  987.       Fl_Text_Display {} {
  988.         label Vol
  989.         xywh {145 15 30 10} box NO_BOX labelfont 1 labelsize 13
  990.       }
  991.       Fl_Text_Display {} {
  992.         label Detune
  993.         xywh {384 15 25 10} box NO_BOX labelfont 1 labelsize 13
  994.       }
  995.       Fl_Text_Display {} {
  996.         label Pan
  997.         xywh {210 15 30 10} box NO_BOX labelfont 1 labelsize 13
  998.       }
  999.       Fl_Text_Display {} {
  1000.         label {Vib. Depth}
  1001.         xywh {560 15 30 10} box NO_BOX labelfont 1 labelsize 13
  1002.       }
  1003.       Fl_Text_Display {} {
  1004.         label {R.}
  1005.         xywh {245 15 25 10} box NO_BOX labelfont 1 labelsize 13
  1006.       }
  1007.       Fl_Button {} {
  1008.         label {Hide Voice List}
  1009.         callback {ADnoteVoiceList->hide();}
  1010.         xywh {255 237 125 20}
  1011.       }
  1012.       Fl_Scroll {} {open
  1013.         xywh {0 15 640 220} type VERTICAL box THIN_UP_BOX
  1014.       } {
  1015.         Fl_Pack {} {open
  1016.           xywh {0 20 620 210}
  1017.           code0 {for (int i=0;i<NUM_VOICES;i++){voicelistitem[i]=new ADvoicelistitem(0,0,620,25,"");voicelistitem[i]->init(pars,i,master);}}
  1018.         } {}
  1019.       }
  1020.     }
  1021.   }
  1022.   Function {ADnoteUI(ADnoteParameters *parameters,Master *master_)} {} {
  1023.     code {pars=parameters;
  1024. master=master_;
  1025. nvoice=0;
  1026. resui=new ResonanceUI(pars->GlobalPar.Reson);
  1027. make_window();} {}
  1028.   }
  1029.   Function {~ADnoteUI()} {} {
  1030.     code {ADnoteVoiceList->hide();
  1031. ADnoteGlobalParameters->hide();
  1032. ADnoteVoice->hide();
  1033. delete(ADnoteVoiceList);
  1034. delete(ADnoteGlobalParameters);
  1035. delete(ADnoteVoice);
  1036. delete(resui);} {}
  1037.   }
  1038.   Function {refresh()} {} {
  1039.     code {volume->value(pars->GlobalPar.PVolume);
  1040. vsns->value(pars->GlobalPar.PAmpVelocityScaleFunction);
  1041. pan->value(pars->GlobalPar.PPanning);
  1042.  
  1043. stereo->value(pars->GlobalPar.PStereo);
  1044. rndgrp->value(pars->GlobalPar.Hrandgrouping);
  1045.  
  1046. pstr->value(pars->GlobalPar.PPunchStrength);
  1047. pt->value(pars->GlobalPar.PPunchTime);
  1048. pstc->value(pars->GlobalPar.PPunchStretch);
  1049. pvel->value(pars->GlobalPar.PPunchVelocitySensing);
  1050.  
  1051. detunevalueoutput->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));
  1052. freq->value(pars->GlobalPar.PDetune-8192);
  1053.  
  1054. int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;
  1055. octave->value(k);
  1056.  
  1057. detunetype->value(pars->GlobalPar.PDetuneType-1);
  1058. k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;
  1059. coarsedet->value(k);
  1060. amplfo->refresh();
  1061. freqlfo->refresh();
  1062. filterlfo->refresh();
  1063.  
  1064. ampenv->refresh();
  1065. freqenv->refresh();
  1066. filterenv->refresh();
  1067. filterui->refresh();
  1068.  
  1069. for (int i=0;i<NUM_VOICES;i++) voicelistitem[i]->refreshlist();
  1070.  
  1071. resui->refresh();
  1072. currentvoicecounter->do_callback();} {}
  1073.   }
  1074.   decl {ADnoteParameters *pars;} {}
  1075.   decl {ResonanceUI *resui;} {}
  1076.   decl {Master *master;} {}
  1077.   decl {int nvoice;} {}
  1078.   decl {ADvoicelistitem *voicelistitem[NUM_VOICES];} {}
  1079.