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 Charts 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 #include <QtCharts/QBarLegendMarker>
31 #include <private/qbarlegendmarker_p.h>
32 #include <QtCharts/QAbstractBarSeries>
33 #include <QtCharts/QBarSet>
34 
35 QT_CHARTS_BEGIN_NAMESPACE
36 
37 /*!
38     \class QBarLegendMarker
39     \inmodule QtCharts
40     \brief The QBarLegendMarker class is a legend marker for a bar series.
41 
42     A bar legend marker is related to QAbstractBarSeries derived classes. With a bar series,
43     each marker is related to one QBarSet.
44 
45     \sa QLegend, QAbstractBarSeries, QBarSet
46 */
47 
48 /*!
49   \fn virtual LegendMarkerType QBarLegendMarker::type()
50   \reimp
51 */
52 
53 /*!
54   \internal
55   Constructor
56 */
QBarLegendMarker(QAbstractBarSeries * series,QBarSet * barset,QLegend * legend,QObject * parent)57 QBarLegendMarker::QBarLegendMarker(QAbstractBarSeries *series, QBarSet *barset, QLegend *legend, QObject *parent) :
58     QLegendMarker(*new QBarLegendMarkerPrivate(this,series,barset,legend), parent)
59 {
60     d_ptr->updated();
61 }
62 
63 /*!
64     Removes the legend marker for a bar set.
65 */
~QBarLegendMarker()66 QBarLegendMarker::~QBarLegendMarker()
67 {
68 }
69 
70 /*!
71     \internal
72 */
QBarLegendMarker(QBarLegendMarkerPrivate & d,QObject * parent)73 QBarLegendMarker::QBarLegendMarker(QBarLegendMarkerPrivate &d, QObject *parent) :
74     QLegendMarker(d, parent)
75 {
76 }
77 
78 /*!
79     \reimp
80 */
series()81 QAbstractBarSeries *QBarLegendMarker::series()
82 {
83     Q_D(QBarLegendMarker);
84     return d->m_series;
85 }
86 
87 /*!
88   Returns the bar set related to the marker.
89 */
barset()90 QBarSet* QBarLegendMarker::barset()
91 {
92     Q_D(QBarLegendMarker);
93     return d->m_barset;
94 }
95 
96 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
97 
QBarLegendMarkerPrivate(QBarLegendMarker * q,QAbstractBarSeries * series,QBarSet * barset,QLegend * legend)98 QBarLegendMarkerPrivate::QBarLegendMarkerPrivate(QBarLegendMarker *q, QAbstractBarSeries *series, QBarSet *barset, QLegend *legend) :
99     QLegendMarkerPrivate(q,legend),
100     q_ptr(q),
101     m_series(series),
102     m_barset(barset)
103 {
104     QObject::connect(m_barset, SIGNAL(penChanged()), this, SLOT(updated()));
105     QObject::connect(m_barset, SIGNAL(labelChanged()), this, SLOT(updated()));
106     QObject::connect(m_barset, SIGNAL(brushChanged()), this, SLOT(updated()));
107 }
108 
~QBarLegendMarkerPrivate()109 QBarLegendMarkerPrivate::~QBarLegendMarkerPrivate()
110 {
111 }
112 
series()113 QAbstractBarSeries* QBarLegendMarkerPrivate::series()
114 {
115     return m_series;
116 }
117 
relatedObject()118 QObject* QBarLegendMarkerPrivate::relatedObject()
119 {
120     return m_barset;
121 }
122 
updated()123 void QBarLegendMarkerPrivate::updated()
124 {
125     bool labelChanged = false;
126     bool brushChanged = false;
127     bool penChanged = false;
128 
129     if (!m_customPen && (m_item->pen() != m_barset->pen())) {
130         m_item->setPen(m_barset->pen());
131         penChanged = true;
132     }
133     if (!m_customBrush && (m_item->brush() != m_barset->brush())) {
134         m_item->setBrush(m_barset->brush());
135         brushChanged = true;
136     }
137     if (!m_customLabel && (m_item->label() != m_barset->label())) {
138         m_item->setLabel(m_barset->label());
139         labelChanged = true;
140     }
141     invalidateLegend();
142 
143     if (labelChanged)
144         emit q_ptr->labelChanged();
145     if (brushChanged)
146         emit q_ptr->brushChanged();
147     if (penChanged)
148         emit q_ptr->penChanged();
149 }
150 
151 QT_CHARTS_END_NAMESPACE
152 
153 #include "moc_qbarlegendmarker.cpp"
154 #include "moc_qbarlegendmarker_p.cpp"
155