Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef TNZ_COMBOBOX_INCLUDED
Toshihiro Shimizu 890ddd
#define TNZ_COMBOBOX_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
Toshihiro Shimizu 890ddd
// forward declaration
Toshihiro Shimizu 890ddd
class TTextField;
Toshihiro Shimizu 890ddd
class TComboMenu;
Toshihiro Shimizu 890ddd
class TComboBoxActionInterface;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TComboBox : public TWidget
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TTextField *m_textField;
Toshihiro Shimizu 890ddd
	TComboMenu *m_menu;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	vector<pair<string, string="">> *m_options;</pair<string,>
Toshihiro Shimizu 890ddd
	vector<tcomboboxactioninterface *=""> *m_actions;</tcomboboxactioninterface>
Toshihiro Shimizu 890ddd
	void sendCommand();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TComboBox(TWidget *parent, string name = "combobox");
Toshihiro Shimizu 890ddd
	~TComboBox();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void draw();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void configureNotify(const TDimension &size);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void leftButtonDown(const TMouseEvent &);
Toshihiro Shimizu 890ddd
	/*
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  void leftButtonDrag(const TPoint &pos, UCHAR pressure);
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
	TPoint getHotSpot() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	string getText() const;
Toshihiro Shimizu 890ddd
	void setText(string s);
Toshihiro Shimizu 890ddd
	void addOption(string s, string help);
Toshihiro Shimizu 890ddd
	void deleteOptions();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void addAction(TComboBoxActionInterface *action);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	friend class TComboMenu;
Toshihiro Shimizu 890ddd
	//	int getOptionsCount() const;
Toshihiro Shimizu 890ddd
	//  string getOption(int index) const;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TComboBoxActionInterface
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TComboBoxActionInterface() {}
Toshihiro Shimizu 890ddd
	virtual ~TComboBoxActionInterface() {}
Toshihiro Shimizu 890ddd
	virtual void triggerAction(TComboBox *cb, string text) = 0;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
class TComboBoxAction : public TComboBoxActionInterface
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	typedef void (T::*Method)(TComboBox *vf, string text);
Toshihiro Shimizu 890ddd
	T *m_target;
Toshihiro Shimizu 890ddd
	Method m_method;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TComboBoxAction(T *target, Method method) : m_target(target), m_method(method) {}
Toshihiro Shimizu 890ddd
	void triggerAction(TComboBox *vf, string text)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		(m_target->*m_method)(vf, text);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class t=""></class>
Toshihiro Shimizu 890ddd
inline void tconnect(TComboBox &src, T *target, void (T::*method)(TComboBox *vf, string text))
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	src.addAction(new TComboBoxAction<t>(target, method));</t>
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif