diff --git a/include/ConfigManager.h b/include/ConfigManager.h index f6239c29783..01c579018f9 100644 --- a/include/ConfigManager.h +++ b/include/ConfigManager.h @@ -27,6 +27,7 @@ #include "lmmsconfig.h" +#include #include #include #include @@ -262,6 +263,11 @@ class LMMS_EXPORT ConfigManager : public QObject // Creates the working directory & subdirectories on disk. void createWorkingDir(); + const std::vector& customDirectories(); + void addCustomDirectory(const QString& directory); + void removeCustomDirectory(const QString& directory); + void loadCustomDirectories(const QDomNodeList& directories); + signals: void valueChanged( QString cls, QString attribute, QString value ); @@ -298,6 +304,7 @@ class LMMS_EXPORT ConfigManager : public QObject QString m_version; unsigned int m_configVersion; QStringList m_recentlyOpenedProjects; + std::vector m_customDirectories; using stringPairVector = std::vector>; using settingsMap = QMap; diff --git a/src/core/ConfigManager.cpp b/src/core/ConfigManager.cpp index 61d84770a13..f3d2e7c6c07 100644 --- a/src/core/ConfigManager.cpp +++ b/src/core/ConfigManager.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include "ConfigManager.h" #include "MainWindow.h" @@ -312,6 +313,31 @@ void ConfigManager::createWorkingDir() QDir().mkpath(userLadspaDir()); } +const std::vector& ConfigManager::customDirectories() +{ + return m_customDirectories; +} + +void ConfigManager::addCustomDirectory(const QString& directory) +{ + m_customDirectories.push_back(directory); +} + +void ConfigManager::removeCustomDirectory(const QString& directory) +{ + m_customDirectories.erase(std::remove(m_customDirectories.begin(), m_customDirectories.end(), directory)); +} + +void ConfigManager::loadCustomDirectories(const QDomNodeList& directories) +{ + for (int i = 0; i < directories.length(); ++i) + { + auto node = directories.at(i).toElement(); + if (node.isNull() || !node.hasAttribute("path")) { continue; } + m_customDirectories.push_back(node.attribute("path")); + } +} + void ConfigManager::addRecentlyOpenedProject(const QString & file) @@ -468,6 +494,7 @@ void ConfigManager::loadConfigFile(const QString & configFile) n = n.nextSibling(); } } + else if (node.nodeName() == "custom-directories") { loadCustomDirectories(node.childNodes()); } node = node.nextSibling(); } @@ -615,6 +642,15 @@ void ConfigManager::saveConfigFile() } lmms_config.appendChild(recent_files); + auto customDirectories = doc.createElement("custom-directories"); + for (const auto& directory : m_customDirectories) + { + auto directoryElement = doc.createElement("dir"); + directoryElement.setAttribute("path", directory); + customDirectories.appendChild(directoryElement); + } + lmms_config.appendChild(customDirectories); + QString xml = "\n" + doc.toString(2); QFile outfile(m_lmmsRcFile); diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 5b705d0c221..7019b71ce0b 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -136,7 +136,14 @@ MainWindow::MainWindow() : confMgr->userPresetsDir(), confMgr->factoryPresetsDir())); - + auto customDirectories = QString{}; + for (const auto& directory : confMgr->customDirectories()) + { + customDirectories.append(directory); + if (directory != confMgr->customDirectories().back()) { customDirectories.append("*"); } + } + sideBar->appendTab(new FileBrowser(customDirectories, "*", tr("Custom Directories"), + embed::getIconPixmap("folder").transformed(QTransform().rotate(90)), splitter, true, true)); m_workspace = new QMdiArea(splitter);