Skip to content

Commit

Permalink
Add custom directory sidebar and config option
Browse files Browse the repository at this point in the history
  • Loading branch information
sakertooth committed Sep 19, 2023
1 parent 3aa74b9 commit c9402b4
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 1 deletion.
7 changes: 7 additions & 0 deletions include/ConfigManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

#include "lmmsconfig.h"

#include <QDomNodeList>
#include <QMap>
#include <QPair>
#include <QStringList>
Expand Down Expand Up @@ -262,6 +263,11 @@ class LMMS_EXPORT ConfigManager : public QObject
// Creates the working directory & subdirectories on disk.
void createWorkingDir();

const std::vector<QString>& 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 );

Expand Down Expand Up @@ -298,6 +304,7 @@ class LMMS_EXPORT ConfigManager : public QObject
QString m_version;
unsigned int m_configVersion;
QStringList m_recentlyOpenedProjects;
std::vector<QString> m_customDirectories;

using stringPairVector = std::vector<QPair<QString, QString>>;
using settingsMap = QMap<QString, stringPairVector>;
Expand Down
36 changes: 36 additions & 0 deletions src/core/ConfigManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include <QApplication>
#include <QStandardPaths>
#include <QTextStream>
#include <algorithm>

#include "ConfigManager.h"
#include "MainWindow.h"
Expand Down Expand Up @@ -312,6 +313,31 @@ void ConfigManager::createWorkingDir()
QDir().mkpath(userLadspaDir());
}

const std::vector<QString>& 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)
Expand Down Expand Up @@ -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();
}

Expand Down Expand Up @@ -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 = "<?xml version=\"1.0\"?>\n" + doc.toString(2);

QFile outfile(m_lmmsRcFile);
Expand Down
9 changes: 8 additions & 1 deletion src/gui/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit c9402b4

Please sign in to comment.