##// END OF EJS Templates
Removed DeclarativePieSlice; properties in QPieSlice now
Tero Ahola -
r1329:d39e2c5d6353
parent child
Show More
@@ -77,6 +77,11 bool CustomTableModel::setData(const QModelIndex &index, const QVariant &value,
77 return false;
77 return false;
78 }
78 }
79
79
80 QVariant CustomTableModel::at(int row, int column)
81 {
82 return data(index(row, column));
83 }
84
80 void CustomTableModel::insertColumn(int column, const QModelIndex &parent)
85 void CustomTableModel::insertColumn(int column, const QModelIndex &parent)
81 {
86 {
82 beginInsertColumns(parent, column, column);
87 beginInsertColumns(parent, column, column);
@@ -27,7 +27,8
27 class CustomTableModel : public QAbstractTableModel
27 class CustomTableModel : public QAbstractTableModel
28 {
28 {
29 Q_OBJECT
29 Q_OBJECT
30 Q_PROPERTY(int count READ rowCount)
30 Q_PROPERTY(int rowCount READ rowCount)
31 Q_PROPERTY(int columnCount READ columnCount)
31
32
32 public:
33 public:
33 explicit CustomTableModel(QObject *parent = 0);
34 explicit CustomTableModel(QObject *parent = 0);
@@ -42,6 +43,7 public:
42 void insertRow(int row, const QModelIndex &parent = QModelIndex());
43 void insertRow(int row, const QModelIndex &parent = QModelIndex());
43 Q_INVOKABLE bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
44 Q_INVOKABLE bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
44 Q_INVOKABLE bool removeRow (int row, const QModelIndex &parent = QModelIndex());
45 Q_INVOKABLE bool removeRow (int row, const QModelIndex &parent = QModelIndex());
46 Q_INVOKABLE QVariant at(int row, int column);
45
47
46 private:
48 private:
47 QList<QVector<QVariant> * > m_data;
49 QList<QVector<QVariant> * > m_data;
@@ -28,41 +28,47 Rectangle {
28
28
29 ChartView {
29 ChartView {
30 id: chart
30 id: chart
31 title: "Custom model example"
31 title: "Top-5 car brand shares in Finland"
32 anchors.fill: parent
32 anchors.fill: parent
33 theme: ChartView.ChartThemeLight
33 theme: ChartView.ChartThemeLight
34 axisX.max: 10
34 axisX.max: 10
35 axisX.min: 0
35 axisX.min: 0
36 axisY.max: 20
36 axisY.max: 20
37 axisY.min: 0
37 axisY.min: 0
38 animationOptions: ChartView.SeriesAnimations
39 axisXLabels: [0, "2007", 1, "2008", 2, "2009", 3, "2010", 4, "2011", 5, "2012"]
38
40
39 // For dynamic data we use a custom data model derived from QAbstractiItemModel
41 // For dynamic data we use a custom data model derived from QAbstractiItemModel
40 CustomModel {
42 CustomModel {
41 id: customModel
43 id: customModel
42 CustomModelElement { values: [0, "Manufacturer", 1, 2] }
44 CustomModelElement { values: [0, "Manufacturer", 0, 1, 2, 3, 4] }
43 CustomModelElement { values: [1, "Volkswagen", 13.5, 12.5] }
45 CustomModelElement { values: [1, "Volkswagen", 10.3, 12.0, 12.8, 13.0, 13.8] }
44 CustomModelElement { values: [2, "Toyota", 10.9, 9.9] }
46 CustomModelElement { values: [2, "Toyota", 13.8, 13.5, 16.2, 13.7, 10.7] }
45 CustomModelElement { values: [3, "Ford", 8.6, 7.6] }
47 CustomModelElement { values: [3, "Ford", 6.4, 7.1, 8.9, 8.2, 8.6] }
46 CustomModelElement { values: [4, "Skoda", 8.2, 7.2] }
48 CustomModelElement { values: [4, "Skoda", 4.7, 5.8, 6.9, 8.3, 8.2] }
47 CustomModelElement { values: [5, "Volvo", 6.8, 5.8] }
49 CustomModelElement { values: [5, "Volvo", 7.1, 6.7, 6.5, 6.3, 7.0] }
50 CustomModelElement { values: [6, "Others", 57.7, 54.9, 48.7, 50.5, 51.7] }
48 }
51 }
49
52
50 LineSeries {
53 BarSeries {
51 name: "Volkswagen"
54 name: "Others"
52 HXYModelMapper {
55 barMargin: 0
56 HBarModelMapper {
53 model: customModel
57 model: customModel
54 xRow: 0
58 firstBarSetRow: 6
55 yRow: 1
59 lastBarSetRow: 6
56 first: 2
60 first: 2
57 }
61 }
58 }
62 }
59
63
60 LineSeries {
64 LineSeries {
61 name: "Toyota"
65 id: lineSeries
66 name: "Volkswagen"
62 HXYModelMapper {
67 HXYModelMapper {
68 id: lineSeriesMapper
63 model: customModel
69 model: customModel
64 xRow: 0
70 xRow: 0
65 yRow: 2
71 yRow: 1
66 first: 2
72 first: 2
67 }
73 }
68 }
74 }
@@ -71,64 +77,29 Rectangle {
71 id: pieSeries
77 id: pieSeries
72 size: 0.4
78 size: 0.4
73 horizontalPosition: 0.7
79 horizontalPosition: 0.7
74 verticalPosition: 0.3
80 verticalPosition: 0.4
75 }
81 onClicked: {
82 // Show the selection by exploding the slice
83 for (var i = 0; i < pieSeries.count; i++)
84 pieSeries.at(i).exploded = false;
85 slice.exploded = true;
76
86
77 // VPieModelMapper {
87 // Update the line series to show the yearly data for this slice
78 // series: pieSeries
88 lineSeries.name = slice.label;
79 // model: customModel
89 for (var j = 0; j < customModel.rowCount; j++) {
80 // labelsColumn: 1
90 if (customModel.at(j, 1) == slice.label) {
81 // valuesColumn: 2
91 lineSeriesMapper.yRow = j;
82 // first: 1
92 }
83 // }
84 HPieModelMapper {
85 series: pieSeries
86 model: customModel
87 labelsRow: 1
88 valuesRow: 2
89 first: 2
90 }
91
92 AreaSeries {
93 name: "Ford"
94 upperSeries: LineSeries {
95 HXYModelMapper {
96 model: customModel
97 xRow: 0
98 yRow: 3
99 first: 2
100 }
93 }
101 }
94 }
102 }
95 }
103
96
104 GroupedBarSeries {
97 VPieModelMapper {
105 name: "Skoda and Volvo"
98 series: pieSeries
106 HBarModelMapper {
99 model: customModel
107 model: customModel
100 labelsColumn: 1
108 firstBarSetRow: 4
101 valuesColumn: 2
109 lastBarSetRow: 5
102 first: 1
110 first: 2
111 }
112 }
103 }
113 }
104 }
114
115
116 // TODO: you could also implement appending to your model, for example:
117 // pieSeries.model.append(["Others", 52.0]);
118
119 // TODO: show how to use data from a list model in a chart view
120 // i.e. copy the data into a custom model
121 // ListModel {
122 // id: listModel
123 // ListElement {
124 // label: "Volkswagen"
125 // value: 13.5
126 // }
127 // ListElement {
128 // label: "Toyota"
129 // value: 10.9
130 // }
131 // // and so on...
132 // }
133
134 }
105 }
@@ -27,60 +27,6
27
27
28 QTCOMMERCIALCHART_BEGIN_NAMESPACE
28 QTCOMMERCIALCHART_BEGIN_NAMESPACE
29
29
30 DeclarativePieSlice::DeclarativePieSlice(QObject *parent) :
31 QPieSlice(parent)
32 {
33 }
34
35 QColor DeclarativePieSlice::color()
36 {
37 return brush().color();
38 }
39
40 void DeclarativePieSlice::setColor(QColor color)
41 {
42 QBrush b = brush();
43 b.setColor(color);
44 setBrush(b);
45 }
46
47 QColor DeclarativePieSlice::borderColor()
48 {
49 return pen().color();
50 }
51
52 void DeclarativePieSlice::setBorderColor(QColor color)
53 {
54 QPen p = pen();
55 p.setColor(color);
56 setPen(p);
57 }
58
59 int DeclarativePieSlice::borderWidth()
60 {
61 return pen().width();
62 }
63
64 void DeclarativePieSlice::setBorderWidth(int width)
65 {
66 QPen p = pen();
67 p.setWidth(width);
68 setPen(p);
69 }
70
71 QColor DeclarativePieSlice::labelColor()
72 {
73 return labelBrush().color();
74 }
75
76 void DeclarativePieSlice::setLabelColor(QColor color)
77 {
78 // TODO: use brush instead for label color
79 QBrush b = labelBrush();
80 b.setColor(color);
81 setLabelBrush(b);
82 }
83
84 DeclarativePieSeries::DeclarativePieSeries(QObject *parent) :
30 DeclarativePieSeries::DeclarativePieSeries(QObject *parent) :
85 QPieSeries(parent)
31 QPieSeries(parent)
86 {
32 {
@@ -93,8 +39,8 void DeclarativePieSeries::classBegin()
93 void DeclarativePieSeries::componentComplete()
39 void DeclarativePieSeries::componentComplete()
94 {
40 {
95 foreach(QObject *child, children()) {
41 foreach(QObject *child, children()) {
96 if (qobject_cast<DeclarativePieSlice *>(child)) {
42 if (qobject_cast<QPieSlice *>(child)) {
97 QPieSeries::append(qobject_cast<DeclarativePieSlice *>(child));
43 QPieSeries::append(qobject_cast<QPieSlice *>(child));
98 } else if(qobject_cast<QVPieModelMapper *>(child)) {
44 } else if(qobject_cast<QVPieModelMapper *>(child)) {
99 QVPieModelMapper *mapper = qobject_cast<QVPieModelMapper *>(child);
45 QVPieModelMapper *mapper = qobject_cast<QVPieModelMapper *>(child);
100 mapper->setSeries(this);
46 mapper->setSeries(this);
@@ -117,28 +63,28 void DeclarativePieSeries::appendSeriesChildren(QDeclarativeListProperty<QObject
117 Q_UNUSED(element);
63 Q_UNUSED(element);
118 }
64 }
119
65
120 DeclarativePieSlice *DeclarativePieSeries::at(int index)
66 QPieSlice *DeclarativePieSeries::at(int index)
121 {
67 {
122 QList<QPieSlice*> sliceList = slices();
68 QList<QPieSlice*> sliceList = slices();
123 if (index < sliceList.count())
69 if (index < sliceList.count())
124 return qobject_cast<DeclarativePieSlice *>(sliceList[index]);
70 return sliceList[index];
125
71
126 return 0;
72 return 0;
127 }
73 }
128
74
129 DeclarativePieSlice* DeclarativePieSeries::find(QString label)
75 QPieSlice* DeclarativePieSeries::find(QString label)
130 {
76 {
131 foreach (QPieSlice *slice, slices()) {
77 foreach (QPieSlice *slice, slices()) {
132 if (slice->label() == label)
78 if (slice->label() == label)
133 return qobject_cast<DeclarativePieSlice *>(slice);
79 return slice;
134 }
80 }
135 return 0;
81 return 0;
136 }
82 }
137
83
138 DeclarativePieSlice* DeclarativePieSeries::append(QString label, qreal value)
84 QPieSlice* DeclarativePieSeries::append(QString label, qreal value)
139 {
85 {
140 // TODO: parameter order is wrong, switch it:
86 // TODO: parameter order is wrong, switch it:
141 DeclarativePieSlice *slice = new DeclarativePieSlice(this);
87 QPieSlice *slice = new QPieSlice(this);
142 slice->setLabel(label);
88 slice->setLabel(label);
143 slice->setValue(value);
89 slice->setValue(value);
144 QPieSeries::append(slice);
90 QPieSeries::append(slice);
@@ -32,26 +32,6 QTCOMMERCIALCHART_BEGIN_NAMESPACE
32
32
33 class QChart;
33 class QChart;
34
34
35 class DeclarativePieSlice: public QPieSlice
36 {
37 Q_OBJECT
38 Q_PROPERTY(QColor color READ color WRITE setColor)
39 Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor)
40 Q_PROPERTY(int borderWidth READ borderWidth WRITE setBorderWidth)
41 Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor)
42
43 public:
44 explicit DeclarativePieSlice(QObject *parent = 0);
45 QColor color();
46 void setColor(QColor color);
47 QColor borderColor();
48 void setBorderColor(QColor color);
49 int borderWidth();
50 void setBorderWidth(int width);
51 QColor labelColor();
52 void setLabelColor(QColor color);
53 };
54
55 class DeclarativePieSeries : public QPieSeries, public QDeclarativeParserStatus
35 class DeclarativePieSeries : public QPieSeries, public QDeclarativeParserStatus
56 {
36 {
57 Q_OBJECT
37 Q_OBJECT
@@ -62,9 +42,9 class DeclarativePieSeries : public QPieSeries, public QDeclarativeParserStatus
62 public:
42 public:
63 explicit DeclarativePieSeries(QObject *parent = 0);
43 explicit DeclarativePieSeries(QObject *parent = 0);
64 QDeclarativeListProperty<QObject> seriesChildren();
44 QDeclarativeListProperty<QObject> seriesChildren();
65 Q_INVOKABLE DeclarativePieSlice *at(int index);
45 Q_INVOKABLE QPieSlice *at(int index);
66 Q_INVOKABLE DeclarativePieSlice* find(QString label);
46 Q_INVOKABLE QPieSlice *find(QString label);
67 Q_INVOKABLE DeclarativePieSlice* append(QString label, qreal value);
47 Q_INVOKABLE QPieSlice *append(QString label, qreal value);
68
48
69 public:
49 public:
70 void classBegin();
50 void classBegin();
@@ -58,7 +58,7 public:
58 qmlRegisterType<DeclarativeStackedBarSeries>(uri, 1, 0, "StackedBarSeries");
58 qmlRegisterType<DeclarativeStackedBarSeries>(uri, 1, 0, "StackedBarSeries");
59 qmlRegisterType<DeclarativePercentBarSeries>(uri, 1, 0, "PercentBarSeries");
59 qmlRegisterType<DeclarativePercentBarSeries>(uri, 1, 0, "PercentBarSeries");
60 qmlRegisterType<DeclarativePieSeries>(uri, 1, 0, "PieSeries");
60 qmlRegisterType<DeclarativePieSeries>(uri, 1, 0, "PieSeries");
61 qmlRegisterType<DeclarativePieSlice>(uri, 1, 0, "PieSlice");
61 qmlRegisterType<QPieSlice>(uri, 1, 0, "PieSlice");
62 qmlRegisterType<DeclarativeBarSet>(uri, 1, 0, "BarSet");
62 qmlRegisterType<DeclarativeBarSet>(uri, 1, 0, "BarSet");
63 qmlRegisterType<QHXYModelMapper>(uri, 1, 0, "HXYModelMapper");
63 qmlRegisterType<QHXYModelMapper>(uri, 1, 0, "HXYModelMapper");
64 qmlRegisterType<QVXYModelMapper>(uri, 1, 0, "VXYModelMapper");
64 qmlRegisterType<QVXYModelMapper>(uri, 1, 0, "VXYModelMapper");
@@ -71,8 +71,6 public:
71 QLatin1String("Trying to create uncreatable: QScatterSeries."));
71 QLatin1String("Trying to create uncreatable: QScatterSeries."));
72 qmlRegisterUncreatableType<QPieSeries>(uri, 1, 0, "QPieSeries",
72 qmlRegisterUncreatableType<QPieSeries>(uri, 1, 0, "QPieSeries",
73 QLatin1String("Trying to create uncreatable: QPieSeries."));
73 QLatin1String("Trying to create uncreatable: QPieSeries."));
74 qmlRegisterUncreatableType<QPieSlice>(uri, 1, 0, "QPieSlice",
75 QLatin1String("Trying to create uncreatable: QPieSlice."));
76 qmlRegisterUncreatableType<QAbstractItemModel>(uri, 1, 0, "AbstractItemModel",
74 qmlRegisterUncreatableType<QAbstractItemModel>(uri, 1, 0, "AbstractItemModel",
77 QLatin1String("Trying to create uncreatable: AbstractItemModel."));
75 QLatin1String("Trying to create uncreatable: AbstractItemModel."));
78 qmlRegisterUncreatableType<QXYModelMapper>(uri, 1, 0, "XYModelMapper",
76 qmlRegisterUncreatableType<QXYModelMapper>(uri, 1, 0, "XYModelMapper",
@@ -452,6 +452,63 qreal QPieSlice::angleSpan() const
452 return d_ptr->m_data.m_angleSpan;
452 return d_ptr->m_data.m_angleSpan;
453 }
453 }
454
454
455 QColor QPieSlice::color()
456 {
457 return brush().color();
458 }
459
460 void QPieSlice::setColor(QColor color)
461 {
462 QBrush b = brush();
463 if (color != b.color()) {
464 b.setColor(color);
465 setBrush(b);
466 }
467 }
468
469 QColor QPieSlice::borderColor()
470 {
471 return pen().color();
472 }
473
474 void QPieSlice::setBorderColor(QColor color)
475 {
476 QPen p = pen();
477 if (color != p.color()) {
478 p.setColor(color);
479 setPen(p);
480 emit borderColorChanged();
481 }
482 }
483
484 int QPieSlice::borderWidth()
485 {
486 return pen().width();
487 }
488
489 void QPieSlice::setBorderWidth(int width)
490 {
491 QPen p = pen();
492 if (width != p.width()) {
493 p.setWidth(width);
494 setPen(p);
495 }
496 }
497
498 QColor QPieSlice::labelColor()
499 {
500 return labelBrush().color();
501 }
502
503 void QPieSlice::setLabelColor(QColor color)
504 {
505 QBrush b = labelBrush();
506 if (color != b.color()) {
507 b.setColor(color);
508 setLabelBrush(b);
509 }
510 }
511
455 /*!
512 /*!
456 Returns the series that this slice belongs to.
513 Returns the series that this slice belongs to.
457
514
@@ -483,6 +540,10 QPieSlicePrivate *QPieSlicePrivate::fromSlice(QPieSlice *slice)
483 void QPieSlicePrivate::setPen(const QPen &pen, bool themed)
540 void QPieSlicePrivate::setPen(const QPen &pen, bool themed)
484 {
541 {
485 if (m_data.m_slicePen != pen) {
542 if (m_data.m_slicePen != pen) {
543 if (m_data.m_slicePen.color() != pen.color())
544 emit q_ptr->borderColorChanged();
545 if (m_data.m_slicePen.width() != pen.width())
546 emit q_ptr->borderWidthChanged();
486 m_data.m_slicePen = pen;
547 m_data.m_slicePen = pen;
487 m_data.m_slicePen.setThemed(themed);
548 m_data.m_slicePen.setThemed(themed);
488 emit q_ptr->penChanged();
549 emit q_ptr->penChanged();
@@ -492,6 +553,8 void QPieSlicePrivate::setPen(const QPen &pen, bool themed)
492 void QPieSlicePrivate::setBrush(const QBrush &brush, bool themed)
553 void QPieSlicePrivate::setBrush(const QBrush &brush, bool themed)
493 {
554 {
494 if (m_data.m_sliceBrush != brush) {
555 if (m_data.m_sliceBrush != brush) {
556 if (m_data.m_sliceBrush.color() != brush.color())
557 emit q_ptr->colorChanged();
495 m_data.m_sliceBrush = brush;
558 m_data.m_sliceBrush = brush;
496 m_data.m_sliceBrush.setThemed(themed);
559 m_data.m_sliceBrush.setThemed(themed);
497 emit q_ptr->brushChanged();
560 emit q_ptr->brushChanged();
@@ -501,6 +564,8 void QPieSlicePrivate::setBrush(const QBrush &brush, bool themed)
501 void QPieSlicePrivate::setLabelBrush(const QBrush &brush, bool themed)
564 void QPieSlicePrivate::setLabelBrush(const QBrush &brush, bool themed)
502 {
565 {
503 if (m_data.m_labelBrush != brush) {
566 if (m_data.m_labelBrush != brush) {
567 if (m_data.m_labelBrush.color() != brush.color())
568 emit q_ptr->labelColorChanged();
504 m_data.m_labelBrush = brush;
569 m_data.m_labelBrush = brush;
505 m_data.m_labelBrush.setThemed(themed);
570 m_data.m_labelBrush.setThemed(themed);
506 emit q_ptr->labelBrushChanged();
571 emit q_ptr->labelBrushChanged();
@@ -47,6 +47,10 class QTCOMMERCIALCHART_EXPORT QPieSlice : public QObject
47 Q_PROPERTY(qreal percentage READ percentage NOTIFY percentageChanged)
47 Q_PROPERTY(qreal percentage READ percentage NOTIFY percentageChanged)
48 Q_PROPERTY(qreal startAngle READ startAngle NOTIFY startAngleChanged)
48 Q_PROPERTY(qreal startAngle READ startAngle NOTIFY startAngleChanged)
49 Q_PROPERTY(qreal angleSpan READ angleSpan NOTIFY angleSpanChanged)
49 Q_PROPERTY(qreal angleSpan READ angleSpan NOTIFY angleSpanChanged)
50 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
51 Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor NOTIFY borderColorChanged)
52 Q_PROPERTY(int borderWidth READ borderWidth WRITE setBorderWidth NOTIFY borderWidthChanged)
53 Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor NOTIFY labelColorChanged)
50
54
51 public:
55 public:
52 explicit QPieSlice(QObject *parent = 0);
56 explicit QPieSlice(QObject *parent = 0);
@@ -87,6 +91,15 public:
87 qreal startAngle() const;
91 qreal startAngle() const;
88 qreal angleSpan() const;
92 qreal angleSpan() const;
89
93
94 QColor color();
95 void setColor(QColor color);
96 QColor borderColor();
97 void setBorderColor(QColor color);
98 int borderWidth();
99 void setBorderWidth(int width);
100 QColor labelColor();
101 void setLabelColor(QColor color);
102
90 QPieSeries *series() const;
103 QPieSeries *series() const;
91
104
92 Q_SIGNALS:
105 Q_SIGNALS:
@@ -103,6 +116,10 Q_SIGNALS:
103 void percentageChanged();
116 void percentageChanged();
104 void startAngleChanged();
117 void startAngleChanged();
105 void angleSpanChanged();
118 void angleSpanChanged();
119 void colorChanged();
120 void borderColorChanged();
121 void borderWidthChanged();
122 void labelColorChanged();
106 void clicked();
123 void clicked();
107 void hovered(bool state);
124 void hovered(bool state);
108
125
General Comments 0
You need to be logged in to leave comments. Login now