diff --git a/include/ConfigManager.h b/include/ConfigManager.h index 556c455a0c7..de22d22af11 100644 --- a/include/ConfigManager.h +++ b/include/ConfigManager.h @@ -50,7 +50,7 @@ const QString LADSPA_PATH ="plugins/ladspa/"; const QString DEFAULT_THEME_PATH = "themes/default/"; const QString TRACK_ICON_PATH = "track_icons/"; const QString LOCALE_PATH = "locale/"; - +const QString PORTABLE_MODE_FILE = "/portable_mode.txt"; class LMMS_EXPORT ConfigManager : public QObject { @@ -71,6 +71,12 @@ class LMMS_EXPORT ConfigManager : public QObject return m_workingDir; } + void initPortableWorkingDir(); + + void initInstalledWorkingDir(); + + void initDevelopmentWorkingDir(); + const QString & dataDir() const { return m_dataDir; @@ -216,7 +222,7 @@ class LMMS_EXPORT ConfigManager : public QObject QString defaultVersion() const; - static QStringList availabeVstEmbedMethods(); + static QStringList availableVstEmbedMethods(); QString vstEmbedMethod() const; // Returns true if the working dir (e.g. ~/lmms) exists on disk. diff --git a/src/core/ConfigManager.cpp b/src/core/ConfigManager.cpp index b8e8cd4ae77..53262dac7df 100644 --- a/src/core/ConfigManager.cpp +++ b/src/core/ConfigManager.cpp @@ -51,60 +51,26 @@ static inline QString ensureTrailingSlash(const QString & s ) ConfigManager * ConfigManager::s_instanceOfMe = NULL; -ConfigManager::ConfigManager() : - m_workingDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/lmms/"), - m_dataDir("data:/"), - m_vstDir(m_workingDir + "vst/"), - m_sf2Dir(m_workingDir + SF2_PATH), - m_gigDir(m_workingDir + GIG_PATH), - m_themeDir(defaultThemeDir()), - m_lmmsRcFile(QDir::home().absolutePath() +"/.lmmsrc.xml"), - m_version(defaultVersion()) +ConfigManager::ConfigManager() : m_version(defaultVersion()) { - // Detect < 1.2.0 working directory as a courtesy - if ( QFileInfo( QDir::home().absolutePath() + "/lmms/projects/" ).exists() ) - m_workingDir = QDir::home().absolutePath() + "/lmms/"; - - if (! qgetenv("LMMS_DATA_DIR").isEmpty()) - QDir::addSearchPath("data", QString::fromLocal8Bit(qgetenv("LMMS_DATA_DIR"))); - - // If we're in development (lmms is not installed) let's get the source and - // binary directories by reading the CMake Cache - QDir appPath = qApp->applicationDirPath(); - // If in tests, get parent directory - if (appPath.dirName() == "tests") { - appPath.cdUp(); + if (QFileInfo::exists(qApp->applicationDirPath() + PORTABLE_MODE_FILE)) + { + initPortableWorkingDir(); } - QFile cmakeCache(appPath.absoluteFilePath("CMakeCache.txt")); - if (cmakeCache.exists()) { - cmakeCache.open(QFile::ReadOnly); - QTextStream stream(&cmakeCache); - - // Find the lines containing something like lmms_SOURCE_DIR:static= - // and lmms_BINARY_DIR:static= - int done = 0; - while(! stream.atEnd()) - { - QString line = stream.readLine(); - - if (line.startsWith("lmms_SOURCE_DIR:")) { - QString srcDir = line.section('=', -1).trimmed(); - QDir::addSearchPath("data", srcDir + "/data/"); - done++; - } - if (line.startsWith("lmms_BINARY_DIR:")) { - m_lmmsRcFile = line.section('=', -1).trimmed() + QDir::separator() + - ".lmmsrc.xml"; - done++; - } - if (done == 2) - { - break; - } - } - - cmakeCache.close(); + else + { + initInstalledWorkingDir(); } + m_dataDir = "data:/"; + m_vstDir = m_workingDir + "vst/"; + m_sf2Dir = m_workingDir + SF2_PATH; + m_gigDir = m_workingDir + GIG_PATH; + m_themeDir = defaultThemeDir(); + if (!qgetenv("LMMS_DATA_DIR").isEmpty()) + { + QDir::addSearchPath("data", QString::fromLocal8Bit(qgetenv("LMMS_DATA_DIR"))); + } + initDevelopmentWorkingDir(); #ifdef LMMS_BUILD_WIN32 QDir::addSearchPath("data", qApp->applicationDirPath() + "/data/"); @@ -112,7 +78,6 @@ ConfigManager::ConfigManager() : QDir::addSearchPath("data", qApp->applicationDirPath().section('/', 0, -2) + "/share/lmms/"); #endif - } @@ -193,7 +158,7 @@ QString ConfigManager::defaultVersion() const return LMMS_VERSION; } -QStringList ConfigManager::availabeVstEmbedMethods() +QStringList ConfigManager::availableVstEmbedMethods() { QStringList methods; methods.append("none"); @@ -215,7 +180,7 @@ QStringList ConfigManager::availabeVstEmbedMethods() QString ConfigManager::vstEmbedMethod() const { - QStringList methods = availabeVstEmbedMethods(); + QStringList methods = availableVstEmbedMethods(); QString defaultMethod = *(methods.end() - 1); QString currentMethod = value( "ui", "vstembedmethod", defaultMethod ); return methods.contains(currentMethod) ? currentMethod : defaultMethod; @@ -651,3 +616,60 @@ void ConfigManager::saveConfigFile() outfile.write(xml.toUtf8()); outfile.close(); } + +void ConfigManager::initPortableWorkingDir() +{ + QString applicationPath = qApp->applicationDirPath(); + m_workingDir = applicationPath + "/lmms-workspace/"; + m_lmmsRcFile = applicationPath + "/.lmmsrc.xml"; +} + +void ConfigManager::initInstalledWorkingDir() +{ + m_workingDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/lmms/"; + m_lmmsRcFile = QDir::home().absolutePath() +"/.lmmsrc.xml"; + // Detect < 1.2.0 working directory as a courtesy + if ( QFileInfo( QDir::home().absolutePath() + "/lmms/projects/" ).exists() ) + m_workingDir = QDir::home().absolutePath() + "/lmms/"; +} + +void ConfigManager::initDevelopmentWorkingDir() +{ + // If we're in development (lmms is not installed) let's get the source and + // binary directories by reading the CMake Cache + QDir appPath = qApp->applicationDirPath(); + // If in tests, get parent directory + if (appPath.dirName() == "tests") { + appPath.cdUp(); + } + QFile cmakeCache(appPath.absoluteFilePath("CMakeCache.txt")); + if (cmakeCache.exists()) { + cmakeCache.open(QFile::ReadOnly); + QTextStream stream(&cmakeCache); + + // Find the lines containing something like lmms_SOURCE_DIR:static= + // and lmms_BINARY_DIR:static= + int done = 0; + while(! stream.atEnd()) + { + QString line = stream.readLine(); + + if (line.startsWith("lmms_SOURCE_DIR:")) { + QString srcDir = line.section('=', -1).trimmed(); + QDir::addSearchPath("data", srcDir + "/data/"); + done++; + } + if (line.startsWith("lmms_BINARY_DIR:")) { + m_lmmsRcFile = line.section('=', -1).trimmed() + QDir::separator() + + ".lmmsrc.xml"; + done++; + } + if (done == 2) + { + break; + } + } + + cmakeCache.close(); + } +} diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp index 2a7aeba7294..b1d7e5aadb4 100644 --- a/src/gui/SetupDialog.cpp +++ b/src/gui/SetupDialog.cpp @@ -389,7 +389,7 @@ SetupDialog::SetupDialog(ConfigTabs tab_to_open) : m_vstEmbedComboBox = new QComboBox(plugins_tw); m_vstEmbedComboBox->move(XDelta, YDelta * ++counter); - QStringList embedMethods = ConfigManager::availabeVstEmbedMethods(); + QStringList embedMethods = ConfigManager::availableVstEmbedMethods(); m_vstEmbedComboBox->addItem(tr("No embedding"), "none"); if(embedMethods.contains("qt")) {