|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/sceneresources.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/toonzscene.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tproject.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/levelset.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txshsimplelevel.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txshpalettelevel.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/levelproperties.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txshsoundlevel.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/namebuilder.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/childstack.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txsheet.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/preferences.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tpalette.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
jabarrera |
53e290 |
#include "tmsgcore.h"
|
|
jabarrera |
53e290 |
|
|
Toshihiro Shimizu |
890ddd |
#include "tconvert.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tlogger.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tsystem.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// se path e' della forma +folder/<oldsavepath>/name.type</oldsavepath>
|
|
Toshihiro Shimizu |
890ddd |
// allora sostituisce oldSavePath con newSavePath e ritorna true
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool changeSavePath(TFilePath &path, TFilePath oldSavePath,
|
|
Shinya Kitaoka |
120a6e |
TFilePath newSavePath) {
|
|
Shinya Kitaoka |
120a6e |
if (oldSavePath == newSavePath) return false;
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = path.getParentDir();
|
|
Shinya Kitaoka |
120a6e |
std::wstring head;
|
|
Shinya Kitaoka |
120a6e |
TFilePath tail;
|
|
Shinya Kitaoka |
120a6e |
fp.split(head, tail);
|
|
Shinya Kitaoka |
120a6e |
if (head != L"" && tail == oldSavePath) {
|
|
Shinya Kitaoka |
120a6e |
path = path.withParentDir(TFilePath(head) + newSavePath);
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// From ../../../filename#type.psd to ../../../filename.psd
|
|
Shinya Kitaoka |
120a6e |
TFilePath restorePsdPath(const TFilePath &fp) {
|
|
Shinya Kitaoka |
120a6e |
QString path = QString::fromStdWString(fp.getWideString());
|
|
Shinya Kitaoka |
120a6e |
if (fp.getType() != "psd" || !path.contains("#")) return fp;
|
|
Shinya Kitaoka |
120a6e |
int from = path.indexOf("#");
|
|
Shinya Kitaoka |
120a6e |
int to = path.lastIndexOf(".");
|
|
Shinya Kitaoka |
120a6e |
path.remove(from, to - from);
|
|
Shinya Kitaoka |
120a6e |
return TFilePath(path.toStdWString());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool makePathUnique(ToonzScene *scene, TFilePath &path) {
|
|
Shinya Kitaoka |
120a6e |
std::wstring name = path.getWideName();
|
|
Shinya Kitaoka |
120a6e |
int id = 2;
|
|
Shinya Kitaoka |
120a6e |
int i = name.length() - 1;
|
|
Shinya Kitaoka |
120a6e |
int num = 0, p = 1;
|
|
Shinya Kitaoka |
120a6e |
while (i >= 0 && L'0' <= name[i] && name[i] <= L'9') {
|
|
Shinya Kitaoka |
120a6e |
num += p * (name[i] - L'0');
|
|
Shinya Kitaoka |
120a6e |
p *= 10;
|
|
Shinya Kitaoka |
120a6e |
i--;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i >= 0 && name[i] == L'_') {
|
|
Shinya Kitaoka |
120a6e |
id = num + 1;
|
|
Shinya Kitaoka |
120a6e |
name = name.substr(0, i);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool ret = false;
|
|
Shinya Kitaoka |
120a6e |
while (TSystem::doesExistFileOrLevel(scene->decodeFilePath(path))) {
|
|
Shinya Kitaoka |
120a6e |
ret = true;
|
|
Shinya Kitaoka |
120a6e |
path = path.withName(name + L"_" + std::to_wstring(id));
|
|
Shinya Kitaoka |
120a6e |
id++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return ret;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool getCollectedPath(ToonzScene *scene, TFilePath &path) {
|
|
Shinya Kitaoka |
120a6e |
if (!path.isAbsolute() || path.getWideString()[0] == L'+') return false;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFilePath collectedPath = scene->getImportedLevelPath(path);
|
|
Shinya Kitaoka |
120a6e |
if (path == collectedPath) return false;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualCollectedPath = scene->decodeFilePath(collectedPath);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (makePathUnique(scene, actualCollectedPath))
|
|
Shinya Kitaoka |
120a6e |
collectedPath = collectedPath.withName(actualCollectedPath.getName());
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
path = collectedPath;
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
} // namespace
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// ResourceImportStrategy
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
ResourceImportStrategy::ResourceImportStrategy(int strategy)
|
|
Shinya Kitaoka |
120a6e |
: m_childFolderEnabled(false), m_strategy(strategy) {
|
|
Shinya Kitaoka |
120a6e |
setChildFolderEnabled(Preferences::instance()->isSubsceneFolderEnabled());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFilePath ResourceImportStrategy::process(ToonzScene *scene,
|
|
Shinya Kitaoka |
120a6e |
ToonzScene *srcScene,
|
|
Shinya Kitaoka |
120a6e |
TFilePath srcPath) {
|
|
Shinya Kitaoka |
120a6e |
TFilePath srcActualPath = srcScene->decodeFilePath(srcPath);
|
|
Shinya Kitaoka |
120a6e |
if (!scene->isExternPath(srcActualPath) || m_strategy == DONT_IMPORT)
|
|
Shinya Kitaoka |
120a6e |
return srcPath;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFilePath dstPath;
|
|
Shinya Kitaoka |
120a6e |
if (srcPath.getWideString().find(L'+') == 0)
|
|
Shinya Kitaoka |
120a6e |
dstPath = srcPath;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
shun-iwasawa |
4bf161 |
dstPath = scene->getImportedLevelPath(srcPath);
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualDstPath = scene->decodeFilePath(dstPath);
|
|
Shinya Kitaoka |
120a6e |
assert(actualDstPath != TFilePath());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (m_strategy == IMPORT_AND_OVERWRITE) {
|
|
Shinya Kitaoka |
120a6e |
// bool overwritten = false;
|
|
Shinya Kitaoka |
120a6e |
if (TSystem::doesExistFileOrLevel(actualDstPath)) {
|
|
Shinya Kitaoka |
120a6e |
TSystem::removeFileOrLevel(actualDstPath);
|
|
Shinya Kitaoka |
120a6e |
// overwritten = true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (TSystem::doesExistFileOrLevel(srcPath))
|
|
Shinya Kitaoka |
120a6e |
TXshSimpleLevel::copyFiles(actualDstPath, srcPath);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
return dstPath;
|
|
Shinya Kitaoka |
120a6e |
} else if (m_strategy == IMPORT_AND_RENAME) {
|
|
Shinya Kitaoka |
120a6e |
std::wstring levelName = srcPath.getWideName();
|
|
Shinya Kitaoka |
120a6e |
TLevelSet *parentLevelSet = scene->getLevelSet();
|
|
Shinya Kitaoka |
120a6e |
NameModifier nm(levelName);
|
|
Shinya Kitaoka |
120a6e |
std::wstring newName;
|
|
Shinya Kitaoka |
120a6e |
for (;;) {
|
|
Shinya Kitaoka |
120a6e |
newName = nm.getNext();
|
|
Shinya Kitaoka |
120a6e |
if (!parentLevelSet->hasLevel(newName)) break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dstPath = dstPath.withName(newName);
|
|
Shinya Kitaoka |
120a6e |
actualDstPath = scene->decodeFilePath(dstPath);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (TSystem::doesExistFileOrLevel(actualDstPath))
|
|
Shinya Kitaoka |
120a6e |
TSystem::removeFileOrLevel(actualDstPath);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (TSystem::doesExistFileOrLevel(srcActualPath)) {
|
|
Shinya Kitaoka |
120a6e |
TXshSimpleLevel::copyFiles(actualDstPath, srcActualPath);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return dstPath;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return srcPath;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// SceneResource
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
SceneResource::SceneResource(ToonzScene *scene)
|
|
Shinya Kitaoka |
120a6e |
: m_scene(scene)
|
|
Shinya Kitaoka |
120a6e |
, m_untitledScene(scene->isUntitled())
|
|
Shinya Kitaoka |
120a6e |
, m_oldSavePath(scene->getSavePath()) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
SceneResource::~SceneResource() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void SceneResource::updatePath(TFilePath &fp) {
|
|
Shinya Kitaoka |
120a6e |
if (m_untitledScene)
|
|
Shinya Kitaoka |
120a6e |
changeSavePath(fp, m_oldSavePath, m_scene->getSavePath());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// SceneLevel
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
SceneLevel::SceneLevel(ToonzScene *scene, TXshSimpleLevel *sl)
|
|
Shinya Kitaoka |
120a6e |
: SceneResource(scene)
|
|
Shinya Kitaoka |
120a6e |
, m_sl(sl)
|
|
Shinya Kitaoka |
120a6e |
, m_oldPath(sl->getPath())
|
|
Shinya Kitaoka |
120a6e |
, m_oldActualPath(scene->decodeFilePath(sl->getPath()))
|
|
Shinya Kitaoka |
120a6e |
, m_oldScannedPath(sl->getScannedPath())
|
|
Shinya Kitaoka |
120a6e |
, m_oldRefImgPath()
|
|
Shinya Kitaoka |
120a6e |
, m_oldActualRefImgPath() {
|
|
Shinya Kitaoka |
120a6e |
if (m_oldScannedPath != TFilePath())
|
|
Shinya Kitaoka |
120a6e |
m_oldActualScannedPath = m_scene->decodeFilePath(m_oldScannedPath);
|
|
Shinya Kitaoka |
120a6e |
if ((sl->getPath().getType() == "tlv" || sl->getPath().getType() == "pli") &&
|
|
Shinya Kitaoka |
120a6e |
sl->getPalette()) {
|
|
Shinya Kitaoka |
120a6e |
m_oldRefImgPath = sl->getPalette()->getRefImgPath();
|
|
Shinya Kitaoka |
120a6e |
m_oldActualRefImgPath = m_scene->decodeFilePath(m_oldRefImgPath);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void SceneLevel::save() {
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = m_oldPath;
|
|
Shinya Kitaoka |
120a6e |
SceneResource::updatePath(fp);
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualFp = m_scene->decodeFilePath(fp);
|
|
Shinya Kitaoka |
120a6e |
actualFp = restorePsdPath(actualFp);
|
|
Shinya Kitaoka |
120a6e |
TFilePath oldActualPath = restorePsdPath(m_oldActualPath);
|
|
Shinya Kitaoka |
120a6e |
assert(actualFp.getWideString() == L"" ||
|
|
Shinya Kitaoka |
120a6e |
actualFp.getWideString()[0] != L'+');
|
|
Shinya Kitaoka |
120a6e |
if (actualFp != oldActualPath ||
|
|
Shinya Kitaoka |
120a6e |
!TSystem::doesExistFileOrLevel(oldActualPath) ||
|
|
Shinya Kitaoka |
120a6e |
m_sl->getProperties()->getDirtyFlag() ||
|
|
Shinya Kitaoka |
120a6e |
(m_sl->getPalette() && m_sl->getPalette()->getDirtyFlag())) {
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchParentDir(actualFp);
|
|
Shinya Kitaoka |
120a6e |
if (actualFp != oldActualPath &&
|
|
Shinya Kitaoka |
120a6e |
TSystem::doesExistFileOrLevel(oldActualPath) &&
|
|
Shinya Kitaoka |
120a6e |
m_sl->getProperties()->getDirtyFlag() == false &&
|
|
Shinya Kitaoka |
120a6e |
(!m_sl->getPalette() ||
|
|
Shinya Kitaoka |
120a6e |
(m_sl->getPalette() &&
|
|
Shinya Kitaoka |
120a6e |
m_sl->getPalette()->getDirtyFlag() == false))) {
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
TXshSimpleLevel::copyFiles(actualFp, oldActualPath);
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// Must NOT KEEP FRAMES, it generate a level frames bind necessary to
|
|
Shinya Kitaoka |
120a6e |
// imageBuilder path refresh.
|
|
Shinya Kitaoka |
120a6e |
m_sl->setPath(fp, false);
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
manongjohn |
69182e |
try {
|
|
manongjohn |
69182e |
m_sl->save(actualFp, oldActualPath);
|
|
manongjohn |
69182e |
} catch (...) {
|
|
manongjohn |
3f471d |
throw;
|
|
manongjohn |
69182e |
}
|
|
Shinya Kitaoka |
120a6e |
if ((actualFp.getType() == "tlv" || actualFp.getType() == "pli") &&
|
|
Shinya Kitaoka |
120a6e |
actualFp != oldActualPath && m_oldRefImgPath != TFilePath()) {
|
|
Shinya Kitaoka |
120a6e |
// Devo preoccuparmi dell'eventuale livello colormodel
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualRefImagPath =
|
|
Shinya Kitaoka |
120a6e |
m_scene->decodeFilePath(m_oldRefImgPath);
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualRefImagPathTpl = actualRefImagPath.withType("tpl");
|
|
Shinya Kitaoka |
120a6e |
TFilePath oldRefImagPathTpl = m_oldActualRefImgPath.withType("tpl");
|
|
Shinya Kitaoka |
120a6e |
TSystem::copyFile(actualRefImagPath, m_oldActualRefImgPath);
|
|
Shinya Kitaoka |
120a6e |
if (actualRefImagPath.getType() == "tlv")
|
|
Shinya Kitaoka |
120a6e |
TSystem::copyFile(actualRefImagPathTpl, oldRefImagPathTpl);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (actualFp.getType() == "tif" || actualFp.getType() == "tiff" ||
|
|
Shinya Kitaoka |
120a6e |
actualFp.getType() == "tga" || actualFp.getType() == "tzi") {
|
|
Shinya Kitaoka |
120a6e |
TFilePath clnin = oldActualPath.withNoFrame().withType("cln");
|
|
Shinya Kitaoka |
120a6e |
if (TSystem::doesExistFileOrLevel(clnin))
|
|
Shinya Kitaoka |
120a6e |
TSystem::copyFile(actualFp.withNoFrame().withType("cln"), clnin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// Se il livello e' tlv verifico se esiste il corrispondente unpainted ed
|
|
Shinya Kitaoka |
120a6e |
// in caso affermativo lo copio.
|
|
Shinya Kitaoka |
120a6e |
// Questo controllo viene fatto qui e non nella copia o nel salvataggio
|
|
Shinya Kitaoka |
120a6e |
// del livello perche' in generale
|
|
Shinya Kitaoka |
120a6e |
// non si vuole che il livello unpainted venga copiato con il livello.
|
|
Shinya Kitaoka |
120a6e |
if (actualFp.getType() == "tlv") {
|
|
Shinya Kitaoka |
120a6e |
TFilePath oldUnpaintedLevelPath =
|
|
Shinya Kitaoka |
120a6e |
oldActualPath.getParentDir() + "nopaint\\" +
|
|
Shinya Kitaoka |
120a6e |
TFilePath(oldActualPath.getName() + "_np." +
|
|
Shinya Kitaoka |
120a6e |
oldActualPath.getType());
|
|
Shinya Kitaoka |
120a6e |
TFilePath unpaintedLevelPath =
|
|
Shinya Kitaoka |
120a6e |
actualFp.getParentDir() + "nopaint\\" +
|
|
Shinya Kitaoka |
120a6e |
TFilePath(actualFp.getName() + "_np." + actualFp.getType());
|
|
Shinya Kitaoka |
120a6e |
if (TSystem::doesExistFileOrLevel(oldUnpaintedLevelPath) &&
|
|
Shinya Kitaoka |
120a6e |
!TSystem::doesExistFileOrLevel(unpaintedLevelPath) &&
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchParentDir(unpaintedLevelPath))
|
|
Shinya Kitaoka |
120a6e |
TSystem::copyFile(unpaintedLevelPath, oldUnpaintedLevelPath);
|
|
Shinya Kitaoka |
120a6e |
TFilePath oldUnpaintedPalettePath =
|
|
Shinya Kitaoka |
120a6e |
oldUnpaintedLevelPath.withType("tpl");
|
|
Shinya Kitaoka |
120a6e |
TFilePath unpaintedPalettePath = unpaintedLevelPath.withType("tpl");
|
|
Shinya Kitaoka |
120a6e |
if (TSystem::doesExistFileOrLevel(oldUnpaintedPalettePath) &&
|
|
Shinya Kitaoka |
120a6e |
!TSystem::doesExistFileOrLevel(unpaintedPalettePath) &&
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchParentDir(unpaintedPalettePath))
|
|
Shinya Kitaoka |
120a6e |
TSystem::copyFile(unpaintedPalettePath, oldUnpaintedPalettePath);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
fp = m_oldScannedPath;
|
|
Shinya Kitaoka |
120a6e |
if (fp != TFilePath()) {
|
|
Shinya Kitaoka |
120a6e |
SceneResource::updatePath(fp);
|
|
Shinya Kitaoka |
120a6e |
actualFp = m_scene->decodeFilePath(fp);
|
|
Shinya Kitaoka |
120a6e |
if (actualFp != m_oldActualScannedPath &&
|
|
Shinya Kitaoka |
120a6e |
TSystem::doesExistFileOrLevel(m_oldActualScannedPath)) {
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchParentDir(actualFp);
|
|
Shinya Kitaoka |
120a6e |
TSystem::copyFileOrLevel_throw(actualFp, m_oldActualScannedPath);
|
|
Shinya Kitaoka |
120a6e |
m_sl->clearFrames();
|
|
Shinya Kitaoka |
120a6e |
m_sl->load();
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void SceneLevel::updatePath() {
|
|
Shinya Kitaoka |
120a6e |
if (!m_untitledScene) return;
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = m_oldPath;
|
|
Shinya Kitaoka |
120a6e |
SceneResource::updatePath(fp);
|
|
Shinya Kitaoka |
120a6e |
m_sl->setPath(fp, true);
|
|
Shinya Kitaoka |
120a6e |
fp = m_oldScannedPath;
|
|
Shinya Kitaoka |
120a6e |
SceneResource::updatePath(fp);
|
|
Shinya Kitaoka |
120a6e |
m_sl->setScannedPath(fp);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void SceneLevel::rollbackPath() {
|
|
Shinya Kitaoka |
120a6e |
if (!m_untitledScene) return;
|
|
Shinya Kitaoka |
120a6e |
m_sl->setPath(m_oldPath, true);
|
|
Shinya Kitaoka |
120a6e |
m_sl->setScannedPath(m_oldScannedPath);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool SceneLevel::isDirty() {
|
|
Shinya Kitaoka |
120a6e |
if (m_sl->getProperties()->getDirtyFlag() ||
|
|
Shinya Kitaoka |
120a6e |
(m_sl->getPalette() && m_sl->getPalette()->getDirtyFlag()))
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
4bf161 |
QStringList SceneLevel::getResourceName() {
|
|
shun-iwasawa |
4bf161 |
QStringList ret;
|
|
Shinya Kitaoka |
120a6e |
QString string;
|
|
Shinya Kitaoka |
120a6e |
bool levelIsDirty = false;
|
|
Shinya Kitaoka |
120a6e |
if (m_sl->getProperties()->getDirtyFlag()) {
|
|
Shinya Kitaoka |
120a6e |
string += QString::fromStdString(m_sl->getPath().getLevelName());
|
|
Shinya Kitaoka |
120a6e |
levelIsDirty = true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (m_sl->getPalette() && m_sl->getPalette()->getDirtyFlag()) {
|
|
shun-iwasawa |
4bf161 |
QString paletteName =
|
|
shun-iwasawa |
4bf161 |
QString::fromStdWString(m_sl->getPalette()->getPaletteName());
|
|
shun-iwasawa |
4bf161 |
if (m_sl->getType() & FULLCOLOR_TYPE) {
|
|
shun-iwasawa |
4bf161 |
if (levelIsDirty) ret << string;
|
|
shun-iwasawa |
4bf161 |
ret << paletteName + ".tpl";
|
|
shun-iwasawa |
4bf161 |
} else {
|
|
shun-iwasawa |
4bf161 |
if (levelIsDirty) string += " and ";
|
|
shun-iwasawa |
4bf161 |
if (m_sl->getPath().getType() == "pli")
|
|
shun-iwasawa |
4bf161 |
string += paletteName + ".pli (palette)";
|
|
shun-iwasawa |
4bf161 |
else
|
|
shun-iwasawa |
4bf161 |
string += paletteName + ".tpl";
|
|
shun-iwasawa |
4bf161 |
ret << string;
|
|
shun-iwasawa |
4bf161 |
}
|
|
shun-iwasawa |
4bf161 |
} else if (levelIsDirty)
|
|
shun-iwasawa |
4bf161 |
ret << string;
|
|
Shinya Kitaoka |
120a6e |
|
|
shun-iwasawa |
4bf161 |
return ret;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// ScenePalette
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
ScenePalette::ScenePalette(ToonzScene *scene, TXshPaletteLevel *pl)
|
|
Shinya Kitaoka |
120a6e |
: SceneResource(scene)
|
|
Shinya Kitaoka |
120a6e |
, m_pl(pl)
|
|
Shinya Kitaoka |
120a6e |
, m_oldPath(pl->getPath())
|
|
Shinya Kitaoka |
120a6e |
, m_oldActualPath(scene->decodeFilePath(pl->getPath())) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void ScenePalette::save() {
|
|
Shinya Kitaoka |
120a6e |
assert(m_oldPath != TFilePath());
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = m_oldPath;
|
|
Shinya Kitaoka |
120a6e |
SceneResource::updatePath(fp);
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualFp = m_scene->decodeFilePath(fp);
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchParentDir(actualFp);
|
|
Shinya Kitaoka |
120a6e |
if (actualFp != m_oldActualPath &&
|
|
Shinya Kitaoka |
120a6e |
TSystem::doesExistFileOrLevel(m_oldActualPath)) {
|
|
Shinya Kitaoka |
120a6e |
TSystem::copyFile(actualFp, m_oldActualPath);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_pl->save(); // actualFp non so perche' era cosi'
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
TLogger::error() << "Can't save " << actualFp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void ScenePalette::updatePath() {
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = m_oldPath;
|
|
Shinya Kitaoka |
120a6e |
SceneResource::updatePath(fp);
|
|
Shinya Kitaoka |
120a6e |
if (fp != m_oldPath) m_pl->setPath(fp);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void ScenePalette::rollbackPath() { m_pl->setPath(m_oldPath); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
cd250d |
bool ScenePalette::isDirty() {
|
|
shun-iwasawa |
cd250d |
return m_pl->getPalette() && m_pl->getPalette()->getDirtyFlag();
|
|
shun-iwasawa |
cd250d |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
4bf161 |
QStringList ScenePalette::getResourceName() {
|
|
shun-iwasawa |
4bf161 |
return QStringList(QString::fromStdString(m_pl->getPath().getLevelName()));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// SceneSound
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
SceneSound::SceneSound(ToonzScene *scene, TXshSoundLevel *sl)
|
|
Shinya Kitaoka |
120a6e |
: SceneResource(scene)
|
|
Shinya Kitaoka |
120a6e |
, m_sl(sl)
|
|
Shinya Kitaoka |
120a6e |
, m_oldPath(sl->getPath())
|
|
Shinya Kitaoka |
120a6e |
, m_oldActualPath(scene->decodeFilePath(sl->getPath())) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void SceneSound::save() {
|
|
Shinya Kitaoka |
120a6e |
assert(m_oldPath != TFilePath());
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = m_oldPath;
|
|
Shinya Kitaoka |
120a6e |
SceneResource::updatePath(fp);
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualFp = m_scene->decodeFilePath(fp);
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchParentDir(actualFp);
|
|
Shinya Kitaoka |
120a6e |
if (!TSystem::doesExistFileOrLevel(m_oldActualPath)) {
|
|
Shinya Kitaoka |
120a6e |
m_sl->save(actualFp);
|
|
Shinya Kitaoka |
120a6e |
} else if (actualFp != m_oldActualPath) {
|
|
Shinya Kitaoka |
120a6e |
TSystem::copyFile(actualFp, m_oldActualPath);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
jabarrera |
53e290 |
DVGui::warning(QObject::tr("Can't save") +
|
|
jabarrera |
53e290 |
QString::fromStdWString(L": " + actualFp.getLevelNameW()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void SceneSound::updatePath() {
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp = m_oldPath;
|
|
Shinya Kitaoka |
120a6e |
SceneResource::updatePath(fp);
|
|
Shinya Kitaoka |
120a6e |
if (fp != m_oldPath) m_sl->setPath(fp);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void SceneSound::rollbackPath() { m_sl->setPath(m_oldPath); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// SceneResources
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
SceneResources::SceneResources(ToonzScene *scene, TXsheet *subXsheet)
|
|
Shinya Kitaoka |
120a6e |
: m_scene(scene)
|
|
Shinya Kitaoka |
120a6e |
, m_commitDone(false)
|
|
Shinya Kitaoka |
120a6e |
, m_wasUntitled(scene->isUntitled())
|
|
Shinya Kitaoka |
120a6e |
, m_subXsheet(subXsheet) {
|
|
Shinya Kitaoka |
120a6e |
getResources();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
SceneResources::~SceneResources() {
|
|
Shinya Kitaoka |
120a6e |
if (!m_commitDone) rollbackPaths();
|
|
Shinya Kitaoka |
120a6e |
clearPointerContainer(m_resources);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void SceneResources::getResources() {
|
|
Shinya Kitaoka |
120a6e |
ToonzScene *scene = m_scene;
|
|
Shinya Kitaoka |
120a6e |
std::vector<txshlevel *=""> levels;</txshlevel>
|
|
Shinya Kitaoka |
120a6e |
scene->getLevelSet()->listLevels(levels);
|
|
Shinya Kitaoka |
120a6e |
std::vector<txshlevel *="">::iterator it;</txshlevel>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (it = levels.begin(); it != levels.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
TXshSimpleLevel *sl = (*it)->getSimpleLevel();
|
|
Shinya Kitaoka |
120a6e |
if (sl) m_resources.push_back(new SceneLevel(scene, sl));
|
|
Shinya Kitaoka |
120a6e |
TXshPaletteLevel *pl = (*it)->getPaletteLevel();
|
|
Shinya Kitaoka |
120a6e |
if (pl) m_resources.push_back(new ScenePalette(scene, pl));
|
|
Shinya Kitaoka |
120a6e |
TXshSoundLevel *sdl = (*it)->getSoundLevel();
|
|
Shinya Kitaoka |
120a6e |
if (sdl) m_resources.push_back(new SceneSound(scene, sdl));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void SceneResources::save(const TFilePath newScenePath) {
|
|
Shinya Kitaoka |
120a6e |
TFilePath oldScenePath = m_scene->getScenePath();
|
|
Shinya Kitaoka |
120a6e |
m_scene->setScenePath(newScenePath);
|
|
manongjohn |
3f471d |
bool failedSave = false;
|
|
manongjohn |
3f471d |
for (int i = 0; i < (int)m_resources.size(); i++) {
|
|
manongjohn |
3f471d |
m_resources[i]->save();
|
|
manongjohn |
3f471d |
}
|
|
manongjohn |
3f471d |
|
|
shun-iwasawa |
4bf161 |
QStringList failedList;
|
|
shun-iwasawa |
4bf161 |
getDirtyResources(failedList);
|
|
shun-iwasawa |
4bf161 |
|
|
shun-iwasawa |
4bf161 |
if (!failedList.isEmpty()) { // didn't save for some reason
|
|
shun-iwasawa |
4bf161 |
// show up to 5 items
|
|
shun-iwasawa |
4bf161 |
int extraCount = failedList.count() - 5;
|
|
shun-iwasawa |
4bf161 |
if (extraCount > 0) {
|
|
shun-iwasawa |
4bf161 |
failedList = failedList.mid(0, 5);
|
|
shun-iwasawa |
4bf161 |
failedList.append(QObject::tr("and %1 more item(s).").arg(extraCount));
|
|
shun-iwasawa |
4bf161 |
}
|
|
shun-iwasawa |
4bf161 |
|
|
manongjohn |
3f471d |
DVGui::warning(QObject::tr("Failed to save the following resources:\n") +
|
|
shun-iwasawa |
4bf161 |
" " + failedList.join("\n "));
|
|
shun-iwasawa |
4bf161 |
}
|
|
Shinya Kitaoka |
120a6e |
m_scene->setScenePath(oldScenePath);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void SceneResources::updatePaths() {
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < (int)m_resources.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
m_resources[i]->updatePath();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void SceneResources::rollbackPaths() {
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < (int)m_resources.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
m_resources[i]->rollbackPath();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void SceneResources::accept(ResourceProcessor *processor, bool autoCommit) {
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < (int)m_resources.size() && !processor->aborted(); i++)
|
|
Shinya Kitaoka |
120a6e |
m_resources[i]->accept(processor);
|
|
Shinya Kitaoka |
120a6e |
if (autoCommit) commit();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
// return the name list of dirty resources
|
|
shun-iwasawa |
4bf161 |
void SceneResources::getDirtyResources(QStringList &dirtyResources) {
|
|
shun-iwasawa |
4bf161 |
for (SceneResource *resource : m_resources)
|
|
shun-iwasawa |
4bf161 |
if (resource->isDirty()) {
|
|
shun-iwasawa |
4bf161 |
dirtyResources << resource->getResourceName();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
shun-iwasawa |
4bf161 |
dirtyResources.removeDuplicates();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// ResourceImporter
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
ResourceImporter::ResourceImporter(ToonzScene *scene, TProject *dstProject,
|
|
Shinya Kitaoka |
120a6e |
ResourceImportStrategy &importStrategy)
|
|
Shinya Kitaoka |
120a6e |
: m_scene(scene)
|
|
Shinya Kitaoka |
120a6e |
, m_dstProject(dstProject)
|
|
Shinya Kitaoka |
120a6e |
, m_dstScene(new ToonzScene())
|
|
Shinya Kitaoka |
120a6e |
, m_importStrategy(importStrategy) {
|
|
Shinya Kitaoka |
120a6e |
m_dstScene->setProject(dstProject);
|
|
shun_iwasawa |
3f8574 |
// scene file may not be in the "+scenes" path for the sandbox project.
|
|
shun_iwasawa |
3f8574 |
// in such case, try to save as "+scenes/filename.tnz" on import.
|
|
shun_iwasawa |
3f8574 |
TFilePath relativeScenePath =
|
|
shun_iwasawa |
3f8574 |
scene->getScenePath() - scene->getProject()->getScenesPath();
|
|
shun_iwasawa |
3f8574 |
if (relativeScenePath.isAbsolute())
|
|
shun_iwasawa |
3f8574 |
relativeScenePath = scene->getScenePath().withoutParentDir();
|
|
shun-iwasawa |
4bf161 |
TFilePath newFp = dstProject->getScenesPath() + relativeScenePath;
|
|
Shinya Kitaoka |
120a6e |
makeUnique(newFp);
|
|
Shinya Kitaoka |
120a6e |
m_dstScene->setScenePath(newFp);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
ResourceImporter::~ResourceImporter() { delete m_dstScene; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool ResourceImporter::makeUnique(TFilePath &path) {
|
|
Shinya Kitaoka |
120a6e |
return makePathUnique(m_dstScene, path);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFilePath ResourceImporter::getImportedScenePath() const {
|
|
Shinya Kitaoka |
120a6e |
return m_dstScene->getScenePath();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFilePath ResourceImporter::codePath(const TFilePath &oldPath,
|
|
Shinya Kitaoka |
120a6e |
const TFilePath &newActualPath) {
|
|
Shinya Kitaoka |
120a6e |
return oldPath.withName(newActualPath.getName());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::string ResourceImporter::extractPsdSuffix(TFilePath &path) {
|
|
Shinya Kitaoka |
120a6e |
if (path.getType() != "psd") return "";
|
|
Shinya Kitaoka |
120a6e |
std::string name = path.getName();
|
|
Shinya Kitaoka |
120a6e |
int i = name.find("#");
|
|
Shinya Kitaoka |
120a6e |
if (i == std::string::npos) return "";
|
|
Shinya Kitaoka |
120a6e |
std::string suffix = name.substr(i);
|
|
Shinya Kitaoka |
120a6e |
path = path.withName(name.substr(0, i));
|
|
Shinya Kitaoka |
120a6e |
return suffix;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFilePath ResourceImporter::buildPsd(const TFilePath &basePath,
|
|
Shinya Kitaoka |
120a6e |
const std::string &suffix) {
|
|
Shinya Kitaoka |
120a6e |
return basePath.withName(basePath.getName() + suffix);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void ResourceImporter::process(TXshSimpleLevel *sl) {
|
|
Shinya Kitaoka |
120a6e |
if (sl->getPath().isAbsolute()) return;
|
|
Shinya Kitaoka |
120a6e |
TFilePath newPath;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFilePath slPath = sl->getPath();
|
|
Shinya Kitaoka |
120a6e |
std::string suffix = extractPsdSuffix(slPath);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFilePath imgRefPath;
|
|
Shinya Kitaoka |
120a6e |
if (sl->getPalette()) imgRefPath = sl->getPalette()->getRefImgPath();
|
|
Shinya Kitaoka |
120a6e |
newPath = m_importStrategy.process(m_dstScene, m_scene, slPath);
|
|
Shinya Kitaoka |
120a6e |
if (imgRefPath != TFilePath() &&
|
|
Shinya Kitaoka |
120a6e |
!m_dstScene->isExternPath(m_dstScene->decodeFilePath(imgRefPath)))
|
|
Shinya Kitaoka |
120a6e |
m_importStrategy.process(m_dstScene, m_scene, imgRefPath);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (suffix != "") newPath = buildPsd(newPath, suffix);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
sl->setPath(newPath);
|
|
Shinya Kitaoka |
120a6e |
if (sl->getScannedPath() != TFilePath()) {
|
|
Shinya Kitaoka |
120a6e |
newPath =
|
|
Shinya Kitaoka |
120a6e |
m_importStrategy.process(m_dstScene, m_scene, sl->getScannedPath());
|
|
Shinya Kitaoka |
120a6e |
sl->setScannedPath(newPath);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
sl->setDirtyFlag(false);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void ResourceImporter::process(TXshPaletteLevel *pl) {
|
|
Shinya Kitaoka |
120a6e |
if (pl->getPath().isAbsolute()) return;
|
|
Shinya Kitaoka |
120a6e |
TFilePath newPath;
|
|
Shinya Kitaoka |
120a6e |
newPath = m_importStrategy.process(m_dstScene, m_scene, pl->getPath());
|
|
Shinya Kitaoka |
120a6e |
pl->setPath(newPath);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void ResourceImporter::process(TXshSoundLevel *sl) {
|
|
Shinya Kitaoka |
120a6e |
if (sl->getPath().isAbsolute()) return;
|
|
Shinya Kitaoka |
120a6e |
TFilePath newPath;
|
|
Shinya Kitaoka |
120a6e |
newPath = m_importStrategy.process(m_dstScene, m_scene, sl->getPath());
|
|
Shinya Kitaoka |
120a6e |
sl->setPath(newPath);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// ResourceCollector
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
ResourceCollector::ResourceCollector(ToonzScene *scene)
|
|
Shinya Kitaoka |
120a6e |
: m_scene(scene), m_count(0) {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
ResourceCollector::~ResourceCollector() {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool ResourceCollector::makeUnique(TFilePath &path) {
|
|
Shinya Kitaoka |
120a6e |
return makePathUnique(m_scene, path);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void ResourceCollector::process(TXshSimpleLevel *sl) {
|
|
Shinya Kitaoka |
120a6e |
TFilePath path = sl->getPath();
|
|
Shinya Kitaoka |
120a6e |
std::string suffix = ResourceImporter::extractPsdSuffix(path);
|
|
Shinya Kitaoka |
120a6e |
std::map<tfilepath, tfilepath="">::iterator it = m_collectedFiles.find(path);</tfilepath,>
|
|
Shinya Kitaoka |
120a6e |
if (it != m_collectedFiles.end()) {
|
|
shun-iwasawa |
4bf161 |
TFilePath destPath = it->second;
|
|
Shinya Kitaoka |
120a6e |
if (suffix != "") destPath = ResourceImporter::buildPsd(destPath, suffix);
|
|
Shinya Kitaoka |
120a6e |
sl->setPath(destPath);
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
TFilePath collectedPath = path;
|
|
Shinya Kitaoka |
120a6e |
if (getCollectedPath(m_scene, collectedPath)) {
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualCollectedPath = m_scene->decodeFilePath(collectedPath);
|
|
Shinya Kitaoka |
120a6e |
if (actualCollectedPath != path && TSystem::doesExistFileOrLevel(path) &&
|
|
Shinya Kitaoka |
120a6e |
!TSystem::doesExistFileOrLevel(actualCollectedPath)) {
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchParentDir(actualCollectedPath);
|
|
Shinya Kitaoka |
120a6e |
TXshSimpleLevel::copyFiles(actualCollectedPath, path);
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
++m_count;
|
|
shun-iwasawa |
4bf161 |
TFilePath destPath = collectedPath;
|
|
Shinya Kitaoka |
120a6e |
if (suffix != "") destPath = ResourceImporter::buildPsd(destPath, suffix);
|
|
Shinya Kitaoka |
120a6e |
sl->setPath(destPath);
|
|
Shinya Kitaoka |
120a6e |
m_collectedFiles[path] = collectedPath;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (sl->getScannedPath() != TFilePath()) {
|
|
Shinya Kitaoka |
120a6e |
path = sl->getScannedPath();
|
|
Shinya Kitaoka |
120a6e |
TFilePath collectedPath = path;
|
|
Shinya Kitaoka |
120a6e |
if (getCollectedPath(m_scene, collectedPath)) {
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualCollectedPath = m_scene->decodeFilePath(collectedPath);
|
|
Shinya Kitaoka |
120a6e |
if (actualCollectedPath != path && TSystem::doesExistFileOrLevel(path)) {
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchParentDir(actualCollectedPath);
|
|
Shinya Kitaoka |
120a6e |
TXshSimpleLevel::copyFiles(actualCollectedPath, path);
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
sl->setScannedPath(collectedPath);
|
|
Shinya Kitaoka |
120a6e |
m_count++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
sl->setDirtyFlag(false);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void ResourceCollector::process(TXshSoundLevel *sl) {
|
|
Shinya Kitaoka |
120a6e |
TFilePath path = sl->getPath();
|
|
Shinya Kitaoka |
120a6e |
TFilePath collectedPath = path;
|
|
Shinya Kitaoka |
120a6e |
if (!getCollectedPath(m_scene, collectedPath)) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualCollectedPath = m_scene->decodeFilePath(collectedPath);
|
|
Shinya Kitaoka |
120a6e |
if (actualCollectedPath != path && TSystem::doesExistFileOrLevel(path)) {
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchParentDir(actualCollectedPath);
|
|
Shinya Kitaoka |
120a6e |
TXshSimpleLevel::copyFiles(actualCollectedPath, path);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
sl->setPath(collectedPath);
|
|
Shinya Kitaoka |
120a6e |
m_count++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void ResourceCollector::process(TXshPaletteLevel *pl) {
|
|
Shinya Kitaoka |
120a6e |
TFilePath path = pl->getPath();
|
|
Shinya Kitaoka |
120a6e |
TFilePath collectedPath = path;
|
|
Shinya Kitaoka |
120a6e |
if (!getCollectedPath(m_scene, collectedPath)) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFilePath actualCollectedPath = m_scene->decodeFilePath(collectedPath);
|
|
Shinya Kitaoka |
120a6e |
if (actualCollectedPath != path && TSystem::doesExistFileOrLevel(path)) {
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
TSystem::touchParentDir(actualCollectedPath);
|
|
Shinya Kitaoka |
120a6e |
TXshSimpleLevel::copyFiles(actualCollectedPath, path);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
pl->setPath(collectedPath);
|
|
Shinya Kitaoka |
120a6e |
m_count++;
|
|
Toshihiro Shimizu |
890ddd |
}
|