|
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
|