From 44f1f46281dd5f37c27700c55b1030fa3f7f170f 2012-10-09 09:15:08 From: Michal Klocek Date: 2012-10-09 09:15:08 Subject: [PATCH] Refactors ChartAxis * move sizeHint to vertical and horizontal subclasses * adds nessery getters and setters * fixes sizeHint inheritance changes --- diff --git a/src/axis/barcategoryaxis/chartbarcategoryaxisx.cpp b/src/axis/barcategoryaxis/chartbarcategoryaxisx.cpp index 1460665..dd098cb 100644 --- a/src/axis/barcategoryaxis/chartbarcategoryaxisx.cpp +++ b/src/axis/barcategoryaxis/chartbarcategoryaxisx.cpp @@ -112,7 +112,7 @@ QSizeF ChartBarCategoryAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constra QFontMetrics fn(font()); QSizeF sh; - QSizeF base = ChartAxis::sizeHint(which, constraint); + QSizeF base = HorizontalAxis::sizeHint(which, constraint); QStringList ticksList = createCategoryLabels(ChartAxis::layout()); qreal width=0; diff --git a/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp b/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp index 05c2983..ee0a4f8 100644 --- a/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp +++ b/src/axis/barcategoryaxis/chartbarcategoryaxisy.cpp @@ -110,7 +110,7 @@ QSizeF ChartBarCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constra QFontMetrics fn(font()); QSizeF sh; - QSizeF base = ChartAxis::sizeHint(which, constraint); + QSizeF base = VerticalAxis::sizeHint(which, constraint); QStringList ticksList = createCategoryLabels(ChartAxis::layout()); qreal width=0; diff --git a/src/axis/categoryaxis/chartcategoryaxisx.cpp b/src/axis/categoryaxis/chartcategoryaxisx.cpp index 3dc395e..49a880c 100644 --- a/src/axis/categoryaxis/chartcategoryaxisx.cpp +++ b/src/axis/categoryaxis/chartcategoryaxisx.cpp @@ -84,7 +84,7 @@ QSizeF ChartCategoryAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint QFontMetrics fn(font()); QSizeF sh; - QSizeF base = ChartAxis::sizeHint(which, constraint); + QSizeF base = HorizontalAxis::sizeHint(which, constraint); QStringList ticksList = m_axis->categoriesLabels(); qreal width = 0; qreal height = 0; diff --git a/src/axis/categoryaxis/chartcategoryaxisy.cpp b/src/axis/categoryaxis/chartcategoryaxisy.cpp index 707abe0..f1d3ba2 100644 --- a/src/axis/categoryaxis/chartcategoryaxisy.cpp +++ b/src/axis/categoryaxis/chartcategoryaxisy.cpp @@ -84,7 +84,7 @@ QSizeF ChartCategoryAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint QFontMetrics fn(font()); QSizeF sh; - QSizeF base = ChartAxis::sizeHint(which, constraint); + QSizeF base = VerticalAxis::sizeHint(which, constraint); QStringList ticksList = m_axis->categoriesLabels(); qreal width = 0; qreal height = 0; diff --git a/src/axis/chartaxis.cpp b/src/axis/chartaxis.cpp index fee2ba6..b4715bb 100644 --- a/src/axis/chartaxis.cpp +++ b/src/axis/chartaxis.cpp @@ -422,37 +422,6 @@ void ChartAxis::setLabels(const QStringList &labels) m_labelsList = labels; } -QSizeF ChartAxis::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const -{ - - Q_UNUSED(constraint); - QFontMetrics fn(m_title->font()); - QSizeF sh; - - if (m_titleText.isNull()) - return sh; - - switch (which) { - case Qt::MinimumSize: - if (orientation() == Qt::Horizontal) - sh = QSizeF(fn.boundingRect("...").width(), fn.height()); - else if (orientation() == Qt::Vertical) - sh = QSizeF(fn.height(), fn.boundingRect("...").width()); - break; - case Qt::MaximumSize: - case Qt::PreferredSize: - if (orientation() == Qt::Horizontal) - sh = QSizeF(fn.boundingRect(m_chartAxis->title()).width(), fn.height()); - else if (orientation() == Qt::Vertical) - sh = QSizeF(fn.height(), fn.boundingRect(m_chartAxis->title()).width()); - break; - default: - break; - } - - return sh; -} - QStringList ChartAxis::createValueLabels(int ticks) const { Q_ASSERT(m_max > m_min); @@ -497,6 +466,13 @@ QStringList ChartAxis::createDateTimeLabels(const QString &format, int ticks) co return labels; } +QSizeF ChartAxis::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const +{ + Q_UNUSED(which); + Q_UNUSED(constraint); + return QSizeF(); +} + #include "moc_chartaxis_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/axis/chartaxis_p.h b/src/axis/chartaxis_p.h index a15bf8a..c2473f9 100644 --- a/src/axis/chartaxis_p.h +++ b/src/axis/chartaxis_p.h @@ -51,6 +51,8 @@ public: ChartAxis(QAbstractAxis *axis, ChartPresenter *presenter, bool intervalAxis = false); ~ChartAxis(); + QAbstractAxis* axis() const { return m_chartAxis; } + void setArrowOpacity(qreal opacity); qreal arrowOpacity() const; void setArrowVisibility(bool visible); @@ -86,6 +88,7 @@ public: void setTitleBrush(const QBrush &brush); void setTitleFont(const QFont &font); void setTitleText(const QString &title); + QString titleText() const {return m_titleText; }; void setLayout(QVector &layout); QVector layout() const { return m_layoutVector; } @@ -120,6 +123,7 @@ protected: QList labelItems() { return m_labels->childItems();}; QList shadeItems() { return m_shades->childItems();}; QList arrowItems() { return m_arrow->childItems();}; + QGraphicsSimpleTextItem* titleItem() const { return m_title;} QFont font() const { return m_font; } qreal min() const {return m_min; } diff --git a/src/axis/horizontalaxis.cpp b/src/axis/horizontalaxis.cpp index d013929..2a3c676 100644 --- a/src/axis/horizontalaxis.cpp +++ b/src/axis/horizontalaxis.cpp @@ -156,4 +156,28 @@ void HorizontalAxis::updateGeometry() } } +QSizeF HorizontalAxis::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const +{ + Q_UNUSED(constraint); + QFontMetrics fn(titleItem()->font()); + QSizeF sh; + + if (titleText().isNull()) + return sh; + + switch (which) { + case Qt::MinimumSize: + sh = QSizeF(fn.boundingRect("...").width(), fn.height()); + break; + case Qt::MaximumSize: + case Qt::PreferredSize: + sh = QSizeF(fn.boundingRect(axis()->title()).width(), fn.height()); + break; + default: + break; + } + + return sh; +} + QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/axis/horizontalaxis_p.h b/src/axis/horizontalaxis_p.h index 31a1483..8ce0859 100644 --- a/src/axis/horizontalaxis_p.h +++ b/src/axis/horizontalaxis_p.h @@ -39,6 +39,7 @@ class HorizontalAxis : public ChartAxis public: HorizontalAxis(QAbstractAxis *axis, ChartPresenter *presenter, bool intervalAxis = false); ~HorizontalAxis(); + QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; protected: void updateGeometry(); diff --git a/src/axis/valueaxis/chartvalueaxisx.cpp b/src/axis/valueaxis/chartvalueaxisx.cpp index 9635bd9..2b940a7 100644 --- a/src/axis/valueaxis/chartvalueaxisx.cpp +++ b/src/axis/valueaxis/chartvalueaxisx.cpp @@ -82,7 +82,7 @@ QSizeF ChartValueAxisX::sizeHint(Qt::SizeHint which, const QSizeF &constraint) c QFontMetrics fn(font()); QSizeF sh; - QSizeF base = ChartAxis::sizeHint(which, constraint); + QSizeF base = HorizontalAxis::sizeHint(which, constraint); QStringList ticksList = createValueLabels(m_tickCount); qreal width = 0; qreal height = 0; diff --git a/src/axis/valueaxis/chartvalueaxisy.cpp b/src/axis/valueaxis/chartvalueaxisy.cpp index 407fa94..07405d1 100644 --- a/src/axis/valueaxis/chartvalueaxisy.cpp +++ b/src/axis/valueaxis/chartvalueaxisy.cpp @@ -84,7 +84,7 @@ QSizeF ChartValueAxisY::sizeHint(Qt::SizeHint which, const QSizeF &constraint) c QFontMetrics fn(font()); QSizeF sh; - QSizeF base = ChartAxis::sizeHint(which, constraint); + QSizeF base = VerticalAxis::sizeHint(which, constraint); QStringList ticksList = createValueLabels(m_tickCount); qreal width = 0; qreal height = 0; diff --git a/src/axis/verticalaxis.cpp b/src/axis/verticalaxis.cpp index dc1e888..6919374 100644 --- a/src/axis/verticalaxis.cpp +++ b/src/axis/verticalaxis.cpp @@ -151,4 +151,29 @@ void VerticalAxis::updateGeometry() } } +QSizeF VerticalAxis::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const +{ + + Q_UNUSED(constraint); + QFontMetrics fn(titleItem()->font()); + QSizeF sh; + + if (titleText().isNull()) + return sh; + + switch (which) { + case Qt::MinimumSize: + sh = QSizeF(fn.height(), fn.boundingRect("...").width()); + break; + case Qt::MaximumSize: + case Qt::PreferredSize: + sh = QSizeF(fn.height(), fn.boundingRect(axis()->title()).width()); + break; + default: + break; + } + + return sh; +} + QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/axis/verticalaxis_p.h b/src/axis/verticalaxis_p.h index 942f942..69c81f6 100644 --- a/src/axis/verticalaxis_p.h +++ b/src/axis/verticalaxis_p.h @@ -39,6 +39,7 @@ class VerticalAxis : public ChartAxis public: VerticalAxis(QAbstractAxis *axis, ChartPresenter *presenter, bool intervalAxis = false); ~VerticalAxis(); + QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; protected: void updateGeometry();