175 lines
4.6 KiB
C++
175 lines
4.6 KiB
C++
#pragma once
|
|
|
|
#ifndef TPROJECT_INCLUDED
|
|
#define TPROJECT_INCLUDED
|
|
#include <set>
|
|
|
|
#include "tfilepath.h"
|
|
#include "tsmartpointer.h"
|
|
|
|
class ToonzScene;
|
|
class TSceneProperties;
|
|
|
|
#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
|
|
|
|
class DVAPI TProject final : public TSmartObject {
|
|
TFilePath m_name, m_path;
|
|
std::vector<std::string> m_folderNames;
|
|
std::map<std::string, TFilePath> m_folders;
|
|
std::map<std::string, bool> m_useScenePathFlags;
|
|
TSceneProperties *m_sprop;
|
|
|
|
public:
|
|
// default folders names
|
|
static const std::string Inputs;
|
|
static const std::string Drawings;
|
|
static const std::string Scenes;
|
|
static const std::string Extras;
|
|
static const std::string Outputs;
|
|
static const std::string Scripts;
|
|
static const std::string Palettes;
|
|
|
|
static const TFilePath SandboxProjectName;
|
|
|
|
// TProject
|
|
TProject();
|
|
~TProject();
|
|
|
|
TFilePath getName() const { return m_name; }
|
|
TFilePath getProjectPath() const { return m_path; }
|
|
TFilePath getProjectFolder() const { return m_path.getParentDir(); }
|
|
|
|
void setFolder(std::string name, TFilePath path);
|
|
void setFolder(std::string name);
|
|
|
|
int getFolderCount() const;
|
|
std::string getFolderName(int index) const;
|
|
int getFolderIndex(std::string folderName) const;
|
|
|
|
bool isConstantFolder(int index) const;
|
|
|
|
TFilePath getFolder(int index) const;
|
|
TFilePath getFolder(std::string name, bool absolute = false) const;
|
|
|
|
TFilePath getScenesPath() const;
|
|
|
|
TFilePath decode(TFilePath fp) const;
|
|
|
|
bool isCurrent() const;
|
|
|
|
void setSceneProperties(const TSceneProperties &sprop);
|
|
const TSceneProperties &getSceneProperties() const { return *m_sprop; }
|
|
|
|
//?????????????????????????????????????????????
|
|
void setUseScenePath(std::string folderName, bool on);
|
|
//?????????????????????????????????????????????
|
|
bool getUseScenePath(std::string folderName) const;
|
|
|
|
// nei due metodi seguenti fp e' un path assoluto (possibilmente con
|
|
// $scenepath)
|
|
//????????????????????????????????????????????????
|
|
int getFolderIndexFromPath(const TFilePath &fp);
|
|
std::wstring getFolderNameFromPath(const TFilePath &fp);
|
|
|
|
bool save(const TFilePath &projectPath);
|
|
bool save();
|
|
void load(const TFilePath &projectPath);
|
|
|
|
static bool isAProjectPath(const TFilePath &fp);
|
|
|
|
private:
|
|
// not implemented
|
|
TProject(const TProject &src);
|
|
TProject &operator=(const TProject &);
|
|
};
|
|
|
|
#ifdef _WIN32
|
|
template class DVAPI TSmartPointerT<TProject>;
|
|
#endif
|
|
typedef TSmartPointerT<TProject> TProjectP;
|
|
|
|
//===================================================================
|
|
|
|
class DVAPI TProjectManager { // singleton
|
|
public:
|
|
class Listener {
|
|
public:
|
|
virtual void onProjectSwitched() = 0;
|
|
virtual void onProjectChanged() = 0;
|
|
virtual ~Listener() {}
|
|
};
|
|
|
|
private:
|
|
std::vector<TFilePath> m_projectsRoots;
|
|
std::vector<TFilePath> m_svnProjectsRoots;
|
|
std::set<Listener *> m_listeners;
|
|
|
|
void addDefaultProjectsRoot();
|
|
|
|
TProjectManager();
|
|
void notifyListeners();
|
|
|
|
bool m_tabMode;
|
|
bool m_tabKidsMode;
|
|
|
|
public:
|
|
~TProjectManager();
|
|
|
|
void notifyProjectChanged();
|
|
|
|
static TProjectManager *instance();
|
|
|
|
TFilePath getCurrentProjectPath();
|
|
void setCurrentProjectPath(const TFilePath &fp);
|
|
TProjectP getCurrentProject();
|
|
|
|
void initializeScene(ToonzScene *scene);
|
|
|
|
void saveTemplate(ToonzScene *scene);
|
|
|
|
void addProjectsRoot(const TFilePath &fp);
|
|
void addSVNProjectsRoot(const TFilePath &fp);
|
|
|
|
//! returns the project root of the current project (if this fails, then
|
|
//! returns the first project root)
|
|
TFilePath getCurrentProjectRoot();
|
|
|
|
TFilePath projectPathToProjectName(const TFilePath &projectPath);
|
|
TFilePath projectNameToProjectPath(const TFilePath &projectName);
|
|
TFilePath projectFolderToProjectPath(const TFilePath &projectFolder);
|
|
TFilePath getProjectPathByName(const TFilePath &projectName);
|
|
|
|
TProjectP loadSceneProject(const TFilePath &scenePath);
|
|
void getFolderNames(std::vector<std::string> &names);
|
|
|
|
void addListener(Listener *listener);
|
|
void removeListener(Listener *listener);
|
|
|
|
TProjectP createStandardProject();
|
|
void createSandboxIfNeeded();
|
|
|
|
bool isTabKidsModeEnabled() const { return m_tabKidsMode; }
|
|
void enableTabKidsMode(bool tabKidsMode) { m_tabKidsMode = tabKidsMode; }
|
|
|
|
bool isTabModeEnabled() const { return m_tabMode; }
|
|
void enableTabMode(bool tabMode) { m_tabMode = tabMode; }
|
|
|
|
TFilePath getSandboxProjectFolder();
|
|
TFilePath getSandboxProjectPath();
|
|
|
|
void getProjectRoots(std::vector<TFilePath> &projectRoots) const {
|
|
projectRoots = m_projectsRoots;
|
|
}
|
|
|
|
bool isProject(const TFilePath &projectFolder);
|
|
};
|
|
|
|
#endif
|