| #pragma once |
| |
| #ifndef TNZ_OPTIONMENU_INCLUDED |
| #define TNZ_OPTIONMENU_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 TPopupMenu; |
| |
| #ifdef WIN32 |
| #pragma warning(disable : 4251) |
| #endif |
| |
| |
| |
| class DVAPI TGenericOptionMenuAction { |
| public: |
| virtual ~TGenericOptionMenuAction() {} |
| virtual void sendCommand(string item) = 0; |
| }; |
| |
| class DVAPI TGenericOptionMenuWAction { |
| public: |
| virtual ~TGenericOptionMenuWAction() {} |
| virtual void sendCommand(wstring item) = 0; |
| }; |
| |
| |
| |
| template <class T> |
| class TOptionMenuAction : public TGenericOptionMenuAction { |
| public: |
| typedef void (T::*Method)(string item); |
| TOptionMenuAction(T *target, Method method) |
| : m_target(target), m_method(method) {} |
| void sendCommand(string item) { (m_target->*m_method)(item); } |
| |
| private: |
| T *m_target; |
| Method m_method; |
| }; |
| |
| |
| template <class T> |
| class TOptionMenuActionW : public TGenericOptionMenuWAction { |
| public: |
| typedef void (T::*Method)(wstring item); |
| TOptionMenuActionW(T *target, Method method) |
| : m_target(target), m_method(method) {} |
| void sendCommand(wstring item) { (m_target->*m_method)(item); } |
| |
| private: |
| T *m_target; |
| Method m_method; |
| }; |
| |
| |
| |
| class DVAPI TOptionMenu : public TWidget { |
| public: |
| TOptionMenu(TWidget *parent, string name = "optionMenu"); |
| ~TOptionMenu(); |
| |
| void setAction(TGenericOptionMenuAction *action) { m_action = action; } |
| |
| void repaint(); |
| |
| void configureNotify(const TDimension &size); |
| |
| void leftButtonDown(const TMouseEvent &); |
| |
| string getText() const; |
| void setText(string s); |
| |
| void setLabel(wstring title); |
| void setLabelWidth(int lx); |
| wstring getLabel() const { return m_label; } |
| int getLabelWidth() const { return m_labelWidth; } |
| |
| bool isOption(string s) const; |
| void addOption(string cmdName); |
| void addOption(string cmdName, wstring title); |
| void deleteOption(string s); |
| void deleteAllOptions(); |
| |
| private: |
| TPopupMenu *m_menu; |
| string m_currentOption; |
| wstring m_currentOptionTitle; |
| wstring m_label; |
| int m_labelWidth; |
| |
| typedef std::vector<std::pair<string, wstring>> OptionList; |
| OptionList m_options; |
| |
| TGenericOptionMenuAction *m_action; |
| }; |
| |
| |
| |
| template <class T> |
| class TOptionMenuWAction : public TGenericOptionMenuWAction { |
| public: |
| typedef void (T::*Method)(wstring item); |
| TOptionMenuWAction(T *target, Method method) |
| : m_target(target), m_method(method) {} |
| void sendCommand(wstring item) { (m_target->*m_method)(item); } |
| |
| private: |
| T *m_target; |
| Method m_method; |
| }; |
| |
| |
| |
| class DVAPI TOptionMenuW : public TWidget { |
| public: |
| TOptionMenuW(TWidget *parent, string name = "optionMenu"); |
| ~TOptionMenuW(); |
| |
| void setAction(TGenericOptionMenuWAction *action) { m_action = action; } |
| |
| void repaint(); |
| |
| void configureNotify(const TDimension &size); |
| |
| void leftButtonDown(const TMouseEvent &); |
| |
| wstring getText() const; |
| void setText(wstring s); |
| |
| void setLabel(wstring label); |
| void setLabelWidth(int width); |
| |
| bool isOption(wstring s) const; |
| void addOption(wstring item); |
| void deleteOption(wstring s); |
| void deleteAllOptions(); |
| |
| typedef std::vector<wstring> OptionList; |
| const OptionList getOptions() const { return m_options; }; |
| |
| private: |
| TPopupMenu *m_menu; |
| wstring m_currentOption; |
| wstring m_label; |
| int m_labelWidth; |
| |
| OptionList m_options; |
| |
| TGenericOptionMenuWAction *m_action; |
| }; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| template <class T> |
| void tconnect(TOptionMenu &menu, T *target, void (T::*method)(string)) { |
| menu.setAction(new TOptionMenuAction<T>(target, method)); |
| } |
| |
| |
| |
| template <class T> |
| void tconnect(TOptionMenuW &menu, T *target, void (T::*method)(wstring)) { |
| menu.setAction(new TOptionMenuActionW<T>(target, method)); |
| } |
| |
| #endif |