From 96434928feaab906417c33bea1aebc89ca437110 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 1 Apr 2015 14:47:42 +0200 Subject: [PATCH] refs #400, GUI after Qt 5.4.1 migration * ini file to complement style sheets (values changed in code) * aircrafts -> aircraft * some .h code to .cpp --- src/blackgui/blackgui.pro | 2 +- src/blackgui/components/aircraftcomponent.ui | 10 +-- src/blackgui/components/audiocomponent.ui | 11 ++- .../components/audiosetupcomponent.ui | 7 +- src/blackgui/components/logcomponent.ui | 11 ++- .../components/maininfoareacomponent.ui | 2 +- .../components/textmessagecomponent.ui | 65 ++++++++------- src/blackgui/dockwidget.cpp | 22 ++++- src/blackgui/dockwidget.h | 8 +- src/blackgui/dockwidgetinfoarea.cpp | 8 +- src/blackgui/infoarea.cpp | 28 ++++++- src/blackgui/infoarea.h | 3 + src/blackgui/qss/_buildingblocks.qss | 12 --- src/blackgui/qss/gui.ini | 11 +++ src/blackgui/qss/mainwindow.qss | 27 +++--- src/blackgui/stylesheetutility.cpp | 82 ++++++++++++++++++- src/blackgui/stylesheetutility.h | 74 +++++------------ 17 files changed, 245 insertions(+), 138 deletions(-) delete mode 100644 src/blackgui/qss/_buildingblocks.qss create mode 100644 src/blackgui/qss/gui.ini diff --git a/src/blackgui/blackgui.pro b/src/blackgui/blackgui.pro index 7843ed26d..bbe3ac7fb 100644 --- a/src/blackgui/blackgui.pro +++ b/src/blackgui/blackgui.pro @@ -45,7 +45,7 @@ win32 { RESOURCES += DESTDIR = ../../lib -OTHER_FILES += ./qss/*.qss ./qss/*.css +OTHER_FILES += ./qss/*.qss ./qss/*.css ./qss/*.ini win32:isEmpty(MINGW_IN_SHELL): COPY = xcopy /yi else: COPY = cp -r diff --git a/src/blackgui/components/aircraftcomponent.ui b/src/blackgui/components/aircraftcomponent.ui index 8070e5cc4..de2b98515 100644 --- a/src/blackgui/components/aircraftcomponent.ui +++ b/src/blackgui/components/aircraftcomponent.ui @@ -94,16 +94,16 @@ - - BlackGui::Views::CAirportView - QTableView -
blackgui/views/airportview.h
-
BlackGui::Views::CSimulatedAircraftView QTableView
blackgui/views/simulatedaircraftview.h
+ + BlackGui::Views::CAirportView + QTableView +
blackgui/views/airportview.h
+
diff --git a/src/blackgui/components/audiocomponent.ui b/src/blackgui/components/audiocomponent.ui index 367daf470..b6cc2aa56 100644 --- a/src/blackgui/components/audiocomponent.ui +++ b/src/blackgui/components/audiocomponent.ui @@ -14,10 +14,13 @@ Audio - QFrame::StyledPanel + QFrame::NoFrame - QFrame::Raised + QFrame::Plain + + + 0 @@ -51,8 +54,8 @@ 0 0 - 396 - 296 + 398 + 298 diff --git a/src/blackgui/components/audiosetupcomponent.ui b/src/blackgui/components/audiosetupcomponent.ui index 318bed65d..bb89231c6 100644 --- a/src/blackgui/components/audiosetupcomponent.ui +++ b/src/blackgui/components/audiosetupcomponent.ui @@ -14,10 +14,13 @@ Frame - QFrame::StyledPanel + QFrame::NoFrame - QFrame::Raised + QFrame::Plain + + + 0 diff --git a/src/blackgui/components/logcomponent.ui b/src/blackgui/components/logcomponent.ui index 562058a54..0717411fb 100644 --- a/src/blackgui/components/logcomponent.ui +++ b/src/blackgui/components/logcomponent.ui @@ -20,10 +20,13 @@ Frame - QFrame::StyledPanel + QFrame::NoFrame - QFrame::Raised + QFrame::Plain + + + 0 @@ -46,7 +49,7 @@ 0 - + Log @@ -81,7 +84,7 @@ - + Console diff --git a/src/blackgui/components/maininfoareacomponent.ui b/src/blackgui/components/maininfoareacomponent.ui index 13262acaa..ac98c6f12 100644 --- a/src/blackgui/components/maininfoareacomponent.ui +++ b/src/blackgui/components/maininfoareacomponent.ui @@ -92,7 +92,7 @@ Qt::TopDockWidgetArea - Aircrafts + Aircraft 4 diff --git a/src/blackgui/components/textmessagecomponent.ui b/src/blackgui/components/textmessagecomponent.ui index b8c20f02a..868f626b8 100644 --- a/src/blackgui/components/textmessagecomponent.ui +++ b/src/blackgui/components/textmessagecomponent.ui @@ -11,32 +11,41 @@ - Frame + Text messages - QFrame::StyledPanel + QFrame::NoFrame - QFrame::Raised + QFrame::Plain + + + 0 - 2 + 1 - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 + + + 0 + 0 + + 0 @@ -46,19 +55,19 @@ - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 @@ -111,19 +120,19 @@ - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 @@ -146,19 +155,19 @@ - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 @@ -184,19 +193,19 @@ - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 diff --git a/src/blackgui/dockwidget.cpp b/src/blackgui/dockwidget.cpp index 3fc686e4d..29eaaa006 100644 --- a/src/blackgui/dockwidget.cpp +++ b/src/blackgui/dockwidget.cpp @@ -47,7 +47,7 @@ namespace BlackGui void CDockWidget::setEmptyTitleBar() { if (!this->m_titleBarWidgetOriginal) { this->initTitleBarWidgets(); } - if (this->titleBarWidget() == this->m_titleBarWidgetEmpty) return; // on purpose, as I do not know what happens when I call setTitleBar + if (this->titleBarWidget() == this->m_titleBarWidgetEmpty) { return; } // on purpose, as I do not know what happens when I call setTitleBar this->setTitleBarWidget(this->m_titleBarWidgetEmpty); } @@ -56,6 +56,26 @@ namespace BlackGui this->setTitleBarWidget(nullptr); } + void CDockWidget::setMarginsWhenFloating(const QMargins &margins) + { + this->m_marginsWhenFloating = margins; + } + + void CDockWidget::setMarginsWhenFloating(int left, int top, int right, int bottom) + { + this->m_marginsWhenFloating = QMargins(left, top, right, bottom); + } + + void CDockWidget::setMarginsWhenDocked(const QMargins &margins) + { + this->m_marginsWhenDocked = margins; + } + + void CDockWidget::setMarginsWhenDocked(int left, int top, int right, int bottom) + { + this->m_marginsWhenDocked = QMargins(left, top, right, bottom); + } + void CDockWidget::setWindowTitle(const QString &title) { this->m_windowTitleBackup = title; diff --git a/src/blackgui/dockwidget.h b/src/blackgui/dockwidget.h index 8755c6af7..8321fb5e2 100644 --- a/src/blackgui/dockwidget.h +++ b/src/blackgui/dockwidget.h @@ -49,16 +49,16 @@ namespace BlackGui void setNullTitleBar(); //! Margins when window is floating - void setMarginsWhenFloating(const QMargins &margins) { this->m_marginsWhenFloating = margins; } + void setMarginsWhenFloating(const QMargins &margins); //! Margins when window is floating - void setMarginsWhenFloating(int left, int top, int right, int bottom) { this->m_marginsWhenFloating = QMargins(left, top, right, bottom); } + void setMarginsWhenFloating(int left, int top, int right, int bottom); //! Margins when widget is floating - void setMarginsWhenDocked(const QMargins &margins) { this->m_marginsWhenDocked = margins; } + void setMarginsWhenDocked(const QMargins &margins); //! Margins when widget is floating - void setMarginsWhenDocked(int left, int top, int right, int bottom) { this->m_marginsWhenDocked = QMargins(left, top, right, bottom); } + void setMarginsWhenDocked(int left, int top, int right, int bottom); //! Window title backup const QString &windowTitleBackup() const { return this->m_windowTitleBackup; } diff --git a/src/blackgui/dockwidgetinfoarea.cpp b/src/blackgui/dockwidgetinfoarea.cpp index 4b8a2898a..64befc8e0 100644 --- a/src/blackgui/dockwidgetinfoarea.cpp +++ b/src/blackgui/dockwidgetinfoarea.cpp @@ -38,7 +38,7 @@ namespace BlackGui bool CDockWidgetInfoArea::isSelectedDockWidget() const { const CInfoArea *ia = getParentInfoArea(); - if (!ia) return false; + if (!ia) { return false; } return ia->isSelectedDockWidgetInfoArea(this); } @@ -46,12 +46,12 @@ namespace BlackGui { // if the widget is invisible we are done // but if it is visible, there is no guarantee it can be seen by the user - if (!this->isVisible()) return false; + if (!this->isVisible()) { return false; } // further checks if (this->isFloating()) { - if (this->isMinimized()) return false; + if (this->isMinimized()) { return false; } return true; } else @@ -125,7 +125,7 @@ namespace BlackGui foreach(CDockWidgetInfoArea * ia, nestedInfoAreas) { QList nestedInfoAreaComponents = ia->findEmbeddedDockWidgetInfoAreaComponents(); - if (nestedInfoAreaComponents.isEmpty()) continue; + if (nestedInfoAreaComponents.isEmpty()) { continue; } foreach(CEnableForDockWidgetInfoArea * iac, nestedInfoAreaComponents) { bool r = widgetsWithDockWidgetInfoAreaComponent.removeOne(iac); diff --git a/src/blackgui/infoarea.cpp b/src/blackgui/infoarea.cpp index d7f8592ae..fb9429061 100644 --- a/src/blackgui/infoarea.cpp +++ b/src/blackgui/infoarea.cpp @@ -46,8 +46,7 @@ namespace BlackGui } this->ps_setDockArea(Qt::TopDockWidgetArea); - this->setMarginsWhenFloating(5, 5, 5, 5); // left, top, right bottom - this->setMarginsWhenDocked(1, 1, 1, 1); // top has no effect + this->iniFileBasedSettings(); this->connectAllWidgets(); this->setFeaturesForDockableWidgets(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable); this->tabifyAllWidgets(); @@ -533,6 +532,30 @@ namespace BlackGui return infoAreas; } + void CInfoArea::iniFileBasedSettings() + { + const QSettings *settings = CStyleSheetUtility::instance().iniFile(); + if (settings) + { + this->setMarginsWhenDocked( + settings->value("infoarea/margindocked.left").toInt(), + settings->value("infoarea/margindocked.top").toInt(), + settings->value("infoarea/margindocked.right").toInt(), + settings->value("infoarea/margindocked.bottom").toInt()); + this->setMarginsWhenFloating( + settings->value("infoarea/marginfloating.left").toInt(), + settings->value("infoarea/marginfloating.top").toInt(), + settings->value("infoarea/marginfloating.right").toInt(), + settings->value("infoarea/marginfloating.bottom").toInt()); + } + else + { + // some defaut if not available + this->setMarginsWhenFloating(10, 10, 20, 20); // left, top, right, bottom + this->setMarginsWhenDocked(1, 1, 1, 1); // top has no effect + } + } + void CInfoArea::ps_emitInfoAreaStatus() { int sia = this->getSelectedDockInfoAreaIndex(); @@ -664,6 +687,7 @@ namespace BlackGui void CInfoArea::ps_onStyleSheetChanged() { + this->iniFileBasedSettings(); if (this->m_tabBar) { QString qss = CStyleSheetUtility::instance().style(CStyleSheetUtility::fileNameDockWidgetTab()); diff --git a/src/blackgui/infoarea.h b/src/blackgui/infoarea.h index b38b56b85..9ba8e3931 100644 --- a/src/blackgui/infoarea.h +++ b/src/blackgui/infoarea.h @@ -192,6 +192,9 @@ namespace BlackGui //! \remarks result stored in m_dockableWidgets QList findOwnDockWidgetInfoAreas() const; + //! Settings based on ini file + void iniFileBasedSettings(); + private slots: //! Tab bar has been double clicked void ps_tabBarDoubleClicked(int tabBarIndex); diff --git a/src/blackgui/qss/_buildingblocks.qss b/src/blackgui/qss/_buildingblocks.qss deleted file mode 100644 index 52c0cc92c..000000000 --- a/src/blackgui/qss/_buildingblocks.qss +++ /dev/null @@ -1,12 +0,0 @@ -Useful blocks, currently not used but saved for future - -/** required when dock widget is floating **/ -/** background-image not working on QDockWidget, so I use direct children **/ -#sw_MainMiddle QDockWidget { - background-color: black; -} - -#sw_MainMiddle QDockWidget > QWidget { - background-color: black; - background-image: url(:/textures/icons/textures/texture-inner.jpg); -} diff --git a/src/blackgui/qss/gui.ini b/src/blackgui/qss/gui.ini new file mode 100644 index 000000000..789928750 --- /dev/null +++ b/src/blackgui/qss/gui.ini @@ -0,0 +1,11 @@ +[infoarea] +; margins as used in infoarea.cpp +margindocked.left = 1 +margindocked.right = 1 +margindocked.top = 1 +margindocked.bottom = 1 + +marginfloating.left = 5 +marginfloating.right = 20 +marginfloating.top = 5 +marginfloating.bottom = 20 diff --git a/src/blackgui/qss/mainwindow.qss b/src/blackgui/qss/mainwindow.qss index 654159276..e4a00b40f 100644 --- a/src/blackgui/qss/mainwindow.qss +++ b/src/blackgui/qss/mainwindow.qss @@ -4,8 +4,8 @@ http://qt-project.org/doc/qt-5.3/stylesheet-examples.html http://web.forret.com/tools/color.asp?RGB=2F4F4F&name=Dark+slate+gray Remarks: -there is no opacity with background image, so we need semitransparent images -use -- instead of :: for namespaces +1) there is no opacity with background image, so we need semitransparent images +2) use -- instead of :: for namespaces Used dynamic properties frameless (infobar.qss , here) @@ -21,20 +21,27 @@ QMainWindow { /** background-image not working on QDockWidget, so I use direct children **/ #sw_MainMiddle BlackGui--CDockWidgetInfoArea { background-color: black; - background-image: url(:/textures/icons/textures/texture-inner.jpg); } +/** this is the first widget in the dock area **/ +/** all dock widgets shall have this QWidget as container **/ #sw_MainMiddle BlackGui--CDockWidgetInfoArea > QWidget { background-color: black; background-image: url(:/textures/icons/textures/texture-inner.jpg); } +/** the following QFrame, likely the component itself +#sw_MainMiddle BlackGui--CDockWidgetInfoArea > QWidget > QFrame { + border: 0px; + padding: 0px; +} + /** fix the menu, which is overridden by the above QWidget **/ #sw_MainMiddle BlackGui--CDockWidgetInfoArea > QMenu { - border: 2px solid darkslategray; /* reserve space for selection border */ + border: 1px solid darkslategray; /* reserve space for selection border */ background: lightgray; color: black; - padding: 2px; + padding: 0px; } /** required when info area is not floating **/ @@ -46,14 +53,8 @@ BlackGui--CInfoArea { /** fix scroll areas **/ /** in flight plan **/ -QAbstractScrollArea #qw_FlightPlanTabMain { - background-color: black; - background-image: url(:/textures/icons/textures/texture-inner.jpg); -} -QAbstractScrollArea #qw_RemarksGenerator { - background-color: transparent; - background-image: url(:/textures/icons/textures/texture-inner.jpg); -} +QAbstractScrollArea #qw_FlightPlanTabMain { background-color: black; background-image: url(:/textures/icons/textures/texture-inner.jpg); } +QAbstractScrollArea #qw_RemarksGenerator { background-color: transparent; background-image: url(:/textures/icons/textures/texture-inner.jpg); } /** in log component **/ QAbstractScrollArea #pg_StatusPageMessages { background-color: black; } diff --git a/src/blackgui/stylesheetutility.cpp b/src/blackgui/stylesheetutility.cpp index 9648287bc..8ef16c59b 100644 --- a/src/blackgui/stylesheetutility.cpp +++ b/src/blackgui/stylesheetutility.cpp @@ -94,7 +94,13 @@ namespace BlackGui bool CStyleSheetUtility::read() { QDir directory(qssDirectory()); - if (!directory.exists()) return false; + if (!directory.exists()) { return false; } + + // ini file + QString iniFile = directory.absolutePath().append("/").append(fileNameIniFile()); + m_iniFile.reset(new QSettings(iniFile, QSettings::IniFormat)); + + // qss/css files directory.setNameFilters({"*.qss", "*.css"}); directory.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); @@ -130,7 +136,7 @@ namespace BlackGui QString style; foreach(QString fileName, fileNames) { - if (!this->containsStyle(fileName)) continue; + if (!this->containsStyle(fileName)) { continue; } QString s = this->m_styleSheets[fileName.toLower()].trimmed(); if (s.isEmpty()) continue; if (!style.isEmpty()) style.append("\n\n"); @@ -214,6 +220,78 @@ namespace BlackGui return n; } + CStyleSheetUtility &CStyleSheetUtility::instance() + { + static CStyleSheetUtility r; + return r; + } + + const QString &CStyleSheetUtility::fileNameFonts() + { + static const QString f("fonts.qss"); + return f; + } + + const QString &CStyleSheetUtility::fileNameMainWindow() + { + static const QString f("mainwindow.qss"); + return f; + } + + const QString &CStyleSheetUtility::fileNameInfoBar() + { + static const QString f("infobar.qss"); + return f; + } + + const QString &CStyleSheetUtility::fileNameDockWidgetTab() + { + static const QString f("dockwidgettab.qss"); + return f; + } + + const QString &CStyleSheetUtility::fileNameInfoWindow() + { + static const QString f("stylesheetinfo.qss"); + return f; + } + + const QString &CStyleSheetUtility::fileNameTextMessage() + { + static const QString f("textmessage.css"); + return f; + } + + const QString &CStyleSheetUtility::fileNameFilterDialog() + { + static const QString f("filterdialog.qss"); + return f; + } + + const QString &CStyleSheetUtility::fileNameIniFile() + { + static const QString f("gui.ini"); + return f; + } + + const QStringList &CStyleSheetUtility::fontWeights() + { + static const QStringList w( {"bold", "semibold", "light", "black", "normal"}); + return w; + } + + const QStringList &CStyleSheetUtility::fontStyles() + { + static const QStringList s( {"italic", "oblique", "normal"}); + return s; + } + + const QString &CStyleSheetUtility::transparentBackgroundColor() + { + static const QString t = "background-color: transparent;"; + return t; + } + QString CStyleSheetUtility::qssDirectory() { QString dirPath = QCoreApplication::applicationDirPath(); diff --git a/src/blackgui/stylesheetutility.h b/src/blackgui/stylesheetutility.h index 6fba5a324..a8e4fe487 100644 --- a/src/blackgui/stylesheetutility.h +++ b/src/blackgui/stylesheetutility.h @@ -17,6 +17,8 @@ #include #include #include +#include +#include namespace BlackGui { @@ -48,6 +50,9 @@ namespace BlackGui //! Current font color from style sheet QString fontColor(); + //! GUI ini file data + const QSettings *iniFile() const { return m_iniFile.data(); } + //! Get the font style static QString fontStyle(const QString &combinedStyleAndWeight); @@ -55,82 +60,40 @@ namespace BlackGui static QString fontWeight(const QString &combinedStyleAndWeight); //! Central reader - static CStyleSheetUtility &instance() - { - static CStyleSheetUtility r; - return r; - } + static CStyleSheetUtility &instance(); //! File name fonts.qss - static const QString &fileNameFonts() - { - static const QString f("fonts.qss"); - return f; - } + static const QString &fileNameFonts(); //! File name mainwindow.qss - static const QString &fileNameMainWindow() - { - static const QString f("mainwindow.qss"); - return f; - } + static const QString &fileNameMainWindow(); //! File name infobar.qss - static const QString &fileNameInfoBar() - { - static const QString f("infobar.qss"); - return f; - } + static const QString &fileNameInfoBar(); //! File name dockwidgettab.qss - static const QString &fileNameDockWidgetTab() - { - static const QString f("dockwidgettab.qss"); - return f; - } + static const QString &fileNameDockWidgetTab(); //! File name maininfoarea.qss - static const QString &fileNameInfoWindow() - { - static const QString f("stylesheetinfo.qss"); - return f; - } + static const QString &fileNameInfoWindow(); //! File name textmessage.qss - static const QString &fileNameTextMessage() - { - static const QString f("textmessage.css"); - return f; - } + static const QString &fileNameTextMessage(); //! File name maininfoarea.qss - static const QString &fileNameFilterDialog() - { - static const QString f("filterdialog.qss"); - return f; - } + static const QString &fileNameFilterDialog(); + //! File name ini file + static const QString &fileNameIniFile(); //! Font weights - static const QStringList &fontWeights() - { - static const QStringList w( {"bold", "semibold", "light", "black", "normal"}); - return w; - } + static const QStringList &fontWeights(); //! Font styles - static const QStringList &fontStyles() - { - static const QStringList s( {"italic", "oblique", "normal"}); - return s; - } + static const QStringList &fontStyles(); //! Transparent background color - static const QString &transparentBackgroundColor() - { - static const QString t = "background-color: transparent;"; - return t; - } + static const QString &transparentBackgroundColor(); //! qss directory static QString qssDirectory(); @@ -157,6 +120,7 @@ namespace BlackGui private: QMap m_styleSheets; //!< filename, stylesheet + QScopedPointer m_iniFile; //! Constructor explicit CStyleSheetUtility(QObject *parent = nullptr);