aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp276
-rw-r--r--src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.h28
2 files changed, 103 insertions, 201 deletions
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp
index ca9a3388..cfe002aa 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp
@@ -1,31 +1,3 @@
-/*
- * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
#include <QSettings>
#include <QFileInfo>
#include <QFileInfoList>
@@ -37,178 +9,136 @@
#include "iconthemepage.h"
#include "ui_iconthemepage.h"
-IconThemePage::IconThemePage(QWidget *parent) :
- TabPage(parent),
- m_ui(new Ui::IconThemePage)
-{
- m_ui->setupUi(this);
- loadThemes();
- readSettings();
+IconThemePage::IconThemePage(QWidget *parent) : TabPage(parent), m_ui(new Ui::IconThemePage){
+ m_ui->setupUi(this);
+ loadThemes();
+ readSettings();
}
-IconThemePage::~IconThemePage()
-{
- delete m_ui;
+IconThemePage::~IconThemePage(){
+ delete m_ui;
}
-void IconThemePage::writeSettings()
-{
- QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
- QTreeWidgetItem *item = m_ui->treeWidget->currentItem();
- if(item)
- settings.setValue("Appearance/icon_theme", item->data(3, Qt::UserRole));
+void IconThemePage::writeSettings(){
+ QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
+ QTreeWidgetItem *item = m_ui->treeWidget->currentItem();
+ if(item)
+ settings.setValue("Appearance/icon_theme", item->data(3, Qt::UserRole));
}
-void IconThemePage::readSettings()
-{
- QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
- QString name = settings.value("Appearance/icon_theme").toString();
-
- if(name.isEmpty())
- return;
-
- for(int i = 0; i < m_ui->treeWidget->topLevelItemCount(); ++i)
- {
- QTreeWidgetItem *item = m_ui->treeWidget->topLevelItem(i);
- if(item->data(3, Qt::UserRole).toString() == name)
- {
- m_ui->treeWidget->setCurrentItem(item);
- break;
+void IconThemePage::readSettings(){
+ QSettings settings(lthemeengine::configFile(), QSettings::IniFormat);
+ QString name = settings.value("Appearance/icon_theme").toString();
+ if(name.isEmpty())
+ return;
+ for(int i = 0; i < m_ui->treeWidget->topLevelItemCount(); ++i){
+ QTreeWidgetItem *item = m_ui->treeWidget->topLevelItem(i);
+ if(item->data(3, Qt::UserRole).toString() == name){
+ m_ui->treeWidget->setCurrentItem(item);
+ break;
}
- }
+ }
}
-void IconThemePage::loadThemes()
-{
- QFileInfoList themeFileList;
- foreach(QString path, lthemeengine::iconPaths())
- {
- QDir dir(path);
- dir.setFilter(QDir::Dirs | QDir::NoDotDot | QDir::NoDot);
- foreach (QFileInfo info, dir.entryInfoList())
- {
- QDir themeDir(info.absoluteFilePath());
- themeDir.setFilter(QDir::Files);
- themeFileList << themeDir.entryInfoList(QStringList() << "index.theme");
- }
+void IconThemePage::loadThemes(){
+ QFileInfoList themeFileList;
+ foreach(QString path, lthemeengine::iconPaths()){
+ QDir dir(path);
+ dir.setFilter(QDir::Dirs | QDir::NoDotDot | QDir::NoDot);
+ foreach (QFileInfo info, dir.entryInfoList()){
+ QDir themeDir(info.absoluteFilePath());
+ themeDir.setFilter(QDir::Files);
+ themeFileList << themeDir.entryInfoList(QStringList() << "index.theme");
+ }
}
-
- foreach(QFileInfo info, themeFileList)
- {
- loadTheme(info.canonicalFilePath());
+ foreach(QFileInfo info, themeFileList){
+ loadTheme(info.canonicalFilePath());
}
}
-void IconThemePage::loadTheme(const QString &path)
-{
- QSettings config(path, QSettings::IniFormat);
- config.setIniCodec("UTF-8");
-
- config.beginGroup("Icon Theme");
- QStringList dirs = config.value("Directories").toStringList();
- if(dirs.isEmpty() || config.value("Hidden", false).toBool())
- return;
-
+void IconThemePage::loadTheme(const QString &path){
+ QSettings config(path, QSettings::IniFormat);
+ config.setIniCodec("UTF-8");
+ config.beginGroup("Icon Theme");
+ QStringList dirs = config.value("Directories").toStringList();
+ if(dirs.isEmpty() || config.value("Hidden", false).toBool())
+ return;
QString name, comment;
QString lang = QLocale::system().name();
-
name = config.value(QString("Name[%1]").arg(lang)).toString();
comment = config.value(QString("Comment[%1]").arg(lang)).toString();
-
if(lang.contains("_"))
- lang = lang.split("_").first();
-
- if(name.isEmpty())
+ lang = lang.split("_").first();
+ if(name.isEmpty())
name = config.value(QString("Name[%1]").arg(lang)).toString();
-
- if(comment.isEmpty())
- comment = config.value(QString("Comment[%1]").arg(lang)).toString();
-
- if(name.isEmpty())
- name = config.value("Name").toString();
-
- if(comment.isEmpty())
- comment = config.value("Comment").toString();
-
- config.endGroup();
-
- QIcon icon1 = findIcon(path, 24, "document-save");
- QIcon icon2 = findIcon(path, 24, "document-print");
- QIcon icon3 = findIcon(path, 24, "media-playback-stop");
-
- QTreeWidgetItem *item = new QTreeWidgetItem();
- item->setIcon(0, icon1);
- item->setIcon(1, icon2);
- item->setIcon(2, icon3);
- item->setText(3, name);
- item->setData(3, Qt::UserRole, QFileInfo(path).path().section("/", -1));
- item->setToolTip(3, comment);
- item->setSizeHint(0, QSize(24,24));
- m_ui->treeWidget->addTopLevelItem(item);
-
- m_ui->treeWidget->resizeColumnToContents(0);
- m_ui->treeWidget->resizeColumnToContents(1);
- m_ui->treeWidget->resizeColumnToContents(2);
- m_ui->treeWidget->resizeColumnToContents(3);
+ if(comment.isEmpty())
+ comment = config.value(QString("Comment[%1]").arg(lang)).toString();
+ if(name.isEmpty())
+ name = config.value("Name").toString();
+ if(comment.isEmpty())
+ comment = config.value("Comment").toString();
+ config.endGroup();
+ QIcon icon1 = findIcon(path, 24, "document-save");
+ QIcon icon2 = findIcon(path, 24, "document-print");
+ QIcon icon3 = findIcon(path, 24, "media-playback-stop");
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setIcon(0, icon1);
+ item->setIcon(1, icon2);
+ item->setIcon(2, icon3);
+ item->setText(3, name);
+ item->setData(3, Qt::UserRole, QFileInfo(path).path().section("/", -1));
+ item->setToolTip(3, comment);
+ item->setSizeHint(0, QSize(24,24));
+ m_ui->treeWidget->addTopLevelItem(item);
+ m_ui->treeWidget->resizeColumnToContents(0);
+ m_ui->treeWidget->resizeColumnToContents(1);
+ m_ui->treeWidget->resizeColumnToContents(2);
+ m_ui->treeWidget->resizeColumnToContents(3);
}
-QIcon IconThemePage::findIcon(const QString &themePath, int size, const QString &name)
-{
- QSettings config(themePath, QSettings::IniFormat);
- config.beginGroup("Icon Theme");
- QStringList dirs = config.value("Directories").toStringList();
- QStringList parents = config.value("Inherits").toStringList();
- bool haveInherits = config.contains("Inherits");
- config.endGroup();
-
- foreach (QString dir, dirs)
- {
- config.beginGroup(dir);
- if(config.value("Size").toInt() == size)
- {
- QDir iconDir = QFileInfo(themePath).path() + "/" + dir;
- iconDir.setFilter(QDir::Files);
- iconDir.setNameFilters(QStringList () << name + ".*");
- if(iconDir.entryInfoList().isEmpty())
- continue;
- return QIcon(iconDir.entryInfoList().first().absoluteFilePath());
- }
- config.endGroup();
+QIcon IconThemePage::findIcon(const QString &themePath, int size, const QString &name){
+ QSettings config(themePath, QSettings::IniFormat);
+ config.beginGroup("Icon Theme");
+ QStringList dirs = config.value("Directories").toStringList();
+ QStringList parents = config.value("Inherits").toStringList();
+ bool haveInherits = config.contains("Inherits");
+ config.endGroup();
+ foreach (QString dir, dirs){
+ config.beginGroup(dir);
+ if(config.value("Size").toInt() == size){
+ QDir iconDir = QFileInfo(themePath).path() + "/" + dir;
+ iconDir.setFilter(QDir::Files);
+ iconDir.setNameFilters(QStringList () << name + ".*");
+ if(iconDir.entryInfoList().isEmpty())
+ continue;
+ return QIcon(iconDir.entryInfoList().first().absoluteFilePath());
+ }
+ config.endGroup();
}
-
- foreach (QString dir, dirs)
- {
- config.beginGroup(dir);
- if(abs(config.value("Size").toInt() - size) < 4)
- {
- QDir iconDir = QFileInfo(themePath).path() + "/" + dir;
- iconDir.setFilter(QDir::Files);
- iconDir.setNameFilters(QStringList () << name + ".*");
- if(iconDir.entryInfoList().isEmpty())
- continue;
- return QIcon(iconDir.entryInfoList().first().absoluteFilePath());
- }
- config.endGroup();
+ foreach (QString dir, dirs){
+ config.beginGroup(dir);
+ if(abs(config.value("Size").toInt() - size) < 4){
+ QDir iconDir = QFileInfo(themePath).path() + "/" + dir;
+ iconDir.setFilter(QDir::Files);
+ iconDir.setNameFilters(QStringList () << name + ".*");
+ if(iconDir.entryInfoList().isEmpty())
+ continue;
+ return QIcon(iconDir.entryInfoList().first().absoluteFilePath());
}
-
- if (!haveInherits)
- return QIcon();
-
+ config.endGroup();
+ }
+ if (!haveInherits)
+ return QIcon();
parents.append("hicolor"); //add fallback themes
parents.append("gnome");
parents.removeDuplicates();
-
- foreach (QString parent, parents)
- {
- QString parentThemePath = QDir(QFileInfo(themePath).path() + "/../" + parent).canonicalPath() + "/index.theme";
-
- if(!QFile::exists(parentThemePath) || parentThemePath == themePath)
- continue;
-
+ foreach (QString parent, parents){
+ QString parentThemePath = QDir(QFileInfo(themePath).path() + "/../" + parent).canonicalPath() + "/index.theme";
+ if(!QFile::exists(parentThemePath) || parentThemePath == themePath)
+ continue;
QIcon icon = findIcon(parentThemePath, size, name);
if(!icon.isNull())
- return icon;
- }
-
+ return icon;
+ }
return QIcon();
}
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.h
index 0ccd64e0..8a6635ef 100644
--- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.h
+++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.h
@@ -1,31 +1,3 @@
-/*
- * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
#ifndef ICONTHEMEPAGE_H
#define ICONTHEMEPAGE_H
bgstack15