1 2 3 #include "toonz/toonzfolders.h" 4 #include "tsystem.h" 5 #include "tenv.h" 6 #include "tconvert.h" 7 #include "toonz/preferences.h" 8 #include <QStandardPaths> 9 #include <QDir> 10 11 using namespace TEnv; 12 13 //------------------------------------------------------------------- 14 namespace { getMyDocumentsPath()15TFilePath getMyDocumentsPath() { 16 QString documentsPath = 17 QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation)[0]; 18 return TFilePath(documentsPath); 19 } 20 21 // Desktop Path getDesktopPath()22TFilePath getDesktopPath() { 23 QString desktopPath = 24 QStandardPaths::standardLocations(QStandardPaths::DesktopLocation)[0]; 25 return TFilePath(desktopPath); 26 } 27 } // namespace 28 //------------------------------------------------------------------- 29 getModulesDir()30TFilePath ToonzFolder::getModulesDir() { 31 return getProfileFolder() + "layouts"; 32 } 33 getProjectsFolders()34TFilePathSet ToonzFolder::getProjectsFolders() { 35 int location = Preferences::instance()->getProjectRoot(); 36 QString path = Preferences::instance()->getCustomProjectRoot(); 37 TFilePathSet fps; 38 int projectPaths = Preferences::instance()->getProjectRoot(); 39 bool stuff = projectPaths & 0x08; 40 bool documents = projectPaths & 0x04; 41 bool desktop = projectPaths & 0x02; 42 bool custom = projectPaths & 0x01; 43 44 // make sure at least something is there 45 if (!desktop && !custom && !documents) stuff = 1; 46 TFilePathSet tempFps = 47 getSystemVarPathSetValue(getSystemVarPrefix() + "PROJECTS"); 48 if (stuff) { 49 for (TFilePath tempPath : tempFps) { 50 if (TSystem::doesExistFileOrLevel(TFilePath(tempPath))) { 51 fps.push_back(TFilePath(tempPath)); 52 } 53 } 54 if (tempFps.size() == 0) 55 fps.push_back(TEnv::getStuffDir() + 56 TEnv::getSystemPathMap().at("PROJECTS")); 57 } 58 if (documents) { 59 fps.push_back(getMyDocumentsPath() + "OpenToonz"); 60 if (!TSystem::doesExistFileOrLevel(getMyDocumentsPath() + "OpenToonz")) { 61 TSystem::mkDir(getMyDocumentsPath() + "OpenToonz"); 62 } 63 } 64 if (desktop) { 65 fps.push_back(getDesktopPath() + "OpenToonz"); 66 if (!TSystem::doesExistFileOrLevel(getDesktopPath() + "OpenToonz")) { 67 TSystem::mkDir(getDesktopPath() + "OpenToonz"); 68 } 69 } 70 if (custom) { 71 QStringList paths = path.split("**"); 72 for (QString tempPath : paths) { 73 if (TSystem::doesExistFileOrLevel(TFilePath(tempPath))) { 74 fps.push_back(TFilePath(tempPath)); 75 } 76 } 77 } 78 return fps; 79 } 80 getFirstProjectsFolder()81TFilePath ToonzFolder::getFirstProjectsFolder() { 82 TFilePathSet fps = getProjectsFolders(); 83 if (fps.empty()) 84 return TFilePath(); 85 else 86 return *fps.begin(); 87 } 88 getLibraryFolder()89TFilePath ToonzFolder::getLibraryFolder() { 90 TFilePath fp = getSystemVarPathValue(getSystemVarPrefix() + "LIBRARY"); 91 if (fp == TFilePath()) 92 fp = getStuffDir() + TEnv::getSystemPathMap().at("LIBRARY"); 93 return fp; 94 } 95 getStudioPaletteFolder()96TFilePath ToonzFolder::getStudioPaletteFolder() { 97 TFilePath fp = getSystemVarPathValue(getSystemVarPrefix() + "STUDIOPALETTE"); 98 if (fp == TFilePath()) 99 fp = getStuffDir() + TEnv::getSystemPathMap().at("STUDIOPALETTE"); 100 return fp; 101 } 102 getFxPresetFolder()103TFilePath ToonzFolder::getFxPresetFolder() { 104 TFilePath fp = getSystemVarPathValue(getSystemVarPrefix() + "FXPRESETS"); 105 if (fp == TFilePath()) 106 fp = getStuffDir() + TEnv::getSystemPathMap().at("FXPRESETS"); 107 return fp; 108 } 109 getCacheRootFolder()110TFilePath ToonzFolder::getCacheRootFolder() { 111 static enum STATE { FIRSTTIME, OK, NG } state = FIRSTTIME; 112 QString cacheDir = 113 QStandardPaths::writableLocation(QStandardPaths::CacheLocation); 114 if (state == FIRSTTIME) { 115 if (QDir(cacheDir).mkpath(".")) 116 state = OK; 117 else 118 state = NG; 119 } 120 return (state == OK) ? TFilePath(cacheDir) : TFilePath(); 121 } 122 getProfileFolder()123TFilePath ToonzFolder::getProfileFolder() { 124 TFilePath fp = getSystemVarPathValue(getSystemVarPrefix() + "PROFILES"); 125 if (fp == TFilePath()) 126 fp = getStuffDir() + TEnv::getSystemPathMap().at("PROFILES"); 127 return fp; 128 } 129 getReslistPath(bool forCleanup)130TFilePath ToonzFolder::getReslistPath(bool forCleanup) { 131 return getConfigDir() + (forCleanup ? "cleanupreslist.txt" : "reslist.txt"); 132 } 133 getTemplateModuleDir()134TFilePath ToonzFolder::getTemplateModuleDir() { 135 // return getModulesDir() + getModuleName(); 136 return getModulesDir() + "settings"; 137 } 138 getMyModuleDir()139TFilePath ToonzFolder::getMyModuleDir() { 140 TFilePath fp(getTemplateModuleDir()); 141 return fp.withName(fp.getWideName() + L"." + 142 TSystem::getUserName().toStdWString()); 143 } 144 getModuleFile(TFilePath filename)145TFilePath ToonzFolder::getModuleFile(TFilePath filename) { 146 TFilePath fp = getMyModuleDir() + filename; 147 if (TFileStatus(fp).doesExist()) return fp; 148 fp = getTemplateModuleDir() + filename; 149 return fp; 150 } 151 getModuleFile(std::string fn)152TFilePath ToonzFolder::getModuleFile(std::string fn) { 153 return ToonzFolder::getModuleFile(TFilePath(fn)); 154 } 155 156 // turtle getRoomsDir()157TFilePath ToonzFolder::getRoomsDir() { 158 return getProfileFolder() + "layouts/rooms"; 159 } 160 getTemplateRoomsDir()161TFilePath ToonzFolder::getTemplateRoomsDir() { 162 return getRoomsDir() + 163 Preferences::instance()->getCurrentRoomChoice().toStdWString(); 164 // TFilePath fp(getMyModuleDir() + TFilePath(mySettingsFileName)); 165 // return getRoomsDir() + getModuleName(); 166 } 167 getMyRoomsDir()168TFilePath ToonzFolder::getMyRoomsDir() { 169 // TFilePath fp(getTemplateRoomsDir()); 170 TFilePath fp(getProfileFolder()); 171 return fp.withName( 172 fp.getWideName() + L"/layouts/personal/" + 173 Preferences::instance()->getCurrentRoomChoice().toStdWString() + L"." + 174 TSystem::getUserName().toStdWString()); 175 } 176 getRoomsFile(TFilePath filename)177TFilePath ToonzFolder::getRoomsFile(TFilePath filename) { 178 TFilePath fp = getMyRoomsDir() + filename; 179 if (TFileStatus(fp).doesExist()) return fp; 180 fp = getTemplateRoomsDir() + filename; 181 return fp; 182 } 183 getRoomsFile(std::string fn)184TFilePath ToonzFolder::getRoomsFile(std::string fn) { 185 return ToonzFolder::getRoomsFile(TFilePath(fn)); 186 } 187 188 //=================================================================== 189 FolderListenerManager()190FolderListenerManager::FolderListenerManager() {} 191 192 //------------------------------------------------------------------- 193 ~FolderListenerManager()194FolderListenerManager::~FolderListenerManager() {} 195 196 //------------------------------------------------------------------- 197 instance()198FolderListenerManager *FolderListenerManager::instance() { 199 static FolderListenerManager _instance; 200 return &_instance; 201 } 202 203 //------------------------------------------------------------------- 204 notifyFolderChanged(const TFilePath & path)205void FolderListenerManager::notifyFolderChanged(const TFilePath &path) { 206 for (std::set<Listener *>::iterator i = m_listeners.begin(); 207 i != m_listeners.end(); ++i) 208 (*i)->onFolderChanged(path); 209 } 210 211 //------------------------------------------------------------------- 212 addListener(Listener * listener)213void FolderListenerManager::addListener(Listener *listener) { 214 m_listeners.insert(listener); 215 } 216 217 //------------------------------------------------------------------- 218 removeListener(Listener * listener)219void FolderListenerManager::removeListener(Listener *listener) { 220 m_listeners.erase(listener); 221 } 222