Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef FILEBROWSERPOPUP_INCLUDED
Toshihiro Shimizu 890ddd
#define FILEBROWSERPOPUP_INCLUDED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tw/popup.h"
Toshihiro Shimizu 890ddd
#include "tfilepath.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TGenericFileBrowserPopupAction
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	virtual ~TGenericFileBrowserPopupAction() {}
Toshihiro Shimizu 890ddd
	virtual void sendCommand(const TFilePath &) = 0;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class T>
Toshihiro Shimizu 890ddd
class TFileBrowserPopupAction : public TGenericFileBrowserPopupAction
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	typedef void (T::*Method)(const TFilePath &);
Toshihiro Shimizu 890ddd
	TFileBrowserPopupAction(T *target, Method method) : m_target(target), m_method(method) {}
Toshihiro Shimizu 890ddd
	void sendCommand(const TFilePath &fp) { (m_target->*m_method)(fp); }
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 FileBrowserPopup : public TPopup
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	FileBrowserPopup(TWidget *parent);
Toshihiro Shimizu 890ddd
	FileBrowserPopup(TWidget *parent, const vector<string> &fileTypes);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	~FileBrowserPopup();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void configureNotify(const TDimension &d);
Toshihiro Shimizu 890ddd
	TDimension getPreferredSize() const;
Toshihiro Shimizu 890ddd
	void draw();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setCurrentDir(const TFilePath &dirPath);
Toshihiro Shimizu 890ddd
	void setFilter(const vector<string> &fileTypes);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setOkAction(TGenericFileBrowserPopupAction *action);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void popup(const TPoint &p);
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