#ifndef TEXTLIST_INCLUDED
#define TEXTLIST_INCLUDED
#include "tw/tw.h"
#include "tw/scrollview.h"
//-------------------------------------------------------------------
class TGenericTextListAction
{
public:
virtual ~TGenericTextListAction() {}
virtual void sendCommand(int itemIndex) = 0;
};
//-------------------------------------------------------------------
template <class T>
class TTextListAction : public TGenericTextListAction
{
public:
typedef void (T::*Method)(int itemIndex);
TTextListAction(T *target, Method method) : m_target(target), m_method(method) {}
void sendCommand(int itemIndex) { (m_target->*m_method)(itemIndex); }
private:
T *m_target;
Method m_method;
};
//-------------------------------------------------------------------
class TTextListItem
{
public:
TTextListItem(const string &id, const string &caption);
virtual ~TTextListItem() {}
string getId() { return m_id; }
string getCaption() { return m_caption; }
private:
string m_id;
string m_caption;
};
//-------------------------------------------------------------------
class TTextList : public TWidget
{
public:
TTextList(TWidget *parent, string name = "textlist");
~TTextList();
void addItem(TTextListItem *item);
void removeItem(const string &itemId);
void clearAll();
int getItemCount() const;
TTextListItem *getItem(int i) const;
// returns the index of item, -1 if not present
int itemToIndex(const string &itemId);
int getSelectedItemCount() const;
TTextListItem *getSelectedItem(int i) const;
string getSelectedItemId(int i) const; // returns the id of the i-th item selected
void select(int i, bool on);
void select(const string &itemId, bool on);
void unselectAll();
bool isSelected(int i) const;
bool isSelected(const string &itemId) const;
void setSelAction(TGenericTextListAction *action);
void setDblClickAction(TGenericTextListAction *action);
void draw();
void configureNotify(const TDimension &d);
void leftButtonDown(const TMouseEvent &e);
void leftButtonDoubleClick(const TMouseEvent &e);
void keyDown(int key, unsigned long mod, const TPoint &);
void scrollTo(int y);
private:
class Data;
Data *m_data;
};
#endif