##// END OF EJS Templates
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2

File last commit:

r1612:859a2158b75a
r1612:859a2158b75a
Show More
qcategoriesaxis.cpp
297 lines | 6.6 KiB | text/x-c | CppLexer
/ src / axis / qcategoriesaxis.cpp
Michal Klocek
Adds new API classes...
r1540 /****************************************************************************
**
** 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 "qcategoriesaxis.h"
#include "qcategoriesaxis_p.h"
Marek Rosa
Removed generic chartaxis
r1561 #include "chartcategoriesaxisx_p.h"
#include "chartcategoriesaxisy_p.h"
sauimone
fixed bug in category range handling in categoryaxis
r1572 #include <qmath.h>
Michal Klocek
Refactor categories implementation...
r1611 #include <QDebug>
Michal Klocek
Adds new API classes...
r1540
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 QBarCategoriesAxis::QBarCategoriesAxis(QObject *parent):
QAbstractAxis(*new QBarCategoriesAxisPrivate(this),parent)
Michal Klocek
Adds new API classes...
r1540 {
}
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 QBarCategoriesAxis::~QBarCategoriesAxis()
Michal Klocek
Adds new API classes...
r1540 {
}
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 QBarCategoriesAxis::QBarCategoriesAxis(QBarCategoriesAxisPrivate &d,QObject *parent):QAbstractAxis(d,parent)
Michal Klocek
Adds new API classes...
r1540 {
}
/*!
Appends \a categories to axis
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxis::append(const QStringList &categories)
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(QBarCategoriesAxis);
sauimone
category axis magic
r1605 if (d->m_categories.isEmpty()) {
Michal Klocek
Refactor categories implementation...
r1611 d->m_categories.append(categories);
setRange(categories.first(),categories.last());
}else{
d->m_categories.append(categories);
sauimone
category axis magic
r1605 }
Michal Klocek
Adds new API classes...
r1540 emit categoriesChanged();
}
/*!
Appends \a category to axis
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxis::append(const QString &category)
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(QBarCategoriesAxis);
Michal Klocek
Refactor categories implementation...
r1611 if (d->m_categories.isEmpty()) {
d->m_categories.append(category);
setRange(category,category);
}else{
d->m_categories.append(category);
}
emit categoriesChanged();
Michal Klocek
Adds new API classes...
r1540 }
/*!
Removes \a category from axis
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxis::remove(const QString &category)
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(QBarCategoriesAxis);
Michal Klocek
Adds new API classes...
r1540 if (d->m_categories.contains(category)) {
d->m_categories.removeAt(d->m_categories.indexOf(category));
Michal Klocek
Refactor categories implementation...
r1611 setRange(d->m_categories.first(),d->m_categories.last());
Michal Klocek
Adds new API classes...
r1540 emit categoriesChanged();
}
}
/*!
Inserts \a category to axis at \a index
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxis::insert(int index, const QString &category)
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(QBarCategoriesAxis);
sauimone
category axis magic
r1605 if (d->m_categories.isEmpty()) {
Michal Klocek
Refactor categories implementation...
r1611 d->m_categories.insert(index,category);
setRange(category,category);
}else{
sauimone
category axis magic
r1605 }
Michal Klocek
Adds new API classes...
r1540 emit categoriesChanged();
}
/*!
Removes all categories.
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxis::clear()
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(QBarCategoriesAxis);
Michal Klocek
Adds new API classes...
r1540 d->m_categories.clear();
Michal Klocek
Refactor categories implementation...
r1611 setRange(QString::null,QString::null);
Michal Klocek
Adds new API classes...
r1540 emit categoriesChanged();
}
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxis::setCategories(const QStringList &categories)
Tero Ahola
Added value and category axis to QML api
r1550 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(QBarCategoriesAxis);
Michal Klocek
Refactor categories implementation...
r1611 if(d->m_categories!=categories){
Tero Ahola
Added value and category axis to QML api
r1550 d->m_categories = categories;
Michal Klocek
Refactor categories implementation...
r1611 setRange(categories.first(),categories.last());
Tero Ahola
Added value and category axis to QML api
r1550 emit categoriesChanged();
Michal Klocek
Refactor categories implementation...
r1611 }
Tero Ahola
Added value and category axis to QML api
r1550 }
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 QStringList QBarCategoriesAxis::categories()
Tero Ahola
Added value and category axis to QML api
r1550 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(QBarCategoriesAxis);
Tero Ahola
Added value and category axis to QML api
r1550 return d->m_categories;
}
Michal Klocek
Adds new API classes...
r1540 /*!
Returns number of categories.
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 int QBarCategoriesAxis::count() const
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(const QBarCategoriesAxis);
Michal Klocek
Adds new API classes...
r1540 return d->m_categories.count();
}
/*!
Returns category at \a index. Index must be valid.
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 QString QBarCategoriesAxis::at(int index) const
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(const QBarCategoriesAxis);
Michal Klocek
Adds new API classes...
r1540 return d->m_categories.at(index);
}
/*!
sauimone
category axis magic
r1605 Sets minimum category to \a min.
Michal Klocek
Adds new API classes...
r1540 */
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxis::setMin(const QString& min)
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(QBarCategoriesAxis);
sauimone
category axis magic
r1605 setRange(min,d->m_maxCategory);
Michal Klocek
Adds new API classes...
r1540 }
sauimone
getters for category axis min and max category
r1571 /*!
Returns minimum category.
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 QString QBarCategoriesAxis::min() const
sauimone
getters for category axis min and max category
r1571 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(const QBarCategoriesAxis);
sauimone
getters for category axis min and max category
r1571 return d->m_minCategory;
}
Michal Klocek
Adds new API classes...
r1540 /*!
sauimone
category axis magic
r1605 Sets maximum category to \a max.
Michal Klocek
Adds new API classes...
r1540 */
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxis::setMax(const QString& max)
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(QBarCategoriesAxis);
sauimone
category axis magic
r1605 setRange(d->m_minCategory,max);
Michal Klocek
Adds new API classes...
r1540 }
sauimone
getters for category axis min and max category
r1571 /*!
Returns maximum category
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 QString QBarCategoriesAxis::max() const
sauimone
getters for category axis min and max category
r1571 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(const QBarCategoriesAxis);
sauimone
getters for category axis min and max category
r1571 return d->m_maxCategory;
}
Michal Klocek
Adds new API classes...
r1540 /*!
Sets range from \a minCategory to \a maxCategory
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxis::setRange(const QString& minCategory, const QString& maxCategory)
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_D(QBarCategoriesAxis);
sauimone
category axis magic
r1605
int minIndex = d->m_categories.indexOf(minCategory);
if (minIndex == -1) {
return;
}
int maxIndex = d->m_categories.indexOf(maxCategory);
if (maxIndex == -1) {
return;
}
if (maxIndex <= minIndex) {
// max must be greater than min
return;
}
bool changed = false;
if (!qFuzzyIsNull(d->m_min - (minIndex))) {
Michal Klocek
Refactor categories implementation...
r1611 d->m_minCategory = minCategory;
sauimone
category axis magic
r1605 d->m_min = minIndex;
changed = true;
}
if (!qFuzzyIsNull(d->m_max - (maxIndex))) {
d->m_max = maxIndex;
Michal Klocek
Refactor categories implementation...
r1611 d->m_maxCategory = maxCategory;
sauimone
category axis magic
r1605 changed = true;
}
if ((changed)) {
Michal Klocek
Refactor categories implementation...
r1611 d->emitRange();
sauimone
category axis magic
r1605 emit categoriesChanged();
}
Michal Klocek
Adds new API classes...
r1540 }
/*!
Returns the type of axis.
*/
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 QAbstractAxis::AxisType QBarCategoriesAxis::type() const
Michal Klocek
Adds new API classes...
r1540 {
return AxisTypeCategories;
}
Michal Klocek
Refactors setMin setMax setRange to be pure viritual on private implementation
r1544 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 QBarCategoriesAxisPrivate::QBarCategoriesAxisPrivate(QBarCategoriesAxis* q):
Michal Klocek
Refactors setMin setMax setRange to be pure viritual on private implementation
r1544 QAbstractAxisPrivate(q)
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 {
Michal Klocek
Refactors setMin setMax setRange to be pure viritual on private implementation
r1544
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 }
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 QBarCategoriesAxisPrivate::~QBarCategoriesAxisPrivate()
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 {
Michal Klocek
Refactors setMin setMax setRange to be pure viritual on private implementation
r1544
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 }
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxisPrivate::setMin(const QVariant &min)
Michal Klocek
Adds new API classes...
r1540 {
sauimone
category axis magic
r1605 setRange(min,m_maxCategory);
sauimone
refactoring axises
r1566 }
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxisPrivate::setMax(const QVariant &max)
sauimone
refactoring axises
r1566 {
sauimone
category axis magic
r1605 setRange(m_minCategory,max);
sauimone
refactoring axises
r1566 }
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxisPrivate::setRange(const QVariant &min, const QVariant &max)
sauimone
refactoring axises
r1566 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_Q(QBarCategoriesAxis);
sauimone
category axis magic
r1605 QString value1 = min.toString();
QString value2 = max.toString();
q->setRange(value1,value2);
Michal Klocek
Adds new API classes...
r1540 }
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 int QBarCategoriesAxisPrivate::ticksCount() const
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Refactors setMin setMax setRange to be pure viritual on private implementation
r1544 return m_categories.count()+1;
Michal Klocek
Adds new API classes...
r1540 }
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxisPrivate::handleAxisRangeChanged(qreal min, qreal max,int count)
sauimone
refactoring axises
r1566 {
m_min = min;
m_max = max;
m_ticksCount = count;
}
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 ChartAxis* QBarCategoriesAxisPrivate::createGraphics(ChartPresenter* presenter)
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_Q( QBarCategoriesAxis);
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556 if(m_orientation == Qt::Vertical){
Marek Rosa
Removed generic chartaxis
r1561 return new ChartCategoriesAxisY(q,presenter);
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556 }else{
Marek Rosa
Removed generic chartaxis
r1561 return new ChartCategoriesAxisX(q,presenter);
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556 }
}
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 void QBarCategoriesAxisPrivate::emitRange()
sauimone
setting axis to series now updates domain
r1574 {
Michal Klocek
Refactor CategoriesAxis to BarCategoriesAxis part 1 of 2
r1612 Q_Q( QBarCategoriesAxis);
Michal Klocek
Refactor categories implementation...
r1611 if(!q->signalsBlocked()) {
emit changed(m_min -0.5, m_max +0.5, qCeil(m_max + 0.5) -qCeil(m_min - 0.5) +1, false);
}
sauimone
setting axis to series now updates domain
r1574 }
Michal Klocek
Adds new API classes...
r1540 #include "moc_qcategoriesaxis.cpp"
#include "moc_qcategoriesaxis_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE