diff options
Diffstat (limited to 'src-qt5')
-rw-r--r-- | src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.cpp | 276 | ||||
-rw-r--r-- | src-qt5/core/lumina-theme-engine/src/lthemeengine/iconthemepage.h | 28 |
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 |