Browse Source

Selecting the desired stylesheet now works correctly, including saving settings between application launches.

QGC4.4
Bryant 12 years ago
parent
commit
005ab6ee94
  1. 25
      src/ui/MainWindow.cc
  2. 15
      src/ui/MainWindow.h
  3. 82
      src/ui/QGCSettingsWidget.cc
  4. 5
      src/ui/QGCSettingsWidget.h
  5. 9
      src/ui/QGCSettingsWidget.ui

25
src/ui/MainWindow.cc

@ -103,7 +103,8 @@ MainWindow::MainWindow(QWidget *parent):
aboutToCloseFlag(false), aboutToCloseFlag(false),
changingViewsFlag(false), changingViewsFlag(false),
centerStackActionGroup(new QActionGroup(this)), centerStackActionGroup(new QActionGroup(this)),
styleFileName(QCoreApplication::applicationDirPath() + "/style-indoor.css"), darkStyleFileName(defaultDarkStyle),
lightStyleFileName(defaultLightStyle),
autoReconnect(false), autoReconnect(false),
lowPowerMode(false) lowPowerMode(false)
{ {
@ -114,7 +115,14 @@ MainWindow::MainWindow(QWidget *parent):
loadSettings(); loadSettings();
emit initStatusChanged("Loading Style."); 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")) if (settings.contains("ADVANCED_MODE"))
{ {
@ -1095,6 +1103,8 @@ void MainWindow::loadSettings()
settings.beginGroup("QGC_MAINWINDOW"); settings.beginGroup("QGC_MAINWINDOW");
autoReconnect = settings.value("AUTO_RECONNECT", autoReconnect).toBool(); autoReconnect = settings.value("AUTO_RECONNECT", autoReconnect).toBool();
currentStyle = (QGC_MAINWINDOW_STYLE)settings.value("CURRENT_STYLE", currentStyle).toInt(); 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(); lowPowerMode = settings.value("LOW_POWER_MODE", lowPowerMode).toBool();
dockWidgetTitleBarEnabled = settings.value("DOCK_WIDGET_TITLEBARS",dockWidgetTitleBarEnabled).toBool(); dockWidgetTitleBarEnabled = settings.value("DOCK_WIDGET_TITLEBARS",dockWidgetTitleBarEnabled).toBool();
settings.endGroup(); settings.endGroup();
@ -1107,6 +1117,8 @@ void MainWindow::storeSettings()
settings.beginGroup("QGC_MAINWINDOW"); settings.beginGroup("QGC_MAINWINDOW");
settings.setValue("AUTO_RECONNECT", autoReconnect); settings.setValue("AUTO_RECONNECT", autoReconnect);
settings.setValue("CURRENT_STYLE", currentStyle); settings.setValue("CURRENT_STYLE", currentStyle);
settings.setValue("DARK_STYLE_FILENAME", darkStyleFileName);
settings.setValue("LIGHT_STYLE_FILENAME", lightStyleFileName);
settings.endGroup(); settings.endGroup();
if (!aboutToCloseFlag && isVisible()) if (!aboutToCloseFlag && isVisible())
{ {
@ -1241,6 +1253,15 @@ bool MainWindow::loadStyle(QGC_MAINWINDOW_STYLE style, QString cssFile)
style.replace("ICONDIR", QCoreApplication::applicationDirPath() + "files/styles/"); style.replace("ICONDIR", QCoreApplication::applicationDirPath() + "files/styles/");
qApp->setStyleSheet(style); qApp->setStyleSheet(style);
if (currentStyle == QGC_MAINWINDOW_STYLE_LIGHT)
{
lightStyleFileName = cssFile;
}
else
{
darkStyleFileName = cssFile;
}
// And restore the cursor before returning. // And restore the cursor before returning.
qApp->restoreOverrideCursor(); qApp->restoreOverrideCursor();
return true; return true;

15
src/ui/MainWindow.h

@ -116,10 +116,16 @@ public:
return currentStyle; return currentStyle;
} }
/** @brief Get current visual style */ /** @brief Get current light visual style */
QString getStyleSheet() QString getLightStyleSheet()
{
return lightStyleFileName;
}
/** @brief Get current dark visual style */
QString getDarkStyleSheet()
{ {
return styleFileName; return darkStyleFileName;
} }
/** @brief Get auto link reconnect setting */ /** @brief Get auto link reconnect setting */
bool autoReconnectEnabled() bool autoReconnectEnabled()
@ -433,7 +439,8 @@ protected:
LogCompressor* comp; LogCompressor* comp;
QString screenFileName; QString screenFileName;
QTimer* videoTimer; QTimer* videoTimer;
QString styleFileName; QString darkStyleFileName;
QString lightStyleFileName;
bool autoReconnect; bool autoReconnect;
Qt::WindowStates windowStateVal; Qt::WindowStates windowStateVal;
bool lowPowerMode; ///< If enabled, QGC reduces the update rates of all widgets bool lowPowerMode; ///< If enabled, QGC reduces the update rates of all widgets

82
src/ui/QGCSettingsWidget.cc

@ -13,7 +13,8 @@
QGCSettingsWidget::QGCSettingsWidget(QWidget *parent, Qt::WindowFlags flags) : QGCSettingsWidget::QGCSettingsWidget(QWidget *parent, Qt::WindowFlags flags) :
QDialog(parent, flags), QDialog(parent, flags),
ui(new Ui::QGCSettingsWidget) ui(new Ui::QGCSettingsWidget),
mainWindow((MainWindow*)parent)
{ {
ui->setupUi(this); 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))); connect(GAudioOutput::instance(), SIGNAL(mutedChanged(bool)), ui->audioMuteCheckBox, SLOT(setChecked(bool)));
// Reconnect // Reconnect
ui->reconnectCheckBox->setChecked(MainWindow::instance()->autoReconnectEnabled()); ui->reconnectCheckBox->setChecked(mainWindow->autoReconnectEnabled());
connect(ui->reconnectCheckBox, SIGNAL(clicked(bool)), MainWindow::instance(), SLOT(enableAutoReconnect(bool))); connect(ui->reconnectCheckBox, SIGNAL(clicked(bool)), mainWindow, SLOT(enableAutoReconnect(bool)));
// Low power mode // Low power mode
ui->lowPowerCheckBox->setChecked(MainWindow::instance()->lowPowerModeEnabled()); ui->lowPowerCheckBox->setChecked(mainWindow->lowPowerModeEnabled());
connect(ui->lowPowerCheckBox, SIGNAL(clicked(bool)), MainWindow::instance(), SLOT(enableLowPowerMode(bool))); connect(ui->lowPowerCheckBox, SIGNAL(clicked(bool)), mainWindow, SLOT(enableLowPowerMode(bool)));
//Dock widget title bars //Dock widget title bars
ui->titleBarCheckBox->setChecked(MainWindow::instance()->dockWidgetTitleBarsEnabled()); ui->titleBarCheckBox->setChecked(mainWindow->dockWidgetTitleBarsEnabled());
connect(ui->titleBarCheckBox,SIGNAL(clicked(bool)),MainWindow::instance(),SLOT(enableDockWidgetTitleBars(bool))); connect(ui->titleBarCheckBox,SIGNAL(clicked(bool)),mainWindow,SLOT(enableDockWidgetTitleBars(bool)));
// Style // Intialize the style UI to the proper values obtained from the MainWindow.
MainWindow::QGC_MAINWINDOW_STYLE style = MainWindow::instance()->getStyle(); MainWindow::QGC_MAINWINDOW_STYLE style = mainWindow->getStyle();
ui->styleChooser->setCurrentIndex(style); 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->styleChooser, SIGNAL(currentIndexChanged(int)), this, SLOT(styleChanged(int)));
connect(ui->styleCustomButton, SIGNAL(clicked()), this, SLOT(selectStylesheet())); connect(ui->styleCustomButton, SIGNAL(clicked()), this, SLOT(selectStylesheet()));
connect(ui->styleDefaultButton, SIGNAL(clicked()), this, SLOT(setDefaultStyle())); connect(ui->styleDefaultButton, SIGNAL(clicked()), this, SLOT(setDefaultStyle()));
connect(ui->styleSheetFile, SIGNAL(editingFinished()), this, SLOT(lineEditFinished()));
// Close / destroy // Close / destroy
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(deleteLater())); connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(deleteLater()));
@ -100,17 +112,7 @@ void QGCSettingsWidget::selectStylesheet()
// And update the UI as needed. // And update the UI as needed.
else else
{ {
switch (ui->styleChooser->currentIndex()) ui->styleSheetFile->setText(newStyleFileName);
{
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);
}
} }
} }
@ -119,27 +121,41 @@ bool QGCSettingsWidget::updateStyle(QString style)
switch (ui->styleChooser->currentIndex()) switch (ui->styleChooser->currentIndex())
{ {
case 0: case 0:
darkStyleSheet = style; return mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_DARK, style);
return MainWindow::instance()->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_DARK, darkStyleSheet);
case 1: case 1:
lightStyleSheet = style; return mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_LIGHT, style);
return MainWindow::instance()->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_LIGHT, lightStyleSheet);
default: default:
return false; 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) void QGCSettingsWidget::styleChanged(int index)
{ {
if (index == 1) if (index == 1)
{ {
ui->styleSheetFile->setText(lightStyleSheet); ui->styleSheetFile->setText(mainWindow->getLightStyleSheet());
updateStyle(lightStyleSheet); mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_LIGHT, mainWindow->getLightStyleSheet());
} }
else else
{ {
ui->styleSheetFile->setText(darkStyleSheet); ui->styleSheetFile->setText(mainWindow->getDarkStyleSheet());
updateStyle(darkStyleSheet); mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_DARK, mainWindow->getDarkStyleSheet());
} }
} }
@ -147,14 +163,12 @@ void QGCSettingsWidget::setDefaultStyle()
{ {
if (ui->styleChooser->currentIndex() == 1) if (ui->styleChooser->currentIndex() == 1)
{ {
lightStyleSheet = MainWindow::defaultLightStyle; ui->styleSheetFile->setText(MainWindow::defaultLightStyle);
ui->styleSheetFile->setText(lightStyleSheet); mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_LIGHT, MainWindow::defaultLightStyle);
updateStyle(lightStyleSheet);
} }
else else
{ {
darkStyleSheet = MainWindow::defaultDarkStyle; ui->styleSheetFile->setText(MainWindow::defaultDarkStyle);
ui->styleSheetFile->setText(darkStyleSheet); mainWindow->loadStyle(MainWindow::QGC_MAINWINDOW_STYLE_DARK, MainWindow::defaultDarkStyle);
updateStyle(darkStyleSheet);
} }
} }

5
src/ui/QGCSettingsWidget.h

@ -2,6 +2,7 @@
#define QGCSETTINGSWIDGET_H #define QGCSETTINGSWIDGET_H
#include <QDialog> #include <QDialog>
#include "MainWindow.h"
namespace Ui namespace Ui
{ {
@ -18,13 +19,13 @@ public:
public slots: public slots:
void styleChanged(int index); void styleChanged(int index);
void lineEditFinished();
void setDefaultStyle(); void setDefaultStyle();
void selectStylesheet(); void selectStylesheet();
private: private:
MainWindow* mainWindow;
Ui::QGCSettingsWidget* ui; Ui::QGCSettingsWidget* ui;
QString darkStyleSheet;
QString lightStyleSheet;
bool updateStyle(QString style); bool updateStyle(QString style);
}; };

9
src/ui/QGCSettingsWidget.ui

@ -128,6 +128,9 @@
<property name="text"> <property name="text">
<string>Custom</string> <string>Custom</string>
</property> </property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -135,6 +138,9 @@
<property name="text"> <property name="text">
<string>Default</string> <string>Default</string>
</property> </property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@ -167,6 +173,9 @@
<property name="standardButtons"> <property name="standardButtons">
<set>QDialogButtonBox::Close</set> <set>QDialogButtonBox::Close</set>
</property> </property>
<property name="centerButtons">
<bool>false</bool>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>

Loading…
Cancel
Save