summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/examples.pro3
-rw-r--r--examples/multiaxis/main.cpp84
-rw-r--r--examples/multiaxis/multiaxis.pro5
-rw-r--r--src/axis/chartaxis.cpp10
-rw-r--r--src/axis/chartaxis_p.h4
-rw-r--r--src/axis/qabstractaxis.cpp15
-rw-r--r--src/axis/qabstractaxis.h8
-rw-r--r--src/axis/qabstractaxis_p.h2
-rw-r--r--src/axis/valueaxis/chartvalueaxisx.cpp98
-rw-r--r--src/axis/valueaxis/chartvalueaxisy.cpp102
-rw-r--r--src/chartlayout.cpp121
-rw-r--r--src/chartpresenter.cpp31
12 files changed, 333 insertions, 150 deletions
diff --git a/examples/examples.pro b/examples/examples.pro
index 13b87e58..4aaddc4a 100644
--- a/examples/examples.pro
+++ b/examples/examples.pro
@@ -30,7 +30,8 @@ SUBDIRS += \
donutbreakdown \
scrollchart \
temperaturerecords \
- donutchart
+ donutchart \
+ multiaxis
!linux-arm*: {
SUBDIRS += \
diff --git a/examples/multiaxis/main.cpp b/examples/multiaxis/main.cpp
new file mode 100644
index 00000000..813fc7a6
--- /dev/null
+++ b/examples/multiaxis/main.cpp
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the Qt Commercial Charts Add-on.
+**
+** $QT_BEGIN_LICENSE$
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QApplication>
+#include <QMainWindow>
+#include <QChartView>
+#include <QLineSeries>
+#include <QValueAxis>
+#include <QTime>
+#include <QValueAxis>
+
+QTCOMMERCIALCHART_USE_NAMESPACE
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+
+ qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
+
+ //![1]
+ QLineSeries* series;
+ QValueAxis *axisX;
+ QValueAxis *axisY;
+ QChart* chart = new QChart();
+ for (int i = 0; i < 5; i++) {
+ series = new QLineSeries;
+ for (int k(0); k < 8; k++)
+ series->append(i + k, qrand()%20);
+ chart->addSeries(series);
+
+ axisX = new QValueAxis;
+ axisX->setTickCount(7 + i);
+ axisX->setLinePenColor(series->pen().color());
+ if (i%2)
+ axisX->setAlternativePlacement(true);
+ axisY = new QValueAxis;
+ axisY->setTickCount(7 + i);
+ axisY->setLinePenColor(series->pen().color());
+ if (i%2)
+ axisY->setAlternativePlacement(true);
+
+ chart->setAxisX(axisX, series);
+ chart->setAxisY(axisY, series);
+ }
+ //![2]
+
+ //![3]
+ chart->legend()->hide();
+
+ chart->setTitle("Simple line chart example");
+ //![3]
+
+ //![4]
+ QChartView* chartView = new QChartView(chart);
+ chartView->setRenderHint(QPainter::Antialiasing);
+ //![4]
+
+
+ //![5]
+ QMainWindow window;
+ window.setCentralWidget(chartView);
+ window.resize(800, 600);
+ window.show();
+ //![5]
+
+ return a.exec();
+}
diff --git a/examples/multiaxis/multiaxis.pro b/examples/multiaxis/multiaxis.pro
new file mode 100644
index 00000000..33de57cb
--- /dev/null
+++ b/examples/multiaxis/multiaxis.pro
@@ -0,0 +1,5 @@
+!include( ../examples.pri ) {
+ error( "Couldn't find the examples.pri file!" )
+}
+TARGET = multiaxis
+SOURCES += main.cpp
diff --git a/src/axis/chartaxis.cpp b/src/axis/chartaxis.cpp
index 7018ac66..bdf9b169 100644
--- a/src/axis/chartaxis.cpp
+++ b/src/axis/chartaxis.cpp
@@ -399,6 +399,11 @@ void ChartAxis::setGeometry(const QRectF &rect)
}
+void ChartAxis::setInternalRect(const QRectF &size)
+{
+ m_internalRect = size;
+}
+
void ChartAxis::axisSelected()
{
//TODO: axis clicked;
@@ -441,6 +446,11 @@ Qt::Orientation ChartAxis::orientation() const
return m_chartAxis->orientation();
}
+bool ChartAxis::alternativePlacement() const
+{
+ return m_chartAxis->alternativePlacement();
+}
+
bool ChartAxis::isVisible()
{
return m_chartAxis->isVisible();
diff --git a/src/axis/chartaxis_p.h b/src/axis/chartaxis_p.h
index acfc127a..c88c695c 100644
--- a/src/axis/chartaxis_p.h
+++ b/src/axis/chartaxis_p.h
@@ -96,6 +96,7 @@ public:
ChartAnimation* animation() const { return m_animation; };
Qt::Orientation orientation() const;
+ bool alternativePlacement() const;
bool isVisible();
void hide();
@@ -103,6 +104,8 @@ public:
void setGeometry(const QRectF &size);
QRectF geometry() const { return m_rect; }
+ void setInternalRect(const QRectF &size);
+
virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF& constraint = QSizeF()) const;
protected:
@@ -128,6 +131,7 @@ protected:
int m_labelsAngle;
//TODO: to be removed
QRectF m_rect;
+ QRectF m_internalRect;
QScopedPointer<QGraphicsItemGroup> m_grid;
QScopedPointer<QGraphicsItemGroup> m_shades;
QScopedPointer<QGraphicsItemGroup> m_labels;
diff --git a/src/axis/qabstractaxis.cpp b/src/axis/qabstractaxis.cpp
index b098af62..e613322c 100644
--- a/src/axis/qabstractaxis.cpp
+++ b/src/axis/qabstractaxis.cpp
@@ -693,13 +693,23 @@ Qt::Orientation QAbstractAxis::orientation()
return d_ptr->m_orientation;
}
+bool QAbstractAxis::alternativePlacement() const
+{
+ return d_ptr->m_alternativePlacement;
+}
+
+void QAbstractAxis::setAlternativePlacement(bool placement)
+{
+ d_ptr->m_alternativePlacement = placement;
+}
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
QAbstractAxisPrivate::QAbstractAxisPrivate(QAbstractAxis* q):
q_ptr(q),
m_orientation(Qt::Orientation(0)),
m_dataset(0),
- m_visible(false),
+ m_visible(true),
m_arrowVisible(true),
m_gridLineVisible(true),
m_labelsVisible(true),
@@ -707,7 +717,8 @@ QAbstractAxisPrivate::QAbstractAxisPrivate(QAbstractAxis* q):
m_shadesVisible(false),
m_shadesBrush(Qt::SolidPattern),
m_shadesOpacity(1.0),
- m_dirty(false)
+ m_dirty(false),
+ m_alternativePlacement(false)
{
}
diff --git a/src/axis/qabstractaxis.h b/src/axis/qabstractaxis.h
index ea729c45..fe166c94 100644
--- a/src/axis/qabstractaxis.h
+++ b/src/axis/qabstractaxis.h
@@ -32,8 +32,8 @@ class QAbstractAxisPrivate;
class QTCOMMERCIALCHART_EXPORT QAbstractAxis : public QObject
{
- Q_OBJECT
- Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
+ Q_OBJECT
+ Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
Q_PROPERTY(bool lineVisible READ isLineVisible WRITE setLineVisible NOTIFY lineVisibleChanged)
Q_PROPERTY(QColor color READ linePenColor WRITE setLinePenColor NOTIFY colorChanged)
Q_PROPERTY(bool labelsVisible READ labelsVisible WRITE setLabelsVisible NOTIFY labelsVisibleChanged)
@@ -124,6 +124,8 @@ public:
QColor shadesBorderColor() const;
Qt::Orientation orientation();
+ bool alternativePlacement() const;
+ void setAlternativePlacement(bool placement);
//range handling
void setMin(const QVariant &min);
@@ -145,7 +147,7 @@ Q_SIGNALS:
void shadesBorderColorChanged(QColor color);
protected:
- QScopedPointer<QAbstractAxisPrivate> d_ptr;
+ QScopedPointer<QAbstractAxisPrivate> d_ptr;
Q_DISABLE_COPY(QAbstractAxis)
friend class ChartDataSet;
friend class ChartAxis;
diff --git a/src/axis/qabstractaxis_p.h b/src/axis/qabstractaxis_p.h
index b8df5e98..7935c122 100644
--- a/src/axis/qabstractaxis_p.h
+++ b/src/axis/qabstractaxis_p.h
@@ -107,6 +107,8 @@ private:
bool m_dirty;
+ bool m_alternativePlacement;
+
friend class QAbstractAxis;
friend class ChartDataSet;
};
diff --git a/src/axis/valueaxis/chartvalueaxisx.cpp b/src/axis/valueaxis/chartvalueaxisx.cpp
index 040b388f..fe2a9165 100644
--- a/src/axis/valueaxis/chartvalueaxisx.cpp
+++ b/src/axis/valueaxis/chartvalueaxisx.cpp
@@ -32,7 +32,7 @@ static int label_padding = 5;
QTCOMMERCIALCHART_BEGIN_NAMESPACE
ChartValueAxisX::ChartValueAxisX(QAbstractAxis *axis,ChartPresenter *presenter) : ChartAxis(axis,presenter),
-m_tickCount(0)
+ m_tickCount(0)
{
}
@@ -76,35 +76,47 @@ void ChartValueAxisX::updateGeometry()
QRectF chartRrect = presenter()->chartsGeometry();
QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0));
- lineItem->setLine(chartRrect.left(), chartRrect.bottom(), chartRrect.right(), chartRrect.bottom());
+ // lineItem->setLine(chartRrect.left(), chartRrect.bottom(), chartRrect.right(), chartRrect.bottom());
+ if (m_chartAxis->alternativePlacement())
+ lineItem->setLine(chartRrect.left(), m_internalRect.top(), chartRrect.right(), m_internalRect.top());
+ else
+ lineItem->setLine(chartRrect.left(), m_internalRect.bottom(), chartRrect.right(), m_internalRect.bottom());
qreal width = 0;
for (int i = 0; i < layout.size(); ++i) {
QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
lineItem->setLine(layout[i], chartRrect.top(), layout[i], chartRrect.bottom());
QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
- labelItem->setText(ticksList.at(i));
- const QRectF& rect = labelItem->boundingRect();
- QPointF center = rect.center();
- labelItem->setTransformOriginPoint(center.x(), center.y());
- labelItem->setPos(layout[i] - center.x(), chartRrect.bottom() + label_padding);
- if(labelItem->pos().x() <= width ||
- labelItem->pos().x() < m_rect.left() ||
- labelItem->pos().x() + rect.width() > m_rect.right()){
- labelItem->setVisible(false);
- lineItem->setVisible(false);
- }else{
- labelItem->setVisible(true);
- lineItem->setVisible(true);
- width=rect.width()+labelItem->pos().x();
- }
+ labelItem->setText(ticksList.at(i));
+ const QRectF& rect = labelItem->boundingRect();
+ QPointF center = rect.center();
+ labelItem->setTransformOriginPoint(center.x(), center.y());
+ // labelItem->setPos(layout[i] - center.x(), chartRrect.bottom() + label_padding);
+ if (m_chartAxis->alternativePlacement())
+ labelItem->setPos(layout[i] - center.x(), m_internalRect.top() - rect.height() - label_padding);
+ else
+ labelItem->setPos(layout[i] - center.x(), m_internalRect.bottom() + label_padding);
+ if(labelItem->pos().x() <= width ||
+ labelItem->pos().x() < m_rect.left() ||
+ labelItem->pos().x() + rect.width() > m_rect.right()){
+ labelItem->setVisible(false);
+ lineItem->setVisible(false);
+ }else{
+ labelItem->setVisible(true);
+ lineItem->setVisible(true);
+ width=rect.width()+labelItem->pos().x();
+ }
if ((i+1)%2 && i>1) {
QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2-1));
rectItem->setRect(layout[i-1],chartRrect.top(),layout[i]-layout[i-1],chartRrect.height());
}
lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1));
- lineItem->setLine(layout[i],chartRrect.bottom(),layout[i],chartRrect.bottom()+5);
+ // lineItem->setLine(layout[i],chartRrect.bottom(),layout[i],chartRrect.bottom()+5);
+ if (m_chartAxis->alternativePlacement())
+ lineItem->setLine(layout[i],m_internalRect.top(),layout[i],m_internalRect.top()-5);
+ else
+ lineItem->setLine(layout[i],m_internalRect.bottom(),layout[i],m_internalRect.bottom()+5);
}
}
@@ -128,33 +140,33 @@ QSizeF ChartValueAxisX::sizeHint(Qt::SizeHint which, const QSizeF& constraint) c
qreal width=0;
qreal height=0;
- switch (which) {
- case Qt::MinimumSize:{
- int count = qMax(ticksList.last().count(),ticksList.first().count());
- width=fn.averageCharWidth()*count;
- height=fn.height()+label_padding;
- width=qMax(width,base.width());
- height+=base.height();
- sh = QSizeF(width,height);
- break;
- }
- case Qt::PreferredSize:{
- for (int i = 0; i < ticksList.size(); ++i)
- {
- width+=fn.averageCharWidth()*ticksList.at(i).count();
-
- }
- height=fn.height()+label_padding;
- width=qMax(width,base.width());
- height+=base.height();
- sh = QSizeF(width,height);
- break;
+ switch (which) {
+ case Qt::MinimumSize:{
+ int count = qMax(ticksList.last().count(),ticksList.first().count());
+ width=fn.averageCharWidth()*count;
+ height=fn.height()+label_padding;
+ width=qMax(width,base.width());
+ height+=base.height();
+ sh = QSizeF(width,height);
+ break;
+ }
+ case Qt::PreferredSize:{
+ for (int i = 0; i < ticksList.size(); ++i)
+ {
+ width+=fn.averageCharWidth()*ticksList.at(i).count();
+
}
- default:
- break;
- }
+ height=fn.height()+label_padding;
+ width=qMax(width,base.width());
+ height+=base.height();
+ sh = QSizeF(width,height);
+ break;
+ }
+ default:
+ break;
+ }
- return sh;
+ return sh;
}
QTCOMMERCIALCHART_END_NAMESPACE
diff --git a/src/axis/valueaxis/chartvalueaxisy.cpp b/src/axis/valueaxis/chartvalueaxisy.cpp
index 5199b67b..bf78459e 100644
--- a/src/axis/valueaxis/chartvalueaxisy.cpp
+++ b/src/axis/valueaxis/chartvalueaxisy.cpp
@@ -32,7 +32,7 @@ static int label_padding = 5;
QTCOMMERCIALCHART_BEGIN_NAMESPACE
ChartValueAxisY::ChartValueAxisY(QAbstractAxis *axis,ChartPresenter *presenter) : ChartAxis(axis,presenter),
-m_tickCount(0)
+ m_tickCount(0)
{
}
@@ -79,7 +79,11 @@ void ChartValueAxisY::updateGeometry()
qreal height = m_rect.bottom();
QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0));
- lineItem->setLine( chartRect.left() , chartRect.top(), chartRect.left(), chartRect.bottom());
+ // lineItem->setLine( chartRect.left() , chartRect.top(), chartRect.left(), chartRect.bottom());
+ if (m_chartAxis->alternativePlacement())
+ lineItem->setLine( m_internalRect.right() , chartRect.top(), m_internalRect.right(), chartRect.bottom());
+ else
+ lineItem->setLine( m_internalRect.left() , chartRect.top(), m_internalRect.left(), chartRect.bottom());
QFontMetrics fn(m_font);
@@ -88,40 +92,48 @@ void ChartValueAxisY::updateGeometry()
lineItem->setLine( chartRect.left() , layout[i], chartRect.right(), layout[i]);
QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
- QString text = ticksList.at(i);
+ QString text = ticksList.at(i);
- if (fn.boundingRect(text).width() > chartRect.left() - m_rect.left() - label_padding )
- {
- QString label = text + "...";
- while (fn.boundingRect(label).width() > chartRect.left() - m_rect.left() - label_padding && label.length() > 3)
- label.remove(label.length() - 4, 1);
- labelItem->setText(label);
- }else{
- labelItem->setText(text);
- }
+ if (fn.boundingRect(text).width() > chartRect.left() - m_rect.left() - label_padding )
+ {
+ QString label = text + "...";
+ while (fn.boundingRect(label).width() > chartRect.left() - m_rect.left() - label_padding && label.length() > 3)
+ label.remove(label.length() - 4, 1);
+ labelItem->setText(label);
+ }else{
+ labelItem->setText(text);
+ }
- const QRectF& rect = labelItem->boundingRect();
+ const QRectF& rect = labelItem->boundingRect();
- QPointF center = rect.center();
- labelItem->setTransformOriginPoint(center.x(), center.y());
- labelItem->setPos( chartRect.left() - rect.width() - label_padding , layout[i]-center.y());
+ QPointF center = rect.center();
+ labelItem->setTransformOriginPoint(center.x(), center.y());
+ // labelItem->setPos( chartRect.left() - rect.width() - label_padding , layout[i]-center.y());
+ if (m_chartAxis->alternativePlacement())
+ labelItem->setPos( m_internalRect.right() + label_padding , layout[i]-center.y());
+ else
+ labelItem->setPos( m_internalRect.left() - rect.width() - label_padding , layout[i]-center.y());
- if(labelItem->pos().y() + rect.height() > height ||
+ if(labelItem->pos().y() + rect.height() > height ||
labelItem->pos().y() < m_rect.top()) {
- labelItem->setVisible(false);
- lineItem->setVisible(false);
- }else{
- labelItem->setVisible(true);
- lineItem->setVisible(true);
- height=labelItem->pos().y();
- }
+ labelItem->setVisible(false);
+ lineItem->setVisible(false);
+ }else{
+ labelItem->setVisible(true);
+ lineItem->setVisible(true);
+ height=labelItem->pos().y();
+ }
if ((i+1)%2 && i>1) {
QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2-1));
rectItem->setRect( chartRect.left(),layout[i], chartRect.width(),layout[i-1]-layout[i]);
}
lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1));
- lineItem->setLine( chartRect.left()-5,layout[i], chartRect.left(),layout[i]);
+ // lineItem->setLine( chartRect.left()-5,layout[i], chartRect.left(),layout[i]);
+ if (m_chartAxis->alternativePlacement())
+ lineItem->setLine( m_internalRect.right()+5,layout[i], m_internalRect.right(),layout[i]);
+ else
+ lineItem->setLine( m_internalRect.left()-5,layout[i], m_internalRect.left(),layout[i]);
}
}
@@ -145,28 +157,28 @@ QSizeF ChartValueAxisY::sizeHint(Qt::SizeHint which, const QSizeF& constraint) c
qreal height=0;
switch (which) {
- case Qt::MinimumSize: {
- int count = qMax(ticksList.first().count() , ticksList.last().count());
- width=fn.averageCharWidth()*count+label_padding;
- height=fn.height();
- height=qMax(height,base.height());
- width+=base.width();
- sh = QSizeF(width,height);
- break;
- }
- case Qt::PreferredSize:
+ case Qt::MinimumSize: {
+ int count = qMax(ticksList.first().count() , ticksList.last().count());
+ width=fn.averageCharWidth()*count+label_padding;
+ height=fn.height();
+ height=qMax(height,base.height());
+ width+=base.width();
+ sh = QSizeF(width,height);
+ break;
+ }
+ case Qt::PreferredSize:
+ {
+ for (int i = 0; i < ticksList.size(); ++i)
{
- for (int i = 0; i < ticksList.size(); ++i)
- {
- width=qMax(qreal(fn.averageCharWidth()*ticksList.at(i).count())+label_padding,width);
- height+=fn.height();
- }
- height=qMax(height,base.height());
- width+=base.width();
- sh = QSizeF(width,height);
- break;
+ width=qMax(qreal(fn.averageCharWidth()*ticksList.at(i).count())+label_padding,width);
+ height+=fn.height();
}
- default:
+ height=qMax(height,base.height());
+ width+=base.width();
+ sh = QSizeF(width,height);
+ break;
+ }
+ default:
break;
}
return sh;
diff --git a/src/chartlayout.cpp b/src/chartlayout.cpp
index d5085889..cfef1e8d 100644
--- a/src/chartlayout.cpp
+++ b/src/chartlayout.cpp
@@ -31,9 +31,9 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE
static const qreal golden_ratio = 0.25;
ChartLayout::ChartLayout(ChartPresenter* presenter):
-m_presenter(presenter),
-m_margins(20,20,20,20),
-m_minChartRect(0,0,200,200)
+ m_presenter(presenter),
+ m_margins(20,20,20,20),
+ m_minChartRect(0,0,200,200)
{
}
@@ -87,7 +87,7 @@ void ChartLayout::setGeometry(const QRectF& rect)
QRectF ChartLayout::calculateContentGeometry(const QRectF& geometry) const
{
- return geometry.adjusted(m_margins.left(),m_margins.top(),-m_margins.right(),-m_margins.bottom());
+ return geometry.adjusted(m_margins.left(),m_margins.top(),-m_margins.right(),-m_margins.bottom());
}
QRectF ChartLayout::calculateContentMinimum(const QRectF& minimum) const
@@ -118,13 +118,26 @@ QRectF ChartLayout::calculateChartGeometry(const QRectF& geometry, const QList<C
QSizeF vertical(0,0);
QSizeF horizontal(0,0);
+ int topAxisCount = 0;
+ int bottomAxisCount = 0;
+ int leftAxisCount = 0;
+ int rightAxisCount = 0;
+
// check axis size
foreach(ChartAxis* axis , axes) {
if(axis->orientation()==Qt::Vertical && axis->isVisible()) {
vertical = vertical.expandedTo(axis->effectiveSizeHint(Qt::MinimumSize));
+ if (axis->alternativePlacement())
+ rightAxisCount++;
+ else
+ leftAxisCount++;
}
else if(axis->orientation()==Qt::Horizontal && axis->isVisible()) {
horizontal = horizontal.expandedTo(axis->effectiveSizeHint(Qt::MinimumSize));
+ if (axis->alternativePlacement())
+ topAxisCount++;
+ else
+ bottomAxisCount++;
}
}
@@ -133,10 +146,37 @@ QRectF ChartLayout::calculateChartGeometry(const QRectF& geometry, const QList<C
QRectF rect = geometry.adjusted(width,vertical.height()/2,-horizontal.width()/2,-horizontal.height());
+ // axis area width
+ // TODO: replase with dynamic size code
+ int axisWidth = 35;
+
+ // get the final size of the plot rect
+ rect.adjust(leftAxisCount * axisWidth, topAxisCount * axisWidth, -rightAxisCount * axisWidth, -bottomAxisCount * axisWidth);
m_presenter->setChartsGeometry(rect);
+ leftAxisCount = 0;
+ rightAxisCount = 0;
+ bottomAxisCount = 0;
+ topAxisCount = 0;
+
+ // adjust the axes internal and external rects
foreach(ChartAxis* axis , axes) {
- axis->setGeometry(geometry);
+ if(axis->orientation()==Qt::Vertical) {
+ axis->setInternalRect(rect.adjusted(-leftAxisCount * axisWidth, 0, rightAxisCount * axisWidth, 0));
+ axis->setGeometry(rect.adjusted(-(leftAxisCount + 1) * axisWidth, 0, (rightAxisCount + 1) * axisWidth, 0));
+ if (axis->alternativePlacement())
+ rightAxisCount++;
+ else
+ leftAxisCount++;
+ }
+ else if(axis->orientation()==Qt::Horizontal) {
+ axis->setInternalRect(rect.adjusted(0, -topAxisCount * axisWidth, 0, bottomAxisCount * axisWidth));
+ axis->setGeometry(rect.adjusted(0, -(topAxisCount + 1) * axisWidth, 0, (bottomAxisCount + 1) * axisWidth));
+ if (axis->alternativePlacement())
+ topAxisCount++;
+ else
+ bottomAxisCount++;
+ }
}
return rect;
@@ -165,34 +205,33 @@ QRectF ChartLayout::calculateLegendGeometry(const QRectF& geometry,QLegend* lege
QRectF result;
switch (legend->alignment()) {
-
- case Qt::AlignTop: {
- legendRect = QRectF(geometry.topLeft(),QSizeF(geometry.width(),size.height()));
- result = geometry.adjusted(0,legendRect.height(),0,0);
- break;
- }
- case Qt::AlignBottom: {
- legendRect = QRectF(QPointF(geometry.left(),geometry.bottom()-size.height()),QSizeF(geometry.width(),size.height()));
- result = geometry.adjusted(0,0,0,-legendRect.height());
- break;
- }
- case Qt::AlignLeft: {
- qreal width = qMin(size.width(),geometry.width()*golden_ratio);
- legendRect = QRectF(geometry.topLeft(),QSizeF(width,geometry.height()));
- result = geometry.adjusted(width,0,0,0);
- break;
- }
- case Qt::AlignRight: {
- qreal width = qMin(size.width(),geometry.width()*golden_ratio);
- legendRect = QRectF(QPointF(geometry.right()-width,geometry.top()),QSizeF(width,geometry.height()));
- result = geometry.adjusted(0,0,-width,0);
- break;
- }
- default: {
- legendRect = QRectF(0,0,0,0);
- result = geometry;
- break;
- }
+ case Qt::AlignTop: {
+ legendRect = QRectF(geometry.topLeft(),QSizeF(geometry.width(),size.height()));
+ result = geometry.adjusted(0,legendRect.height(),0,0);
+ break;
+ }
+ case Qt::AlignBottom: {
+ legendRect = QRectF(QPointF(geometry.left(),geometry.bottom()-size.height()),QSizeF(geometry.width(),size.height()));
+ result = geometry.adjusted(0,0,0,-legendRect.height());
+ break;
+ }
+ case Qt::AlignLeft: {
+ qreal width = qMin(size.width(),geometry.width()*golden_ratio);
+ legendRect = QRectF(geometry.topLeft(),QSizeF(width,geometry.height()));
+ result = geometry.adjusted(width,0,0,0);
+ break;
+ }
+ case Qt::AlignRight: {
+ qreal width = qMin(size.width(),geometry.width()*golden_ratio);
+ legendRect = QRectF(QPointF(geometry.right()-width,geometry.top()),QSizeF(width,geometry.height()));
+ result = geometry.adjusted(0,0,-width,0);
+ break;
+ }
+ default: {
+ legendRect = QRectF(0,0,0,0);
+ result = geometry;
+ break;
+ }
}
legend->setGeometry(legendRect);
@@ -202,22 +241,22 @@ QRectF ChartLayout::calculateLegendGeometry(const QRectF& geometry,QLegend* lege
QRectF ChartLayout::calculateLegendMinimum(const QRectF& geometry,QLegend* legend) const
{
- QSizeF minSize = legend->effectiveSizeHint(Qt::MinimumSize,QSizeF(-1,-1));
- return geometry.adjusted(0,0,minSize.width(),minSize.height());
+ QSizeF minSize = legend->effectiveSizeHint(Qt::MinimumSize,QSizeF(-1,-1));
+ return geometry.adjusted(0,0,minSize.width(),minSize.height());
}
QRectF ChartLayout::calculateTitleGeometry(const QRectF& geometry,ChartTitle* title) const
{
- title->setGeometry(geometry);
- QPointF center = geometry.center() - title->boundingRect().center();
- title->setPos(center.x(),title->pos().y());
- return geometry.adjusted(0,title->boundingRect().height(),0,0);
+ title->setGeometry(geometry);
+ QPointF center = geometry.center() - title->boundingRect().center();
+ title->setPos(center.x(),title->pos().y());
+ return geometry.adjusted(0,title->boundingRect().height(),0,0);
}
QRectF ChartLayout::calculateTitleMinimum(const QRectF& minimum,ChartTitle* title) const
{
- QSizeF min = title->sizeHint(Qt::MinimumSize);
- return minimum.adjusted(0,0,min.width(),min.height());
+ QSizeF min = title->sizeHint(Qt::MinimumSize);
+ return minimum.adjusted(0,0,min.width(),min.height());
}
QSizeF ChartLayout::sizeHint ( Qt::SizeHint which, const QSizeF & constraint) const
diff --git a/src/chartpresenter.cpp b/src/chartpresenter.cpp
index 4e51b84d..3a42ed9a 100644
--- a/src/chartpresenter.cpp
+++ b/src/chartpresenter.cpp
@@ -135,26 +135,27 @@ void ChartPresenter::selectVisibleAxis()
while (i.hasNext()) {
i.next();
- i.key()->hide();
+// i.key()->hide();
+ i.key()->show();
}
- i.toFront();
+// i.toFront();
- bool axisX=false;
- bool axisY=false;
+// bool axisX=false;
+// bool axisY=false;
- while (i.hasNext()) {
- i.next();
- if(i.key()->orientation()==Qt::Vertical && !axisY) {
- axisY=true;
- i.key()->show();
- }
- if(i.key()->orientation()==Qt::Horizontal && !axisX) {
- axisX=true;
- i.key()->show();
- }
+// while (i.hasNext()) {
+// i.next();
+// if(i.key()->orientation()==Qt::Vertical && !axisY) {
+// axisY=true;
+// i.key()->show();
+// }
+// if(i.key()->orientation()==Qt::Horizontal && !axisX) {
+// axisX=true;
+// i.key()->show();
+// }
- }
+// }
}