You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
latte-dock/app/settings/detailsdialog/schemesmodel.cpp

142 lines
3.0 KiB
C++

/*
SPDX-FileCopyrightText: 2021 Michail Vourlakos <mvourlakos@gmail.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "schemesmodel.h"
// local
#include "../../data/layoutdata.h"
#include "../../layouts/importer.h"
#include "../../wm/schemecolors.h"
// Qt
#include <QDebug>
#include <QDir>
// KDE
#include <KLocalizedString>
namespace Latte {
namespace Settings {
namespace Model {
Schemes::Schemes(QObject *parent)
: QAbstractListModel(parent)
{
initSchemes();
}
Schemes::~Schemes()
{
qDeleteAll(m_schemes);
}
int Schemes::rowCount(const QModelIndex &parent) const
{
if (parent.isValid()) {
return 0;
}
return m_schemes.count();
}
void Schemes::initSchemes()
{
qDeleteAll(m_schemes);
m_schemes.clear();
QString currentSchemePath = WindowSystem::SchemeColors::possibleSchemeFile(Data::Layout::DEFAULTSCHEMEFILE);
insertSchemeInList(currentSchemePath);
QStringList standardPaths = Latte::Layouts::Importer::standardPathsFor("color-schemes");
QStringList registeredSchemes;
for(auto path : standardPaths) {
QDir directory(path);
QStringList tempSchemes = directory.entryList(QStringList() << "*.colors" << "*.COLORS", QDir::Files);
foreach (QString filename, tempSchemes) {
if (!registeredSchemes.contains(filename)) {
QString fullPath = path + "/" + filename;
insertSchemeInList(fullPath);
registeredSchemes << filename;
}
}
}
}
void Schemes::insertSchemeInList(QString file)
{
WindowSystem::SchemeColors *tempScheme = new WindowSystem::SchemeColors(this, file);
int atPos{0};
for (int i = 0; i < m_schemes.count(); i++) {
WindowSystem::SchemeColors *s = m_schemes[i];
int result = QString::compare(tempScheme->schemeName(), s->schemeName(), Qt::CaseInsensitive);
if (result < 0) {
atPos = i;
break;
} else {
atPos = i + 1;
}
}
m_schemes.insert(atPos, tempScheme);
}
int Schemes::row(const QString &id)
{
if (id.isEmpty() || id == Data::Layout::DEFAULTSCHEMEFILE) {
return 0;
}
for (int i = 0; i < m_schemes.count(); i++) {
if (m_schemes[i]->schemeFile() == id) {
return i;
}
}
return -1;
}
QVariant Schemes::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.column() != 0 || index.row() < 0 || index.row() >= m_schemes.count()) {
return QVariant();
}
const WindowSystem::SchemeColors *d = m_schemes[index.row()];
switch (role) {
case IDROLE:
return index.row() == 0 ? Data::Layout::DEFAULTSCHEMEFILE : d->schemeFile();
break;
case Qt::DisplayRole:
case NAMEROLE:
return index.row() == 0 ? i18n("System Colors") : d->schemeName();
break;
case TEXTCOLORROLE:
return d->textColor();
break;
case BACKGROUNDCOLORROLE:
return d->backgroundColor();
break;
}
return QVariant();
}
}
}
}