##// 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 43 createItems();
44 44 }
45 45
46 void AxisItem::setSize(const QSize &size)
46 void AxisItem::setSize(const QSizeF &size)
47 47 {
48 48 m_rect = QRectF(QPoint(0,0),size);
49 49 createItems();
@@ -20,7 +20,7 public:
20 20 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){};
21 21
22 22 public: // from ChartItem
23 void setSize(const QSize &size);
23 void setSize(const QSizeF &size);
24 24 void setPlotDomain(const PlotDomain& data);
25 25
26 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 14 mWidth = size.width();
15 15 mHeight = size.height();
@@ -14,7 +14,7 public:
14 14 Bar(QGraphicsItem *parent=0);
15 15
16 16 public: // from ChartItem
17 void setSize(const QSize &size);
17 void setSize(const QSizeF &size);
18 18 void setPlotDomain(const PlotDomain& data);
19 19
20 20 // Layout Stuff
@@ -15,7 +15,7 BarGroup::BarGroup(BarChartSeries& series, QGraphicsItem *parent) :
15 15 dataChanged();
16 16 }
17 17
18 void BarGroup::setSize(const QSize& size)
18 void BarGroup::setSize(const QSizeF& size)
19 19 {
20 20 qDebug() << "BarGroup::setSize";
21 21 mWidth = size.width();
@@ -14,7 +14,7 public:
14 14 explicit BarGroup(BarChartSeries& series, QGraphicsItem *parent = 0);
15 15
16 16 public: // from ChartItem
17 void setSize(const QSize &size);
17 void setSize(const QSizeF &size);
18 18 void setPlotDomain(const PlotDomain& data);
19 19
20 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 21 // qDebug() << "PercentBarGroup::setSize";
22 22 mWidth = size.width();
@@ -14,7 +14,7 public:
14 14 PercentBarGroup(PercentBarChartSeries& series, QGraphicsItem *parent = 0);
15 15
16 16 public: // From ChartItem
17 void setSize(const QSize &size);
17 void setSize(const QSizeF &size);
18 18 void setPlotDomain(const PlotDomain& data);
19 19
20 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 22 // qDebug() << "StackedBarGroup::setSize";
23 23 mWidth = size.width();
@@ -17,7 +17,7 public:
17 17 StackedBarGroup(StackedBarChartSeries& series, QGraphicsItem *parent = 0);
18 18
19 19 public: // From ChartItem
20 void setSize(const QSize &size);
20 void setSize(const QSizeF &size);
21 21 void setPlotDomain(const PlotDomain& data);
22 22
23 23 // From ChartThemeObserver
@@ -12,7 +12,7 class ChartItem : public QGraphicsItem
12 12 public:
13 13 ChartItem(QGraphicsItem* parent = 0):QGraphicsItem(parent){};
14 14 virtual ~ChartItem(){};
15 virtual void setSize(const QSize &size) = 0;
15 virtual void setSize(const QSizeF &size) = 0;
16 16 virtual void setPlotDomain(const PlotDomain& data) = 0;
17 17 };
18 18
@@ -28,7 +28,7 qreal PlotDomain::spanY() const
28 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 33 PlotDomain domain;
34 34
@@ -13,7 +13,7 public:
13 13 qreal spanX() const;
14 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 19 public:
@@ -19,11 +19,12
19 19 #include "plotdomain_p.h"
20 20 #include "axisitem_p.h"
21 21 #include <QGraphicsScene>
22 #include <QGraphicsSceneResizeEvent>
22 23 #include <QDebug>
23 24
24 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 28 m_backgroundItem(0),
28 29 m_titleItem(0),
29 30 m_axisXItem(new AxisItem(AxisItem::X_AXIS, this)),
@@ -226,36 +227,6 QChartSeries* QChart::createSeries(QChartSeries::QChartSeriesType type)
226 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 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 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 296 if(!rectangle.isValid()) return;
326 297
327 298 qreal margin = this->margin();
328 299
329 QRect rect = rectangle.normalized();
300 QRectF rect = rectangle.normalized();
330 301 rect.translate(-margin, -margin);
331 302
332 303 PlotDomain& oldDomain = m_plotDomainList[m_plotDataIndex];
@@ -350,7 +321,7 void QChart::zoomIn()
350 321 item->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
351 322 update();
352 323 } else {
353 QRect rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
324 QRectF rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
354 325 rect.setWidth(rect.width()/2);
355 326 rect.setHeight(rect.height()/2);
356 327 rect.moveCenter(m_rect.center());
@@ -397,6 +368,39 void QChart::setAxis(AxisItem *item, const QChartAxis& axis)
397 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 404 #include "moc_qchart.cpp"
401 405
402 406 QTCOMMERCIALCHART_END_NAMESPACE
@@ -3,10 +3,12
3 3
4 4 #include <qchartglobal.h>
5 5 #include <qchartseries.h>
6 #include <QGraphicsObject>
6 #include <QGraphicsWidget>
7 7 #include <QLinearGradient>
8 8 #include <QFont>
9 9
10 class QGraphicsSceneResizeEvent;
11
10 12 QTCOMMERCIALCHART_BEGIN_NAMESPACE
11 13
12 14 class AxisItem;
@@ -25,7 +27,7 class ChartItem;
25 27 /*!
26 28 * TODO: define the responsibilities
27 29 */
28 class QTCOMMERCIALCHART_EXPORT QChart : public QGraphicsObject
30 class QTCOMMERCIALCHART_EXPORT QChart : public QGraphicsWidget
29 31 {
30 32 Q_OBJECT
31 33 public:
@@ -45,7 +47,7 public:
45 47 };
46 48
47 49 public:
48 QChart(QGraphicsObject* parent = 0);
50 QChart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
49 51 ~QChart();
50 52
51 53 //from QGraphicsItem
@@ -57,7 +59,6 public:
57 59 // TODO: who owns the series now? maybe owned by chart and returned a reference instead...
58 60 QChartSeries* createSeries(QChartSeries::QChartSeriesType type);
59 61
60 void setSize(const QSize& size);
61 62 void setMargin(int margin);
62 63 int margin() const;
63 64 void setTheme(QChart::ChartThemeId theme);
@@ -65,7 +66,7 public:
65 66 void setTitle(const QString& title,const QFont& font = QFont());
66 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 70 void zoomIn();
70 71 void zoomOut();
71 72 void zoomReset();
@@ -74,6 +75,9 public:
74 75 void setAxisY(const QChartAxis& axis);
75 76 void setAxisY(const QList<QChartAxis>& axis);
76 77
78 protected:
79 void resizeEvent(QGraphicsSceneResizeEvent *event);
80
77 81 private:
78 82 void setAxis(AxisItem *item, const QChartAxis& axis);
79 83
@@ -85,7 +89,7 private:
85 89 QGraphicsTextItem* m_titleItem;
86 90 AxisItem* m_axisXItem;
87 91 QList<AxisItem*> m_axisYItem;
88 QRect m_rect;
92 QRectF m_rect;
89 93 QList<QChartSeries *> m_chartSeries;
90 94 QList<ChartItem *> m_chartItems;
91 95 QVector<PlotDomain> m_plotDomainList;
@@ -28,7 +28,7 QChartView::~QChartView()
28 28 void QChartView::resizeEvent(QResizeEvent *event)
29 29 {
30 30 m_scene->setSceneRect(0,0,size().width(),size().height());
31 m_chart->setSize(size());
31 m_chart->resize(size());
32 32 QWidget::resizeEvent(event);
33 33 }
34 34
@@ -32,7 +32,7 QChartWidget::~QChartWidget()
32 32 void QChartWidget::resizeEvent(QResizeEvent *event)
33 33 {
34 34 m_scene->setSceneRect(0,0,size().width(),size().height());
35 m_chart->setSize(size());
35 m_chart->resize(size());
36 36 QWidget::resizeEvent(event);
37 37 }
38 38
@@ -49,7 +49,7 bool QPieSeriesPrivate::setData(QList<qreal> data)
49 49 return true;
50 50 }
51 51
52 void QPieSeriesPrivate::setSize(const QSize &size)
52 void QPieSeriesPrivate::setSize(const QSizeF &size)
53 53 {
54 54 // TODO: allow user setting the size?
55 55 // TODO: allow user defining the margins?
@@ -19,7 +19,7 public:
19 19 ~QPieSeriesPrivate();
20 20
21 21 public: // from ChartItem
22 void setSize(const QSize &size);
22 void setSize(const QSizeF &size);
23 23 void setPlotDomain(const PlotDomain& data);
24 24 // This is a dummy QGraphicsItem; dummy implementation
25 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 42 // m_boundingRect = QRectF(pos().x(), pos().y(), size.width(), size.height());
43 43 m_boundingRect = QRectF(0, 0, size.width(), size.height());
@@ -18,7 +18,7 public:
18 18 QScatterSeriesPrivate(QGraphicsItem *parent);
19 19
20 20 public: // from ChartObjectInterface
21 void setSize(const QSize &size);
21 void setSize(const QSizeF &size);
22 22 void setPlotDomain(const PlotDomain& data);
23 23
24 24 public: // from ChartThemeObserver
@@ -15,7 +15,7 XYLineChartItem::XYLineChartItem(QXYChartSeries* series,QGraphicsItem *parent) :
15 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 20 m_rect = QRect(0, 0, size.width(), size.height());
21 21 prepareGeometryChange();
@@ -22,7 +22,7 public:
22 22 // virtual QPainterPath shape() const;
23 23
24 24 public: // from ChartItem
25 void setSize(const QSize &size);
25 void setSize(const QSizeF &size);
26 26 void setPlotDomain(const PlotDomain& data);
27 27
28 28 private:
General Comments 0
You need to be logged in to leave comments. Login now