[plasmalnf] Rip out most of the widget
- put a filter model in place, so only the themes with "show" set are displayed - rip out the messing about with widgets, soon to introduce a model- based UI
This commit is contained in:
parent
d4887426e2
commit
aaa56b6903
@ -21,6 +21,8 @@
|
|||||||
#include <KSharedConfig>
|
#include <KSharedConfig>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <QSortFilterProxyModel>
|
||||||
|
|
||||||
static QString
|
static QString
|
||||||
currentPlasmaTheme()
|
currentPlasmaTheme()
|
||||||
{
|
{
|
||||||
@ -33,11 +35,16 @@ currentPlasmaTheme()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Config::Config( QObject* parent )
|
Config::Config( QObject* parent )
|
||||||
: QObject( parent )
|
: QObject( parent )
|
||||||
, m_themeModel( new ThemesModel( this ) )
|
, m_themeModel( new ThemesModel( this ) )
|
||||||
{
|
{
|
||||||
|
auto* filter = new QSortFilterProxyModel( m_themeModel );
|
||||||
|
filter->setFilterRole( ThemesModel::ShownRole );
|
||||||
|
filter->setFilterFixedString( QStringLiteral( "true" ) );
|
||||||
|
filter->setSourceModel( m_themeModel );
|
||||||
|
|
||||||
|
m_filteredModel = filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -55,7 +55,7 @@ public:
|
|||||||
|
|
||||||
/** @brief The (list) model of available themes.
|
/** @brief The (list) model of available themes.
|
||||||
*/
|
*/
|
||||||
QAbstractItemModel* themeModel() const { return m_themeModel; }
|
QAbstractItemModel* themeModel() const { return m_filteredModel; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setTheme( const QString& id );
|
void setTheme( const QString& id );
|
||||||
@ -70,6 +70,7 @@ private:
|
|||||||
QString m_preselectThemeId;
|
QString m_preselectThemeId;
|
||||||
QString m_themeId; // Id of selected theme
|
QString m_themeId; // Id of selected theme
|
||||||
|
|
||||||
|
QAbstractItemModel* m_filteredModel = nullptr;
|
||||||
ThemesModel* m_themeModel = nullptr;
|
ThemesModel* m_themeModel = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include "PlasmaLnfPage.h"
|
#include "PlasmaLnfPage.h"
|
||||||
|
|
||||||
|
#include "Config.h"
|
||||||
#include "ui_page_plasmalnf.h"
|
#include "ui_page_plasmalnf.h"
|
||||||
|
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
@ -21,30 +22,10 @@
|
|||||||
#include <KPackage/Package>
|
#include <KPackage/Package>
|
||||||
#include <KPackage/PackageLoader>
|
#include <KPackage/PackageLoader>
|
||||||
|
|
||||||
static ThemeInfoList
|
PlasmaLnfPage::PlasmaLnfPage( Config* config, QWidget* parent )
|
||||||
plasma_themes()
|
|
||||||
{
|
|
||||||
ThemeInfoList packages;
|
|
||||||
|
|
||||||
QList< KPluginMetaData > pkgs = KPackage::PackageLoader::self()->listPackages( "Plasma/LookAndFeel" );
|
|
||||||
|
|
||||||
for ( const KPluginMetaData& data : pkgs )
|
|
||||||
{
|
|
||||||
if ( data.isValid() && !data.isHidden() && !data.name().isEmpty() )
|
|
||||||
{
|
|
||||||
packages << ThemeInfo { data };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return packages;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PlasmaLnfPage::PlasmaLnfPage( QWidget* parent )
|
|
||||||
: QWidget( parent )
|
: QWidget( parent )
|
||||||
, ui( new Ui::PlasmaLnfPage )
|
, ui( new Ui::PlasmaLnfPage )
|
||||||
, m_showAll( false )
|
, m_config( config )
|
||||||
, m_buttonGroup( nullptr )
|
|
||||||
{
|
{
|
||||||
ui->setupUi( this );
|
ui->setupUi( this );
|
||||||
CALAMARES_RETRANSLATE( {
|
CALAMARES_RETRANSLATE( {
|
||||||
@ -59,128 +40,6 @@ PlasmaLnfPage::PlasmaLnfPage( QWidget* parent )
|
|||||||
"You can also skip this step and configure the look-and-feel "
|
"You can also skip this step and configure the look-and-feel "
|
||||||
"once the system is installed. Clicking on a look-and-feel "
|
"once the system is installed. Clicking on a look-and-feel "
|
||||||
"selection will give you a live preview of that look-and-feel." ) );
|
"selection will give you a live preview of that look-and-feel." ) );
|
||||||
updateThemeNames();
|
|
||||||
fillUi();
|
|
||||||
} )
|
} )
|
||||||
}
|
connect( this, &PlasmaLnfPage::plasmaThemeSelected, config, &Config::setTheme );
|
||||||
|
|
||||||
void
|
|
||||||
PlasmaLnfPage::setEnabledThemes( const ThemeInfoList& themes, bool showAll )
|
|
||||||
{
|
|
||||||
m_enabledThemes = themes;
|
|
||||||
|
|
||||||
if ( showAll )
|
|
||||||
{
|
|
||||||
auto plasmaThemes = plasma_themes();
|
|
||||||
for ( auto& installed_theme : plasmaThemes )
|
|
||||||
if ( !m_enabledThemes.findById( installed_theme.id ) )
|
|
||||||
{
|
|
||||||
m_enabledThemes.append( installed_theme );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updateThemeNames();
|
|
||||||
winnowThemes();
|
|
||||||
fillUi();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
PlasmaLnfPage::setEnabledThemesAll()
|
|
||||||
{
|
|
||||||
// Don't need to set showAll=true, because we're already passing in
|
|
||||||
// the complete list of installed themes.
|
|
||||||
setEnabledThemes( plasma_themes(), false );
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
PlasmaLnfPage::setPreselect( const QString& id )
|
|
||||||
{
|
|
||||||
m_preselect = id;
|
|
||||||
if ( !m_enabledThemes.isEmpty() )
|
|
||||||
{
|
|
||||||
fillUi();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
PlasmaLnfPage::updateThemeNames()
|
|
||||||
{
|
|
||||||
auto plasmaThemes = plasma_themes();
|
|
||||||
for ( auto& enabled_theme : m_enabledThemes )
|
|
||||||
{
|
|
||||||
ThemeInfo* t = plasmaThemes.findById( enabled_theme.id );
|
|
||||||
if ( t != nullptr )
|
|
||||||
{
|
|
||||||
enabled_theme.name = t->name;
|
|
||||||
enabled_theme.description = t->description;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
PlasmaLnfPage::winnowThemes()
|
|
||||||
{
|
|
||||||
auto plasmaThemes = plasma_themes();
|
|
||||||
bool winnowed = true;
|
|
||||||
int winnow_index = 0;
|
|
||||||
while ( winnowed )
|
|
||||||
{
|
|
||||||
winnowed = false;
|
|
||||||
winnow_index = 0;
|
|
||||||
|
|
||||||
for ( auto& enabled_theme : m_enabledThemes )
|
|
||||||
{
|
|
||||||
ThemeInfo* t = plasmaThemes.findById( enabled_theme.id );
|
|
||||||
if ( t == nullptr )
|
|
||||||
{
|
|
||||||
cDebug() << "Removing" << enabled_theme.id;
|
|
||||||
winnowed = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
++winnow_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( winnowed )
|
|
||||||
{
|
|
||||||
m_enabledThemes.removeAt( winnow_index );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
PlasmaLnfPage::fillUi()
|
|
||||||
{
|
|
||||||
if ( m_enabledThemes.isEmpty() )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !m_buttonGroup )
|
|
||||||
{
|
|
||||||
m_buttonGroup = new QButtonGroup( this );
|
|
||||||
m_buttonGroup->setExclusive( true );
|
|
||||||
}
|
|
||||||
|
|
||||||
int c = 1; // After the general explanation
|
|
||||||
for ( auto& theme : m_enabledThemes )
|
|
||||||
{
|
|
||||||
if ( !theme.widget )
|
|
||||||
{
|
|
||||||
ThemeWidget* w = new ThemeWidget( theme );
|
|
||||||
m_buttonGroup->addButton( w->button() );
|
|
||||||
ui->verticalLayout->insertWidget( c, w );
|
|
||||||
connect( w, &ThemeWidget::themeSelected, this, &PlasmaLnfPage::plasmaThemeSelected );
|
|
||||||
theme.widget = w;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
theme.widget->updateThemeName( theme );
|
|
||||||
}
|
|
||||||
if ( theme.id == m_preselect )
|
|
||||||
{
|
|
||||||
const QSignalBlocker b( theme.widget->button() );
|
|
||||||
theme.widget->button()->setChecked( true );
|
|
||||||
}
|
|
||||||
++c;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,8 @@ namespace Ui
|
|||||||
class PlasmaLnfPage;
|
class PlasmaLnfPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Config;
|
||||||
|
|
||||||
/** @brief Page for selecting a Plasma Look-and-Feel theme.
|
/** @brief Page for selecting a Plasma Look-and-Feel theme.
|
||||||
*
|
*
|
||||||
* You must call setEnabledThemes -- either overload -- once
|
* You must call setEnabledThemes -- either overload -- once
|
||||||
@ -34,38 +36,14 @@ class PlasmaLnfPage : public QWidget
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit PlasmaLnfPage( QWidget* parent = nullptr );
|
explicit PlasmaLnfPage( Config* config, QWidget* parent = nullptr );
|
||||||
|
|
||||||
/** @brief enable only the listed themes.
|
|
||||||
*
|
|
||||||
* Shows the listed @p themes with full information (e.g. screenshot).
|
|
||||||
* If @p showAll is true, then also show all installed themes
|
|
||||||
* not explicitly listed (without a screenshot).
|
|
||||||
*/
|
|
||||||
void setEnabledThemes( const ThemeInfoList& themes, bool showAll );
|
|
||||||
/** @brief enable all installed plasma themes. */
|
|
||||||
void setEnabledThemesAll();
|
|
||||||
/** @brief set which theme is to be preselected. */
|
|
||||||
void setPreselect( const QString& id );
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void plasmaThemeSelected( const QString& id );
|
void plasmaThemeSelected( const QString& id );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** @brief Intersect the list of enabled themes with the installed ones. */
|
|
||||||
void winnowThemes();
|
|
||||||
/** @brief Get the translated names for all enabled themes. */
|
|
||||||
void updateThemeNames();
|
|
||||||
/** @brief show enabled themes in the UI. */
|
|
||||||
void fillUi();
|
|
||||||
|
|
||||||
Ui::PlasmaLnfPage* ui;
|
Ui::PlasmaLnfPage* ui;
|
||||||
QString m_preselect;
|
Config* m_config;
|
||||||
bool m_showAll; // If true, don't winnow according to enabledThemes
|
|
||||||
ThemeInfoList m_enabledThemes;
|
|
||||||
|
|
||||||
QButtonGroup* m_buttonGroup;
|
|
||||||
QList< ThemeWidget* > m_widgets;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //PLASMALNFPAGE_H
|
#endif //PLASMALNFPAGE_H
|
||||||
|
@ -22,9 +22,8 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( PlasmaLnfViewStepFactory, registerPlugin< P
|
|||||||
PlasmaLnfViewStep::PlasmaLnfViewStep( QObject* parent )
|
PlasmaLnfViewStep::PlasmaLnfViewStep( QObject* parent )
|
||||||
: Calamares::ViewStep( parent )
|
: Calamares::ViewStep( parent )
|
||||||
, m_config( new Config( this ) )
|
, m_config( new Config( this ) )
|
||||||
, m_widget( new PlasmaLnfPage )
|
, m_widget( new PlasmaLnfPage( m_config ) )
|
||||||
{
|
{
|
||||||
connect( m_widget, &PlasmaLnfPage::plasmaThemeSelected, m_config, &Config::setTheme );
|
|
||||||
emit nextStatusChanged( false );
|
emit nextStatusChanged( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,37 +96,4 @@ void
|
|||||||
PlasmaLnfViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
PlasmaLnfViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
||||||
{
|
{
|
||||||
m_config->setConfigurationMap( configurationMap );
|
m_config->setConfigurationMap( configurationMap );
|
||||||
|
|
||||||
m_widget->setPreselect( m_config->preselectedTheme() );
|
|
||||||
|
|
||||||
bool showAll = CalamaresUtils::getBool( configurationMap, "showAll", false );
|
|
||||||
|
|
||||||
if ( configurationMap.contains( "themes" ) && configurationMap.value( "themes" ).type() == QVariant::List )
|
|
||||||
{
|
|
||||||
ThemeInfoList listedThemes;
|
|
||||||
auto themeList = configurationMap.value( "themes" ).toList();
|
|
||||||
// Create the ThemInfo objects for the listed themes; information
|
|
||||||
// about the themes from Plasma (e.g. human-readable name and description)
|
|
||||||
// are filled in by update_names() in PlasmaLnfPage.
|
|
||||||
for ( const auto& i : themeList )
|
|
||||||
if ( i.type() == QVariant::Map )
|
|
||||||
{
|
|
||||||
auto iv = i.toMap();
|
|
||||||
listedThemes.append( ThemeInfo( iv.value( "theme" ).toString(), iv.value( "image" ).toString() ) );
|
|
||||||
}
|
|
||||||
else if ( i.type() == QVariant::String )
|
|
||||||
{
|
|
||||||
listedThemes.append( ThemeInfo( i.toString() ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( listedThemes.length() == 1 )
|
|
||||||
{
|
|
||||||
cWarning() << "only one theme enabled in plasmalnf";
|
|
||||||
}
|
|
||||||
m_widget->setEnabledThemes( listedThemes, showAll );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_widget->setEnabledThemesAll(); // All of them
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,8 @@ ThemesModel::data( const QModelIndex& index, int role ) const
|
|||||||
return item.name;
|
return item.name;
|
||||||
case KeyRole:
|
case KeyRole:
|
||||||
return item.id;
|
return item.id;
|
||||||
|
case ShownRole:
|
||||||
|
return item.show;
|
||||||
default:
|
default:
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,8 @@ public:
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
LabelRole = Qt::DisplayRole,
|
LabelRole = Qt::DisplayRole,
|
||||||
KeyRole = Qt::UserRole
|
KeyRole = Qt::UserRole,
|
||||||
|
ShownRole
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit ThemesModel( QObject* parent );
|
explicit ThemesModel( QObject* parent );
|
||||||
|
Loading…
Reference in New Issue
Block a user