1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the Qt Data Visualization module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:GPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU
19 ** General Public License version 3 or (at your option) any later version
20 ** approved by the KDE Free Qt Foundation. The licenses are as published by
21 ** the Free Software Foundation and appearing in the file LICENSE.GPL3
22 ** included in the packaging of this file. Please review the following
23 ** information to ensure the GNU General Public License requirements will
24 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25 **
26 ** $QT_END_LICENSE$
27 **
28 ****************************************************************************/
29 
30 #ifndef Q3DTHEME_H
31 #define Q3DTHEME_H
32 
33 #include <QtDataVisualization/qdatavisualizationglobal.h>
34 #include <QtCore/QObject>
35 #include <QtGui/QLinearGradient>
36 #include <QtGui/QFont>
37 #include <QtGui/QColor>
38 
39 QT_BEGIN_NAMESPACE_DATAVISUALIZATION
40 
41 class Q3DThemePrivate;
42 
43 class QT_DATAVISUALIZATION_EXPORT Q3DTheme : public QObject
44 {
45     Q_OBJECT
46     Q_ENUMS(ColorStyle)
47     Q_ENUMS(Theme)
48     Q_PROPERTY(Theme type READ type WRITE setType NOTIFY typeChanged)
49     Q_PROPERTY(QList<QColor> baseColors READ baseColors WRITE setBaseColors NOTIFY baseColorsChanged)
50     Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged)
51     Q_PROPERTY(QColor windowColor READ windowColor WRITE setWindowColor NOTIFY windowColorChanged)
52     Q_PROPERTY(QColor labelTextColor READ labelTextColor WRITE setLabelTextColor NOTIFY labelTextColorChanged)
53     Q_PROPERTY(QColor labelBackgroundColor READ labelBackgroundColor WRITE setLabelBackgroundColor NOTIFY labelBackgroundColorChanged)
54     Q_PROPERTY(QColor gridLineColor READ gridLineColor WRITE setGridLineColor NOTIFY gridLineColorChanged)
55     Q_PROPERTY(QColor singleHighlightColor READ singleHighlightColor WRITE setSingleHighlightColor NOTIFY singleHighlightColorChanged)
56     Q_PROPERTY(QColor multiHighlightColor READ multiHighlightColor WRITE setMultiHighlightColor NOTIFY multiHighlightColorChanged)
57     Q_PROPERTY(QColor lightColor READ lightColor WRITE setLightColor NOTIFY lightColorChanged)
58     Q_PROPERTY(QList<QLinearGradient> baseGradients READ baseGradients WRITE setBaseGradients NOTIFY baseGradientsChanged)
59     Q_PROPERTY(QLinearGradient singleHighlightGradient READ singleHighlightGradient WRITE setSingleHighlightGradient NOTIFY singleHighlightGradientChanged)
60     Q_PROPERTY(QLinearGradient multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged)
61     Q_PROPERTY(float lightStrength READ lightStrength WRITE setLightStrength NOTIFY lightStrengthChanged)
62     Q_PROPERTY(float ambientLightStrength READ ambientLightStrength WRITE setAmbientLightStrength NOTIFY ambientLightStrengthChanged)
63     Q_PROPERTY(float highlightLightStrength READ highlightLightStrength WRITE setHighlightLightStrength NOTIFY highlightLightStrengthChanged)
64     Q_PROPERTY(bool labelBorderEnabled READ isLabelBorderEnabled WRITE setLabelBorderEnabled NOTIFY labelBorderEnabledChanged)
65     Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
66     Q_PROPERTY(bool backgroundEnabled READ isBackgroundEnabled WRITE setBackgroundEnabled NOTIFY backgroundEnabledChanged)
67     Q_PROPERTY(bool gridEnabled READ isGridEnabled WRITE setGridEnabled NOTIFY gridEnabledChanged)
68     Q_PROPERTY(bool labelBackgroundEnabled READ isLabelBackgroundEnabled WRITE setLabelBackgroundEnabled NOTIFY labelBackgroundEnabledChanged)
69     Q_PROPERTY(ColorStyle colorStyle READ colorStyle WRITE setColorStyle NOTIFY colorStyleChanged)
70 
71 public:
72     enum ColorStyle {
73         ColorStyleUniform = 0,
74         ColorStyleObjectGradient,
75         ColorStyleRangeGradient
76     };
77 
78     enum Theme {
79         ThemeQt,
80         ThemePrimaryColors,
81         ThemeDigia,
82         ThemeStoneMoss,
83         ThemeArmyBlue,
84         ThemeRetro,
85         ThemeEbony,
86         ThemeIsabelle,
87         ThemeUserDefined
88     };
89 
90 public:
91     explicit Q3DTheme(QObject *parent = nullptr);
92     explicit Q3DTheme(Theme themeType, QObject *parent = nullptr);
93     virtual ~Q3DTheme();
94 
95     void setType(Theme themeType);
96     Theme type() const;
97 
98     void setBaseColors(const QList<QColor> &colors);
99     QList<QColor> baseColors() const;
100 
101     void setBackgroundColor(const QColor &color);
102     QColor backgroundColor() const;
103 
104     void setWindowColor(const QColor &color);
105     QColor windowColor() const;
106 
107     void setLabelTextColor(const QColor &color);
108     QColor labelTextColor() const;
109 
110     void setLabelBackgroundColor(const QColor &color);
111     QColor labelBackgroundColor() const;
112 
113     void setGridLineColor(const QColor &color);
114     QColor gridLineColor() const;
115 
116     void setSingleHighlightColor(const QColor &color);
117     QColor singleHighlightColor() const;
118 
119     void setMultiHighlightColor(const QColor &color);
120     QColor multiHighlightColor() const;
121 
122     void setLightColor(const QColor &color);
123     QColor lightColor() const;
124 
125     void setBaseGradients(const QList<QLinearGradient> &gradients);
126     QList<QLinearGradient> baseGradients() const;
127 
128     void setSingleHighlightGradient(const QLinearGradient &gradient);
129     QLinearGradient singleHighlightGradient() const;
130 
131     void setMultiHighlightGradient(const QLinearGradient &gradient);
132     QLinearGradient multiHighlightGradient() const;
133 
134     void setLightStrength(float strength);
135     float lightStrength() const;
136 
137     void setAmbientLightStrength(float strength);
138     float ambientLightStrength() const;
139 
140     void setHighlightLightStrength(float strength);
141     float highlightLightStrength() const;
142 
143     void setLabelBorderEnabled(bool enabled);
144     bool isLabelBorderEnabled() const;
145 
146     void setFont(const QFont &font);
147     QFont font() const;
148 
149     void setBackgroundEnabled(bool enabled);
150     bool isBackgroundEnabled() const;
151 
152     void setGridEnabled(bool enabled);
153     bool isGridEnabled() const;
154 
155     void setLabelBackgroundEnabled(bool enabled);
156     bool isLabelBackgroundEnabled() const;
157 
158     void setColorStyle(ColorStyle style);
159     ColorStyle colorStyle() const;
160 
161 Q_SIGNALS:
162     void typeChanged(Q3DTheme::Theme themeType);
163     void baseColorsChanged(const QList<QColor> &colors);
164     void backgroundColorChanged(const QColor &color);
165     void windowColorChanged(const QColor &color);
166     void labelTextColorChanged(const QColor &color);
167     void labelBackgroundColorChanged(const QColor &color);
168     void gridLineColorChanged(const QColor &color);
169     void singleHighlightColorChanged(const QColor &color);
170     void multiHighlightColorChanged(const QColor &color);
171     void lightColorChanged(const QColor &color);
172     void baseGradientsChanged(const QList<QLinearGradient> &gradients);
173     void singleHighlightGradientChanged(const QLinearGradient &gradient);
174     void multiHighlightGradientChanged(const QLinearGradient &gradient);
175     void lightStrengthChanged(float strength);
176     void ambientLightStrengthChanged(float strength);
177     void highlightLightStrengthChanged(float strength);
178     void labelBorderEnabledChanged(bool enabled);
179     void fontChanged(const QFont &font);
180     void backgroundEnabledChanged(bool enabled);
181     void gridEnabledChanged(bool enabled);
182     void labelBackgroundEnabledChanged(bool enabled);
183     void colorStyleChanged(Q3DTheme::ColorStyle style);
184 
185 protected:
186     explicit Q3DTheme(Q3DThemePrivate *d, Theme themeType, QObject *parent = nullptr);
187 
188     QScopedPointer<Q3DThemePrivate> d_ptr;
189 
190 private:
191     Q_DISABLE_COPY(Q3DTheme)
192 
193     friend class ThemeManager;
194     friend class Abstract3DRenderer;
195     friend class Bars3DController;
196     friend class AbstractDeclarative;
197     friend class Abstract3DController;
198 };
199 
200 QT_END_NAMESPACE_DATAVISUALIZATION
201 
202 #endif
203