RabbitCommon v2.2.6
Loading...
Searching...
No Matches
FrmStyle.cpp
1// See: https://github.com/KangLin/Documents/blob/master/qt/theme.md
2// - Icon Naming Specification: https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
3// - Icon Theme Specification: https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html
4
5#include "FrmStyle.h"
6#include "ui_FrmStyle.h"
7#include "Style.h"
8#include "RabbitCommonDir.h"
9#include <QSettings>
10
11CFrmStyle::CFrmStyle(QWidget *parent, Qt::WindowFlags f) :
12 QWidget(parent, f),
13 ui(new Ui::CFrmStyle)
14{
15 setAttribute(Qt::WA_DeleteOnClose, true);
16 ui->setupUi(this);
17
18 ui->leStyleName->setText(RabbitCommon::CStyle::Instance()->GetStyleFile());
19
20 ui->lbIconThemeChanged->setVisible(false);
21 // Icon theme
22 QSettings set(RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
23 QSettings::IniFormat);
24 bool bIconTheme = set.value("Style/Icon/Theme/Enable", true).toBool();
25 ui->gpIconTheme->setChecked(bIconTheme);
26
27 qDebug(RabbitCommon::LoggerStyle)
28 << "Icon theme search paths:" << QIcon::themeSearchPaths() << "\n"
29 << "Icon theme name:" << QIcon::themeName() << "\n"
30 #if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
31 << "Fallback search paths:" << QIcon::fallbackSearchPaths() << "\n"
32 #endif // QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
33 #if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
34 << "Fallback theme name:" << QIcon::fallbackThemeName() << "\n"
35 #endif //QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
36 ;
37 foreach(auto d, QIcon::themeSearchPaths())
38 {
39 QDir dir(d);
40 if(!dir.exists())
41 {
42 qDebug(RabbitCommon::LoggerStyle)
43 << "Theme folder isn't exists:" << d;
44 continue;
45 }
46
47 qInfo(RabbitCommon::LoggerStyle)
48 << "Theme folder:" << dir.absolutePath();
49#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) && !defined(Q_OS_WINDOWS)
50 if(RabbitCommon::CDir::Instance()->GetDirIcons() == d) continue;
51#endif
52 foreach(auto themeName, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
53 {
54 qDebug(RabbitCommon::LoggerStyle) << "Theme path:" << dir.absolutePath()
55 << "Theme:" << themeName;
56 QFileInfo fi(dir.absolutePath() + QDir::separator()
57 + themeName + QDir::separator() + "index.theme");
58 if(fi.exists())
59 {
60 qDebug(RabbitCommon::LoggerStyle) << "Theme:" << themeName;
61 ui->cbIconTheme->addItem(themeName);
62 } else {
63 qCritical(RabbitCommon::LoggerStyle)
64 << "index.theme is not exists:" << fi.fileName()
65 << "Theme:" << themeName;
66 }
67 }
68 }
69 if(!QIcon::themeName().isEmpty())
70 ui->cbIconTheme->setCurrentText(QIcon::themeName());
71
72#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) && !defined(Q_OS_WINDOWS)
73 QDir fallbackDir(RabbitCommon::CDir::Instance()->GetDirIcons());
74 QStringList lstFallback;
75 if(fallbackDir.exists())
76 {
77 foreach(auto themeName, fallbackDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
78 {
79 qDebug(RabbitCommon::LoggerStyle) << "fallback path:" << fallbackDir.absolutePath()
80 << "Theme:" << themeName;
81 QFileInfo fi(fallbackDir.absolutePath() + QDir::separator()
82 + themeName + QDir::separator() + "index.theme");
83 if(!fi.exists())
84 continue;
85 qDebug(RabbitCommon::LoggerStyle) << "fallback Theme:" << themeName;
86 ui->cbFallbackTheme->addItem(themeName);
87 }
88 }
89
90 if(!QIcon::fallbackThemeName().isEmpty())
91 {
92 ui->cbFallbackTheme->setCurrentText(QIcon::fallbackThemeName());
93 }
94 ui->gbFallbackTheme->setVisible(true);
95#else
96 ui->gbFallbackTheme->setVisible(false);
97#endif
98
99}
100
101CFrmStyle::~CFrmStyle()
102{
103 qDebug(RabbitCommon::LoggerStyle) << "CFrmStyle::~CFrmStyle()";
104 delete ui;
105}
106
107void CFrmStyle::on_pbOK_clicked()
108{
109 QSettings set(RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
110 QSettings::IniFormat);
111
112 bool bIconTheme = ui->gpIconTheme->isChecked();
113 set.setValue("Style/Icon/Theme/Enable", bIconTheme);
114 if(bIconTheme) {
115 if(!ui->cbIconTheme->currentText().isEmpty())
116 QIcon::setThemeName(ui->cbIconTheme->currentText());
117 set.setValue("Style/Icon/Theme", QIcon::themeName());
118
119#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
120 if(!ui->cbFallbackTheme->currentText().isEmpty())
121 QIcon::setFallbackThemeName(ui->cbFallbackTheme->currentText());
122 set.setValue("Style/Icon/Theme/Fallback", QIcon::fallbackThemeName());
123#endif
124 }
125
126 RabbitCommon::CStyle::Instance()->SetFile(ui->leStyleName->text());
127 close();
128}
129
130void CFrmStyle::on_pbCancel_clicked()
131{
132 close();
133}
134
135void CFrmStyle::on_pbBrowse_clicked()
136{
137 ui->leStyleName->setText(RabbitCommon::CStyle::Instance()->GetStyle());
138}
139
140void CFrmStyle::on_pbDefault_clicked()
141{
142 ui->leStyleName->setText(RabbitCommon::CStyle::Instance()->GetDefaultStyle());
143
144 if(ui->gpIconTheme->isChecked()) {
145 ui->cbIconTheme->setCurrentText(RabbitCommon::CStyle::Instance()->m_szDefaultIconTheme);
146 ui->cbFallbackTheme->setCurrentText(RabbitCommon::CStyle::Instance()->m_szDefaultFallbackIconTheme);
147 }
148}
149
150void CFrmStyle::on_gpIconTheme_clicked()
151{
152 ui->lbIconThemeChanged->setVisible(true);
153}
Set style and icon theme form.
Definition FrmStyle.h:87