From 005ab6ee9494bf03c491265b8f025337de743d19 Mon Sep 17 00:00:00 2001 From: Bryant Date: Mon, 20 May 2013 22:05:04 -0700 Subject: [PATCH] Selecting the desired stylesheet now works correctly, including saving settings between application launches. --- src/ui/MainWindow.cc | 25 ++++++++++++-- src/ui/MainWindow.h | 15 ++++++--- src/ui/QGCSettingsWidget.cc | 82 ++++++++++++++++++++++++++------------------- src/ui/QGCSettingsWidget.h | 5 +-- src/ui/QGCSettingsWidget.ui | 9 +++++ 5 files changed, 94 insertions(+), 42 deletions(-) diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index 6594498..a2c4fc6 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -103,7 +103,8 @@ MainWindow::MainWindow(QWidget *parent): aboutToCloseFlag(false), changingViewsFlag(false), centerStackActionGroup(new QActionGroup(this)), - styleFileName(QCoreApplication::applicationDirPath() + "/style-indoor.css"), + darkStyleFileName(defaultDarkStyle), + lightStyleFileName(defaultLightStyle), autoReconnect(false), lowPowerMode(false) { @@ -114,7 +115,14 @@ MainWindow::MainWindow(QWidget *parent): loadSettings(); emit initStatusChanged("Loading Style."); - loadStyle(currentStyle, QString()); + if (currentStyle == QGC_MAINWINDOW_STYLE_LIGHT) + { + loadStyle(currentStyle, lightStyleFileName); + } + else + { + loadStyle(currentStyle, darkStyleFileName); + } if (settings.contains("ADVANCED_MODE")) { @@ -1095,6 +1103,8 @@ void MainWindow::loadSettings() settings.beginGroup("QGC_MAINWINDOW"); autoReconnect = settings.value("AUTO_RECONNECT", autoReconnect).toBool(); currentStyle = (QGC_MAINWINDOW_STYLE)settings.value("CURRENT_STYLE", currentStyle).toInt(); + darkStyleFileName = settings.value("DARK_STYLE_FILENAME", darkStyleFileName).toString(); + lightStyleFileName = settings.value("LIGHT_STYLE_FILENAME", lightStyleFileName).toString(); lowPowerMode = settings.value("LOW_POWER_MODE", lowPowerMode).toBool(); dockWidgetTitleBarEnabled = settings.value("DOCK_WIDGET_TITLEBARS",dockWidgetTitleBarEnabled).toBool(); settings.endGroup(); @@ -1107,6 +1117,8 @@ void MainWindow::storeSettings() settings.beginGroup("QGC_MAINWINDOW"); settings.setValue("AUTO_RECONNECT", autoReconnect); settings.setValue("CURRENT_STYLE", currentStyle); + settings.setValue("DARK_STYLE_FILENAME", darkStyleFileName); + settings.setValue("LIGHT_STYLE_FILENAME", lightStyleFileName); settings.endGroup(); if (!aboutToCloseFlag && isVisible()) { @@ -1241,6 +1253,15 @@ bool MainWindow::loadStyle(QGC_MAINWINDOW_STYLE style, QString cssFile) style.replace("ICONDIR", QCoreApplication::applicationDirPath() + "files/styles/"); qApp->setStyleSheet(style); + if (currentStyle == QGC_MAINWINDOW_STYLE_LIGHT) + { + lightStyleFileName = cssFile; + } + else + { + darkStyleFileName = cssFile; + } + // And restore the cursor before returning. qApp->restoreOverrideCursor(); return true; diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index c93d0cb..61360bf 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -116,10 +116,16 @@ public: return currentStyle; } - /** @brief Get current visual style */ - QString getStyleSheet() + /** @brief Get current light visual style */ + QString getLightStyleSheet() + { + return lightStyleFileName; + } + + /** @brief Get current dark visual style */ + QString getDarkStyleSheet() { - return styleFileName; + return darkStyleFileName; } /** @brief Get auto link reconnect setting */ bool autoReconnectEnabled() @@ -433,7 +439,8 @@ protected: LogCompressor* comp; QString screenFileName; QTimer* videoTimer; - QString styleFileName; + QString darkStyleFileName; + QString lightStyleFileName; bool autoReconnect; Qt::WindowStates windowStateVal; bool lowPowerMode; ///< If enabled, QGC reduces the update rates of all widgets diff --git a/src/ui/QGCSettingsWidget.cc b/src/ui/QGCSettingsWidget.cc index bafb540..eab0fbd 100644 --- a/src/ui/QGCSettingsWidget.cc +++ b/src/ui/QGCSettingsWidget.cc @@ -13,7 +13,8 @@ QGCSettingsWidget::QGCSettingsWidget(QWidget *parent, Qt::WindowFlags flags) : QDialog(parent, flags), - ui(new Ui::QGCSettingsWidget) + ui(new Ui::QGCSettingsWidget), + mainWindow((MainWindow*)parent) { ui->setupUi(this); @@ -35,23 +36,34 @@ QGCSettingsWidget::QGCSettingsWidget(QWidget *parent, Qt::WindowFlags flags) : connect(GAudioOutput::instance(), SIGNAL(mutedChanged(bool)), ui->audioMuteCheckBox, SLOT(setChecked(bool))); // Reconnect - ui->reconnectCheckBox->setChecked(MainWindow::instance()->autoReconnectEnabled()); - connect(ui->reconnectCheckBox, SIGNAL(clicked(bool)), MainWindow::instance(), SLOT(enableAutoReconnect(bool))); + ui->reconnectCheckBox->setChecked(mainWindow->autoReconnectEnabled()); + connect(ui->reconnectCheckBox, SIGNAL(clicked(bool)), mainWindow, SLOT(enableAutoReconnect(bool))); // Low power mode - ui->lowPowerCheckBox->setChecked(MainWindow::instance()->lowPowerModeEnabled()); - connect(ui->lowPowerCheckBox, SIGNAL(clicked(bool)), MainWindow::instance(), SLOT(enableLowPowerMode(bool))); + ui->lowPowerCheckBox->setChecked(mainWindow->lowPowerModeEnabled()); + connect(ui->lowPowerCheckBox, SIGNAL(clicked(bool)), mainWindow, SLOT(enableLowPowerMode(bool))); //Dock widget title bars - ui->titleBarCheckBox->setChecked(MainWindow::instance()->dockWidgetTitleBarsEnabled()); - connect(ui->titleBarCheckBox,SIGNAL(clicked(bool)),MainWindow::instance(),SLOT(enableDockWidgetTitleBars(bool))); + ui->titleBarCheckBox->setChecked(mainWindow->dockWidgetTitleBarsEnabled()); + connect(ui->titleBarCheckBox,SIGNAL(clicked(bool)),mainWindow,SLOT(enableDockWidgetTitleBars(bool))); - // Style - MainWindow::QGC_MAINWINDOW_STYLE style = MainWindow::instance()->getStyle(); + // Intialize the style UI to the proper values obtained from the MainWindow. + MainWindow::QGC_MAINWINDOW_STYLE style = mainWindow->getStyle(); ui->styleChooser->setCurrentIndex(style); + if (style == MainWindow::QGC_MAINWINDOW_STYLE_DARK) + { + ui->styleSheetFile->setText(mainWindow->getDarkStyleSheet()); + } + else + { + ui->styleSheetFile->setText(mainWindow->getLightStyleSheet()); + } + + // And then connect all the signals for the UI for changing styles. connect(ui->styleChooser, SIGNAL(currentIndexChanged(int)), this, SLOT(styleChanged(int))); connect(ui->styleCustomButton, SIGNAL(clicked()), this, SLOT(selectStylesheet())); connect(ui->styleDefaultButton, SIGNAL(clicked()), this, SLOT(setDefaultStyle())); + connect(ui->styleSheetFile, SIGNAL(editingFinished()), this, SLOT(lineEditFinished())); // Close / destroy connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(deleteLater())); @@ -100,17 +112,7 @@ void QGCSettingsWidget::selectStylesheet() // And update the UI as needed. else { - switch (ui->styleChooser->currentIndex()) - { - case 0: - darkStyleSheet = newStyleFileName; - ui->styleSheetFile->setText(darkStyleSheet); - MainWindow::instance()->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_DARK, darkStyleSheet); - case 1: - lightStyleSheet = newStyleFileName; - ui->styleSheetFile->setText(lightStyleSheet); - MainWindow::instance()->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_LIGHT, lightStyleSheet); - } + ui->styleSheetFile->setText(newStyleFileName); } } @@ -119,27 +121,41 @@ bool QGCSettingsWidget::updateStyle(QString style) switch (ui->styleChooser->currentIndex()) { case 0: - darkStyleSheet = style; - return MainWindow::instance()->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_DARK, darkStyleSheet); + return mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_DARK, style); case 1: - lightStyleSheet = style; - return MainWindow::instance()->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_LIGHT, lightStyleSheet); + return mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_LIGHT, style); default: return false; } } +void QGCSettingsWidget::lineEditFinished() +{ + QString newStyleFileName(ui->styleSheetFile->text()); + QFile newStyleFile(newStyleFileName); + if (!newStyleFile.exists() || !updateStyle(newStyleFileName)) + { + QMessageBox msgBox; + msgBox.setIcon(QMessageBox::Information); + msgBox.setText(tr("QGroundControl did not load a new style")); + msgBox.setInformativeText(tr("Stylesheet file %1 was not readable").arg(newStyleFileName)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setDefaultButton(QMessageBox::Ok); + msgBox.exec(); + } +} + void QGCSettingsWidget::styleChanged(int index) { if (index == 1) { - ui->styleSheetFile->setText(lightStyleSheet); - updateStyle(lightStyleSheet); + ui->styleSheetFile->setText(mainWindow->getLightStyleSheet()); + mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_LIGHT, mainWindow->getLightStyleSheet()); } else { - ui->styleSheetFile->setText(darkStyleSheet); - updateStyle(darkStyleSheet); + ui->styleSheetFile->setText(mainWindow->getDarkStyleSheet()); + mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_DARK, mainWindow->getDarkStyleSheet()); } } @@ -147,14 +163,12 @@ void QGCSettingsWidget::setDefaultStyle() { if (ui->styleChooser->currentIndex() == 1) { - lightStyleSheet = MainWindow::defaultLightStyle; - ui->styleSheetFile->setText(lightStyleSheet); - updateStyle(lightStyleSheet); + ui->styleSheetFile->setText(MainWindow::defaultLightStyle); + mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_LIGHT, MainWindow::defaultLightStyle); } else { - darkStyleSheet = MainWindow::defaultDarkStyle; - ui->styleSheetFile->setText(darkStyleSheet); - updateStyle(darkStyleSheet); + ui->styleSheetFile->setText(MainWindow::defaultDarkStyle); + mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_DARK, MainWindow::defaultDarkStyle); } } diff --git a/src/ui/QGCSettingsWidget.h b/src/ui/QGCSettingsWidget.h index 9145299..87b81f0 100644 --- a/src/ui/QGCSettingsWidget.h +++ b/src/ui/QGCSettingsWidget.h @@ -2,6 +2,7 @@ #define QGCSETTINGSWIDGET_H #include +#include "MainWindow.h" namespace Ui { @@ -18,13 +19,13 @@ public: public slots: void styleChanged(int index); + void lineEditFinished(); void setDefaultStyle(); void selectStylesheet(); private: + MainWindow* mainWindow; Ui::QGCSettingsWidget* ui; - QString darkStyleSheet; - QString lightStyleSheet; bool updateStyle(QString style); }; diff --git a/src/ui/QGCSettingsWidget.ui b/src/ui/QGCSettingsWidget.ui index 4cd210a..746b37f 100644 --- a/src/ui/QGCSettingsWidget.ui +++ b/src/ui/QGCSettingsWidget.ui @@ -128,6 +128,9 @@ Custom + + false + @@ -135,6 +138,9 @@ Default + + false + @@ -167,6 +173,9 @@ QDialogButtonBox::Close + + false +