Skip to content

Commit 70e0c66

Browse files
committed
GUI: Use theme in whole program
1 parent 4986b02 commit 70e0c66

7 files changed

Lines changed: 92 additions & 24 deletions

File tree

gui/codeeditorstyle.cpp

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ CodeEditorStyle::CodeEditorStyle(
2929
const QColor& CmtFGColor, const QFont::Weight& CmtWeight,
3030
const QColor& SymbFGColor, const QColor& SymbBGColor,
3131
const QFont::Weight& SymbWeight) :
32+
mSystemTheme(false),
3233
widgetFGColor(CtrlFGColor),
3334
widgetBGColor(CtrlBGColor),
3435
highlightBGColor(HiLiBGColor),
@@ -49,6 +50,7 @@ CodeEditorStyle::CodeEditorStyle(
4950

5051
bool CodeEditorStyle::operator==(const CodeEditorStyle& rhs) const
5152
{
53+
if (mSystemTheme != rhs.mSystemTheme) return false;
5254
if (widgetFGColor != rhs.widgetFGColor) return false;
5355
if (widgetBGColor != rhs.widgetBGColor) return false;
5456
if (highlightBGColor != rhs.highlightBGColor) return false;
@@ -73,10 +75,18 @@ bool CodeEditorStyle::operator!=(const CodeEditorStyle& rhs) const
7375
return !(*this == rhs);
7476
}
7577

76-
CodeEditorStyle CodeEditorStyle::loadSettings(QSettings *settings)
78+
CodeEditorStyle CodeEditorStyle::getSystemTheme()
7779
{
7880
CodeEditorStyle theStyle(defaultStyleLight);
79-
if (!settings) return theStyle;
81+
theStyle.mSystemTheme = true;
82+
return theStyle;
83+
}
84+
85+
CodeEditorStyle CodeEditorStyle::loadSettings(QSettings *settings)
86+
{
87+
CodeEditorStyle theStyle(CodeEditorStyle::getSystemTheme());
88+
if (!settings)
89+
return theStyle;
8090

8191
if (!settings->childGroups().contains(SETTINGS_STYLE_GROUP))
8292
return theStyle;
@@ -153,10 +163,13 @@ CodeEditorStyle CodeEditorStyle::loadSettings(QSettings *settings)
153163
void CodeEditorStyle::saveSettings(QSettings *settings,
154164
const CodeEditorStyle& theStyle)
155165
{
156-
if (!settings) return;
166+
if (!settings)
167+
return;
157168

158169
if (settings->childGroups().contains(SETTINGS_STYLE_GROUP)) {
159170
settings->remove(SETTINGS_STYLE_GROUP);
171+
if (theStyle.isSystemTheme())
172+
return;
160173
}
161174

162175
settings->beginGroup(SETTINGS_STYLE_GROUP);
@@ -206,3 +219,18 @@ void CodeEditorStyle::saveSettings(QSettings *settings,
206219
}
207220
settings->endGroup();
208221
}
222+
223+
static QString rgbStyleString(QColor c)
224+
{
225+
return QString("rgb(%1,%2,%3)").arg(c.red()).arg(c.green()).arg(c.blue());
226+
}
227+
228+
QString CodeEditorStyle::generateStyleString() const
229+
{
230+
if (isSystemTheme())
231+
return QString();
232+
return QString("background:%1; color:%2; selection-background-color:%3;")
233+
.arg(rgbStyleString(widgetBGColor))
234+
.arg(rgbStyleString(widgetFGColor))
235+
.arg(rgbStyleString(highlightBGColor));
236+
}

gui/codeeditorstyle.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,18 @@ class CodeEditorStyle {
6464
bool operator==(const CodeEditorStyle& rhs) const;
6565
bool operator!=(const CodeEditorStyle& rhs) const;
6666

67+
bool isSystemTheme() const {
68+
return mSystemTheme;
69+
}
70+
71+
static CodeEditorStyle getSystemTheme();
6772
static CodeEditorStyle loadSettings(QSettings *settings);
6873
static void saveSettings(QSettings *settings, const CodeEditorStyle& theStyle);
6974

75+
QString generateStyleString() const;
76+
7077
public:
78+
bool mSystemTheme;
7179
QColor widgetFGColor;
7280
QColor widgetBGColor;
7381
QColor highlightBGColor;

gui/mainwindow.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
#include "applicationlist.h"
3535
#include "aboutdialog.h"
36+
#include "codeeditorstyle.h"
3637
#include "common.h"
3738
#include "threadhandler.h"
3839
#include "fileviewdialog.h"
@@ -154,6 +155,8 @@ MainWindow::MainWindow(TranslationHandler* th, QSettings* settings) :
154155

155156
loadSettings();
156157

158+
updateStyleSetting();
159+
157160
mThread->initialize(mUI.mResults);
158161
if (mProjectFile)
159162
formatAndSetTitle(tr("Project:") + ' ' + mProjectFile->getFilename());
@@ -398,6 +401,16 @@ void MainWindow::saveSettings() const
398401
mUI.mResults->saveSettings(mSettings);
399402
}
400403

404+
void MainWindow::updateStyleSetting()
405+
{
406+
mUI.mResults->updateStyleSetting(mSettings);
407+
QString styleSheet = CodeEditorStyle::loadSettings(mSettings).generateStyleString();
408+
mUI.mToolBarMain->setStyleSheet(styleSheet);
409+
mUI.mToolBarView->setStyleSheet(styleSheet);
410+
mUI.mToolBarFilter->setStyleSheet(styleSheet);
411+
this->setStyleSheet(styleSheet);
412+
}
413+
401414
void MainWindow::doAnalyzeProject(ImportProject p, const bool checkLibrary, const bool checkConfiguration)
402415
{
403416
clearResults();
@@ -1010,7 +1023,7 @@ void MainWindow::programSettings()
10101023
dialog.showNoErrorsMessage(),
10111024
dialog.showErrorId(),
10121025
dialog.showInconclusive());
1013-
mUI.mResults->updateStyleSetting(mSettings);
1026+
this->updateStyleSetting();
10141027
const QString newLang = mSettings->value(SETTINGS_LANGUAGE, "en").toString();
10151028
setLanguage(newLang);
10161029
}

gui/mainwindow.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,9 @@ protected slots:
227227

228228
private:
229229

230+
/** Set widget themes */
231+
void updateStyleSetting();
232+
230233
/** Get filename for last results */
231234
QString getLastResults() const;
232235

gui/resultsview.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,9 @@ void ResultsView::updateStyleSetting(QSettings *settings)
244244
{
245245
CodeEditorStyle theStyle(CodeEditorStyle::loadSettings(settings));
246246
mUI.mCode->setStyle(theStyle);
247+
QString styleString(theStyle.generateStyleString());
248+
mUI.mTree->setStyleSheet(styleString);
249+
mUI.mDetails->setStyleSheet(styleString);
247250
}
248251

249252
void ResultsView::setCheckDirectory(const QString &dir)

gui/settings.ui

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -420,26 +420,33 @@
420420
</item>
421421
</layout>
422422
</widget>
423-
<widget class="QWidget" name="mTabEditorStyle">
423+
<widget class="QWidget" name="mTabTheme">
424424
<attribute name="title">
425-
<string>Code Editor</string>
425+
<string>Theme</string>
426426
</attribute>
427427
<layout class="QVBoxLayout" name="verticalLayout_11">
428428
<item>
429429
<widget class="QGroupBox" name="gboxEditorStyle">
430430
<property name="title">
431-
<string>Code Editor Style</string>
431+
<string>Style</string>
432432
</property>
433433
<layout class="QVBoxLayout" name="verticalLayout_12">
434434
<item>
435-
<widget class="QRadioButton" name="choiceLight">
435+
<widget class="QRadioButton" name="mThemeSystem">
436+
<property name="text">
437+
<string>System Style</string>
438+
</property>
439+
</widget>
440+
</item>
441+
<item>
442+
<widget class="QRadioButton" name="mThemeLight">
436443
<property name="text">
437444
<string>Default Light Style</string>
438445
</property>
439446
</widget>
440447
</item>
441448
<item>
442-
<widget class="QRadioButton" name="choiceDark">
449+
<widget class="QRadioButton" name="mThemeDark">
443450
<property name="text">
444451
<string>Default Dark Style</string>
445452
</property>
@@ -448,14 +455,14 @@
448455
<item>
449456
<layout class="QHBoxLayout" name="hlEditCustom">
450457
<item>
451-
<widget class="QRadioButton" name="choiceCustom">
458+
<widget class="QRadioButton" name="mThemeCustom">
452459
<property name="text">
453460
<string>Custom</string>
454461
</property>
455462
</widget>
456463
</item>
457464
<item>
458-
<widget class="QPushButton" name="btnEditCustom">
465+
<widget class="QPushButton" name="mBtnEditTheme">
459466
<property name="text">
460467
<string>Edit...</string>
461468
</property>

gui/settingsdialog.cpp

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,11 @@ SettingsDialog::SettingsDialog(ApplicationList *list,
8484

8585
connect(mUI.mBtnBrowsePythonPath, &QPushButton::clicked, this, &SettingsDialog::browsePythonPath);
8686
connect(mUI.mBtnBrowseMisraFile, &QPushButton::clicked, this, &SettingsDialog::browseMisraFile);
87-
connect(mUI.btnEditCustom, SIGNAL(clicked()), this, SLOT(editCodeEditorStyle()));
88-
connect(mUI.choiceLight, SIGNAL(released()), this, SLOT(setCodeEditorStyleDefault()));
89-
connect(mUI.choiceDark, SIGNAL(released()), this, SLOT(setCodeEditorStyleDefault()));
90-
connect(mUI.choiceCustom, SIGNAL(toggled(bool)), mUI.btnEditCustom, SLOT(setEnabled(bool)));
87+
connect(mUI.mBtnEditTheme, SIGNAL(clicked()), this, SLOT(editCodeEditorStyle()));
88+
connect(mUI.mThemeSystem, SIGNAL(released()), this, SLOT(setCodeEditorStyleDefault()));
89+
connect(mUI.mThemeDark, SIGNAL(released()), this, SLOT(setCodeEditorStyleDefault()));
90+
connect(mUI.mThemeLight, SIGNAL(released()), this, SLOT(setCodeEditorStyleDefault()));
91+
connect(mUI.mThemeCustom, SIGNAL(toggled(bool)), mUI.mBtnEditTheme, SLOT(setEnabled(bool)));
9192

9293
mUI.mListWidget->setSortingEnabled(false);
9394
populateApplicationList();
@@ -185,7 +186,6 @@ void SettingsDialog::saveSettingValues() const
185186
settings.setValue(SETTINGS_LANGUAGE, langcode);
186187
}
187188
CodeEditorStyle::saveSettings(&settings, *mCurrentStyle);
188-
189189
}
190190

191191
void SettingsDialog::saveCheckboxValue(QSettings *settings, QCheckBox *box,
@@ -330,8 +330,12 @@ void SettingsDialog::browseMisraFile()
330330
// Slot to set default light style
331331
void SettingsDialog::setCodeEditorStyleDefault()
332332
{
333-
if (mUI.choiceLight->isChecked()) *mCurrentStyle = defaultStyleLight;
334-
if (mUI.choiceDark->isChecked()) *mCurrentStyle = defaultStyleDark;
333+
if (mUI.mThemeSystem->isChecked())
334+
*mCurrentStyle = CodeEditorStyle::getSystemTheme();
335+
if (mUI.mThemeLight->isChecked())
336+
*mCurrentStyle = defaultStyleLight;
337+
if (mUI.mThemeDark->isChecked())
338+
*mCurrentStyle = defaultStyleDark;
335339
manageStyleControls();
336340
}
337341

@@ -359,11 +363,13 @@ void SettingsDialog::browseClangPath()
359363

360364
void SettingsDialog::manageStyleControls()
361365
{
362-
bool isDefaultLight = *mCurrentStyle == defaultStyleLight;
363-
bool isDefaultDark = *mCurrentStyle == defaultStyleDark;
364-
mUI.choiceLight->setChecked(isDefaultLight && !isDefaultDark);
365-
mUI.choiceDark->setChecked(!isDefaultLight && isDefaultDark);
366-
mUI.choiceCustom->setChecked(!isDefaultLight && !isDefaultDark);
367-
mUI.btnEditCustom->setEnabled(!isDefaultLight && !isDefaultDark);
366+
bool isSystemTheme = mCurrentStyle->isSystemTheme();
367+
bool isDefaultLight = !isSystemTheme && *mCurrentStyle == defaultStyleLight;
368+
bool isDefaultDark = !isSystemTheme && *mCurrentStyle == defaultStyleDark;
369+
mUI.mThemeSystem->setChecked(isSystemTheme);
370+
mUI.mThemeLight->setChecked(isDefaultLight && !isDefaultDark);
371+
mUI.mThemeDark->setChecked(!isDefaultLight && isDefaultDark);
372+
mUI.mThemeCustom->setChecked(!isSystemTheme && !isDefaultLight && !isDefaultDark);
373+
mUI.mBtnEditTheme->setEnabled(!isSystemTheme && !isDefaultLight && !isDefaultDark);
368374
}
369375

0 commit comments

Comments
 (0)