128 lines
4 KiB
C++
128 lines
4 KiB
C++
#pragma once
|
|
|
|
#ifndef LEVELSET_INCLUDED
|
|
#define LEVELSET_INCLUDED
|
|
|
|
// TnzCore includes
|
|
#include "tfilepath.h"
|
|
|
|
// STD includes
|
|
#include <set>
|
|
|
|
#undef DVAPI
|
|
#undef DVVAR
|
|
#ifdef TOONZLIB_EXPORTS
|
|
#define DVAPI DV_EXPORT_API
|
|
#define DVVAR DV_EXPORT_VAR
|
|
#else
|
|
#define DVAPI DV_IMPORT_API
|
|
#define DVVAR DV_IMPORT_VAR
|
|
#endif
|
|
|
|
//=============================================================================
|
|
|
|
// Forward declarations
|
|
|
|
class ToonzScene;
|
|
class TXshLevel;
|
|
class TXshSimpleLevel;
|
|
class TLevel;
|
|
class TIStream;
|
|
class TOStream;
|
|
|
|
//=============================================================================
|
|
|
|
//*********************************************************************************************
|
|
// TLevelSet declaration
|
|
//*********************************************************************************************
|
|
|
|
//! The TLevelSet is a typical ToonzScene component that is used to trace all
|
|
//! levels in a
|
|
//! Toonz scene.
|
|
/*!
|
|
The main purpose of the TLevelSet is that of acting as a container of <B>
|
|
externally
|
|
owned <\B> TXshLevel* instances. The container is internally implemented as a
|
|
vector,
|
|
and shares its access model.
|
|
\n\n
|
|
Additionally, the set is used to map the stored levels by their names
|
|
(case-insensitive
|
|
comparisons), and associates a \a folder to each of the level instances.
|
|
The level folder is not physical (ie it does not refer to a directory in the
|
|
file system),
|
|
but can be used to list the levels pool in a hierarchycal view.
|
|
|
|
\warning This class distinguishes between \b paths and \b folders as described
|
|
above, but
|
|
the associated data type (TFilePath) is the same. Please, pay
|
|
attention to the
|
|
function argument names, in this respect.
|
|
*/
|
|
|
|
class DVAPI TLevelSet {
|
|
std::vector<TXshLevel *> m_levels; //!< The levels container
|
|
std::map<std::wstring, TXshLevel *> m_levelTable; //!< Name to level map
|
|
|
|
std::map<TXshLevel *, TFilePath>
|
|
m_folderTable; //!< Level to its containing folder map
|
|
std::vector<TFilePath> m_folders; //!< Folders container
|
|
TFilePath m_defaultFolder; //!< The root folder
|
|
|
|
std::set<TXshLevel *>
|
|
m_saveSet; //!< If m_saveSet is not empty, only its levels
|
|
//!< will be saved
|
|
public:
|
|
TLevelSet();
|
|
~TLevelSet();
|
|
|
|
bool insertLevel(TXshLevel *level);
|
|
bool renameLevel(TXshLevel *level, const std::wstring &newName);
|
|
void removeLevel(TXshLevel *level, bool deleteIt = true);
|
|
void clear();
|
|
|
|
int getLevelCount() const;
|
|
|
|
TXshLevel *getLevel(int index) const;
|
|
TXshLevel *getLevel(const std::wstring &levelName) const;
|
|
TXshLevel *getLevel(const ToonzScene &scene,
|
|
const TFilePath &levelPath) const;
|
|
|
|
bool hasLevel(const std::wstring &levelName) const;
|
|
bool hasLevel(const ToonzScene &scene, const TFilePath &levelPath) const;
|
|
|
|
void listLevels(std::vector<TXshLevel *> &levels) const;
|
|
void listLevels(std::vector<TXshLevel *> &levels,
|
|
const TFilePath &parentFolder) const;
|
|
|
|
TFilePath getDefaultFolder() const { return m_defaultFolder; }
|
|
void setDefaultFolder(TFilePath folder);
|
|
|
|
TFilePath createFolder(const TFilePath &parent, const std::wstring &newName);
|
|
TFilePath renameFolder(const TFilePath &folder, const std::wstring &newName);
|
|
void removeFolder(const TFilePath &folder);
|
|
|
|
TFilePath getFolder(TXshLevel *xl) const;
|
|
void listFolders(std::vector<TFilePath> &folders,
|
|
const TFilePath &parentFolder) const;
|
|
|
|
void moveLevelToFolder(const TFilePath &folder, TXshLevel *level);
|
|
|
|
//! Defines the set of levels that will be saved in output streams (in case
|
|
//! it's empty, all
|
|
//! levels will be saved). \sa The saveData() method inherited from TPersist.
|
|
void setSaveSet(const std::set<TXshLevel *> &saveSet) { m_saveSet = saveSet; }
|
|
|
|
void loadData(TIStream &is);
|
|
void saveData(TOStream &os);
|
|
|
|
private:
|
|
// Not copiable
|
|
TLevelSet(const TLevelSet &);
|
|
TLevelSet &operator=(const TLevelSet &);
|
|
|
|
void saveFolder(TOStream &os, TFilePath folder);
|
|
void loadFolder(TIStream &is, TFilePath folder);
|
|
};
|
|
|
|
#endif // LEVELSET_INCLUDED
|