diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 73a8d4d0f50a0258ffc9c73cf76b9d874e7af23d..e6e0236bb5b885da8cdae988cea62d2d3efac088 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -491,7 +491,8 @@ HEADERS += \ src/QGCComboBox.h \ src/QGCTemporaryFile.h \ src/audio/QGCAudioWorker.h \ - src/QGCQuickWidget.h + src/QGCQuickWidget.h \ + src/QGCPalette.h \ SOURCES += \ src/main.cc \ @@ -631,6 +632,7 @@ SOURCES += \ src/QGCTemporaryFile.cc \ src/audio/QGCAudioWorker.cpp \ src/QGCQuickWidget.cc \ + src/QGCPalette.cc \ # # Unit Test specific configuration goes here diff --git a/src/FactSystem/FactSystem.cc b/src/FactSystem/FactSystem.cc index 8d8b8103c4ef207f7b207f07c6a29d24ffb42484..a18b6f9f26a6d7a9b55610e396f87d90ac43f956 100644 --- a/src/FactSystem/FactSystem.cc +++ b/src/FactSystem/FactSystem.cc @@ -28,6 +28,7 @@ #include "UASManager.h" #include "QGCApplication.h" #include "VehicleComponent.h" +#include "QGCPalette.h" #include @@ -41,9 +42,10 @@ FactSystem::FactSystem(QObject* parent) : qmlRegisterType(_factSystemQmlUri, 1, 0, "Fact"); qmlRegisterType(_factSystemQmlUri, 1, 0, "FactValidator"); - // FIXME: Where should this go? Also creation string + // FIXME: Where should these go? qmlRegisterUncreatableType(_factSystemQmlUri, 1, 0, "VehicleComponent", "Can only reference VehicleComponent"); qmlRegisterUncreatableType(_factSystemQmlUri, 1, 0, "VehicleComponentSummaryItem", "Can only reference VehicleComponentSummaryItem"); + qmlRegisterType(_factSystemQmlUri, 1, 0, "QGCPalette"); } FactSystem::~FactSystem() diff --git a/src/QGCPalette.cc b/src/QGCPalette.cc new file mode 100644 index 0000000000000000000000000000000000000000..edc3267d168d0551595f33a3414e1f837c45edd8 --- /dev/null +++ b/src/QGCPalette.cc @@ -0,0 +1,108 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2014 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +/// @file +/// @author Don Gagne + +#include "QGCPalette.h" + +#include +#include + +bool QGCPalette::_paletteLoaded = false; + +QColor QGCPalette::_alternateBase[QGCPalette::_cColorGroups]; +QColor QGCPalette::_base[QGCPalette::_cColorGroups]; +QColor QGCPalette::_button[QGCPalette::_cColorGroups]; +QColor QGCPalette::_buttonText[QGCPalette::_cColorGroups]; +QColor QGCPalette::_dark[QGCPalette::_cColorGroups]; +QColor QGCPalette::_highlight[QGCPalette::_cColorGroups]; +QColor QGCPalette::_highlightedText[QGCPalette::_cColorGroups]; +QColor QGCPalette::_light[QGCPalette::_cColorGroups]; +QColor QGCPalette::_mid[QGCPalette::_cColorGroups]; +QColor QGCPalette::_midlight[QGCPalette::_cColorGroups]; +QColor QGCPalette::_shadow[QGCPalette::_cColorGroups]; +QColor QGCPalette::_text[QGCPalette::_cColorGroups]; +QColor QGCPalette::_window[QGCPalette::_cColorGroups]; +QColor QGCPalette::_windowText[QGCPalette::_cColorGroups]; + +QGCPalette::QGCPalette(QObject* parent) : + QObject(parent) +{ + if (!_paletteLoaded) { + _paletteLoaded = true; + + struct Group2Group { + ColorGroup qgcColorGroup; + QPalette::ColorGroup qtColorGroup; + }; + + static struct Group2Group rgGroup2Group[] = { + { Disabled, QPalette::Disabled }, + { Active, QPalette::Active }, + { Inactive, QPalette::Inactive } + }; + static const size_t crgGroup2Group = sizeof(rgGroup2Group) / sizeof(rgGroup2Group[0]); + Q_ASSERT(crgGroup2Group == _cColorGroups); + + for (size_t i=0; iqtColorGroup); + + ColorGroup qgcColorGroup = prgGroup2Group->qgcColorGroup; + + _alternateBase[qgcColorGroup] = syspal.color(QPalette::AlternateBase); + _base[qgcColorGroup] = syspal.color(QPalette::Base); + _button[qgcColorGroup] = syspal.color(QPalette::Button); + _buttonText[qgcColorGroup] = syspal.color(QPalette::ButtonText); + _text[qgcColorGroup] = syspal.color(QPalette::Text); + + _shadow[qgcColorGroup] = syspal.shadow().color(); + _dark[qgcColorGroup] = syspal.dark().color(); + _highlight[qgcColorGroup] = syspal.highlight().color(); + _highlightedText[qgcColorGroup] = syspal.highlightedText().color(); + _light[qgcColorGroup] = syspal.light().color(); + _mid[qgcColorGroup] = syspal.mid().color(); + _midlight[qgcColorGroup] = syspal.midlight().color(); + } + } +} + +QGCPalette::~QGCPalette() +{ + +} + +void QGCPalette::setColorGroup(ColorGroup colorGroup) +{ + _colorGroup = colorGroup; + emit paletteChanged(); +} diff --git a/src/QGCPalette.h b/src/QGCPalette.h new file mode 100644 index 0000000000000000000000000000000000000000..0ab0675cb36a151d91784e98f472a096ca5e40ae --- /dev/null +++ b/src/QGCPalette.h @@ -0,0 +1,109 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2014 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +/// @file +/// @author Don Gagne + +#ifndef QGCPalette_h +#define QGCPalette_h + +#include +#include + +class QGCPalette : public QObject +{ + Q_OBJECT + + Q_ENUMS(ColorGroup) + + Q_PROPERTY(ColorGroup colorGroup READ colorGroup WRITE setColorGroup NOTIFY paletteChanged) + + Q_PROPERTY(QColor alternateBase READ alternateBase NOTIFY paletteChanged) + Q_PROPERTY(QColor base READ base NOTIFY paletteChanged) + Q_PROPERTY(QColor button READ button NOTIFY paletteChanged) + Q_PROPERTY(QColor buttonText READ buttonText NOTIFY paletteChanged) + Q_PROPERTY(QColor dark READ dark NOTIFY paletteChanged) + Q_PROPERTY(QColor highlight READ highlight NOTIFY paletteChanged) + Q_PROPERTY(QColor highlightedText READ highlightedText NOTIFY paletteChanged) + Q_PROPERTY(QColor light READ light NOTIFY paletteChanged) + Q_PROPERTY(QColor mid READ mid NOTIFY paletteChanged) + Q_PROPERTY(QColor midlight READ midlight NOTIFY paletteChanged) + Q_PROPERTY(QColor shadow READ shadow NOTIFY paletteChanged) + Q_PROPERTY(QColor text READ text NOTIFY paletteChanged) + Q_PROPERTY(QColor window READ window NOTIFY paletteChanged) + Q_PROPERTY(QColor windowText READ windowText NOTIFY paletteChanged) + +public: + enum ColorGroup { + Disabled, + Active, + Inactive + }; + + QGCPalette(QObject* parent = NULL); + ~QGCPalette(); + + ColorGroup colorGroup(void) const { return _colorGroup; } + void setColorGroup(ColorGroup colorGroup); + + QColor alternateBase(void) const { return _alternateBase[_colorGroup]; } + QColor base(void) const { return _base[_colorGroup]; } + QColor button(void) const { return _button[_colorGroup]; } + QColor buttonText(void) const { return _buttonText[_colorGroup]; } + QColor dark(void) const { return _dark[_colorGroup]; } + QColor highlight(void) const { return _highlight[_colorGroup]; } + QColor highlightedText(void) const { return _highlightedText[_colorGroup]; } + QColor light(void) const { return _light[_colorGroup]; } + QColor mid(void) const { return _mid[_colorGroup]; } + QColor midlight(void) const { return _midlight[_colorGroup]; } + QColor shadow(void) const { return _shadow[_colorGroup]; } + QColor text(void) const { return _text[_colorGroup]; } + QColor window(void) const { return _window[_colorGroup]; } + QColor windowText(void) const { return _windowText[_colorGroup]; } + +signals: + void paletteChanged(void); + +private: + ColorGroup _colorGroup; + + static bool _paletteLoaded; + + static const int _cColorGroups = 3; + static QColor _alternateBase[_cColorGroups]; + static QColor _base[_cColorGroups]; + static QColor _button[_cColorGroups]; + static QColor _buttonText[_cColorGroups]; + static QColor _dark[_cColorGroups]; + static QColor _highlight[_cColorGroups]; + static QColor _highlightedText[_cColorGroups]; + static QColor _light[_cColorGroups]; + static QColor _mid[_cColorGroups]; + static QColor _midlight[_cColorGroups]; + static QColor _shadow[_cColorGroups]; + static QColor _text[_cColorGroups]; + static QColor _window[_cColorGroups]; + static QColor _windowText[_cColorGroups]; +}; + +#endif diff --git a/src/VehicleSetup/SetupViewConnected.qml b/src/VehicleSetup/SetupViewConnected.qml index 7a33f71e6e5fbbe71264e14081326542513885ea..46226eda278bcd6ce0012ccd445f2a0a73870610 100644 --- a/src/VehicleSetup/SetupViewConnected.qml +++ b/src/VehicleSetup/SetupViewConnected.qml @@ -1,13 +1,16 @@ import QtQuick 2.2 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.2 +import QGroundControl.FactSystem 1.0 Rectangle { + QGCPalette { id: palette; colorGroup: QGCPalette.Active } + id: topLevel objectName: "topLevel" anchors.fill: parent - color: "#222" + color: palette.window signal buttonClicked(variant component); diff --git a/src/VehicleSetup/SetupViewDisconnected.qml b/src/VehicleSetup/SetupViewDisconnected.qml index 74624a55e043d71b6583e6bf165fb70878419945..f2d1926a55719c5f37677f991e0ccc206f78fdc3 100644 --- a/src/VehicleSetup/SetupViewDisconnected.qml +++ b/src/VehicleSetup/SetupViewDisconnected.qml @@ -1,10 +1,13 @@ import QtQuick 2.2 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.2 +import QGroundControl.FactSystem 1.0 Rectangle { + QGCPalette { id: palette; colorGroup: QGCPalette.Active } + anchors.fill: parent - color: "#222" + color: palette.window Item { anchors.margins: 20 @@ -16,7 +19,7 @@ Rectangle { Text { width: parent.width; height: parent.height - header.height - footer.height; anchors.top: header.bottom - color: "white" + color: palette.windowText horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: "No vehicle currently connected. Vehicle Setup is only available while vehicle is connected." }