File indexing completed on 2024-05-19 05:35:24
0001 /* This file is part of the KDE project 0002 SPDX-FileCopyrightText: 2016 René J.V. Bertin <rjvbertin@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "oxygenstylechooser.h" 0008 0009 #ifdef Q_OS_WIN 0010 #include <QSysInfo> 0011 #endif 0012 #include <QAction> 0013 #include <QActionGroup> 0014 #include <QApplication> 0015 #include <QDebug> 0016 #include <QIcon> 0017 #include <QString> 0018 #include <QStyle> 0019 #include <QStyleFactory> 0020 0021 #include <KConfigGroup> 0022 #include <KLocalizedString> 0023 #include <KSharedConfig> 0024 0025 WidgetStyleChooser::WidgetStyleChooser(QWidget *parent) 0026 : QPushButton(parent) 0027 , m_widgetStyle(QString()) 0028 { 0029 } 0030 0031 KActionMenu *WidgetStyleChooser::createStyleSelectionMenu(const QString &text, const QString &selectedStyleName) 0032 { 0033 QIcon icon = QIcon::fromTheme(QStringLiteral("preferences-desktop-theme")); 0034 KActionMenu *stylesAction = new KActionMenu(icon, text, this); 0035 setText(text); 0036 if (!icon.isNull()) { 0037 setIcon(icon); 0038 } 0039 stylesAction->setToolTip(i18n("Select the application widget style")); 0040 stylesAction->setStatusTip(stylesAction->toolTip()); 0041 QActionGroup *stylesGroup = new QActionGroup(stylesAction); 0042 0043 QStringList availableStyles = QStyleFactory::keys(); 0044 QString desktopStyle = QApplication::style()->objectName(); 0045 0046 m_widgetStyle = selectedStyleName; 0047 bool setStyle = false; 0048 if (m_widgetStyle.isEmpty()) { 0049 m_widgetStyle = desktopStyle; 0050 } else if (selectedStyleName.compare(desktopStyle, Qt::CaseInsensitive)) { 0051 setStyle = true; 0052 } 0053 0054 for (const QString &style : std::as_const(availableStyles)) { 0055 QAction *a = new QAction(style, stylesGroup); 0056 a->setCheckable(true); 0057 a->setData(style); 0058 if (m_widgetStyle.compare(style, Qt::CaseInsensitive) == 0) { 0059 a->setChecked(true); 0060 if (setStyle) { 0061 // selectedStyleName was not empty and the 0062 // the style exists: activate it. 0063 activateStyle(style); 0064 } 0065 } 0066 stylesAction->addAction(a); 0067 } 0068 connect(stylesGroup, &QActionGroup::triggered, this, [&](QAction *a) { 0069 activateStyle(a->data().toString()); 0070 }); 0071 0072 setMenu(stylesAction->menu()); 0073 0074 return stylesAction; 0075 } 0076 0077 QString WidgetStyleChooser::currentStyle() const 0078 { 0079 return m_widgetStyle; 0080 } 0081 0082 void WidgetStyleChooser::activateStyle(const QString &styleName) 0083 { 0084 m_widgetStyle = styleName; 0085 QApplication::setStyle(QStyleFactory::create(m_widgetStyle)); 0086 }