summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/legend/mainwidget.cpp1
-rw-r--r--plugins/declarative/declarativechart.cpp62
-rw-r--r--plugins/declarative/declarativechart.h20
-rw-r--r--src/chartpresenter.cpp4
-rw-r--r--src/chartpresenter_p.h1
-rw-r--r--src/qchart.cpp1
-rw-r--r--src/qchart.h9
-rw-r--r--tests/qmlchartproperties/qml/qmlchartproperties/Chart.qml37
8 files changed, 129 insertions, 6 deletions
diff --git a/examples/legend/mainwidget.cpp b/examples/legend/mainwidget.cpp
index 81468e89..52f8b9aa 100644
--- a/examples/legend/mainwidget.cpp
+++ b/examples/legend/mainwidget.cpp
@@ -139,7 +139,6 @@ void MainWidget::showLegendSpinbox()
{
m_legendSettings->setVisible(true);
QRectF chartViewRect = m_chartView->rect();
- QRectF legendRect = m_chart->legend()->boundingRect();
m_legendPosX->setMinimum(0);
m_legendPosX->setMaximum(chartViewRect.width());
diff --git a/plugins/declarative/declarativechart.cpp b/plugins/declarative/declarativechart.cpp
index 8bbe6aa2..d6448bb7 100644
--- a/plugins/declarative/declarativechart.cpp
+++ b/plugins/declarative/declarativechart.cpp
@@ -107,6 +107,30 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE
*/
/*!
+ \qmlproperty real ChartView::topMargin
+ The space between the top of chart view and the top of the plot area. The title (if non-empty) is drawn on top margin
+ area of the chart view. Top margin area is also used by legend, if aligned to top.
+*/
+
+/*!
+ \qmlproperty real ChartView::bottomMargin
+ The space between the bottom of chart view and the bottom of the plot area. The bottom margin area may be used by
+ legend (if aligned to bottom), x-axis, x-axis labels and x-axis tick marks.
+*/
+
+/*!
+ \qmlproperty real ChartView::leftMargin
+ The space between the left side of chart view and the left side of the plot area. The left margin area may be used by
+ legend (if aligned to left), y-axis, y-axis labels and y-axis tick marks.
+*/
+
+/*!
+ \qmlproperty real ChartView::rightMargin
+ The space between the right side of chart view and the right side of the plot area. The right margin area may be used
+ by legend (if aligned to right).
+*/
+
+/*!
\qmlmethod AbstractSeries ChartView::series(int index)
Returns the series with \a index on the chart. This allows you to loop through the series of a chart together with
the count property of the chart.
@@ -167,6 +191,22 @@ DeclarativeChart::DeclarativeChart(QDeclarativeItem *parent)
{
setFlag(QGraphicsItem::ItemHasNoContents, false);
// m_chart->axisX()->setNiceNumbersEnabled(false);
+ m_chartMargins = m_chart->margins();
+ connect(m_chart, SIGNAL(marginsChanged(QRectF)), this, SLOT(handleMarginsChanged(QRectF)));
+}
+
+void DeclarativeChart::handleMarginsChanged(QRectF newMargins)
+{
+ if (m_chartMargins.top() != newMargins.top())
+ topMarginChanged(m_chart->margins().top());
+ if (m_chartMargins.bottom() != newMargins.bottom())
+ bottomMarginChanged(m_chart->margins().bottom());
+ if (m_chartMargins.left() != newMargins.left())
+ leftMarginChanged(m_chart->margins().left());
+ if (m_chartMargins.right() != newMargins.right())
+ rightMarginChanged(m_chart->margins().right());
+
+ m_chartMargins = m_chart->margins();
}
DeclarativeChart::~DeclarativeChart()
@@ -302,7 +342,7 @@ void DeclarativeChart::setTitleColor(QColor color)
if (color != b.color()) {
b.setColor(color);
m_chart->setTitleBrush(b);
- emit titleColorChanged();
+ emit titleColorChanged(color);
}
}
@@ -355,6 +395,26 @@ bool DeclarativeChart::dropShadowEnabled()
return m_chart->isDropShadowEnabled();
}
+qreal DeclarativeChart::topMargin()
+{
+ return m_chart->margins().top();
+}
+
+qreal DeclarativeChart::bottomMargin()
+{
+ return m_chart->margins().bottom();
+}
+
+qreal DeclarativeChart::leftMargin()
+{
+ return m_chart->margins().left();
+}
+
+qreal DeclarativeChart::rightMargin()
+{
+ return m_chart->margins().right();
+}
+
void DeclarativeChart::zoom(qreal factor)
{
m_chart->zoom(factor);
diff --git a/plugins/declarative/declarativechart.h b/plugins/declarative/declarativechart.h
index f257325e..feeab728 100644
--- a/plugins/declarative/declarativechart.h
+++ b/plugins/declarative/declarativechart.h
@@ -47,6 +47,10 @@ class DeclarativeChart : public QDeclarativeItem
Q_PROPERTY(int count READ count)
Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged)
Q_PROPERTY(bool dropShadowEnabled READ dropShadowEnabled WRITE setDropShadowEnabled NOTIFY dropShadowEnabledChanged)
+ Q_PROPERTY(qreal topMargin READ topMargin NOTIFY topMarginChanged)
+ Q_PROPERTY(qreal bottomMargin READ bottomMargin NOTIFY bottomMarginChanged)
+ Q_PROPERTY(qreal leftMargin READ leftMargin NOTIFY leftMarginChanged)
+ Q_PROPERTY(qreal rightMargin READ rightMargin NOTIFY rightMarginChanged)
Q_ENUMS(Animation)
Q_ENUMS(Theme)
Q_ENUMS(SeriesType)
@@ -112,6 +116,10 @@ public:
int count();
void setDropShadowEnabled(bool enabled);
bool dropShadowEnabled();
+ qreal topMargin();
+ qreal bottomMargin();
+ qreal leftMargin();
+ qreal rightMargin();
public:
Q_INVOKABLE QAbstractSeries *series(int index);
@@ -126,14 +134,22 @@ public:
Q_SIGNALS:
void axisLabelsChanged();
- void titleColorChanged();
+ void titleColorChanged(QColor color);
void backgroundColorChanged();
void dropShadowEnabledChanged(bool enabled);
+ void topMarginChanged(qreal margin);
+ void bottomMarginChanged(qreal margin);
+ void leftMarginChanged(qreal margin);
+ void rightMarginChanged(qreal margin);
-public:
+public Q_SLOTS:
+ void handleMarginsChanged(QRectF newMargins);
+
+private:
// Extending QChart with DeclarativeChart is not possible because QObject does not support
// multi inheritance, so we now have a QChart as a member instead
QChart *m_chart;
+ QRectF m_chartMargins;
};
QTCOMMERCIALCHART_END_NAMESPACE
diff --git a/src/chartpresenter.cpp b/src/chartpresenter.cpp
index 5695cc61..eae233ce 100644
--- a/src/chartpresenter.cpp
+++ b/src/chartpresenter.cpp
@@ -300,6 +300,8 @@ void ChartPresenter::updateLayout()
{
if (!m_rect.isValid()) return;
+ QRectF oldChargMargins = m_chartMargins;
+
// recalculate title size
QSize titleSize;
@@ -389,6 +391,8 @@ void ChartPresenter::updateLayout()
emit geometryChanged(m_chartRect);
}
+ if (oldChargMargins != m_chartMargins)
+ emit marginsChanged(m_chartMargins);
}
void ChartPresenter::createChartBackgroundItem()
diff --git a/src/chartpresenter_p.h b/src/chartpresenter_p.h
index 19eca9fe..fdae5e74 100644
--- a/src/chartpresenter_p.h
+++ b/src/chartpresenter_p.h
@@ -122,6 +122,7 @@ private Q_SLOTS:
Q_SIGNALS:
void geometryChanged(const QRectF& rect);
void animationsFinished();
+ void marginsChanged(QRectF margins);
private:
QChart* m_chart;
diff --git a/src/qchart.cpp b/src/qchart.cpp
index 00c7f29b..9b70e8eb 100644
--- a/src/qchart.cpp
+++ b/src/qchart.cpp
@@ -76,6 +76,7 @@ QChart::QChart(QGraphicsItem *parent, Qt::WindowFlags wFlags) : QGraphicsWidget(
d_ptr->createConnections();
d_ptr->m_legend = new LegendScroller(this);
d_ptr->m_presenter->setTheme(QChart::ChartThemeLight, false);
+ connect(d_ptr->m_presenter, SIGNAL(marginsChanged(QRectF)), this, SIGNAL(marginsChanged(QRectF)));
}
/*!
diff --git a/src/qchart.h b/src/qchart.h
index cbd2836b..581b4758 100644
--- a/src/qchart.h
+++ b/src/qchart.h
@@ -37,6 +37,12 @@ struct QChartPrivate;
class QTCOMMERCIALCHART_EXPORT QChart : public QGraphicsWidget
{
Q_OBJECT
+ Q_PROPERTY(QChart::ChartTheme theme READ theme WRITE setTheme)
+ Q_PROPERTY(QString title READ title WRITE setTitle)
+ Q_PROPERTY(bool backgroundVisible READ isBackgroundVisible WRITE setBackgroundVisible)
+ Q_PROPERTY(bool dropShadowEnabled READ isDropShadowEnabled WRITE setDropShadowEnabled)
+ Q_PROPERTY(QChart::AnimationOptions animationOptions READ animationOptions WRITE setAnimationOptions)
+ Q_PROPERTY(QRectF margins READ margins NOTIFY marginsChanged)
Q_ENUMS(ChartTheme)
Q_ENUMS(AnimationOption)
@@ -107,6 +113,9 @@ public:
QLegend* legend() const;
QRectF margins() const;
+Q_SIGNALS:
+ void marginsChanged(QRectF newMargins);
+
protected:
void resizeEvent(QGraphicsSceneResizeEvent *event);
diff --git a/tests/qmlchartproperties/qml/qmlchartproperties/Chart.qml b/tests/qmlchartproperties/qml/qmlchartproperties/Chart.qml
index c34b294b..7cb7c5f5 100644
--- a/tests/qmlchartproperties/qml/qmlchartproperties/Chart.qml
+++ b/tests/qmlchartproperties/qml/qmlchartproperties/Chart.qml
@@ -38,10 +38,26 @@ ChartView {
XyPoint { x: 4.1; y: 3.3 }
}
- onVisibleChanged: console.log("chart.onVisibleChanged: " + series.visible);
- onTitleColorChanged: console.log("chart.onTitleColorChanged: " + series.titleColor);
+ onVisibleChanged: console.log("chart.onVisibleChanged: " + visible);
+ onTitleColorChanged: console.log("chart.onTitleColorChanged: " + color);
onBackgroundColorChanged: console.log("chart.onBackgroundColorChanged: " + series.backgroundColor);
onDropShadowEnabledChanged: console.log("chart.onDropShadowEnabledChanged: " + enabled);
+ onTopMarginChanged: {
+ console.log("chart.onTopMarginChanged: " + margin);
+ marginVisualizer.opacity = 1.0;
+ }
+ onBottomMarginChanged: {
+ console.log("chart.onBottomMarginChanged: " + margin);
+ marginVisualizer.opacity = 1.0;
+ }
+ onLeftMarginChanged: {
+ console.log("chart.onLeftMarginChanged: " + margin);
+ marginVisualizer.opacity = 1.0;
+ }
+ onRightMarginChanged: {
+ console.log("chart.onRightMarginChanged: " + margin);
+ marginVisualizer.opacity = 1.0;
+ }
legend.onVisibleChanged: console.log("legend.onVisibleChanged: " + series.legend.visible);
legend.onBackgroundVisibleChanged: console.log("legend.onBackgroundVisibleChanged: " + visible);
@@ -69,4 +85,21 @@ ChartView {
axisY.onShadesBorderColorChanged: console.log("axisY.onShadesBorderColorChanged: " + color);
axisY.onMinChanged: console.log("axisY.onMinChanged: " + min);
axisY.onMaxChanged: console.log("axisY.onMaxChanged: " + max);
+
+
+ Rectangle {
+ id: marginVisualizer
+ color: "transparent"
+ border.color: "red"
+ anchors.fill: parent
+ anchors.topMargin: parent.topMargin
+ anchors.bottomMargin: parent.bottomMargin
+ anchors.leftMargin: parent.leftMargin
+ anchors.rightMargin: parent.rightMargin
+ opacity: 0.0
+ onOpacityChanged: if (opacity == 1.0) opacity = 0.0;
+ Behavior on opacity {
+ NumberAnimation { duration: 800 }
+ }
+ }
}