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

#ifndef sorcer_widget_h
#define sorcer_widget_h
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
using namespace std;
#include "ports.h"
#include "avtk.h"
#include <stdio.h>
#include "header.c"
#include <iostream>
#include <cmath>

class SorcerUI {
public:
  void update_button(int button);
  SorcerUI();
  Fl_Double_Window *window;
  Avtk::Image *headerImage;
private:
  inline void cb_Wave_i(Avtk::Background*, void*);
  static void cb_Wave(Avtk::Background*, void*);
  inline void cb_Wave1_i(Avtk::Background*, void*);
  static void cb_Wave1(Avtk::Background*, void*);
  inline void cb_Sub_i(Avtk::Background*, void*);
  static void cb_Sub(Avtk::Background*, void*);
  inline void cb_LFO_i(Avtk::Background*, void*);
  static void cb_LFO(Avtk::Background*, void*);
  inline void cb_Remove_i(Avtk::Background*, void*);
  static void cb_Remove(Avtk::Background*, void*);
  inline void cb_ADSR_i(Avtk::Background*, void*);
  static void cb_ADSR(Avtk::Background*, void*);
  inline void cb_Master_i(Avtk::Background*, void*);
  static void cb_Master(Avtk::Background*, void*);
public:
  Avtk::Oscillator *wave1;
private:
  inline void cb_wave1_i(Avtk::Oscillator*, void*);
  static void cb_wave1(Avtk::Oscillator*, void*);
public:
  Avtk::Oscillator *wave2;
private:
  inline void cb_wave2_i(Avtk::Oscillator*, void*);
  static void cb_wave2(Avtk::Oscillator*, void*);
public:
  Avtk::Oscillator *subbass;
private:
  inline void cb_subbass_i(Avtk::Oscillator*, void*);
  static void cb_subbass(Avtk::Oscillator*, void*);
public:
  Avtk::LFO *lfo;
private:
  inline void cb_lfo_i(Avtk::LFO*, void*);
  static void cb_lfo(Avtk::LFO*, void*);
public:
  Avtk::Box *lfoBox;
  Avtk::Dial *lfoSpeed;
private:
  inline void cb_lfoSpeed_i(Avtk::Dial*, void*);
  static void cb_lfoSpeed(Avtk::Dial*, void*);
public:
  Avtk::Dial *lfoToW2;
private:
  inline void cb_lfoToW2_i(Avtk::Dial*, void*);
  static void cb_lfoToW2(Avtk::Dial*, void*);
public:
  Avtk::Dial *lfoToW1;
private:
  inline void cb_lfoToW1_i(Avtk::Dial*, void*);
  static void cb_lfoToW1(Avtk::Dial*, void*);
public:
  Avtk::Dial *lfoAmp;
private:
  inline void cb_lfoAmp_i(Avtk::Dial*, void*);
  static void cb_lfoAmp(Avtk::Dial*, void*);
public:
  Avtk::Filtergraph *filter;
private:
  inline void cb_filter_i(Avtk::Filtergraph*, void*);
  static void cb_filter(Avtk::Filtergraph*, void*);
public:
  Avtk::Box *filterBox;
  Avtk::Dial *filterCutoff;
private:
  inline void cb_filterCutoff_i(Avtk::Dial*, void*);
  static void cb_filterCutoff(Avtk::Dial*, void*);
public:
  Avtk::Dial *filterLfoMod;
private:
  inline void cb_filterLfoMod_i(Avtk::Dial*, void*);
  static void cb_filterLfoMod(Avtk::Dial*, void*);
public:
  Avtk::ADSR *adsr;
private:
  inline void cb_adsr_i(Avtk::ADSR*, void*);
  static void cb_adsr(Avtk::ADSR*, void*);
public:
  Avtk::Box *adsrBox;
  Avtk::Dial *sustain;
private:
  inline void cb_sustain_i(Avtk::Dial*, void*);
  static void cb_sustain(Avtk::Dial*, void*);
public:
  Avtk::Dial *decay;
private:
  inline void cb_decay_i(Avtk::Dial*, void*);
  static void cb_decay(Avtk::Dial*, void*);
public:
  Avtk::Dial *attack;
private:
  inline void cb_attack_i(Avtk::Dial*, void*);
  static void cb_attack(Avtk::Dial*, void*);
public:
  Avtk::Dial *release;
private:
  inline void cb_release_i(Avtk::Dial*, void*);
  static void cb_release(Avtk::Dial*, void*);
public:
  Avtk::Volume *volume;
private:
  inline void cb_volume_i(Avtk::Volume*, void*);
  static void cb_volume(Avtk::Volume*, void*);
public:
  Avtk::Compressor *comp;
private:
  inline void cb_comp_i(Avtk::Compressor*, void*);
  static void cb_comp(Avtk::Compressor*, void*);
public:
  Avtk::Box *compBox;
  Avtk::Dial *compThres;
private:
  inline void cb_compThres_i(Avtk::Dial*, void*);
  static void cb_compThres(Avtk::Dial*, void*);
public:
  Avtk::Dial *compAttack;
private:
  inline void cb_compAttack_i(Avtk::Dial*, void*);
  static void cb_compAttack(Avtk::Dial*, void*);
public:
  Avtk::Dial *compMakeup;
private:
  inline void cb_compMakeup_i(Avtk::Dial*, void*);
  static void cb_compMakeup(Avtk::Dial*, void*);
public:
  Avtk::Dial *compRelease;
private:
  inline void cb_compRelease_i(Avtk::Dial*, void*);
  static void cb_compRelease(Avtk::Dial*, void*);
public:
  LV2UI_Write_Function write_function; 
  LV2UI_Controller controller; 
  void idle();
  int getWidth();
  int getHeight();
private:
  float gain; 
  float cutoff; 
  float Q; 
public:
  void writePort(int port, float& value);
};
#endif
