Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef TNZ_COLORSLIDER_INCLUDED
Toshihiro Shimizu 890ddd
#define TNZ_COLORSLIDER_INCLUDED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tw/tw.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TWIN_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class DVAPI TColorSlider : public TWidget {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  class DVAPI Color : public TPixel32 {
Shinya Kitaoka 120a6e
  public:
Shinya Kitaoka 120a6e
    int h, s, v;
Shinya Kitaoka 120a6e
    Color() : TPixel32(), h(0), s(0), v(0) {}
Shinya Kitaoka 120a6e
    Color(const TPixel32 &c) : TPixel32(c), h(0), s(0), v(0) { updateHsv(); }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
    Color &operator=(const TPixel32 &c) {
Shinya Kitaoka 120a6e
      r = c.r;
Shinya Kitaoka 120a6e
      g = c.g;
Shinya Kitaoka 120a6e
      b = c.b;
Shinya Kitaoka 120a6e
      m = c.m;
Shinya Kitaoka 120a6e
      updateHsv();
Shinya Kitaoka 120a6e
      return *this;
Shinya Kitaoka 120a6e
    }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
    void updateRgb();
Shinya Kitaoka 120a6e
    void updateHsv();
Shinya Kitaoka 120a6e
  };
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  class DVAPI Action {
Shinya Kitaoka 120a6e
  public:
Shinya Kitaoka 120a6e
    Action() {}
Shinya Kitaoka 120a6e
    virtual ~Action() {}
Shinya Kitaoka 120a6e
    virtual void notify(const Color &color, bool dragging) = 0;
Shinya Kitaoka 120a6e
  };
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  enum Type {
Shinya Kitaoka 120a6e
    RedScale,
Shinya Kitaoka 120a6e
    GreenScale,
Shinya Kitaoka 120a6e
    BlueScale,
Shinya Kitaoka 120a6e
    MatteScale,
Shinya Kitaoka 120a6e
    HueScale,
Shinya Kitaoka 120a6e
    SaturationScale,
Shinya Kitaoka 120a6e
    ValueScale
Shinya Kitaoka 120a6e
  };
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TColorSlider(TWidget *parent, Type type, string name = "colorSlider");
Shinya Kitaoka 120a6e
  ~TColorSlider();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void draw();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void configureNotify(const TDimension &d);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setType(Type type);
Shinya Kitaoka 120a6e
  Type getType() const;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int getValue() const;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setColorValue(const Color &color);
Shinya Kitaoka 120a6e
  Color getColorValue() const;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setAction(Action *action);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void enableLabel(bool on);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // void onTimer(int v);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void invalidate();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void notify(bool dragging);  // chiama la callback
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  class Data;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  Data *m_data;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Shinya Kitaoka 120a6e
class TColorSliderAction : public TColorSlider::Action {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  typedef void (T::*CommandMethod)(const TColorSlider::Color &color,
Shinya Kitaoka 120a6e
                                   bool dragging);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TColorSliderAction(T *target, CommandMethod method)
Shinya Kitaoka 120a6e
      : m_target(target), m_method(method){};
Shinya Kitaoka 120a6e
  void notify(const TColorSlider::Color &color, bool dragging) {
Shinya Kitaoka 120a6e
    (m_target->*m_method)(color, dragging);
Shinya Kitaoka 120a6e
  };
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  T *m_target;
Shinya Kitaoka 120a6e
  CommandMethod m_method;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif