91 lines
1.8 KiB
C
91 lines
1.8 KiB
C
|
|
||
|
|
||
|
#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<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 &);
|
||
|
/*
|
||
|
|
||
|
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 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
|