Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "filebrowserpopup.h"
Toshihiro Shimizu 890ddd
#include "filebrowser.h"
Toshihiro Shimizu 890ddd
#include "tlevel_io.h"
Toshihiro Shimizu 890ddd
#include "tw/button.h"
Toshihiro Shimizu 890ddd
#include "tw/textfield.h"
Toshihiro Shimizu 890ddd
#include "tw/label.h"
Toshihiro Shimizu 890ddd
#include "tw/colors.h"
Toshihiro Shimizu 890ddd
#include "tw/mainshell.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tw/message.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
using namespace TwConsts;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//==============================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class FileBrowserPopup::Data
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	Data() : m_okAction(0) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	FileBrowserPopup *m_popup;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	FileBrowser *m_fileBrowser;
Toshihiro Shimizu 890ddd
	TButton *m_okButton;
Toshihiro Shimizu 890ddd
	TButton *m_cancelButton;
Toshihiro Shimizu 890ddd
	TLabel *m_fileLabel;
Toshihiro Shimizu 890ddd
	TTextField *m_file;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TFilePath m_currentFile;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TGenericFileBrowserPopupAction *m_okAction;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void initPopup(const vector<string> &fileTypes);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void onOk();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void onFileSelChange(const TFilePath &fp)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		m_currentFile = fp;
Toshihiro Shimizu 890ddd
		m_file->setText(fp.withoutParentDir().getWideString());
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//                , m_importTrayH(120)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FileBrowserPopup::Data::initPopup(const vector<string> &fileTypes)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_fileBrowser = new FileBrowser(m_popup, "fileBrowser", fileTypes);
Toshihiro Shimizu 890ddd
	m_fileBrowser->setBackgroundColor(Gray240);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_fileBrowser->setFileSelChangeAction(new FileBrowserAction<FileBrowserPopup::Data>(
Toshihiro Shimizu 890ddd
		this, &FileBrowserPopup::Data::onFileSelChange));
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_okButton = new TButton(m_popup, "Ok");
Toshihiro Shimizu 890ddd
	m_cancelButton = new TButton(m_popup, "Cancel");
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	tconnect<TPopup>(*(m_cancelButton), m_popup, &TPopup::close);
Toshihiro Shimizu 890ddd
	tconnect<FileBrowserPopup::Data>(*(m_okButton), this, &FileBrowserPopup::Data::onOk);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_fileLabel = new TLabel(m_popup, "File");
Toshihiro Shimizu 890ddd
	m_file = new TTextField(m_popup);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FileBrowserPopup::Data::onOk()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	assert(m_okAction);
Toshihiro Shimizu 890ddd
	string file = toString(m_file->getText());
Toshihiro Shimizu 890ddd
	if (file != "") {
Toshihiro Shimizu 890ddd
		try {
Toshihiro Shimizu 890ddd
			m_okAction->sendCommand(m_fileBrowser->getCurrentDir() + file);
Toshihiro Shimizu 890ddd
			m_popup->close();
Toshihiro Shimizu 890ddd
		} catch (TException &e) {
Toshihiro Shimizu 890ddd
			TMessage::error(toString(e.getMessage()));
Toshihiro Shimizu 890ddd
		}
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
FileBrowserPopup::FileBrowserPopup(TWidget *parent)
Toshihiro Shimizu 890ddd
	: TPopup(parent, "fileBrowserPopup"), m_data(new Data())
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_data->m_popup = this;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_isMenu = false;
Toshihiro Shimizu 890ddd
	setSize(640, 400);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	vector<string> fileTypes;
Toshihiro Shimizu 890ddd
	TImageReader::getSupportedFormats(fileTypes);
Toshihiro Shimizu 890ddd
	TLevelReader::getSupportedFormats(fileTypes);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_data->initPopup(fileTypes);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
FileBrowserPopup::FileBrowserPopup(TWidget *parent, const vector<string> &fileTypes)
Toshihiro Shimizu 890ddd
	: TPopup(parent, "fileBrowserPopup"), m_data(new Data())
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_data->m_popup = this;
Toshihiro Shimizu 890ddd
	m_isMenu = false;
Toshihiro Shimizu 890ddd
	setSize(640, 400);
Toshihiro Shimizu 890ddd
	m_data->initPopup(fileTypes);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
FileBrowserPopup::~FileBrowserPopup()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	delete m_data;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TDimension FileBrowserPopup::getPreferredSize() const
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return TDimension(640, 400);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FileBrowserPopup::configureNotify(const TDimension &d)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	int y = 4;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_data->m_fileLabel->setGeometry(10 /*100*/, y, 60 /*150*/, y + 20);
Toshihiro Shimizu 890ddd
	m_data->m_file->setGeometry(65 /*155*/, y, d.lx - 220, y + 20);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_data->m_okButton->setGeometry(d.lx - 200, y, d.lx - 150, y + 20);
Toshihiro Shimizu 890ddd
	m_data->m_cancelButton->setGeometry(d.lx - 130, y, d.lx - 80, y + 20);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	y += 20 + 4;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int x = 200;
Toshihiro Shimizu 890ddd
	//m_importTray->setGeometry(x,y,d.lx-1,y+m_importTrayH-4);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//y = y + (m_importTrayH + 8);
Toshihiro Shimizu 890ddd
	m_data->m_fileBrowser->setGeometry(0, y, d.lx - 1, d.ly - 10);
Toshihiro Shimizu 890ddd
	invalidate();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FileBrowserPopup::popup(const TPoint &p)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_data->m_currentFile = TFilePath();
Toshihiro Shimizu 890ddd
	TPopup::popup(p);
Toshihiro Shimizu 890ddd
	setCaption("File Browser");
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FileBrowserPopup::draw()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	int y = 10 + 20 + 4 /*+ m_importTrayH*/;
Toshihiro Shimizu 890ddd
	setColor(Gray150);
Toshihiro Shimizu 890ddd
	draw3DRect(TRect(TPoint(0, y), TDimension(getSize().lx - 1, 6)));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FileBrowserPopup::setOkAction(TGenericFileBrowserPopupAction *action)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_data->m_okAction = action;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FileBrowserPopup::setCurrentDir(const TFilePath &dirPath)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_data->m_fileBrowser->setCurrentDir(dirPath);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FileBrowserPopup::setFilter(const vector<string> &fileTypes)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_data->m_fileBrowser->setFilter(fileTypes);
Toshihiro Shimizu 890ddd
}