##// END OF EJS Templates
Adds layout support for charts....
Michal Klocek -
r115:8cafc623ea10
parent child
Show More
@@ -43,7 +43,7 void AxisItem::setPlotDomain(const PlotDomain& plotDomain)
43 createItems();
43 createItems();
44 }
44 }
45
45
46 void AxisItem::setSize(const QSize &size)
46 void AxisItem::setSize(const QSizeF &size)
47 {
47 {
48 m_rect = QRectF(QPoint(0,0),size);
48 m_rect = QRectF(QPoint(0,0),size);
49 createItems();
49 createItems();
@@ -20,7 +20,7 public:
20 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){};
20 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){};
21
21
22 public: // from ChartItem
22 public: // from ChartItem
23 void setSize(const QSize &size);
23 void setSize(const QSizeF &size);
24 void setPlotDomain(const PlotDomain& data);
24 void setPlotDomain(const PlotDomain& data);
25
25
26 public:
26 public:
@@ -9,7 +9,7 Bar::Bar(QGraphicsItem *parent)
9 {
9 {
10 }
10 }
11
11
12 void Bar::setSize(const QSize& size)
12 void Bar::setSize(const QSizeF& size)
13 {
13 {
14 mWidth = size.width();
14 mWidth = size.width();
15 mHeight = size.height();
15 mHeight = size.height();
@@ -14,7 +14,7 public:
14 Bar(QGraphicsItem *parent=0);
14 Bar(QGraphicsItem *parent=0);
15
15
16 public: // from ChartItem
16 public: // from ChartItem
17 void setSize(const QSize &size);
17 void setSize(const QSizeF &size);
18 void setPlotDomain(const PlotDomain& data);
18 void setPlotDomain(const PlotDomain& data);
19
19
20 // Layout Stuff
20 // Layout Stuff
@@ -15,7 +15,7 BarGroup::BarGroup(BarChartSeries& series, QGraphicsItem *parent) :
15 dataChanged();
15 dataChanged();
16 }
16 }
17
17
18 void BarGroup::setSize(const QSize& size)
18 void BarGroup::setSize(const QSizeF& size)
19 {
19 {
20 qDebug() << "BarGroup::setSize";
20 qDebug() << "BarGroup::setSize";
21 mWidth = size.width();
21 mWidth = size.width();
@@ -14,7 +14,7 public:
14 explicit BarGroup(BarChartSeries& series, QGraphicsItem *parent = 0);
14 explicit BarGroup(BarChartSeries& series, QGraphicsItem *parent = 0);
15
15
16 public: // from ChartItem
16 public: // from ChartItem
17 void setSize(const QSize &size);
17 void setSize(const QSizeF &size);
18 void setPlotDomain(const PlotDomain& data);
18 void setPlotDomain(const PlotDomain& data);
19
19
20 // Layout "api"
20 // Layout "api"
@@ -16,7 +16,7 PercentBarGroup::PercentBarGroup(PercentBarChartSeries& series, QGraphicsItem *p
16 }
16 }
17
17
18
18
19 void PercentBarGroup::setSize(const QSize& size)
19 void PercentBarGroup::setSize(const QSizeF& size)
20 {
20 {
21 // qDebug() << "PercentBarGroup::setSize";
21 // qDebug() << "PercentBarGroup::setSize";
22 mWidth = size.width();
22 mWidth = size.width();
@@ -14,7 +14,7 public:
14 PercentBarGroup(PercentBarChartSeries& series, QGraphicsItem *parent = 0);
14 PercentBarGroup(PercentBarChartSeries& series, QGraphicsItem *parent = 0);
15
15
16 public: // From ChartItem
16 public: // From ChartItem
17 void setSize(const QSize &size);
17 void setSize(const QSizeF &size);
18 void setPlotDomain(const PlotDomain& data);
18 void setPlotDomain(const PlotDomain& data);
19
19
20 public:
20 public:
@@ -17,7 +17,7 StackedBarGroup::StackedBarGroup(StackedBarChartSeries& series, QGraphicsItem *p
17 }
17 }
18
18
19
19
20 void StackedBarGroup::setSize(const QSize& size)
20 void StackedBarGroup::setSize(const QSizeF& size)
21 {
21 {
22 // qDebug() << "StackedBarGroup::setSize";
22 // qDebug() << "StackedBarGroup::setSize";
23 mWidth = size.width();
23 mWidth = size.width();
@@ -17,7 +17,7 public:
17 StackedBarGroup(StackedBarChartSeries& series, QGraphicsItem *parent = 0);
17 StackedBarGroup(StackedBarChartSeries& series, QGraphicsItem *parent = 0);
18
18
19 public: // From ChartItem
19 public: // From ChartItem
20 void setSize(const QSize &size);
20 void setSize(const QSizeF &size);
21 void setPlotDomain(const PlotDomain& data);
21 void setPlotDomain(const PlotDomain& data);
22
22
23 // From ChartThemeObserver
23 // From ChartThemeObserver
@@ -12,7 +12,7 class ChartItem : public QGraphicsItem
12 public:
12 public:
13 ChartItem(QGraphicsItem* parent = 0):QGraphicsItem(parent){};
13 ChartItem(QGraphicsItem* parent = 0):QGraphicsItem(parent){};
14 virtual ~ChartItem(){};
14 virtual ~ChartItem(){};
15 virtual void setSize(const QSize &size) = 0;
15 virtual void setSize(const QSizeF &size) = 0;
16 virtual void setPlotDomain(const PlotDomain& data) = 0;
16 virtual void setPlotDomain(const PlotDomain& data) = 0;
17 };
17 };
18
18
@@ -28,7 +28,7 qreal PlotDomain::spanY() const
28 return m_maxY - m_minY;
28 return m_maxY - m_minY;
29 }
29 }
30
30
31 PlotDomain PlotDomain::subDomain(const QRect& rect, qreal maxWidth,qreal maxHeight) const
31 PlotDomain PlotDomain::subDomain(const QRectF& rect, qreal maxWidth,qreal maxHeight) const
32 {
32 {
33 PlotDomain domain;
33 PlotDomain domain;
34
34
@@ -13,7 +13,7 public:
13 qreal spanX() const;
13 qreal spanX() const;
14 qreal spanY() const;
14 qreal spanY() const;
15
15
16 PlotDomain subDomain(const QRect& rect, qreal maxWidth, qreal maxHeight) const;
16 PlotDomain subDomain(const QRectF& rect, qreal maxWidth, qreal maxHeight) const;
17
17
18
18
19 public:
19 public:
@@ -19,11 +19,12
19 #include "plotdomain_p.h"
19 #include "plotdomain_p.h"
20 #include "axisitem_p.h"
20 #include "axisitem_p.h"
21 #include <QGraphicsScene>
21 #include <QGraphicsScene>
22 #include <QGraphicsSceneResizeEvent>
22 #include <QDebug>
23 #include <QDebug>
23
24
24 QTCOMMERCIALCHART_BEGIN_NAMESPACE
25 QTCOMMERCIALCHART_BEGIN_NAMESPACE
25
26
26 QChart::QChart(QGraphicsObject* parent) : QGraphicsObject(parent),
27 QChart::QChart(QGraphicsItem *parent, Qt::WindowFlags wFlags) : QGraphicsWidget(parent,wFlags),
27 m_backgroundItem(0),
28 m_backgroundItem(0),
28 m_titleItem(0),
29 m_titleItem(0),
29 m_axisXItem(new AxisItem(AxisItem::X_AXIS, this)),
30 m_axisXItem(new AxisItem(AxisItem::X_AXIS, this)),
@@ -226,36 +227,6 QChartSeries* QChart::createSeries(QChartSeries::QChartSeriesType type)
226 return series;
227 return series;
227 }
228 }
228
229
229 void QChart::setSize(const QSize& size)
230 {
231 m_rect = QRect(QPoint(0,0),size);
232 QRect rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
233
234 // recalculate title position
235 if (m_titleItem) {
236 QPointF center = m_rect.center() -m_titleItem->boundingRect().center();
237 m_titleItem->setPos(center.x(),m_rect.top()/2 + margin()/2);
238 }
239
240 //recalculate background gradient
241 if (m_backgroundItem) {
242 m_backgroundItem->setRect(rect);
243 if (m_bacgroundOrinetation == HorizonatlGradientOrientation)
244 m_backgroundGradient.setFinalStop(m_backgroundItem->rect().width(), 0);
245 else
246 m_backgroundGradient.setFinalStop(0, m_backgroundItem->rect().height());
247 m_backgroundItem->setBrush(m_backgroundGradient);
248 }
249
250 // resize and reposition childs
251 foreach (ChartItem *item, m_chartItems) {
252 item->setPos(rect.topLeft());
253 item->setSize(rect.size());
254 }
255
256 update();
257 }
258
259 void QChart::setBackground(const QColor& startColor, const QColor& endColor, GradientOrientation orientation)
230 void QChart::setBackground(const QColor& startColor, const QColor& endColor, GradientOrientation orientation)
260 {
231 {
261
232
@@ -319,14 +290,14 void QChart::setTheme(QChart::ChartThemeId theme)
319 update();
290 update();
320 }
291 }
321
292
322 void QChart::zoomInToRect(const QRect& rectangle)
293 void QChart::zoomInToRect(const QRectF& rectangle)
323 {
294 {
324
295
325 if(!rectangle.isValid()) return;
296 if(!rectangle.isValid()) return;
326
297
327 qreal margin = this->margin();
298 qreal margin = this->margin();
328
299
329 QRect rect = rectangle.normalized();
300 QRectF rect = rectangle.normalized();
330 rect.translate(-margin, -margin);
301 rect.translate(-margin, -margin);
331
302
332 PlotDomain& oldDomain = m_plotDomainList[m_plotDataIndex];
303 PlotDomain& oldDomain = m_plotDomainList[m_plotDataIndex];
@@ -350,7 +321,7 void QChart::zoomIn()
350 item->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
321 item->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
351 update();
322 update();
352 } else {
323 } else {
353 QRect rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
324 QRectF rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
354 rect.setWidth(rect.width()/2);
325 rect.setWidth(rect.width()/2);
355 rect.setHeight(rect.height()/2);
326 rect.setHeight(rect.height()/2);
356 rect.moveCenter(m_rect.center());
327 rect.moveCenter(m_rect.center());
@@ -397,6 +368,39 void QChart::setAxis(AxisItem *item, const QChartAxis& axis)
397 item->setVisible(axis.isAxisVisible());
368 item->setVisible(axis.isAxisVisible());
398 }
369 }
399
370
371 void QChart::resizeEvent(QGraphicsSceneResizeEvent *event)
372 {
373
374 m_rect = QRectF(QPoint(0,0),event->newSize());
375 QRectF rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
376
377 // recalculate title position
378 if (m_titleItem) {
379 QPointF center = m_rect.center() -m_titleItem->boundingRect().center();
380 m_titleItem->setPos(center.x(),m_rect.top()/2 + margin()/2);
381 }
382
383 //recalculate background gradient
384 if (m_backgroundItem) {
385 m_backgroundItem->setRect(rect);
386 if (m_bacgroundOrinetation == HorizonatlGradientOrientation)
387 m_backgroundGradient.setFinalStop(m_backgroundItem->rect().width(), 0);
388 else
389 m_backgroundGradient.setFinalStop(0, m_backgroundItem->rect().height());
390 m_backgroundItem->setBrush(m_backgroundGradient);
391 }
392
393 // resize and reposition childs
394 foreach (ChartItem *item, m_chartItems) {
395 item->setPos(rect.topLeft());
396 item->setSize(rect.size());
397 }
398
399 update();
400 }
401
402
403
400 #include "moc_qchart.cpp"
404 #include "moc_qchart.cpp"
401
405
402 QTCOMMERCIALCHART_END_NAMESPACE
406 QTCOMMERCIALCHART_END_NAMESPACE
@@ -3,10 +3,12
3
3
4 #include <qchartglobal.h>
4 #include <qchartglobal.h>
5 #include <qchartseries.h>
5 #include <qchartseries.h>
6 #include <QGraphicsObject>
6 #include <QGraphicsWidget>
7 #include <QLinearGradient>
7 #include <QLinearGradient>
8 #include <QFont>
8 #include <QFont>
9
9
10 class QGraphicsSceneResizeEvent;
11
10 QTCOMMERCIALCHART_BEGIN_NAMESPACE
12 QTCOMMERCIALCHART_BEGIN_NAMESPACE
11
13
12 class AxisItem;
14 class AxisItem;
@@ -25,7 +27,7 class ChartItem;
25 /*!
27 /*!
26 * TODO: define the responsibilities
28 * TODO: define the responsibilities
27 */
29 */
28 class QTCOMMERCIALCHART_EXPORT QChart : public QGraphicsObject
30 class QTCOMMERCIALCHART_EXPORT QChart : public QGraphicsWidget
29 {
31 {
30 Q_OBJECT
32 Q_OBJECT
31 public:
33 public:
@@ -45,7 +47,7 public:
45 };
47 };
46
48
47 public:
49 public:
48 QChart(QGraphicsObject* parent = 0);
50 QChart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
49 ~QChart();
51 ~QChart();
50
52
51 //from QGraphicsItem
53 //from QGraphicsItem
@@ -57,7 +59,6 public:
57 // TODO: who owns the series now? maybe owned by chart and returned a reference instead...
59 // TODO: who owns the series now? maybe owned by chart and returned a reference instead...
58 QChartSeries* createSeries(QChartSeries::QChartSeriesType type);
60 QChartSeries* createSeries(QChartSeries::QChartSeriesType type);
59
61
60 void setSize(const QSize& size);
61 void setMargin(int margin);
62 void setMargin(int margin);
62 int margin() const;
63 int margin() const;
63 void setTheme(QChart::ChartThemeId theme);
64 void setTheme(QChart::ChartThemeId theme);
@@ -65,7 +66,7 public:
65 void setTitle(const QString& title,const QFont& font = QFont());
66 void setTitle(const QString& title,const QFont& font = QFont());
66 void setBackground(const QColor& startColor, const QColor& endColor = Qt::white, GradientOrientation orientation = VerticalGradientOrientation);
67 void setBackground(const QColor& startColor, const QColor& endColor = Qt::white, GradientOrientation orientation = VerticalGradientOrientation);
67
68
68 void zoomInToRect(const QRect& rectangle);
69 void zoomInToRect(const QRectF& rectangle);
69 void zoomIn();
70 void zoomIn();
70 void zoomOut();
71 void zoomOut();
71 void zoomReset();
72 void zoomReset();
@@ -74,6 +75,9 public:
74 void setAxisY(const QChartAxis& axis);
75 void setAxisY(const QChartAxis& axis);
75 void setAxisY(const QList<QChartAxis>& axis);
76 void setAxisY(const QList<QChartAxis>& axis);
76
77
78 protected:
79 void resizeEvent(QGraphicsSceneResizeEvent *event);
80
77 private:
81 private:
78 void setAxis(AxisItem *item, const QChartAxis& axis);
82 void setAxis(AxisItem *item, const QChartAxis& axis);
79
83
@@ -85,7 +89,7 private:
85 QGraphicsTextItem* m_titleItem;
89 QGraphicsTextItem* m_titleItem;
86 AxisItem* m_axisXItem;
90 AxisItem* m_axisXItem;
87 QList<AxisItem*> m_axisYItem;
91 QList<AxisItem*> m_axisYItem;
88 QRect m_rect;
92 QRectF m_rect;
89 QList<QChartSeries *> m_chartSeries;
93 QList<QChartSeries *> m_chartSeries;
90 QList<ChartItem *> m_chartItems;
94 QList<ChartItem *> m_chartItems;
91 QVector<PlotDomain> m_plotDomainList;
95 QVector<PlotDomain> m_plotDomainList;
@@ -28,7 +28,7 QChartView::~QChartView()
28 void QChartView::resizeEvent(QResizeEvent *event)
28 void QChartView::resizeEvent(QResizeEvent *event)
29 {
29 {
30 m_scene->setSceneRect(0,0,size().width(),size().height());
30 m_scene->setSceneRect(0,0,size().width(),size().height());
31 m_chart->setSize(size());
31 m_chart->resize(size());
32 QWidget::resizeEvent(event);
32 QWidget::resizeEvent(event);
33 }
33 }
34
34
@@ -32,7 +32,7 QChartWidget::~QChartWidget()
32 void QChartWidget::resizeEvent(QResizeEvent *event)
32 void QChartWidget::resizeEvent(QResizeEvent *event)
33 {
33 {
34 m_scene->setSceneRect(0,0,size().width(),size().height());
34 m_scene->setSceneRect(0,0,size().width(),size().height());
35 m_chart->setSize(size());
35 m_chart->resize(size());
36 QWidget::resizeEvent(event);
36 QWidget::resizeEvent(event);
37 }
37 }
38
38
@@ -49,7 +49,7 bool QPieSeriesPrivate::setData(QList<qreal> data)
49 return true;
49 return true;
50 }
50 }
51
51
52 void QPieSeriesPrivate::setSize(const QSize &size)
52 void QPieSeriesPrivate::setSize(const QSizeF &size)
53 {
53 {
54 // TODO: allow user setting the size?
54 // TODO: allow user setting the size?
55 // TODO: allow user defining the margins?
55 // TODO: allow user defining the margins?
@@ -19,7 +19,7 public:
19 ~QPieSeriesPrivate();
19 ~QPieSeriesPrivate();
20
20
21 public: // from ChartItem
21 public: // from ChartItem
22 void setSize(const QSize &size);
22 void setSize(const QSizeF &size);
23 void setPlotDomain(const PlotDomain& data);
23 void setPlotDomain(const PlotDomain& data);
24 // This is a dummy QGraphicsItem; dummy implementation
24 // This is a dummy QGraphicsItem; dummy implementation
25 QRectF boundingRect() const { return parentItem()->boundingRect(); }
25 QRectF boundingRect() const { return parentItem()->boundingRect(); }
@@ -37,7 +37,7 void QScatterSeriesPrivate::changeGeometry()
37 }
37 }
38 }
38 }
39
39
40 void QScatterSeriesPrivate::setSize(const QSize &size)
40 void QScatterSeriesPrivate::setSize(const QSizeF &size)
41 {
41 {
42 // m_boundingRect = QRectF(pos().x(), pos().y(), size.width(), size.height());
42 // m_boundingRect = QRectF(pos().x(), pos().y(), size.width(), size.height());
43 m_boundingRect = QRectF(0, 0, size.width(), size.height());
43 m_boundingRect = QRectF(0, 0, size.width(), size.height());
@@ -18,7 +18,7 public:
18 QScatterSeriesPrivate(QGraphicsItem *parent);
18 QScatterSeriesPrivate(QGraphicsItem *parent);
19
19
20 public: // from ChartObjectInterface
20 public: // from ChartObjectInterface
21 void setSize(const QSize &size);
21 void setSize(const QSizeF &size);
22 void setPlotDomain(const PlotDomain& data);
22 void setPlotDomain(const PlotDomain& data);
23
23
24 public: // from ChartThemeObserver
24 public: // from ChartThemeObserver
@@ -15,7 +15,7 XYLineChartItem::XYLineChartItem(QXYChartSeries* series,QGraphicsItem *parent) :
15 setFlags(QGraphicsItem::ItemClipsChildrenToShape);
15 setFlags(QGraphicsItem::ItemClipsChildrenToShape);
16 }
16 }
17
17
18 void XYLineChartItem::setSize(const QSize &size)
18 void XYLineChartItem::setSize(const QSizeF &size)
19 {
19 {
20 m_rect = QRect(0, 0, size.width(), size.height());
20 m_rect = QRect(0, 0, size.width(), size.height());
21 prepareGeometryChange();
21 prepareGeometryChange();
@@ -22,7 +22,7 public:
22 // virtual QPainterPath shape() const;
22 // virtual QPainterPath shape() const;
23
23
24 public: // from ChartItem
24 public: // from ChartItem
25 void setSize(const QSize &size);
25 void setSize(const QSizeF &size);
26 void setPlotDomain(const PlotDomain& data);
26 void setPlotDomain(const PlotDomain& data);
27
27
28 private:
28 private:
General Comments 0
You need to be logged in to leave comments. Login now