// generated by Fast Light User Interface Designer (fluid) version 1.00

#include "stretch_panel.h"
#include "Click.h"
#include "OscBank.h"
#include "RTWvOut.h"

#define PARTIALS  8     // Default--first command line arg changes

#define DELTA 32
OscBank *osc;

Fl_Value_Slider *Froll=(Fl_Value_Slider *)0;

static void cb_Froll(Fl_Value_Slider* o, void*) {
  osc->setRolloff(o->value());
}

Fl_Value_Slider *Fstrch=(Fl_Value_Slider *)0;

static void cb_Fstrch(Fl_Value_Slider* o, void*) {
  osc->setStretch(o->value()/6);
}

Fl_Slider *Ffrq=(Fl_Slider *)0;

static void cb_Ffrq(Fl_Slider* o, void*) {
  double val = int(pow(900, o->value())*10);
Vfrq->value(val);
Vfrq->redraw();
osc->setFreq(val);
}

Fl_Value_Output *Vfrq=(Fl_Value_Output *)0;

Fl_Value_Slider *Fvol=(Fl_Value_Slider *)0;

static void cb_Fvol(Fl_Value_Slider* o, void*) {
  osc->setAmp(o->value());
}

int main(int argc, char **argv) {
  Fl_Window* w;
  RTWvOut output;
  int i;
  int N=PARTIALS;

  if (argc>1) 
    N = atoi(argv[1]);
  
  osc = new OscBank(N, 440);
  osc->setAmp(0.5);
  osc->setRolloff(0.5);

  { Fl_Window* o = new Fl_Window(241, 164, "Inharmonicity");
    w = o;
    o->box(FL_UP_BOX);
    o->color(53);
    o->selection_color(34);
    o->labeltype(FL_NORMAL_LABEL);
    o->labelsize(12);
    o->labelcolor(1);
    { Fl_Value_Slider* o = Froll = new Fl_Value_Slider(62, 7, 25, 125, "Rolloff");
      o->type(4);
      o->box(FL_FLAT_BOX);
      o->color(53);
      o->selection_color(0);
      o->labelsize(12);
      o->minimum(1);
      o->maximum(0);
      o->value(0.5);
      o->callback((Fl_Callback*)cb_Froll);
    }
    { Fl_Value_Slider* o = Fstrch = new Fl_Value_Slider(109, 7, 25, 125, "Stretch");
      o->type(4);
      o->box(FL_FLAT_BOX);
      o->color(53);
      o->selection_color(0);
      o->labelsize(12);
      o->minimum(1);
      o->maximum(0);
      o->callback((Fl_Callback*)cb_Fstrch);
    }
    { Fl_Slider* o = Ffrq = new Fl_Slider(12, 31, 25, 101, "F0");
      o->type(4);
      o->box(FL_FLAT_BOX);
      o->color(53);
      o->selection_color(0);
      o->labelsize(12);
      o->minimum(1);
      o->maximum(0);
      o->value(0.56);
      o->callback((Fl_Callback*)cb_Ffrq);
    }
    { Fl_Value_Output* o = Vfrq = new Fl_Value_Output(11, 7, 28, 25, "Hz");
      o->box(FL_FLAT_BOX);
      o->color(53);
      o->labeltype(FL_NO_LABEL);
      o->labelsize(11);
      o->minimum(9000);
      o->maximum(10);
      o->value(440);
      o->textsize(11);
      o->align(FL_ALIGN_RIGHT);
    }
    { Fl_Value_Slider* o = Fvol = new Fl_Value_Slider(187, 8, 25, 125, "Volume");
      o->type(4);
      o->box(FL_FLAT_BOX);
      o->color(53);
      o->selection_color(0);
      o->labelsize(12);
      o->minimum(1);
      o->maximum(0);
      o->value(0.5);
      o->callback((Fl_Callback*)cb_Fvol);
    }
    o->end();
  }
  w->show(argc, argv);
  while (Fl::check())
  { 
    for (i=0;i<DELTA;i++)
       output.tick(osc->tick()/10);
  }
}
