1# data file for the Fltk User Interface Designer (fluid)
2version 1.0302
3header_name {.h}
4code_name {.cc}
5decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {private local
6}
7
8decl {//License: GNU GPL version 2 or later} {private local
9}
10
11decl {\#include <stdlib.h>} {public local
12}
13
14decl {\#include <stdio.h>} {public local
15}
16
17decl {\#include <string.h>} {public local
18}
19
20decl {\#include "../globals.h"} {public local
21}
22
23decl {\#include "Fl_Osc_VSlider.H"} {public local
24}
25
26decl {\#include "Fl_Osc_TSlider.H"} {public local
27}
28
29decl {\#include "Fl_Osc_Dial.H"} {public local
30}
31
32decl {\#include "EnvelopeUI.h"} {public local
33}
34
35decl {\#include "FilterUI.h"} {public local
36}
37
38decl {\#include "../Misc/Util.h"} {public local
39}
40
41decl {\#include "../Params/SUBnoteParameters.h"} {public local
42}
43
44decl {\#include "PresetsUI.h"} {public local
45}
46
47class SUBSlider {: {public Fl_Osc_TSlider}
48} {
49  Function {SUBSlider(int x,int y, int w, int h, const char *label=0)
50  :Fl_Osc_TSlider(x,y,w,h,label)} {open
51  } { code {} {}}
52   Function {OSC_value(int c)} {open return_type void
53   } { code {
54       value(127-c);
55       selection_color(value() == reset_value ? 0 : 222);
56   } {} }
57  Function {cb(void)} {open return_type void
58  } {
59    code {
60	selection_color(value() == reset_value ? 0 : 222);
61	oscWrite(ext, "i", (int)(127-Fl_Slider::value()));
62	if(cb_data.first)
63	    cb_data.first(this, cb_data.second);
64} {}
65   }
66}
67
68class SUBnoteharmonic {: {public Fl_Osc_Group}
69} {
70  Function {make_window()} {private
71  } {
72    Fl_Window harmonic {
73      xywh {329 403 90 305} type Double hide
74      class Fl_Osc_Group
75    } {
76      Fl_Slider mag {
77        tooltip {harmonic's magnitude} xywh {0 15 10 135} type {Vert Knob} box FLAT_BOX selection_color 0 maximum 127 step 1 value 127
78        class SUBSlider
79      }
80      Fl_Slider bw {
81        tooltip {harmonic's bandwidth} xywh {0 157 10 130} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64
82        class SUBSlider
83      }
84      Fl_Box {} {
85        xywh {10 219 5 5} box FLAT_BOX color 45
86        code0 {if (n+1==MAX_SUB_HARMONICS) o->hide();}
87      }
88      Fl_Box {} {
89        label 01
90        xywh {0 288 10 15} labelfont 1 labelsize 9 align 20
91        code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));}
92      }
93      Fl_Box {} {
94        label 01
95        xywh {0 0 10 15} labelfont 1 labelsize 9 align 20
96        code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));}
97      }
98    }
99  }
100  Function {SUBnoteharmonic(int x,int y, int w, int h, const char *label=0):Fl_Osc_Group(x,y,w,h,label)} {} {
101    code {n=0;} {}
102  }
103  Function {init(int n_)} {} {
104    code {n=n_;
105make_window();
106harmonic->show();
107mag->reset_value=127;
108mag->ext = "Phmag" + to_s(n);
109mag->oscRegister(mag->ext.c_str());
110mag->set_transform([](float x){return 127.0f - x;});
111bw->reset_value=63;
112bw->ext = "Phrelbw" + to_s(n);
113bw->oscRegister(bw->ext.c_str());
114bw->set_transform([](float x){return 63.0f - x;});
115osc->requestValue(base+"Phrelbw"+to_s(n));
116
117end();} {}
118  }
119  Function {refresh()} {} {
120    code {// request values for the widgets
121mag->oscWrite(mag->ext);
122bw->oscWrite(bw->ext);} {}
123  }
124  Function {~SUBnoteharmonic()} {} {
125    code {harmonic->hide();
126hide();
127//delete(harmonic);} {}
128  }
129  decl {int n;} {private local
130  }
131}
132
133class SUBnoteUI {open : {public PresetsUI_}
134} {
135  Function {make_window()} {open
136  } {
137    Fl_Window SUBparameters {
138      label {SUBsynth Parameters} open
139      xywh {542 511 735 475} type Double
140      class Fl_Osc_Window visible
141    } {
142      Fl_Box {} {
143        xywh {0 0 0 0} box FLAT_BOX color 45
144        code0 {SUBparameters->init(osc, loc);}
145      }
146      Fl_Scroll {} {
147        label scroll open
148        xywh {5 140 434 330} type HORIZONTAL box FLAT_BOX labeltype NO_LABEL
149      } {
150        Fl_Pack harmonics {open
151          xywh {5 145 425 325} type HORIZONTAL
152          code0 {for (int i=0;i<MAX_SUB_HARMONICS;i++){h[i]=new SUBnoteharmonic(0,0,15,o->h(),"");h[i]->init(i);}}
153        } {}
154      }
155      Fl_Button {} {
156        label Close
157        callback {SUBparameters->hide();}
158        xywh {670 446 60 25} box THIN_UP_BOX
159      }
160      Fl_Group {} {
161        label AMPLITUDE open
162        xywh {5 5 215 135} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
163      } {
164        Fl_Value_Slider vol {
165          label Vol
166          tooltip Volume xywh {10 25 140 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
167          code0 {o->init("PVolume");o->reset_value=96;}
168          class Fl_Osc_VSlider
169        }
170        Fl_Value_Slider vsns {
171          label {V.Sns}
172          tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 45 140 15} type {Horz Knob} box NO_BOX labelsize 11 align 8 maximum 127 step 1
173          code0 {o->init("PAmpVelocityScaleFunction");o->reset_value=90;}
174          class Fl_Osc_VSlider
175        }
176        Fl_Dial pan {
177          label Pan
178          tooltip {Panning (leftmost is Random)} xywh {185 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
179          code0 {o->init("PPanning");o->reset_value=64;}
180          class Fl_Osc_Dial
181        }
182        Fl_Group ampenv {
183          label {SUBsynth - Amplitude Envelope} open
184          xywh {10 65 205 70} box FLAT_BOX color 51 align 144
185          code0 {o->init(ENV_ADSR, osc, loc, "AmpEnvelope/");}
186          class EnvelopeUI
187        } {}
188      }
189      Fl_Group {} {
190        xywh {495 406 235 35} box UP_FRAME
191      } {
192        Fl_Counter filterstages {
193          label {Filter Stages}
194          tooltip {How many times the noise is filtered} xywh {515 421 45 15} type Simple labelfont 1 labelsize 10 align 1 minimum 1 maximum 5 step 1 textsize 10
195          code0 {o->init("Pnumstages");}
196          class Fl_Osc_Counter
197        }
198        Fl_Choice magtype {
199          label {Mag.Type}
200          xywh {585 421 65 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11
201          code0 {o->init("Phmagtype");}
202          class Fl_Osc_Choice
203        } {
204          MenuItem {} {
205            label Linear
206            xywh {20 20 100 20} labelfont 1 labelsize 11
207          }
208          MenuItem {} {
209            label {-40dB}
210            xywh {30 30 100 20} labelfont 1 labelsize 11
211          }
212          MenuItem {} {
213            label {-60dB}
214            xywh {40 40 100 20} labelfont 1 labelsize 11
215          }
216          MenuItem {} {
217            label {-80dB}
218            xywh {50 50 100 20} labelfont 1 labelsize 11
219          }
220          MenuItem {} {
221            label {-100dB}
222            xywh {60 60 100 20} labelfont 1 labelsize 11
223          }
224        }
225        Fl_Choice start {
226          label Start selected
227          xywh {670 420 50 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11
228          code0 {o->init("Pstart");}
229          class Fl_Osc_Choice
230        } {
231          MenuItem {} {
232            label Zero
233            xywh {30 30 100 20} labelfont 1 labelsize 11
234          }
235          MenuItem {} {
236            label RND
237            xywh {40 40 100 20} labelfont 1 labelsize 11
238          }
239          MenuItem {} {
240            label {Max.}
241            xywh {50 50 100 20} labelfont 1 labelsize 11
242          }
243        }
244      }
245      Fl_Group freqsettingsui {
246        label FREQUENCY open
247        xywh {440 5 295 146} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
248      } {
249        Fl_Group freqenvelopegroup {
250          label {SUBsynth - Frequency Envelope} open
251          xywh {445 75 205 70} box FLAT_BOX color 51 align 144
252          code0 {o->init(ENV_ASR, osc, loc, "FreqEnvelope/");}
253          class EnvelopeUI
254        } {}
255        Fl_Check_Button freqee {
256          label Enabled
257          callback {if (o->value()==0) freqenvelopegroup->deactivate();
258              else freqenvelopegroup->activate();
259o->show();
260freqsettingsui->redraw();}
261          xywh {445 77 55 15} down_box DOWN_BOX labelfont 1 labelsize 10
262          code0 {o->init("PFreqEnvelopeEnabled");}
263          class Fl_Osc_Check
264        }
265        Fl_Counter octave {
266          label Octave
267          tooltip Octave xywh {670 58 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
268          code0 {o->init("octave");}
269          class Fl_Osc_Counter
270        }
271        Fl_Counter coarsedet {
272          label {Coarse Det.}
273          tooltip {Coarse Detune} xywh {655 125 60 20} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
274          code0 {o->init("coarsedetune");}
275          code3 {o->lstep(10);}
276          class Fl_Osc_Counter
277        }
278        Fl_Slider detune {
279          callback {o->oscWrite("detunevalue");}
280          tooltip {Fine Detune (cents)} xywh {495 27 230 15} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1
281          code0 {o->init("PDetune",'i');}
282          class Fl_Osc_Slider
283        }
284        Fl_Value_Output detunevalueoutput {
285          label Detune
286          xywh {448 27 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
287          code0 {o->init("detunevalue");}
288          class Fl_Osc_Output
289        }
290        Fl_Dial bendadjdial {
291          label Bend
292          tooltip {How the frequency varies according to the pitch wheel} xywh {448 53 15 15} box ROUND_UP_BOX labelsize 10 align 8 minimum -64 maximum 63 step 1
293          code0 {o->init("PBendAdjust"); o->reset_value=24;o->set_transform([](float x){return x/24.0f;});o->set_rounding(2);}
294          class Fl_Osc_Dial
295        }
296        Fl_Dial offsethzdial {
297          label Offset
298          tooltip {Offset of frequency in Hz} xywh {500 53 15 15} box ROUND_UP_BOX labelsize 10 align 8 minimum -64 maximum 63 step 1
299          code0 {o->init("POffsetHz"); o->set_rounding(2); o->set_transform([](float x){x/=64; return 15*(x*sqrtf(fabsf(x)));});}
300          class Fl_Osc_Dial
301        }
302        Fl_Check_Button hz440 {
303          label 440Hz
304          callback {if (o->value()==0) fixedfreqetdial->deactivate();
305   else fixedfreqetdial->activate();}
306          tooltip {set the base frequency to 440Hz} xywh {555 53 50 15} down_box DOWN_BOX labelfont 1 labelsize 10
307          code0 {o->init("Pfixedfreq");}
308          class Fl_Osc_Check
309        }
310        Fl_Dial fixedfreqetdial {
311          label {Eq.T.}
312          tooltip {How the frequency varies according to the keyboard (leftmost for fixed frequency)} xywh {610 53 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
313          code0 {o->init("PfixedfreqET");}
314          class Fl_Osc_Dial
315        }
316        Fl_Choice detunetype {
317          label {Detune Type}
318          callback {o->oscWrite("detunevalue");} open
319          xywh {655 94 70 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
320          code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
321          code1 {o->init("PDetuneType",1);}
322          class Fl_Osc_Choice
323        } {}
324      }
325      Fl_Check_Button stereo {
326        label Stereo
327        xywh {440 406 55 35} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
328        code0 {o->init("Pstereo");}
329        class Fl_Osc_Check
330      }
331      Fl_Button {} {
332        label Clear
333        callback {o->oscWrite("clear");
334        for (int i=1;i<MAX_SUB_HARMONICS;i++){
335    h[i]->mag->oscWrite(h[i]->mag->ext, "i", 0);
336    h[i]->bw->oscWrite(h[i]->bw->ext, "i", 64);
337};
338h[0]->mag->oscWrite(h[0]->mag->ext, "i", 127);
339h[0]->bw->oscWrite(h[0]->bw->ext, "i", 64);
340SUBparameters->redraw();}
341        tooltip {Clear the harmonics} xywh {445 446 70 25} box THIN_UP_BOX
342        class Fl_Osc_Button
343      }
344      Fl_Group bandwidthsettingsui {
345        label BANDWIDTH
346        xywh {220 5 220 135} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
347      } {
348        Fl_Group bandwidthenvelopegroup {
349          label {SUBsynth - BandWidth Envelope} open
350          xywh {225 65 205 70} box FLAT_BOX color 51 align 144
351          code0 {o->init(ENV_ADSR_BW, osc, loc, "BandWidthEnvelope/");}
352          class EnvelopeUI
353        } {}
354        Fl_Check_Button bwee {
355          label Enabled
356          callback {if (o->value()==0) bandwidthenvelopegroup->deactivate();
357    else bandwidthenvelopegroup->activate();
358o->show();
359bandwidthsettingsui->redraw();}
360          xywh {225 67 55 15} down_box DOWN_BOX labelfont 1 labelsize 10
361          code0 {o->init("PBandWidthEnvelopeEnabled");}
362          class Fl_Osc_Check
363        }
364        Fl_Value_Slider bandwidth {
365          label {Band Width}
366          xywh {225 40 115 15} type {Horz Knob} box NO_BOX labelsize 10 align 1 maximum 127 step 1
367          code0 {o->init("Pbandwidth");o->reset_value=40;}
368          class Fl_Osc_VSlider
369        }
370        Fl_Value_Slider bwidthscale {
371          label {B.Width Scale}
372          tooltip {How much I increase the BandWidth according to lower/higher harmonics} xywh {345 40 90 15} type {Horz Knob} box NO_BOX labelsize 10 align 1 minimum -64 maximum 63 step 1
373          code0 {o->init("Pbwscale",'i');}
374          class Fl_Osc_TSlider
375        }
376      }
377      Fl_Group globalfiltergroup {
378        label FILTER
379        xywh {440 221 290 185} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
380      } {
381        Fl_Group filterenv {
382          label {SUBsynth - Filter Envelope} open
383          xywh {445 331 275 70} box FLAT_BOX color 51 align 144
384          code0 {o->init(ENV_ADSR_FILTER, osc, loc, "GlobalFilterEnvelope/");}
385          class EnvelopeUI
386        } {}
387        Fl_Group filterui {
388          label {SUBsynthl - Filter} open
389          xywh {445 246 275 75} box FLAT_BOX color 50 align 144
390          code0 {o->init(loc + "PGlobalFilter" , osc, loc, "GlobalFilter/");}
391          class FilterUI
392        } {}
393      }
394      Fl_Check_Button filtere {
395        label Enabled
396        callback {if (o->value()==0) globalfiltergroup->deactivate();
397    else globalfiltergroup->activate();
398o->show();
399globalfiltergroup->redraw();}
400        xywh {445 226 85 20} down_box DOWN_BOX labelfont 1 labelsize 11
401        code0 {o->init("PGlobalFilterEnabled");}
402        class Fl_Osc_Check
403      }
404      Fl_Button {} {
405        label C
406        callback {presetsui->copy(loc);}
407        xywh {600 451 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
408      }
409      Fl_Button {} {
410        label P
411        callback {presetsui->paste(loc,this);}
412        xywh {630 451 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
413      }
414      Fl_Group {} {
415        label OVERTONES open
416        xywh {440 151 220 70} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
417      } {
418        Fl_Choice spreadtype {
419          label OvertonesPosition
420          xywh {450 190 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 10
421          code0 {o->init("POvertoneSpread.type");}
422          class Fl_Osc_Choice
423        } {
424          MenuItem {} {
425            label Harmonic
426            xywh {0 0 34 20} labelfont 1 labelsize 11
427          }
428          MenuItem {} {
429            label ShiftU
430            xywh {10 10 34 20} labelfont 1 labelsize 11
431          }
432          MenuItem {} {
433            label ShiftL
434            xywh {20 20 34 20} labelfont 1 labelsize 11
435          }
436          MenuItem {} {
437            label PowerU
438            xywh {20 20 34 20} labelfont 1 labelsize 11
439          }
440          MenuItem {} {
441            label PowerL
442            xywh {30 30 34 20} labelfont 1 labelsize 11
443          }
444          MenuItem {} {
445            label Sine
446            xywh {40 40 34 20} labelfont 1 labelsize 11
447          }
448          MenuItem {} {
449            label Power
450            xywh {50 50 34 20} labelfont 1 labelsize 11
451          }
452          MenuItem {} {
453            label Shift
454            xywh {20 20 34 20} labelfont 1 labelsize 11
455          }
456        }
457        Fl_Dial spreadpar1 {
458          label Par1
459          xywh {548 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1
460          code0 {o->init("POvertoneSpread.par1");}
461          class Fl_Osc_Dial
462        }
463        Fl_Dial spreadpar2 {
464          label Par2
465          xywh {583 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1
466          code0 {o->init("POvertoneSpread.par2");}
467          class Fl_Osc_Dial
468        }
469        Fl_Dial spreadpar3 {
470          label ForceH
471          xywh {618 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1
472          code0 {o->init("POvertoneSpread.par3");}
473          class Fl_Osc_Dial
474        }
475      }
476    }
477  }
478  Function {refresh()} {} {
479    code {
480SUBparameters->update();
481for (int i=0;i<MAX_SUB_HARMONICS;i++) h[i]->refresh();
482//globalfiltergroup->redraw();
483//ampenv->refresh();
484//bandwidthenvelopegroup->refresh();
485//freqenvelopegroup->refresh();
486//filterui->refresh();
487//filterenv->refresh();} {}
488  }
489  Function {SUBnoteUI(Fl_Osc_Interface *osc_, std::string loc_)} {} {
490    code {osc = osc_;
491    loc = loc_;
492make_window();} {}
493  }
494  Function {~SUBnoteUI()} {} {
495    code {//for (int i=0;i<MAX_SUB_HARMONICS;i++) delete (h[i]);
496SUBparameters->hide();
497delete(SUBparameters);} {}
498  }
499  decl {Fl_Osc_Interface *osc;} {private local
500  }
501  decl {std::string loc;} {private local
502  }
503  decl {SUBnoteharmonic *h[MAX_SUB_HARMONICS];} {private local
504  }
505}
506