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