summaryrefslogtreecommitdiffstats
path: root/src/axis/chartaxiselement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/axis/chartaxiselement.cpp')
-rw-r--r--src/axis/chartaxiselement.cpp402
1 files changed, 0 insertions, 402 deletions
diff --git a/src/axis/chartaxiselement.cpp b/src/axis/chartaxiselement.cpp
deleted file mode 100644
index c006b166..00000000
--- a/src/axis/chartaxiselement.cpp
+++ /dev/null
@@ -1,402 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 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 Enterprise Charts Add-on.
-**
-** $QT_BEGIN_LICENSE$
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise 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 "chartaxiselement_p.h"
-#include "qabstractaxis_p.h"
-#include "chartpresenter_p.h"
-#include "abstractchartlayout_p.h"
-#include <qmath.h>
-#include <QDateTime>
-#include <QTextDocument>
-
-QTCOMMERCIALCHART_BEGIN_NAMESPACE
-
-static const char *labelFormatMatchString = "%[\\-\\+#\\s\\d\\.lhjztL]*([dicuoxfegXFEG])";
-static const char *labelFormatMatchLocalizedString = "^([^%]*)%\\.(\\d+)([defgiEG])(.*)$";
-static QRegExp *labelFormatMatcher = 0;
-static QRegExp *labelFormatMatcherLocalized = 0;
-class StaticLabelFormatMatcherDeleter
-{
-public:
- StaticLabelFormatMatcherDeleter() {}
- ~StaticLabelFormatMatcherDeleter() {
- delete labelFormatMatcher;
- delete labelFormatMatcherLocalized;
- }
-};
-static StaticLabelFormatMatcherDeleter staticLabelFormatMatcherDeleter;
-
-ChartAxisElement::ChartAxisElement(QAbstractAxis *axis, QGraphicsItem *item, bool intervalAxis)
- : ChartElement(item),
- m_axis(axis),
- m_animation(0),
- m_grid(new QGraphicsItemGroup(item)),
- m_arrow(new QGraphicsItemGroup(item)),
- m_shades(new QGraphicsItemGroup(item)),
- m_labels(new QGraphicsItemGroup(item)),
- m_title(new QGraphicsTextItem(item)),
- m_intervalAxis(intervalAxis)
-
-{
- //initial initialization
- m_arrow->setHandlesChildEvents(false);
- m_arrow->setZValue(ChartPresenter::AxisZValue);
- m_labels->setZValue(ChartPresenter::AxisZValue);
- m_shades->setZValue(ChartPresenter::ShadesZValue);
- m_grid->setZValue(ChartPresenter::GridZValue);
- m_title->setZValue(ChartPresenter::GridZValue);
- m_title->document()->setDocumentMargin(ChartPresenter::textMargin());
- handleVisibleChanged(axis->isVisible());
- connectSlots();
-
- setFlag(QGraphicsItem::ItemHasNoContents, true);
-}
-
-ChartAxisElement::~ChartAxisElement()
-{
-}
-
-void ChartAxisElement::connectSlots()
-{
- QObject::connect(axis(), SIGNAL(visibleChanged(bool)), this, SLOT(handleVisibleChanged(bool)));
- QObject::connect(axis(), SIGNAL(lineVisibleChanged(bool)), this, SLOT(handleArrowVisibleChanged(bool)));
- QObject::connect(axis(), SIGNAL(gridVisibleChanged(bool)), this, SLOT(handleGridVisibleChanged(bool)));
- QObject::connect(axis(), SIGNAL(labelsVisibleChanged(bool)), this, SLOT(handleLabelsVisibleChanged(bool)));
- QObject::connect(axis(), SIGNAL(shadesVisibleChanged(bool)), this, SLOT(handleShadesVisibleChanged(bool)));
- QObject::connect(axis(), SIGNAL(labelsAngleChanged(int)), this, SLOT(handleLabelsAngleChanged(int)));
- QObject::connect(axis(), SIGNAL(linePenChanged(const QPen&)), this, SLOT(handleArrowPenChanged(const QPen&)));
- QObject::connect(axis(), SIGNAL(labelsPenChanged(const QPen&)), this, SLOT(handleLabelsPenChanged(const QPen&)));
- QObject::connect(axis(), SIGNAL(labelsBrushChanged(const QBrush&)), this, SLOT(handleLabelsBrushChanged(const QBrush&)));
- QObject::connect(axis(), SIGNAL(labelsFontChanged(const QFont&)), this, SLOT(handleLabelsFontChanged(const QFont&)));
- QObject::connect(axis(), SIGNAL(gridLinePenChanged(const QPen&)), this, SLOT(handleGridPenChanged(const QPen&)));
- QObject::connect(axis(), SIGNAL(shadesPenChanged(const QPen&)), this, SLOT(handleShadesPenChanged(const QPen&)));
- QObject::connect(axis(), SIGNAL(shadesBrushChanged(const QBrush&)), this, SLOT(handleShadesBrushChanged(const QBrush&)));
- QObject::connect(axis(), SIGNAL(titleTextChanged(const QString&)), this, SLOT(handleTitleTextChanged(const QString&)));
- QObject::connect(axis(), SIGNAL(titleFontChanged(const QFont&)), this, SLOT(handleTitleFontChanged(const QFont&)));
- QObject::connect(axis(), SIGNAL(titlePenChanged(const QPen&)), this, SLOT(handleTitlePenChanged(const QPen&)));
- QObject::connect(axis(), SIGNAL(titleBrushChanged(const QBrush&)), this, SLOT(handleTitleBrushChanged(const QBrush&)));
- QObject::connect(axis(), SIGNAL(titleVisibleChanged(bool)), this, SLOT(handleTitleVisibleChanged(bool)));
- QObject::connect(axis()->d_ptr.data(), SIGNAL(rangeChanged(qreal, qreal)), this, SLOT(handleRangeChanged(qreal, qreal)));
-}
-
-void ChartAxisElement::handleArrowVisibleChanged(bool visible)
-{
- m_arrow->setVisible(visible);
-}
-
-void ChartAxisElement::handleGridVisibleChanged(bool visible)
-{
- m_grid->setVisible(visible);
-}
-
-void ChartAxisElement::handleLabelsVisibleChanged(bool visible)
-{
- QGraphicsLayoutItem::updateGeometry();
- presenter()->layout()->invalidate();
- m_labels->setVisible(visible);
-}
-
-void ChartAxisElement::handleShadesVisibleChanged(bool visible)
-{
- m_shades->setVisible(visible);
-}
-
-void ChartAxisElement::handleTitleVisibleChanged(bool visible)
-{
- QGraphicsLayoutItem::updateGeometry();
- presenter()->layout()->invalidate();
- m_title->setVisible(visible);
-}
-
-void ChartAxisElement::handleLabelsAngleChanged(int angle)
-{
- foreach (QGraphicsItem *item, m_labels->childItems())
- item->setRotation(angle);
-
- QGraphicsLayoutItem::updateGeometry();
- presenter()->layout()->invalidate();
-}
-
-void ChartAxisElement::handleLabelsPenChanged(const QPen &pen)
-{
- Q_UNUSED(pen)
-}
-
-void ChartAxisElement::handleLabelsBrushChanged(const QBrush &brush)
-{
- foreach (QGraphicsItem *item, m_labels->childItems())
- static_cast<QGraphicsTextItem *>(item)->setDefaultTextColor(brush.color());
-}
-
-void ChartAxisElement::handleLabelsFontChanged(const QFont &font)
-{
- foreach (QGraphicsItem *item, m_labels->childItems())
- static_cast<QGraphicsTextItem *>(item)->setFont(font);
- QGraphicsLayoutItem::updateGeometry();
- presenter()->layout()->invalidate();
-}
-
-void ChartAxisElement::handleTitleTextChanged(const QString &title)
-{
- QGraphicsLayoutItem::updateGeometry();
- presenter()->layout()->invalidate();
- if (title.isEmpty() || !m_title->isVisible())
- m_title->setHtml(title);
-}
-
-void ChartAxisElement::handleTitlePenChanged(const QPen &pen)
-{
- Q_UNUSED(pen)
-}
-
-void ChartAxisElement::handleTitleBrushChanged(const QBrush &brush)
-{
- m_title->setDefaultTextColor(brush.color());
-}
-
-void ChartAxisElement::handleTitleFontChanged(const QFont &font)
-{
- if (m_title->font() != font) {
- m_title->setFont(font);
- QGraphicsLayoutItem::updateGeometry();
- presenter()->layout()->invalidate();
- }
-}
-
-void ChartAxisElement::handleVisibleChanged(bool visible)
-{
- setVisible(visible);
- if (!visible) {
- m_grid->setVisible(visible);
- m_arrow->setVisible(visible);
- m_shades->setVisible(visible);
- m_labels->setVisible(visible);
- m_title->setVisible(visible);
- } else {
- m_grid->setVisible(axis()->isGridLineVisible());
- m_arrow->setVisible(axis()->isLineVisible());
- m_shades->setVisible(axis()->shadesVisible());
- m_labels->setVisible(axis()->labelsVisible());
- m_title->setVisible(axis()->isTitleVisible());
- }
-
- if (presenter()) presenter()->layout()->invalidate();
-}
-
-void ChartAxisElement::handleRangeChanged(qreal min, qreal max)
-{
- Q_UNUSED(min);
- Q_UNUSED(max);
-
- if (!isEmpty()) {
- QVector<qreal> layout = calculateLayout();
- updateLayout(layout);
- QSizeF before = effectiveSizeHint(Qt::PreferredSize);
- QSizeF after = sizeHint(Qt::PreferredSize);
-
- if (before != after) {
- QGraphicsLayoutItem::updateGeometry();
- // We don't want to call invalidate on layout, since it will change minimum size of
- // component, which we would like to avoid since it causes nasty flips when scrolling
- // or zooming, instead recalculate layout and use plotArea for extra space.
- presenter()->layout()->setGeometry(presenter()->layout()->geometry());
- }
- }
-}
-
-bool ChartAxisElement::isEmpty()
-{
- return axisGeometry().isEmpty()
- || gridGeometry().isEmpty()
- || qFuzzyCompare(min(), max());
-}
-
-qreal ChartAxisElement::min() const
-{
- return m_axis->d_ptr->min();
-}
-
-qreal ChartAxisElement::max() const
-{
- return m_axis->d_ptr->max();
-}
-
-QString ChartAxisElement::formatLabel(const QString &formatSpec, const QByteArray &array,
- qreal value, int precision, const QString &preStr,
- const QString &postStr) const
-{
- QString retVal;
- if (!formatSpec.isEmpty()) {
- if (formatSpec.at(0) == QLatin1Char('d')
- || formatSpec.at(0) == QLatin1Char('i')
- || formatSpec.at(0) == QLatin1Char('c')) {
- if (presenter()->localizeNumbers())
- retVal = preStr + presenter()->locale().toString(qint64(value)) + postStr;
- else
- retVal = QString().sprintf(array, qint64(value));
- } else if (formatSpec.at(0) == QLatin1Char('u')
- || formatSpec.at(0) == QLatin1Char('o')
- || formatSpec.at(0) == QLatin1Char('x')
- || formatSpec.at(0) == QLatin1Char('X')) {
- // These formats are not supported by localized numbers
- retVal = QString().sprintf(array, quint64(value));
- } else if (formatSpec.at(0) == QLatin1Char('f')
- || formatSpec.at(0) == QLatin1Char('F')
- || formatSpec.at(0) == QLatin1Char('e')
- || formatSpec.at(0) == QLatin1Char('E')
- || formatSpec.at(0) == QLatin1Char('g')
- || formatSpec.at(0) == QLatin1Char('G')) {
- if (presenter()->localizeNumbers()) {
- retVal = preStr
- + presenter()->locale().toString(value, formatSpec.at(0).toLatin1(),
- precision)
- + postStr;
- } else {
- retVal = QString().sprintf(array, value);
- }
- }
- }
- return retVal;
-}
-
-QStringList ChartAxisElement::createValueLabels(qreal min, qreal max, int ticks,
- const QString &format) const
-{
- QStringList labels;
-
- if (max <= min || ticks < 1)
- return labels;
-
- if (format.isNull()) {
- int n = qMax(int(-qFloor(log10((max - min) / (ticks - 1)))), 0) + 1;
- for (int i = 0; i < ticks; i++) {
- qreal value = min + (i * (max - min) / (ticks - 1));
- labels << presenter()->numberToString(value, 'f', n);
- }
- } else {
- QByteArray array = format.toLatin1();
- QString formatSpec;
- QString preStr;
- QString postStr;
- int precision = 6; // Six is the default precision in Qt API
- if (presenter()->localizeNumbers()) {
- if (!labelFormatMatcherLocalized)
- labelFormatMatcherLocalized = new QRegExp(labelFormatMatchLocalizedString);
- if (labelFormatMatcherLocalized->indexIn(format, 0) != -1) {
- preStr = labelFormatMatcherLocalized->cap(1);
- if (!labelFormatMatcherLocalized->cap(2).isEmpty())
- precision = labelFormatMatcherLocalized->cap(2).toInt();
- formatSpec = labelFormatMatcherLocalized->cap(3);
- postStr = labelFormatMatcherLocalized->cap(4);
- }
- } else {
- if (!labelFormatMatcher)
- labelFormatMatcher = new QRegExp(labelFormatMatchString);
- if (labelFormatMatcher->indexIn(format, 0) != -1)
- formatSpec = labelFormatMatcher->cap(1);
- }
- for (int i = 0; i < ticks; i++) {
- qreal value = min + (i * (max - min) / (ticks - 1));
- labels << formatLabel(formatSpec, array, value, precision, preStr, postStr);
- }
- }
-
- return labels;
-}
-
-QStringList ChartAxisElement::createLogValueLabels(qreal min, qreal max, qreal base, int ticks,
- const QString &format) const
-{
- QStringList labels;
-
- if (max <= min || ticks < 1)
- return labels;
-
- int firstTick;
- if (base > 1)
- firstTick = ceil(log10(min) / log10(base));
- else
- firstTick = ceil(log10(max) / log10(base));
-
- if (format.isNull()) {
- int n = 0;
- if (ticks > 1)
- n = qMax(int(-qFloor(log10((max - min) / (ticks - 1)))), 0);
- n++;
- for (int i = firstTick; i < ticks + firstTick; i++) {
- qreal value = qPow(base, i);
- labels << presenter()->numberToString(value, 'f', n);
- }
- } else {
- QByteArray array = format.toLatin1();
- QString formatSpec;
- QString preStr;
- QString postStr;
- int precision = 6; // Six is the default precision in Qt API
- if (presenter()->localizeNumbers()) {
- if (!labelFormatMatcherLocalized)
- labelFormatMatcherLocalized = new QRegExp(labelFormatMatchLocalizedString);
- if (labelFormatMatcherLocalized->indexIn(format, 0) != -1) {
- preStr = labelFormatMatcherLocalized->cap(1);
- if (!labelFormatMatcherLocalized->cap(2).isEmpty())
- precision = labelFormatMatcherLocalized->cap(2).toInt();
- formatSpec = labelFormatMatcherLocalized->cap(3);
- postStr = labelFormatMatcherLocalized->cap(4);
- }
- } else {
- if (!labelFormatMatcher)
- labelFormatMatcher = new QRegExp(labelFormatMatchString);
- if (labelFormatMatcher->indexIn(format, 0) != -1)
- formatSpec = labelFormatMatcher->cap(1);
- }
- for (int i = firstTick; i < ticks + firstTick; i++) {
- qreal value = qPow(base, i);
- labels << formatLabel(formatSpec, array, value, precision, preStr, postStr);
- }
- }
-
- return labels;
-}
-
-QStringList ChartAxisElement::createDateTimeLabels(qreal min, qreal max,int ticks,
- const QString &format) const
-{
- QStringList labels;
-
- if (max <= min || ticks < 1)
- return labels;
-
- int n = qMax(int(-floor(log10((max - min) / (ticks - 1)))), 0);
- n++;
- for (int i = 0; i < ticks; i++) {
- qreal value = min + (i * (max - min) / (ticks - 1));
- labels << presenter()->locale().toString(QDateTime::fromMSecsSinceEpoch(value), format);
- }
- return labels;
-}
-
-void ChartAxisElement::axisSelected()
-{
- emit clicked();
-}
-
-#include "moc_chartaxiselement_p.cpp"
-
-QTCOMMERCIALCHART_END_NAMESPACE