Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef TNZ_BUTTON_INCLUDED
Toshihiro Shimizu 890ddd
#define TNZ_BUTTON_INCLUDED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tw/tw.h"
Toshihiro Shimizu 890ddd
#include "tw/action.h"
Toshihiro Shimizu 890ddd
#include "traster.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
class TButtonSet;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TButton : public TWidget, public TCommandSource
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	bool m_pressed, m_active;
Toshihiro Shimizu 890ddd
	int m_border;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	vector<tbuttonset *=""> *m_buttonSets;</tbuttonset>
Toshihiro Shimizu 890ddd
	friend class TButtonSet;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TButton(TWidget *parent, string name = "button");
Toshihiro Shimizu 890ddd
	~TButton();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void repaint();
Toshihiro Shimizu 890ddd
	void enter(const TPoint &p);
Toshihiro Shimizu 890ddd
	void leave(const TPoint &p);
Toshihiro Shimizu 890ddd
	void leftButtonDown(const TMouseEvent &);
Toshihiro Shimizu 890ddd
	void leftButtonUp(const TMouseEvent &);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void setTitle(string title) { m_name = title; }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TIconButton : public TButton
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TRaster32P m_rasterUp, m_rasterDown;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TIconButton(TWidget *parent, TRaster32P raster, string name = "button");
Toshihiro Shimizu 890ddd
	TIconButton(TWidget *parent, TRaster32P rasterUp, TRaster32P rasterDown, string name = "button");
Toshihiro Shimizu 890ddd
	void repaint();
Toshihiro Shimizu 890ddd
	void leftButtonDown(const TMouseEvent &);
Toshihiro Shimizu 890ddd
	void leftButtonUp(const TMouseEvent &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TIconToggle : public TButton
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TRaster32P m_up, m_down;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TIconToggle(TWidget *parent,
Toshihiro Shimizu 890ddd
				TRaster32P up, TRaster32P down,
Toshihiro Shimizu 890ddd
				string name = "button");
Toshihiro Shimizu 890ddd
	void repaint();
Toshihiro Shimizu 890ddd
	void setStatus(bool v);
Toshihiro Shimizu 890ddd
	bool getStatus();
Toshihiro Shimizu 890ddd
	void leftButtonDown(const TMouseEvent &e);
Toshihiro Shimizu 890ddd
	void leftButtonUp(const TMouseEvent &e);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TButtonSetAction
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TButtonSetAction(){};
Toshihiro Shimizu 890ddd
	virtual ~TButtonSetAction(){};
Toshihiro Shimizu 890ddd
	virtual void sendCommand(string value) = 0;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
class TButtonSetActionT : public TButtonSetAction
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	typedef void (T::*CommandMethod)(string);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	T *m_target;
Toshihiro Shimizu 890ddd
	CommandMethod m_method;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TButtonSetActionT<t>(T *target, CommandMethod method) : m_target(target), m_method(method){};</t>
Toshihiro Shimizu 890ddd
	void sendCommand(string value) { (m_target->*m_method)(value); };
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TButtonSet
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	std::map<tbutton *,="" string=""> *m_buttons;</tbutton>
Toshihiro Shimizu 890ddd
	string m_currentValue;
Toshihiro Shimizu 890ddd
	TButtonSetAction *m_action;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TButtonSet();
Toshihiro Shimizu 890ddd
	~TButtonSet();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	// not implemented
Toshihiro Shimizu 890ddd
	TButtonSet(const TButtonSet &);
Toshihiro Shimizu 890ddd
	TButtonSet &operator=(const TButtonSet &);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	void addButton(TButton *button, string value);
Toshihiro Shimizu 890ddd
	void removeButton(TButton *button);
Toshihiro Shimizu 890ddd
	void setValue(string value);
Toshihiro Shimizu 890ddd
	void setValue(TButton *value);
Toshihiro Shimizu 890ddd
	// Note: setValue fires the buttons actions as well as the buttonset action
Toshihiro Shimizu 890ddd
	string getValue() { return m_currentValue; };
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setAction(TButtonSetAction *action);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void enable(bool on);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif