| #pragma once |
| |
| #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 |
| |
| |
| class TTextField; |
| class TComboMenu; |
| class TComboBoxActionInterface; |
| |
| |
| |
| class DVAPI TComboBox : public TWidget { |
| TTextField *m_textField; |
| TComboMenu *m_menu; |
| |
| vector<pair<string, string>> *m_options; |
| vector<TComboBoxActionInterface *> *m_actions; |
| void sendCommand(); |
| |
| public: |
| TComboBox(TWidget *parent, string name = "combobox"); |
| ~TComboBox(); |
| |
| void draw(); |
| |
| void configureNotify(const TDimension &size); |
| |
| void leftButtonDown(const TMouseEvent &); |
| |
| |
| |
| |
| 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; |
| |
| |
| }; |
| |
| class DVAPI TComboBoxActionInterface { |
| public: |
| TComboBoxActionInterface() {} |
| virtual ~TComboBoxActionInterface() {} |
| virtual void triggerAction(TComboBox *cb, string text) = 0; |
| }; |
| |
| template <class T> |
| 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 <class T> |
| inline void tconnect(TComboBox &src, T *target, |
| void (T::*method)(TComboBox *vf, string text)) { |
| src.addAction(new TComboBoxAction<T>(target, method)); |
| } |
| |
| #endif |