#include <djLabelWidget.h>
#include <djGroupBoxWidget.h>
#include <djButtonWidget.h>
#include <djTextWidget.h>
#include <djNumWidget.h>
#include <djSliderWidget.h>
#include <djVecWidget.h>
#include <djWindow.h>
#include <djApp.h>

using namespace dj;

class ButtonTab : public Widget {
public:
  ButtonTab();
protected:
  DJ_CALLBACK(ButtonTab, pushCallback, bool)
  DJ_CALLBACK(ButtonTab, checkCallback, bool)
private:
  PushButtonWidget * _push;
  CheckButtonWidget * _check;
  ToolButtonWidget * _tools [6];
};

class InputTab : public Widget {
public:
  InputTab();
protected:
  DJ_CALLBACK(InputTab, textCallback, const Str &)
  DJ_CALLBACK(InputTab, intCallback, int)
  DJ_CALLBACK(InputTab, floatCallback, double)
private:
  TextWidget * _text;
  IntWidget * _int;
  FloatWidget * _float;
};

class SliderTab : public Widget {
public:
  SliderTab();
protected:
  DJ_CALLBACK(SliderTab, intCallback, int)
  DJ_CALLBACK(SliderTab, floatCallback, double)
private:
  IntSliderWidget * _int;
  FloatSliderWidget * _float;
};

class VecTab : public Widget {
public:
  VecTab();
protected:
  DJ_CALLBACK(VecTab, vec2iCallback, const Vec2i &)
  DJ_CALLBACK(VecTab, vec2fCallback, const Vec2f &)
private:
  Vec2iWidget * _vec2i;
  Vec2fWidget * _vec2f;
};

class myApp : public App {
public:
  myApp(int & argc, char ** argv);
  ~myApp();
protected:
  DJ_FL_WIDGET_CALLBACK(myApp, exitCallback)
private:
  Window * _window;
};
