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