Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef T_THUMBNAIL_INCLUDED
Toshihiro Shimizu 890ddd
#define T_THUMBNAIL_INCLUDED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tfilepath.h"
Toshihiro Shimizu 890ddd
#include "traster.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TXshLevel;
Toshihiro Shimizu 890ddd
class TXsheet;
Toshihiro Shimizu 890ddd
class TPalette;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class Thumbnail
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	class Frame
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
	public:
Toshihiro Shimizu 890ddd
		Frame(const TFrameId &fid) : m_fid(fid) {}
Toshihiro Shimizu 890ddd
		const TFrameId m_fid;
Toshihiro Shimizu 890ddd
		TRaster32P m_raster;
Toshihiro Shimizu 890ddd
	};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	enum Type {
Toshihiro Shimizu 890ddd
		LEVEL,
Toshihiro Shimizu 890ddd
		SCENE
Toshihiro Shimizu 890ddd
	};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	vector<Frame *> m_frames;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int m_currentFrameIndex;
Toshihiro Shimizu 890ddd
	bool m_iconLoaded;
Toshihiro Shimizu 890ddd
	bool m_playing;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TDimension m_size;
Toshihiro Shimizu 890ddd
	TRaster32P m_raster;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	Thumbnail(const TDimension &size);
Toshihiro Shimizu 890ddd
	virtual ~Thumbnail();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void addFrame(const TFrameId &fid);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool isIconLoaded() const { return m_iconLoaded; }
Toshihiro Shimizu 890ddd
	bool isPlaying() const { return m_playing; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// post: assert(m_iconLoaded); assert(m_raster);
Toshihiro Shimizu 890ddd
	virtual void loadIcon() = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// pre: 0<=index && index<m_frames.size()
Toshihiro Shimizu 890ddd
	// post: assert(m_frames[index]);
Toshihiro Shimizu 890ddd
	virtual void loadFrame(int index) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void setPlaying(bool on) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual string getName() const { return ""; }
Toshihiro Shimizu 890ddd
	virtual TFilePath getPath() const { return "__none__"; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual Type getType() const = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// pre: assert(!m_playing);
Toshihiro Shimizu 890ddd
	virtual void setName(string name) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	const TRaster32P &getRaster() const { return m_raster; }
Toshihiro Shimizu 890ddd
	TDimension getSize() const { return m_size; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool nextFrame() { return gotoFrame(m_currentFrameIndex + 1); }
Toshihiro Shimizu 890ddd
	int getCurrentFrameIndex() { return m_currentFrameIndex; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// pre: assert(m_playing)
Toshihiro Shimizu 890ddd
	bool gotoFrame(int index);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TAffine getAffine(const TDimension &cameraSize) const;
Toshihiro Shimizu 890ddd
	virtual bool startDragDrop() { return false; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	// not implemented
Toshihiro Shimizu 890ddd
	Thumbnail(const Thumbnail &);
Toshihiro Shimizu 890ddd
	Thumbnail &operator=(const Thumbnail &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class LevelThumbnail : public Thumbnail
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	TXshLevel *m_level;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	LevelThumbnail(const TDimension &size, TXshLevel *level);
Toshihiro Shimizu 890ddd
	~LevelThumbnail();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void loadIcon();
Toshihiro Shimizu 890ddd
	void loadFrame(int index);
Toshihiro Shimizu 890ddd
	void setPlaying(bool on);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	string getName() const;
Toshihiro Shimizu 890ddd
	TFilePath getPath() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setName(string name);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	Type getType() const { return LEVEL; };
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	// not implemented
Toshihiro Shimizu 890ddd
	LevelThumbnail(const LevelThumbnail &);
Toshihiro Shimizu 890ddd
	LevelThumbnail &operator=(const LevelThumbnail &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class SceneThumbnail : public Thumbnail
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	string m_name;
Toshihiro Shimizu 890ddd
	TXsheet *m_xsheet;
Toshihiro Shimizu 890ddd
	TPalette *m_palette;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	SceneThumbnail(const TDimension &size, TXsheet *xsheet, TPalette *palette);
Toshihiro Shimizu 890ddd
	~SceneThumbnail();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void loadIcon();
Toshihiro Shimizu 890ddd
	void loadFrame(int index);
Toshihiro Shimizu 890ddd
	void setPlaying(bool on);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	string getName() const;
Toshihiro Shimizu 890ddd
	TFilePath getPath() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	Type getType() const { return SCENE; };
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setName(string name);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	// not implemented
Toshihiro Shimizu 890ddd
	SceneThumbnail(const LevelThumbnail &);
Toshihiro Shimizu 890ddd
	SceneThumbnail &operator=(const LevelThumbnail &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class FileThumbnail : public Thumbnail
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	TFilePath m_filepath;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	FileThumbnail(const TDimension &size, const TFilePath &path);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	string getName() const { return m_filepath.getName(); }
Toshihiro Shimizu 890ddd
	TFilePath getPath() const { return m_filepath; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setName(string name);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	static FileThumbnail *create(const TDimension &size, const TFilePath &path);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool startDragDrop();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	// not implemented
Toshihiro Shimizu 890ddd
	FileThumbnail(const FileThumbnail &);
Toshihiro Shimizu 890ddd
	FileThumbnail &operator=(const FileThumbnail &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif