QGCPalette.h 13.5 KB
Newer Older
1 2 3 4 5 6 7 8 9
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

10 11 12 13 14 15
#ifndef QGCPalette_h
#define QGCPalette_h

#include <QObject>
#include <QColor>

Don Gagne's avatar
Don Gagne committed
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
/*!
 QGCPalette is used in QML ui to expose color properties for the QGC palette. There are two
 separate palettes in QGC, light and dark. The light palette is for outdoor use and the dark
 palette is for indoor use. Each palette also has a set of different colors for enabled and
 disabled states.

 Usage:

        import QGroundControl.Palette 1.0

        Rectangle {
            anchors.fill:   parent
            color:          qgcPal.window

            QGCPalette { id: qgcPal: colorGroupEnabled: enabled }
        }
*/
33 34 35 36
class QGCPalette : public QObject
{
    Q_OBJECT
    
37
    Q_ENUMS(Theme)
38
    
39 40 41
    Q_PROPERTY(Theme globalTheme READ globalTheme WRITE setGlobalTheme NOTIFY paletteChanged)
    
    Q_PROPERTY(bool colorGroupEnabled READ colorGroupEnabled WRITE setColorGroupEnabled NOTIFY paletteChanged)
42

43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
    Q_PROPERTY(QColor window                READ window                 WRITE setWindow                 NOTIFY paletteChanged)
    Q_PROPERTY(QColor windowShade           READ windowShade            WRITE setWindowShade            NOTIFY paletteChanged)
    Q_PROPERTY(QColor windowShadeDark       READ windowShadeDark        WRITE setWindowShadeDark        NOTIFY paletteChanged)
    Q_PROPERTY(QColor text                  READ text                   WRITE setText                   NOTIFY paletteChanged)
    Q_PROPERTY(QColor warningText           READ warningText            WRITE setWarningText            NOTIFY paletteChanged)
    Q_PROPERTY(QColor button                READ button                 WRITE setButton                 NOTIFY paletteChanged)
    Q_PROPERTY(QColor buttonText            READ buttonText             WRITE setButtonText             NOTIFY paletteChanged)
    Q_PROPERTY(QColor buttonHighlight       READ buttonHighlight        WRITE setButtonHighlight        NOTIFY paletteChanged)
    Q_PROPERTY(QColor buttonHighlightText   READ buttonHighlightText    WRITE setButtonHighlightText    NOTIFY paletteChanged)
    Q_PROPERTY(QColor primaryButton         READ primaryButton          WRITE setPrimaryButton          NOTIFY paletteChanged)
    Q_PROPERTY(QColor primaryButtonText     READ primaryButtonText      WRITE setPrimaryButtonText      NOTIFY paletteChanged)
    Q_PROPERTY(QColor textField             READ textField              WRITE setTextField              NOTIFY paletteChanged)
    Q_PROPERTY(QColor textFieldText         READ textFieldText          WRITE setTextFieldText          NOTIFY paletteChanged)
    Q_PROPERTY(QColor mapButton             READ mapButton              WRITE setMapButton              NOTIFY paletteChanged)
    Q_PROPERTY(QColor mapButtonHighlight    READ mapButtonHighlight     WRITE setMapButtonHighlight     NOTIFY paletteChanged)
58 59
    Q_PROPERTY(QColor mapWidgetBorderLight  READ mapWidgetBorderLight   WRITE setMapWidgetBorderLight   NOTIFY paletteChanged)
    Q_PROPERTY(QColor mapWidgetBorderDark   READ mapWidgetBorderDark    WRITE setMapWidgetBorderDark    NOTIFY paletteChanged)
Don Gagne's avatar
Don Gagne committed
60 61
    Q_PROPERTY(QColor brandingPurple        READ brandingPurple                                         NOTIFY paletteChanged)
    Q_PROPERTY(QColor brandingBlue          READ brandingBlue                                           NOTIFY paletteChanged)
62

63 64 65 66 67
    Q_PROPERTY(QColor colorGreen            READ colorGreen             WRITE setColorGreen             NOTIFY paletteChanged)
    Q_PROPERTY(QColor colorOrange           READ colorOrange            WRITE setColorOrange            NOTIFY paletteChanged)
    Q_PROPERTY(QColor colorRed              READ colorRed               WRITE setColorRed               NOTIFY paletteChanged)
    Q_PROPERTY(QColor colorGrey             READ colorGrey              WRITE setColorGrey              NOTIFY paletteChanged)
    Q_PROPERTY(QColor colorBlue             READ colorBlue              WRITE setColorBlue              NOTIFY paletteChanged)
68

69 70
public:
    enum ColorGroup {
Don Gagne's avatar
Don Gagne committed
71
        Disabled = 0,
72
        Enabled
73 74
    };
    
75 76 77 78 79
    enum Theme {
        Light = 0,
        Dark
    };
    
80 81 82
    QGCPalette(QObject* parent = NULL);
    ~QGCPalette();
    
83 84 85
    bool colorGroupEnabled(void) const { return _colorGroupEnabled; }
    void setColorGroupEnabled(bool enabled);
    
Don Gagne's avatar
Don Gagne committed
86
    /// Background color for windows
87
    QColor window(void)                 const { return _window[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
88 89

    /// Color for shaded areas within a window. The windowShade color is a color between window and button.
90
    QColor windowShade(void)            const { return _windowShade[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
91 92

    /// Color for darker shared areas within a window. The windowShadeDark color is a color between window and windowShade.
93
    QColor windowShadeDark(void)        const { return _windowShadeDark[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
94 95

    /// Text color
96
    QColor text(void)                   const { return _text[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
97 98

    /// Color for warning text
99
    QColor warningText(void)            const { return _warningText[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
100 101

    /// Background color for buttons
102
    QColor button(void)                 const { return _button[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
103 104

    /// Text color for buttons
105
    QColor buttonText(void)             const { return _buttonText[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
106 107

    /// Background color for button in selected or hover state
108
    QColor buttonHighlight(void)        const { return _buttonHighlight[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
109 110

    /// Text color for button in selected or hover state
111
    QColor buttonHighlightText(void)    const { return _buttonHighlightText[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
112 113 114

    /// Background color for primary buttons. A primary button is the button which would be the normal default  button to press.
    /// For example in an Ok/Cancel situation where Ok would normally be pressed, Ok is the primary button.
115
    QColor primaryButton(void)          const { return _primaryButton[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
116 117

    /// Text color for primary buttons
118
    QColor primaryButtonText(void)      const { return _primaryButtonText[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
119 120

    /// Background color for TextFields
121
    QColor textField(void)              const { return _textField[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
122 123

    /// Text color for TextFields
124
    QColor textFieldText(void)          const { return _textFieldText[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
125 126

    /// Background color for map buttons
127
    QColor mapButton(void)              const { return _mapButton[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
128 129

    /// Background color for map button in selected or hover state
130
    QColor mapButtonHighlight(void)     const { return _mapButtonHighlight[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
131 132

    /// Widget border color which will stand out against light map tiles
133
    QColor mapWidgetBorderLight(void)   const { return _mapWidgetBorderLight[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
134 135

    /// Widget border color which will stand out against dark map tiles
136
    QColor mapWidgetBorderDark(void)    const { return _mapWidgetBorderDark[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
137 138

    /// Purple color from branding guidelines
Don Gagne's avatar
Don Gagne committed
139
    QColor brandingPurple(void)         const { return _brandingPurple[_theme][_colorGroupEnabled ? 1 : 0]; }
Don Gagne's avatar
Don Gagne committed
140 141

    /// Blue color from branding guidelines
Don Gagne's avatar
Don Gagne committed
142
    QColor brandingBlue(void)           const { return _brandingBlue[_theme][_colorGroupEnabled ? 1 : 0]; }
143

144 145 146 147 148 149
    /// Arbitrary colors used for UI elements. Usually over _window and _windowShade.
    QColor colorGreen   ()              const { return _colorGreen[_theme][_colorGroupEnabled ? 1 : 0]; }
    QColor colorOrange  ()              const { return _colorOrange[_theme][_colorGroupEnabled ? 1 : 0]; }
    QColor colorRed     ()              const { return _colorRed[_theme][_colorGroupEnabled ? 1 : 0]; }
    QColor colorGrey    ()              const { return _colorGrey[_theme][_colorGroupEnabled ? 1 : 0]; }
    QColor colorBlue    ()              const { return _colorBlue[_theme][_colorGroupEnabled ? 1 : 0]; }
150

151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
    void setWindow(QColor& color)               { _window[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setWindowShade(QColor& color)          { _windowShade[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setWindowShadeDark(QColor& color)      { _windowShadeDark[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setText(QColor& color)                 { _text[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setWarningText(QColor& color)          { _warningText[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setButton(QColor& color)               { _button[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setButtonText(QColor& color)           { _buttonText[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setButtonHighlight(QColor& color)      { _buttonHighlight[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setButtonHighlightText(QColor& color)  { _buttonHighlightText[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setPrimaryButton(QColor& color)        { _primaryButton[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setPrimaryButtonText(QColor& color)    { _primaryButtonText[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setTextField(QColor& color)            { _textField[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setTextFieldText(QColor& color)        { _textFieldText[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setMapButton(QColor& color)            { _mapButton[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setMapButtonHighlight(QColor& color)   { _mapButtonHighlight[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
166 167
    void setMapWidgetBorderLight(QColor& color) { _mapWidgetBorderLight[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setMapWidgetBorderDark(QColor& color)  { _mapWidgetBorderDark[_theme][_colorGroupEnabled ? 1 : 0] = color; _signalPaletteChangeToAll(); }
168

169 170 171 172 173 174
    void setColorGreen  (QColor& color)         { _colorGreen[_theme][_colorGroupEnabled    ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setColorOrange (QColor& color)         { _colorOrange[_theme][_colorGroupEnabled   ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setColorRed    (QColor& color)         { _colorRed[_theme][_colorGroupEnabled      ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setColorGrey   (QColor& color)         { _colorGrey[_theme][_colorGroupEnabled     ? 1 : 0] = color; _signalPaletteChangeToAll(); }
    void setColorBlue   (QColor& color)         { _colorBlue[_theme][_colorGroupEnabled     ? 1 : 0] = color; _signalPaletteChangeToAll(); }

175 176
    static Theme globalTheme(void) { return _theme; }
    static void setGlobalTheme(Theme newTheme);
177

178 179 180 181
signals:
    void paletteChanged(void);
    
private:
182 183 184
    static void _signalPaletteChangeToAll(void);
    void _signalPaletteChanged(void);

185 186
    static Theme    _theme;             ///< There is a single theme for all palettes
    bool            _colorGroupEnabled; ///< Currently selected ColorGroup. true: enabled, false: disabled
187
    
188
    static const int _cThemes = 2;
189
    static const int _cColorGroups = 2;
190

191
    static QColor _window[_cThemes][_cColorGroups];
192 193
    static QColor _windowShade[_cThemes][_cColorGroups];
    static QColor _windowShadeDark[_cThemes][_cColorGroups];
194
    
195 196
	static QColor _warningText[_cThemes][_cColorGroups];
	static QColor _text[_cThemes][_cColorGroups];
197 198 199
    
    static QColor _button[_cThemes][_cColorGroups];
    static QColor _buttonText[_cThemes][_cColorGroups];
Don Gagne's avatar
Don Gagne committed
200
    static QColor _buttonHighlight[_cThemes][_cColorGroups];
201 202 203 204 205 206 207 208 209
    static QColor _buttonHighlightText[_cThemes][_cColorGroups];
    
    static QColor _primaryButton[_cThemes][_cColorGroups];
    static QColor _primaryButtonText[_cThemes][_cColorGroups];
    static QColor _primaryButtonHighlight[_cThemes][_cColorGroups];
    static QColor _primaryButtonHighlightText[_cThemes][_cColorGroups];
    
    static QColor _textField[_cThemes][_cColorGroups];
    static QColor _textFieldText[_cThemes][_cColorGroups];
210
    
211 212
    static QColor _mapButton[_cThemes][_cColorGroups];
    static QColor _mapButtonHighlight[_cThemes][_cColorGroups];
213 214 215
    static QColor _mapWidgetBorderLight[_cThemes][_cColorGroups];
    static QColor _mapWidgetBorderDark[_cThemes][_cColorGroups];

Don Gagne's avatar
Don Gagne committed
216 217 218
    static QColor _brandingPurple[_cThemes][_cColorGroups];
    static QColor _brandingBlue[_cThemes][_cColorGroups];

219 220 221 222 223 224
    static QColor _colorGreen[_cThemes][_cColorGroups];
    static QColor _colorOrange[_cThemes][_cColorGroups];
    static QColor _colorRed[_cThemes][_cColorGroups];
    static QColor _colorGrey[_cThemes][_cColorGroups];
    static QColor _colorBlue[_cThemes][_cColorGroups];

225 226 227
    void _themeChanged(void);
    
    static QList<QGCPalette*>   _paletteObjects;    ///< List of all active QGCPalette objects
228 229 230
};

#endif