[plasmalnf] Enrich config file

- Extend the config file format to allow theme, image pairs
   as well as just naming the themes.
 - Reduce verbosity when querying Plasma themes.
This commit is contained in:
Adriaan de Groot 2017-12-12 05:42:35 -05:00
parent 6bd8c67ca9
commit 748ccf94e9
5 changed files with 122 additions and 30 deletions

View File

@ -26,9 +26,9 @@
#include <KPackage/Package>
#include <KPackage/PackageLoader>
static PlasmaLnfList plasma_themes()
static ThemeInfoList plasma_themes()
{
PlasmaLnfList packages;
ThemeInfoList packages;
QList<KPluginMetaData> pkgs = KPackage::PackageLoader::self()->listPackages( "Plasma/LookAndFeel" );
@ -36,8 +36,7 @@ static PlasmaLnfList plasma_themes()
{
if ( data.isValid() && !data.isHidden() && !data.name().isEmpty() )
{
packages << PlasmaLnfDescriptor{ data.pluginId(), data.name() };
cDebug() << "LNF Package" << data.pluginId();
packages << ThemeInfo{ data.pluginId(), data.name() };
}
}
@ -54,7 +53,6 @@ PlasmaLnfPage::PlasmaLnfPage( QWidget* parent )
{
ui->retranslateUi( this );
ui->generalExplanation->setText( tr( "Please choose a look-and-feel for the KDE Plasma Desktop, below." ) );
m_availableLnf = plasma_themes();
winnowThemes();
}
)
@ -65,13 +63,13 @@ PlasmaLnfPage::PlasmaLnfPage( QWidget* parent )
void
PlasmaLnfPage::activated( int index )
{
if ( ( index < 0 ) || ( index > m_availableLnf.length() ) )
if ( ( index < 0 ) || ( index > m_enabledThemes.length() ) )
{
cDebug() << "Plasma LNF index" << index << "out of range.";
return;
}
const PlasmaLnfDescriptor& lnf = m_availableLnf.at( index );
const ThemeInfo& lnf = m_enabledThemes.at( index );
cDebug() << "Changed to" << index << lnf.id << lnf.name;
emit plasmaThemeSelected( lnf.id );
}
@ -83,16 +81,27 @@ PlasmaLnfPage::setLnfPath( const QString& path )
}
void
PlasmaLnfPage::setEnabledThemes(const QStringList& themes)
PlasmaLnfPage::setEnabledThemes(const ThemeInfoList& themes)
{
m_enabledThemes = themes;
if ( themes.isEmpty() )
m_enabledThemes = plasma_themes();
else
m_enabledThemes = themes;
winnowThemes();
}
void PlasmaLnfPage::winnowThemes()
{
auto plasmaThemes = plasma_themes();
ui->lnfCombo->clear();
for ( const auto& p : m_availableLnf )
if ( m_enabledThemes.isEmpty() || m_enabledThemes.contains( p.id ) )
ui->lnfCombo->addItem( p.name );
for ( auto& enabled_theme : m_enabledThemes )
{
ThemeInfo* t = plasmaThemes.findById( enabled_theme.id );
if ( t != nullptr )
{
enabled_theme.name = t->name;
ui->lnfCombo->addItem( enabled_theme.name );
cDebug() << "Enabled" << enabled_theme.id << "as" << enabled_theme.name;
}
}
}

View File

@ -24,19 +24,13 @@
#include <QStringList>
#include <QWidget>
#include "ThemeInfo.h"
namespace Ui
{
class PlasmaLnfPage;
}
struct PlasmaLnfDescriptor
{
QString id;
QString name;
} ;
using PlasmaLnfList = QList<PlasmaLnfDescriptor>;
class PlasmaLnfPage : public QWidget
{
Q_OBJECT
@ -44,7 +38,7 @@ public:
explicit PlasmaLnfPage( QWidget* parent = nullptr );
void setLnfPath( const QString& path );
void setEnabledThemes( const QStringList& themes );
void setEnabledThemes( const ThemeInfoList& themes );
public slots:
void activated( int index );
@ -57,8 +51,7 @@ private:
Ui::PlasmaLnfPage* ui;
QString m_lnfPath;
QStringList m_enabledThemes;
PlasmaLnfList m_availableLnf;
ThemeInfoList m_enabledThemes;
};
#endif //PLASMALNFPAGE_H

View File

@ -19,6 +19,7 @@
#include "PlasmaLnfJob.h"
#include "PlasmaLnfPage.h"
#include "ThemeInfo.h"
#include "utils/Logger.h"
@ -139,10 +140,20 @@ PlasmaLnfViewStep::setConfigurationMap( const QVariantMap& configurationMap )
if ( configurationMap.contains( "themes" ) &&
configurationMap.value( "themes" ).type() == QVariant::List )
{
QStringList enabledThemes( configurationMap.value( "themes" ).toStringList() );
if ( enabledThemes.length() == 1 )
ThemeInfoList allThemes;
auto themeList = configurationMap.value( "themes" ).toList();
for ( const auto& i : themeList )
if ( i.type() == QVariant::Map )
{
auto iv = i.toMap();
allThemes.append( ThemeInfo( iv.value( "theme" ).toString(), QString(), iv.value( "image" ).toString() ) );
}
else if ( i.type() == QVariant::String )
allThemes.append( ThemeInfo( i.toString(), QString() ) );
if ( allThemes.length() == 1 )
cDebug() << "WARNING: only one theme enabled in plasmalnf";
m_widget->setEnabledThemes( enabledThemes );
m_widget->setEnabledThemes( allThemes );
}
}

View File

@ -0,0 +1,75 @@
/* === This file is part of Calamares - <http://github.com/calamares> ===
*
* Copyright 2017, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Calamares is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PLASMALNF_THEMEINFO_H
#define PLASMALNF_THEMEINFO_H
#include <QList>
#include <QString>
class QDebug;
struct ThemeInfo
{
QString id;
QString name;
QString imagePath;
ThemeInfo()
{}
ThemeInfo( const QString& _id, const QString& _name, const QString& image = QString() )
: id( _id )
, name( _name )
, imagePath( image )
{}
bool isValid() const { return !id.isEmpty(); }
} ;
class ThemeInfoList : public QList< ThemeInfo >
{
public:
ThemeInfo* findById( const QString& id )
{
for ( ThemeInfo& i : *this )
{
if ( i.id == id )
return &i;
}
return nullptr;
}
const ThemeInfo* findById( const QString& id ) const
{
for ( const ThemeInfo& i : *this )
{
if ( i.id == id )
return &i;
}
return nullptr;
}
bool contains( const QString& id ) const
{
return findById( id ) != nullptr;
}
} ;
#endif

View File

@ -14,9 +14,13 @@ lnftool: "/usr/bin/lookandfeeltool"
# You can limit the list of Plasma look-and-feel themes by listing ids
# here. If this key is not present, or the list is empty, all of the
# installed themes are listed. If only one theme is listed, why are
# you using this module at all?
# you using this module at all? Themes may be listed by id,
# (e.g. fluffy-bunny, below) or as a theme and an image (e.g. breeze)
# which will be used to show a screenshot.
#
themes:
- org.kde.breeze.desktop
# - org.kde.breezedark.desktop
- theme: org.kde.breeze.desktop
image: "breeze.png"
- theme: org.kde.breezedark.desktop
image: "breeze-dark.png"
- org.kde.fluffy-bunny.desktop