#ifndef TNZ_COMBOBOX_INCLUDED #define TNZ_COMBOBOX_INCLUDED #include "tw/tw.h" #undef DVAPI #undef DVVAR #ifdef TWIN_EXPORTS #define DVAPI DV_EXPORT_API #define DVVAR DV_EXPORT_VAR #else #define DVAPI DV_IMPORT_API #define DVVAR DV_IMPORT_VAR #endif // forward declaration class TTextField; class TComboMenu; class TComboBoxActionInterface; //------------------------------------------------------------------- class DVAPI TComboBox : public TWidget { TTextField *m_textField; TComboMenu *m_menu; vector> *m_options; vector *m_actions; void sendCommand(); public: TComboBox(TWidget *parent, string name = "combobox"); ~TComboBox(); void draw(); void configureNotify(const TDimension &size); void leftButtonDown(const TMouseEvent &); /* void leftButtonDrag(const TPoint &pos, UCHAR pressure); */ TPoint getHotSpot() const; string getText() const; void setText(string s); void addOption(string s, string help); void deleteOptions(); void addAction(TComboBoxActionInterface *action); friend class TComboMenu; // int getOptionsCount() const; // string getOption(int index) const; }; class DVAPI TComboBoxActionInterface { public: TComboBoxActionInterface() {} virtual ~TComboBoxActionInterface() {} virtual void triggerAction(TComboBox *cb, string text) = 0; }; template class TComboBoxAction : public TComboBoxActionInterface { typedef void (T::*Method)(TComboBox *vf, string text); T *m_target; Method m_method; public: TComboBoxAction(T *target, Method method) : m_target(target), m_method(method) {} void triggerAction(TComboBox *vf, string text) { (m_target->*m_method)(vf, text); } }; template inline void tconnect(TComboBox &src, T *target, void (T::*method)(TComboBox *vf, string text)) { src.addAction(new TComboBoxAction(target, method)); } #endif