Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef TNZ_COLORFIELD_INCLUDED
Toshihiro Shimizu 890ddd
#define TNZ_COLORFIELD_INCLUDED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tw/tw.h"
Toshihiro Shimizu 890ddd
#include "tpixel.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
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
class ColorChip;
Toshihiro Shimizu 890ddd
class TValueField;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class DVAPI TColorField : public TWidget {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  class Listener {
Shinya Kitaoka 120a6e
  public:
Shinya Kitaoka 120a6e
    virtual void onChange(TColorField *cfd, TPixel32 color, bool dragging) {}
Shinya Kitaoka 120a6e
    virtual ~Listener() {}
Shinya Kitaoka 120a6e
  };
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  class ColorEditor {
Shinya Kitaoka 120a6e
  public:
Shinya Kitaoka 120a6e
    virtual void connectTo(TColorField *fld, bool openPopup = false) = 0;
Shinya Kitaoka 120a6e
    virtual bool isConnectedTo(TColorField *fld) const = 0;
Shinya Kitaoka 120a6e
    virtual void updateColor(const TPixel32 &color, bool dragging) = 0;
Shinya Kitaoka 120a6e
  };
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  Listener *m_listener;
Shinya Kitaoka 120a6e
  TPixel32 m_color;
Shinya Kitaoka 120a6e
  ColorChip *m_colorChip;
Shinya Kitaoka 120a6e
  TValueField *m_redFld, *m_greenFld, *m_blueFld, *m_matteFld;
Shinya Kitaoka 120a6e
  typedef TColorField This;
Shinya Kitaoka 120a6e
  int m_labelWidth;
Shinya Kitaoka 120a6e
  bool m_matteEnabled;
Shinya Kitaoka 120a6e
  ColorEditor *m_colorEditor;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 120a6e
  virtual void onChange(TPixel32 color, bool dragging) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TColorField(TWidget *parent, string name, int labelWidth, bool matteEnabled);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void configureNotify(const TDimension &size);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setListener(Listener *listener);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setColor(TPixel32 color);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TPixel32 getColor() const;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void onChange(TValueField *vf, double value, bool dragging);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void draw();
Shinya Kitaoka 120a6e
  void setColorEditor(ColorEditor *colorEditor) { m_colorEditor = colorEditor; }
Shinya Kitaoka 120a6e
  ColorEditor *getColorEditor() const { return m_colorEditor; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void notifyListener(bool dragging);
Shinya Kitaoka 120a6e
  bool isMatteEnabled() const { return m_matteEnabled; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void onEditedColorChange();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
// forward declarations
Toshihiro Shimizu 890ddd
class TColorFieldActionInterface;
Toshihiro Shimizu 890ddd
class TColorField2ActionInterface;
Toshihiro Shimizu 890ddd
class TColorField3ActionInterface;
Toshihiro Shimizu 890ddd
class TColorSlider;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TColorField : public TWidget {
Toshihiro Shimizu 890ddd
  TPixel32 m_color;
Toshihiro Shimizu 890ddd
  int m_currentChannel;
Toshihiro Shimizu 890ddd
  vector<tcolorfieldactioninterface*> *m_actions;</tcolorfieldactioninterface*>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void onValueChange(bool dragging);
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
  TColorField(TWidget *parent, string name = "colorfield");
Toshihiro Shimizu 890ddd
  ~TColorField();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void repaint();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void leftButtonDown(const TMouseEvent &e);
Toshihiro Shimizu 890ddd
  void leftButtonDrag(const TMouseEvent &e);
Toshihiro Shimizu 890ddd
  void leftButtonUp  (const TMouseEvent &e);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  TPixel32 getValue() const;
Toshihiro Shimizu 890ddd
  void setValue(const TPixel32 &);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void addAction(TColorFieldActionInterface*action);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TColorField2Data;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TColorField2 : public TWidget {
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
  TColorField2(TWidget *parent, string name = "colorfield2");
Toshihiro Shimizu 890ddd
  ~TColorField2();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void configureNotify(const TDimension &d);
Toshihiro Shimizu 890ddd
  void repaint();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  TPixel32 getValue() const;
Toshihiro Shimizu 890ddd
  void setValue(const TPixel32 &);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void addAction(TColorField2ActionInterface*action);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
  TColorField2Data *m_data;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TColorFieldActionInterface {
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
  TColorFieldActionInterface() {}
Toshihiro Shimizu 890ddd
  virtual ~TColorFieldActionInterface() {}
Shinya Kitaoka 120a6e
  virtual void triggerAction(TColorField*vf, const TPixel32 &value, bool
Shinya Kitaoka 120a6e
dragging) = 0;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
class TColorFieldAction : public TColorFieldActionInterface {
Shinya Kitaoka 120a6e
  typedef void (T::*Method)(TColorField *vf, const TPixel32 &value, bool
Shinya Kitaoka 120a6e
dragging);
Toshihiro Shimizu 890ddd
  T *m_target;
Toshihiro Shimizu 890ddd
  Method m_method;
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TColorFieldAction(T*target, Method method) : m_target(target),
Shinya Kitaoka 120a6e
m_method(method) {}
Shinya Kitaoka 120a6e
  void triggerAction(TColorField*vf, const TPixel32 &value, bool dragging)
Toshihiro Shimizu 890ddd
    {(m_target->*m_method)(vf, value, dragging); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Shinya Kitaoka 120a6e
inline void tconnect(TColorField&src, T *target, void (T::*method)(TColorField
Shinya Kitaoka 120a6e
*vf, const TPixel32 &value, bool dragging))
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
  src.addAction(new TColorFieldAction<t>(target, method));</t>
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TColorField2ActionInterface {
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
  TColorField2ActionInterface() {}
Toshihiro Shimizu 890ddd
  virtual ~TColorField2ActionInterface() {}
Shinya Kitaoka 120a6e
  virtual void triggerAction(TColorField2*vf, const TPixel32 &value, bool
Shinya Kitaoka 120a6e
dragging) = 0;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
class TColorField2Action : public TColorField2ActionInterface {
Shinya Kitaoka 120a6e
  typedef void (T::*Method)(TColorField2 *vf, const TPixel32 &value, bool
Shinya Kitaoka 120a6e
dragging);
Toshihiro Shimizu 890ddd
  T *m_target;
Toshihiro Shimizu 890ddd
  Method m_method;
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TColorField2Action(T*target, Method method) : m_target(target),
Shinya Kitaoka 120a6e
m_method(method) {}
Shinya Kitaoka 120a6e
  void triggerAction(TColorField2*vf, const TPixel32 &value, bool dragging)
Toshihiro Shimizu 890ddd
    {(m_target->*m_method)(vf, value, dragging); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Shinya Kitaoka 120a6e
inline void tconnect(TColorField2&src, T *target, void (T::*method)(TColorField2
Shinya Kitaoka 120a6e
*vf, const TPixel32 &value, bool dragging))
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
  src.addAction(new TColorField2Action<t>(target, method));</t>
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//==============================================================================
Toshihiro Shimizu 890ddd
// TColorField3
Toshihiro Shimizu 890ddd
//==============================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TColorField3Data;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TColorField3 : public TWidget {
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
  TColorField3(TWidget *parent, string name = "colorfield3");
Toshihiro Shimizu 890ddd
  ~TColorField3();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void configureNotify(const TDimension &d);
Toshihiro Shimizu 890ddd
  void repaint();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  TPixel32 getValue() const;
Toshihiro Shimizu 890ddd
  void setValue(const TPixel32 &);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void addAction(TColorField3ActionInterface*action);
Toshihiro Shimizu 890ddd
  void leftButtonDoubleClick(const TMouseEvent &);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
  TColorField3Data *m_data;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TColorField3ActionInterface {
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
  TColorField3ActionInterface() {}
Toshihiro Shimizu 890ddd
  virtual ~TColorField3ActionInterface() {}
Shinya Kitaoka 120a6e
  virtual void triggerAction(TColorField3*vf, const TPixel32 &value, bool
Shinya Kitaoka 120a6e
dragging) = 0;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
class TColorField3Action : public TColorField3ActionInterface {
Shinya Kitaoka 120a6e
  typedef void (T::*Method)(TColorField3 *vf, const TPixel32 &value, bool
Shinya Kitaoka 120a6e
dragging);
Toshihiro Shimizu 890ddd
  T *m_target;
Toshihiro Shimizu 890ddd
  Method m_method;
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TColorField3Action(T*target, Method method) : m_target(target),
Shinya Kitaoka 120a6e
m_method(method) {}
Shinya Kitaoka 120a6e
  void triggerAction(TColorField3*vf, const TPixel32 &value, bool dragging)
Toshihiro Shimizu 890ddd
    {(m_target->*m_method)(vf, value, dragging); }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Shinya Kitaoka 120a6e
inline void tconnect(TColorField3&src, T *target, void (T::*method)(TColorField3
Shinya Kitaoka 120a6e
*vf, const TPixel32 &value, bool dragging))
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
  src.addAction(new TColorField3Action<t>(target, method));</t>
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif