@@ -0,0 +1,253 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | #include "legendmarkeritem_p.h" | |
|
22 | #include "qxyseries.h" | |
|
23 | #include "qxyseries_p.h" | |
|
24 | #include "qlegend.h" | |
|
25 | #include "qabstractbarseries.h" | |
|
26 | #include "qpieseries.h" | |
|
27 | #include "qpieslice.h" | |
|
28 | #include "qbarset.h" | |
|
29 | #include "qbarset_p.h" | |
|
30 | #include "qareaseries.h" | |
|
31 | #include "qareaseries_p.h" | |
|
32 | #include <QPainter> | |
|
33 | #include <QGraphicsSceneEvent> | |
|
34 | #include <QGraphicsSimpleTextItem> | |
|
35 | #include <QDebug> | |
|
36 | ||
|
37 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
|
38 | ||
|
39 | LegendMarkerItem::LegendMarkerItem(QAbstractSeries *series, QGraphicsObject *parent) : | |
|
40 | QGraphicsObject(parent), | |
|
41 | m_series(series), | |
|
42 | m_markerRect(0,0,10.0,10.0), | |
|
43 | m_boundingRect(0,0,0,0), | |
|
44 | m_textItem(new QGraphicsSimpleTextItem(this)), | |
|
45 | m_rectItem(new QGraphicsRectItem(this)), | |
|
46 | m_margin(4), | |
|
47 | m_space(4) | |
|
48 | { | |
|
49 | //setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton); | |
|
50 | m_rectItem->setRect(m_markerRect); | |
|
51 | } | |
|
52 | ||
|
53 | void LegendMarkerItem::setPen(const QPen &pen) | |
|
54 | { | |
|
55 | m_rectItem->setPen(pen); | |
|
56 | } | |
|
57 | ||
|
58 | QPen LegendMarkerItem::pen() const | |
|
59 | { | |
|
60 | return m_rectItem->pen(); | |
|
61 | } | |
|
62 | ||
|
63 | void LegendMarkerItem::setBrush(const QBrush &brush) | |
|
64 | { | |
|
65 | m_rectItem->setBrush(brush); | |
|
66 | } | |
|
67 | ||
|
68 | QBrush LegendMarkerItem::brush() const | |
|
69 | { | |
|
70 | return m_rectItem->brush(); | |
|
71 | } | |
|
72 | ||
|
73 | void LegendMarkerItem::setFont(const QFont &font) | |
|
74 | { | |
|
75 | m_textItem->setFont(font); | |
|
76 | QFontMetrics fn(font); | |
|
77 | m_markerRect = QRectF(0,0,fn.height()/2,fn.height()/2); | |
|
78 | updateGeometry(); | |
|
79 | } | |
|
80 | ||
|
81 | QFont LegendMarkerItem::font() const | |
|
82 | { | |
|
83 | return m_textItem->font(); | |
|
84 | } | |
|
85 | ||
|
86 | void LegendMarkerItem::setLabel(const QString label) | |
|
87 | { | |
|
88 | m_text = label; | |
|
89 | updateGeometry(); | |
|
90 | } | |
|
91 | ||
|
92 | QString LegendMarkerItem::label() const | |
|
93 | { | |
|
94 | return m_text; | |
|
95 | } | |
|
96 | ||
|
97 | QRectF LegendMarkerItem::boundingRect() const | |
|
98 | { | |
|
99 | return m_boundingRect; | |
|
100 | } | |
|
101 | ||
|
102 | void LegendMarkerItem::setLabelBrush(const QBrush &brush) | |
|
103 | { | |
|
104 | m_textItem->setBrush(brush); | |
|
105 | } | |
|
106 | ||
|
107 | QBrush LegendMarkerItem::labelBrush() const | |
|
108 | { | |
|
109 | return m_textItem->brush(); | |
|
110 | } | |
|
111 | ||
|
112 | ||
|
113 | void LegendMarkerItem::setGeometry(const QRectF& rect) | |
|
114 | { | |
|
115 | QFontMetrics fn (font()); | |
|
116 | ||
|
117 | int width = rect.width(); | |
|
118 | qreal x = m_margin + m_markerRect.width() + m_space + m_margin; | |
|
119 | qreal y = qMax(m_markerRect.height()+2*m_margin,fn.height()+2*m_margin); | |
|
120 | ||
|
121 | if (fn.boundingRect(m_text).width() + x > width) | |
|
122 | { | |
|
123 | QString string = m_text + "..."; | |
|
124 | while(fn.boundingRect(string).width() + x > width && string.length() > 3) | |
|
125 | string.remove(string.length() - 4, 1); | |
|
126 | m_textItem->setText(string); | |
|
127 | } | |
|
128 | else | |
|
129 | m_textItem->setText(m_text); | |
|
130 | ||
|
131 | const QRectF& textRect = m_textItem->boundingRect(); | |
|
132 | ||
|
133 | ||
|
134 | m_textItem->setPos(x-m_margin,y/2 - textRect.height()/2); | |
|
135 | m_rectItem->setRect(m_markerRect); | |
|
136 | m_rectItem->setPos(m_margin,y/2 - m_markerRect.height()/2); | |
|
137 | ||
|
138 | prepareGeometryChange(); | |
|
139 | m_boundingRect = QRectF(0,0,x+textRect.width()+m_margin,y); | |
|
140 | } | |
|
141 | ||
|
142 | void LegendMarkerItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) | |
|
143 | { | |
|
144 | Q_UNUSED(option) | |
|
145 | Q_UNUSED(widget) | |
|
146 | Q_UNUSED(painter) | |
|
147 | } | |
|
148 | ||
|
149 | QSizeF LegendMarkerItem::sizeHint(Qt::SizeHint which, const QSizeF& constraint) const | |
|
150 | { | |
|
151 | Q_UNUSED(constraint) | |
|
152 | ||
|
153 | QFontMetrics fn(m_textItem->font()); | |
|
154 | QSizeF sh; | |
|
155 | ||
|
156 | switch (which) { | |
|
157 | case Qt::MinimumSize: | |
|
158 | sh = QSizeF(fn.boundingRect("...").width() + 2*m_margin + m_space +m_markerRect.width(),qMax(m_markerRect.height()+2*m_margin,fn.height()+2*m_margin)); | |
|
159 | break; | |
|
160 | case Qt::PreferredSize: | |
|
161 | sh = QSizeF(fn.boundingRect(m_text).width() + 2*m_margin + m_space +m_markerRect.width(),qMax(m_markerRect.height()+2*m_margin,fn.height()+2*m_margin)); | |
|
162 | break; | |
|
163 | default: | |
|
164 | break; | |
|
165 | } | |
|
166 | ||
|
167 | return sh; | |
|
168 | } | |
|
169 | ||
|
170 | void LegendMarkerItem::mousePressEvent(QGraphicsSceneMouseEvent *event) | |
|
171 | { | |
|
172 | qDebug() << "LegendMarkerItem::mousePressEvent"; | |
|
173 | QGraphicsObject::mousePressEvent(event); | |
|
174 | //TODO: selected signal removed for now | |
|
175 | } | |
|
176 | ||
|
177 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
|
178 | ||
|
179 | AreaLegendMarkerItem::AreaLegendMarkerItem(QAreaSeries *series,QLegend *legend) : LegendMarkerItem(series,legend), | |
|
180 | m_series(series) | |
|
181 | { | |
|
182 | //QObject::connect(this, SIGNAL(selected()), series, SIGNAL(selected())); | |
|
183 | // QObject::connect(series->d_func(),SIGNAL(updated()), this, SLOT(updated())); | |
|
184 | // QObject::connect(series, SIGNAL(nameChanged()), this, SLOT(updated())); | |
|
185 | updated(); | |
|
186 | } | |
|
187 | ||
|
188 | void AreaLegendMarkerItem::updated() | |
|
189 | { | |
|
190 | setBrush(m_series->brush()); | |
|
191 | setLabel(m_series->name()); | |
|
192 | } | |
|
193 | ||
|
194 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
|
195 | ||
|
196 | BarLegendMarkerItem::BarLegendMarkerItem(QAbstractBarSeries *barseries,QBarSet *barset, QLegend *legend) : LegendMarkerItem(barseries,legend), | |
|
197 | m_barset(barset) | |
|
198 | { | |
|
199 | //QObject::connect(this, SIGNAL(selected()),barset->d_ptr.data(), SIGNAL(selected())); | |
|
200 | // QObject::connect(barset->d_ptr.data(), SIGNAL(updatedBars()), this, SLOT(updated())); | |
|
201 | updated(); | |
|
202 | } | |
|
203 | ||
|
204 | void BarLegendMarkerItem::updated() | |
|
205 | { | |
|
206 | setBrush(m_barset->brush()); | |
|
207 | setLabel(m_barset->label()); | |
|
208 | } | |
|
209 | ||
|
210 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
|
211 | ||
|
212 | PieLegendMarkerItem::PieLegendMarkerItem(QPieSeries* series,QPieSlice *pieslice, QLegend *legend) : LegendMarkerItem(series,legend), | |
|
213 | m_pieslice(pieslice) | |
|
214 | { | |
|
215 | // QObject::connect(pieslice, SIGNAL(labelChanged()), this, SLOT(updated())); | |
|
216 | // QObject::connect(pieslice, SIGNAL(brushChanged()), this, SLOT(updated())); | |
|
217 | updated(); | |
|
218 | } | |
|
219 | ||
|
220 | void PieLegendMarkerItem::updated() | |
|
221 | { | |
|
222 | setBrush(m_pieslice->brush()); | |
|
223 | setLabel(m_pieslice->label()); | |
|
224 | } | |
|
225 | ||
|
226 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
|
227 | ||
|
228 | XYLegendMarkerItem::XYLegendMarkerItem(QXYSeries *series, QLegend *legend) : LegendMarkerItem(series,legend), | |
|
229 | m_series(series) | |
|
230 | { | |
|
231 | //QObject::connect(this, SIGNAL(selected()), series, SIGNAL(selected())); | |
|
232 | // QObject::connect(series->d_func(),SIGNAL(updated()), this, SLOT(updated())); | |
|
233 | // QObject::connect(series, SIGNAL(nameChanged()), this, SLOT(updated())); | |
|
234 | updated(); | |
|
235 | } | |
|
236 | ||
|
237 | void XYLegendMarkerItem::updated() | |
|
238 | { | |
|
239 | setLabel(m_series->name()); | |
|
240 | ||
|
241 | if(m_series->type()== QAbstractSeries::SeriesTypeScatter) | |
|
242 | { | |
|
243 | setBrush(m_series->brush()); | |
|
244 | ||
|
245 | } | |
|
246 | else { | |
|
247 | setBrush(QBrush(m_series->pen().color())); | |
|
248 | } | |
|
249 | } | |
|
250 | ||
|
251 | #include "moc_legendmarkeritem_p.cpp" | |
|
252 | ||
|
253 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -0,0 +1,146 | |||
|
1 | /**************************************************************************** | |
|
2 | ** | |
|
3 | ** Copyright (C) 2012 Digia Plc | |
|
4 | ** All rights reserved. | |
|
5 | ** For any questions to Digia, please use contact form at http://qt.digia.com | |
|
6 | ** | |
|
7 | ** This file is part of the Qt Commercial Charts Add-on. | |
|
8 | ** | |
|
9 | ** $QT_BEGIN_LICENSE$ | |
|
10 | ** Licensees holding valid Qt Commercial licenses may use this file in | |
|
11 | ** accordance with the Qt Commercial License Agreement provided with the | |
|
12 | ** Software or, alternatively, in accordance with the terms contained in | |
|
13 | ** a written agreement between you and Digia. | |
|
14 | ** | |
|
15 | ** If you have questions regarding the use of this file, please use | |
|
16 | ** contact form at http://qt.digia.com | |
|
17 | ** $QT_END_LICENSE$ | |
|
18 | ** | |
|
19 | ****************************************************************************/ | |
|
20 | ||
|
21 | // W A R N I N G | |
|
22 | // ------------- | |
|
23 | // | |
|
24 | // This file is not part of the QtCommercial Chart API. It exists purely as an | |
|
25 | // implementation detail. This header file may change from version to | |
|
26 | // version without notice, or even be removed. | |
|
27 | // | |
|
28 | // We mean it. | |
|
29 | ||
|
30 | #ifndef LEGENDMARKERITEM_P_H | |
|
31 | #define LEGENDMARKERITEM_P_H | |
|
32 | ||
|
33 | #include "qchartglobal.h" | |
|
34 | #include <QGraphicsObject> | |
|
35 | #include <QBrush> | |
|
36 | #include <QPen> | |
|
37 | #include <QGraphicsSimpleTextItem> | |
|
38 | #include <QGraphicsLayoutItem> | |
|
39 | ||
|
40 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
|
41 | ||
|
42 | class QAbstractSeries; | |
|
43 | class QAreaSeries; | |
|
44 | class QXYSeries; | |
|
45 | class QBarSet; | |
|
46 | class QAbstractBarSeries; | |
|
47 | class QPieSlice; | |
|
48 | class QLegend; | |
|
49 | class QPieSeries; | |
|
50 | ||
|
51 | class LegendMarkerItem : public QGraphicsObject, public QGraphicsLayoutItem | |
|
52 | { | |
|
53 | Q_OBJECT | |
|
54 | Q_INTERFACES(QGraphicsLayoutItem) | |
|
55 | public: | |
|
56 | explicit LegendMarkerItem(QAbstractSeries *m_series, QGraphicsObject *parent); | |
|
57 | ||
|
58 | void setPen(const QPen &pen); | |
|
59 | QPen pen() const; | |
|
60 | ||
|
61 | void setBrush(const QBrush &brush); | |
|
62 | QBrush brush() const; | |
|
63 | ||
|
64 | void setFont(const QFont &font); | |
|
65 | QFont font() const; | |
|
66 | ||
|
67 | void setLabel(const QString label); | |
|
68 | QString label() const; | |
|
69 | ||
|
70 | void setLabelBrush(const QBrush &brush); | |
|
71 | QBrush labelBrush() const; | |
|
72 | ||
|
73 | QAbstractSeries *series() const { return m_series;} | |
|
74 | ||
|
75 | void setGeometry(const QRectF& rect); | |
|
76 | ||
|
77 | QRectF boundingRect() const; | |
|
78 | ||
|
79 | void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); | |
|
80 | ||
|
81 | QSizeF sizeHint (Qt::SizeHint which, const QSizeF& constraint) const; | |
|
82 | ||
|
83 | protected: | |
|
84 | // From QGraphicsObject | |
|
85 | void mousePressEvent(QGraphicsSceneMouseEvent *event); | |
|
86 | ||
|
87 | //public Q_SLOTS: | |
|
88 | //virtual void updated() = 0; | |
|
89 | ||
|
90 | protected: | |
|
91 | QAbstractSeries *m_series; | |
|
92 | QRectF m_markerRect; | |
|
93 | QRectF m_boundingRect; | |
|
94 | // QLegend* m_legend; | |
|
95 | QGraphicsSimpleTextItem *m_textItem; | |
|
96 | QGraphicsRectItem *m_rectItem; | |
|
97 | qreal m_margin; | |
|
98 | qreal m_space; | |
|
99 | QString m_text; | |
|
100 | ||
|
101 | }; | |
|
102 | ||
|
103 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
|
104 | class XYLegendMarkerItem : public LegendMarkerItem | |
|
105 | { | |
|
106 | public: | |
|
107 | XYLegendMarkerItem(QXYSeries *series, QLegend *legend); | |
|
108 | protected: | |
|
109 | void updated(); | |
|
110 | private: | |
|
111 | QXYSeries *m_series; | |
|
112 | }; | |
|
113 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
|
114 | class AreaLegendMarkerItem : public LegendMarkerItem | |
|
115 | { | |
|
116 | public: | |
|
117 | AreaLegendMarkerItem(QAreaSeries *series, QLegend *legend); | |
|
118 | protected: | |
|
119 | void updated(); | |
|
120 | private: | |
|
121 | QAreaSeries *m_series; | |
|
122 | }; | |
|
123 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
|
124 | class BarLegendMarkerItem : public LegendMarkerItem | |
|
125 | { | |
|
126 | public: | |
|
127 | BarLegendMarkerItem(QAbstractBarSeries *barseries, QBarSet *barset,QLegend *legend); | |
|
128 | protected: | |
|
129 | void updated(); | |
|
130 | private: | |
|
131 | QBarSet *m_barset; | |
|
132 | }; | |
|
133 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
|
134 | class PieLegendMarkerItem : public LegendMarkerItem | |
|
135 | { | |
|
136 | public: | |
|
137 | PieLegendMarkerItem(QPieSeries *pieSeries, QPieSlice *pieslice, QLegend *legend); | |
|
138 | protected: | |
|
139 | void updated(); | |
|
140 | private: | |
|
141 | QPieSlice *m_pieslice; | |
|
142 | }; | |
|
143 | ||
|
144 | QTCOMMERCIALCHART_END_NAMESPACE | |
|
145 | ||
|
146 | #endif // LEGENDMARKERITEM_P_H |
@@ -64,6 +64,15 MainWidget::MainWidget(QWidget *parent) : | |||
|
64 | 64 | connect(infoButton, SIGNAL(clicked()), this, SLOT(showDebugInfo())); |
|
65 | 65 | m_buttonLayout->addWidget(infoButton, 7, 0); |
|
66 | 66 | |
|
67 | QPushButton *connectButton = new QPushButton("Connect markers"); | |
|
68 | connect(connectButton, SIGNAL(clicked()), this, SLOT(connectMarkers())); | |
|
69 | m_buttonLayout->addWidget(connectButton, 8, 0); | |
|
70 | ||
|
71 | QPushButton *disConnectButton = new QPushButton("Disconnect markers"); | |
|
72 | connect(disConnectButton, SIGNAL(clicked()), this, SLOT(disconnectMarkers())); | |
|
73 | m_buttonLayout->addWidget(connectButton, 8, 0); | |
|
74 | ||
|
75 | ||
|
67 | 76 | m_legendPosX = new QDoubleSpinBox(); |
|
68 | 77 | m_legendPosY = new QDoubleSpinBox(); |
|
69 | 78 | m_legendWidth = new QDoubleSpinBox(); |
@@ -178,7 +187,6 void MainWidget::toggleAttached() | |||
|
178 | 187 | void MainWidget::addSlice() |
|
179 | 188 | { |
|
180 | 189 | QPieSlice* slice = new QPieSlice(QString("slice " + QString::number(m_series->count())), m_series->count()+1); |
|
181 | // slice->setValue(); | |
|
182 | 190 | m_series->append(slice); |
|
183 | 191 | } |
|
184 | 192 | |
@@ -190,6 +198,26 void MainWidget::removeSlice() | |||
|
190 | 198 | } |
|
191 | 199 | } |
|
192 | 200 | |
|
201 | void MainWidget::connectMarkers() | |
|
202 | { | |
|
203 | // Example use case. | |
|
204 | // Explode slice via marker. | |
|
205 | // Should be doable via public api. | |
|
206 | ||
|
207 | foreach (QLegendMarker* marker, m_chart->legend()->markers()) { | |
|
208 | // Disconnect possible existing connection to avoid multiple connections | |
|
209 | QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(handleMarkerClicked())); | |
|
210 | QObject::connect(marker, SIGNAL(clicked()), this, SLOT(handleMarkerClicked())); | |
|
211 | } | |
|
212 | } | |
|
213 | ||
|
214 | void MainWidget::disconnectMarkers() | |
|
215 | { | |
|
216 | foreach (QLegendMarker* marker, m_chart->legend()->markers()) { | |
|
217 | QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(handleMarkerClicked())); | |
|
218 | } | |
|
219 | } | |
|
220 | ||
|
193 | 221 | void MainWidget::setLegendAlignment() |
|
194 | 222 | { |
|
195 | 223 | QPushButton *button = qobject_cast<QPushButton *>(sender()); |
@@ -236,6 +264,8 void MainWidget::showDebugInfo() | |||
|
236 | 264 | { |
|
237 | 265 | qDebug() << "marker count:" << m_chart->legend()->markers().count(); |
|
238 | 266 | foreach (QLegendMarker* marker, m_chart->legend()->markers()) { |
|
267 | qDebug() << "marker series type:" << marker->series()->type(); | |
|
268 | qDebug() << "peer object:" << marker->peerObject(); | |
|
239 | 269 | qDebug() << "label:" << marker->label(); |
|
240 | 270 | } |
|
241 | 271 | } |
@@ -257,3 +287,15 void MainWidget::updateLegendLayout() | |||
|
257 | 287 | m_chart->legend()->update(); |
|
258 | 288 | //![4] |
|
259 | 289 | } |
|
290 | ||
|
291 | void MainWidget::handleMarkerClicked() | |
|
292 | { | |
|
293 | QLegendMarker* marker = qobject_cast<QLegendMarker*> (sender()); | |
|
294 | ||
|
295 | qDebug() << "marker clicked:" << marker; | |
|
296 | ||
|
297 | QPieSlice* slice = qobject_cast<QPieSlice*> (marker->peerObject()); | |
|
298 | Q_ASSERT(slice); | |
|
299 | ||
|
300 | slice->setExploded(!slice->isExploded()); | |
|
301 | } |
@@ -50,6 +50,8 public slots: | |||
|
50 | 50 | void toggleAttached(); |
|
51 | 51 | void addSlice(); |
|
52 | 52 | void removeSlice(); |
|
53 | void connectMarkers(); | |
|
54 | void disconnectMarkers(); | |
|
53 | 55 | |
|
54 | 56 | void setLegendAlignment(); |
|
55 | 57 | |
@@ -60,6 +62,8 public slots: | |||
|
60 | 62 | |
|
61 | 63 | void updateLegendLayout(); |
|
62 | 64 | |
|
65 | void handleMarkerClicked(); | |
|
66 | ||
|
63 | 67 | |
|
64 | 68 | private: |
|
65 | 69 |
@@ -6,14 +6,16 SOURCES += \ | |||
|
6 | 6 | $$PWD/legendmarker.cpp \ |
|
7 | 7 | $$PWD/legendlayout.cpp \ |
|
8 | 8 | $$PWD/qlegendmarker.cpp \ |
|
9 | $$PWD/qpielegendmarker.cpp | |
|
9 | $$PWD/qpielegendmarker.cpp \ | |
|
10 | $$PWD/legendmarkeritem.cpp | |
|
10 | 11 | |
|
11 | 12 | PRIVATE_HEADERS += \ |
|
12 | 13 | $$PWD/legendmarker_p.h \ |
|
13 | 14 | $$PWD/legendscroller_p.h \ |
|
14 | 15 | $$PWD/qlegend_p.h \ |
|
15 | 16 | $$PWD/legendlayout_p.h \ |
|
16 | $$PWD/qlegendmarker_p.h | |
|
17 | $$PWD/qlegendmarker_p.h \ | |
|
18 | $$PWD/legendmarkeritem_p.h | |
|
17 | 19 | |
|
18 | 20 | |
|
19 | 21 | PUBLIC_HEADERS += \ |
@@ -467,6 +467,8 void QLegendPrivate::handleSeriesAdded(QAbstractSeries *series, Domain *domain) | |||
|
467 | 467 | { |
|
468 | 468 | Q_UNUSED(domain) |
|
469 | 469 | |
|
470 | qDebug() << "QLegendPrivate::handleSeriesAdded"; | |
|
471 | ||
|
470 | 472 | // New markers ---> |
|
471 | 473 | QList<QLegendMarker*> newMarkers = series->d_ptr->createLegendMarkers(q_ptr); |
|
472 | 474 | foreach (QLegendMarker* marker, newMarkers) { |
@@ -474,7 +476,8 void QLegendPrivate::handleSeriesAdded(QAbstractSeries *series, Domain *domain) | |||
|
474 | 476 | marker->setLabelBrush(m_labelBrush); |
|
475 | 477 | marker->setVisible(series->isVisible()); |
|
476 | 478 | // TODO: QLegendMarker has QGraphicsItem vs QLegendMarker is QGraphicsItem |
|
477 | // m_items->addToGroup(marker); | |
|
479 | // TODO: possible hazard. What if marker is deleted and group still has pointer? | |
|
480 | // m_items->addToGroup(marker->d_ptr.data()); | |
|
478 | 481 | m_legendMarkers << marker; |
|
479 | 482 | } |
|
480 | 483 |
@@ -20,6 +20,7 | |||
|
20 | 20 | |
|
21 | 21 | #include "qlegendmarker.h" |
|
22 | 22 | #include "qlegendmarker_p.h" |
|
23 | #include "legendmarkeritem_p.h" | |
|
23 | 24 | #include <QDebug> |
|
24 | 25 | #include <QFontMetrics> |
|
25 | 26 | |
@@ -106,7 +107,7 QLegendMarkerPrivate::QLegendMarkerPrivate(QAbstractSeries *series, QLegendMarke | |||
|
106 | 107 | q_ptr(q), |
|
107 | 108 | m_series(series) |
|
108 | 109 | { |
|
109 | ||
|
110 | m_item = new LegendMarkerItem(m_series,this); | |
|
110 | 111 | } |
|
111 | 112 | |
|
112 | 113 | void QLegendMarkerPrivate::setGeometry(const QRectF& rect) |
@@ -174,6 +175,7 QSizeF QLegendMarkerPrivate::sizeHint(Qt::SizeHint which, const QSizeF& constrai | |||
|
174 | 175 | |
|
175 | 176 | void QLegendMarkerPrivate::mousePressEvent(QGraphicsSceneMouseEvent *event) |
|
176 | 177 | { |
|
178 | qDebug() << "QLegendMarkerPrivate::mousePressEvent" << event; | |
|
177 | 179 | QGraphicsObject::mousePressEvent(event); |
|
178 | 180 | //TODO: selected signal removed for now |
|
179 | 181 | } |
@@ -50,6 +50,7 class QLegend; | |||
|
50 | 50 | class QPieSeries; |
|
51 | 51 | |
|
52 | 52 | class QLegendMarker; |
|
53 | class LegendMarkerItem; | |
|
53 | 54 | |
|
54 | 55 | class QLegendMarkerPrivate : public QGraphicsObject, public QGraphicsLayoutItem |
|
55 | 56 | { |
@@ -91,6 +92,8 public Q_SLOTS: | |||
|
91 | 92 | private: |
|
92 | 93 | QLegendMarker *q_ptr; |
|
93 | 94 | |
|
95 | LegendMarkerItem *m_item; | |
|
96 | ||
|
94 | 97 | /* |
|
95 | 98 | QLegend* m_legend; |
|
96 | 99 | */ |
@@ -32,6 +32,11 QPieLegendMarker::QPieLegendMarker(QPieSeries* series, QPieSlice* slice, QObject | |||
|
32 | 32 | updated(); |
|
33 | 33 | } |
|
34 | 34 | |
|
35 | QPieSlice* QPieLegendMarker::peerObject() | |
|
36 | { | |
|
37 | return m_slice; | |
|
38 | } | |
|
39 | ||
|
35 | 40 | void QPieLegendMarker::updated() |
|
36 | 41 | { |
|
37 | 42 | // TODO: to PIMPL. |
@@ -34,9 +34,9 class QTCOMMERCIALCHART_EXPORT QPieLegendMarker : public QLegendMarker | |||
|
34 | 34 | public: |
|
35 | 35 | explicit QPieLegendMarker(QPieSeries* series, QPieSlice* slice, QObject *parent = 0); |
|
36 | 36 | |
|
37 |
virtual QPieSlice* peerObject() |
|
|
37 | virtual QPieSlice* peerObject(); | |
|
38 | 38 | |
|
39 | // TODO: to pimp. | |
|
39 | // TODO: to pimpl. | |
|
40 | 40 | void updated(); |
|
41 | 41 | |
|
42 | 42 | //Q_SIGNALS: |
@@ -48,6 +48,7 private: | |||
|
48 | 48 | // QScopedPointer<QPieLegendMarkerPrivate> d_ptr; |
|
49 | 49 | Q_DISABLE_COPY(QPieLegendMarker) |
|
50 | 50 | |
|
51 | // TODO: PIMPL | |
|
51 | 52 | QPieSlice* m_slice; |
|
52 | 53 | |
|
53 | 54 | }; |
@@ -865,10 +865,11 QList<LegendMarker *> QPieSeriesPrivate::createLegendMarker(QLegend *legend) | |||
|
865 | 865 | |
|
866 | 866 | QList<QLegendMarker*> QPieSeriesPrivate::createLegendMarkers(QLegend* legend) |
|
867 | 867 | { |
|
868 | Q_UNUSED(legend); | |
|
868 | 869 | Q_Q(QPieSeries); |
|
869 | 870 | QList<QLegendMarker*> markers; |
|
870 | 871 | foreach(QPieSlice* slice, q->slices()) { |
|
871 |
QPieLegendMarker* marker = new QPieLegendMarker(q,slice |
|
|
872 | QPieLegendMarker* marker = new QPieLegendMarker(q,slice); | |
|
872 | 873 | markers << marker; |
|
873 | 874 | } |
|
874 | 875 | return markers; |
General Comments 0
You need to be logged in to leave comments.
Login now