##// END OF EJS Templates
Updated BarModelMapper docs
Updated BarModelMapper docs

File last commit:

r1485:d394c78609d7
r1485:d394c78609d7
Show More
qbarmodelmapper.cpp
633 lines | 19.1 KiB | text/x-c | CppLexer
/ src / barchart / qbarmodelmapper.cpp
Marek Rosa
Added license text to mapper classes
r1355 /****************************************************************************
**
** 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$
**
****************************************************************************/
Marek Rosa
BarSeries Model mapper added
r1170 #include "qbarmodelmapper.h"
Marek Rosa
BarModel mapper refactored.
r1293 #include "qbarmodelmapper_p.h"
#include "qbarseries.h"
#include "qbarset.h"
Marek Rosa
Added placeholders for mappers documentation
r1331 #include "qchart.h"
Marek Rosa
BarModel mapper refactored.
r1293 #include <QAbstractItemModel>
Marek Rosa
BarSeries Model mapper added
r1170
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Marek Rosa
Model mappers docs updated
r1378 /*!
\class QBarModelMapper
\brief part of QtCommercial chart API.
\mainclass
Marek Rosa
Updated mapper classes descriptions
r1397 Model mappers allow you to use QAbstractItemModel derived models as a data source for a chart series.
Marek Rosa
Updated BarModelMapper docs
r1485 The instance of this class cannot be created directly. QHBarModelMapper of QVBarModelMapper should be used instead.
This class is used to create a connection between QBarSeries and QAbstractItemModel derived model object.
Model mapper maintains equal size of all the BarSets.
Adding/removing value from the BarSet causes the the same change in the rest of the BarSets added to the same series.
Marek Rosa
Model mappers docs updated
r1378 NOTE: used model has to support adding/removing rows/columns and modifying the data of the cells.
*/
Marek Rosa
Added documentation for BarModelMapper classes
r1348 /*!
\property QBarModelMapper::series
\brief Defines the QPieSeries object that is used by the mapper.
Marek Rosa
Model mappers docs updated
r1378 All the data in the series is discarded when it is set to the mapper.
Marek Rosa
Added documentation for BarModelMapper classes
r1348 When new series is specified the old series is disconnected (it preserves its data)
*/
/*!
\property QBarModelMapper::model
\brief Defines the model that is used by the mapper.
*/
/*!
\property QBarModelMapper::first
\brief Defines which item of the model's row/column should be mapped as the value of the first QBarSet in the series.
Minimal and default value is: 0
*/
/*!
\property QBarModelMapper::count
\brief Defines the number of rows/columns of the model that are mapped as the data for QBarSeries
Minimal and default value is: -1 (count limited by the number of rows/columns in the model)
*/
Marek Rosa
Added NOTIFY to BarModelMapper properties
r1478 /*!
\fn void QBarModelMapper::seriesReplaced()
Emitted when the series to which mapper is connected to has changed.
*/
/*!
\fn void QBarModelMapper::modelReplaced()
Emitted when the model to which mapper is connected to has changed.
*/
/*!
\fn void QBarModelMapper::firstChanged()
Emitted when the value for the first has changed.
*/
/*!
\fn void QBarModelMapper::countChanged()
Emitted when the value for the count has changed.
*/
Marek Rosa
ModelMappers dosc update
r1347 /*!
Constructs a mapper object which is a child of \a parent.
*/
Marek Rosa
BarSeries Model mapper added
r1170 QBarModelMapper::QBarModelMapper(QObject *parent) :
QObject(parent),
Marek Rosa
BarModel mapper refactored.
r1293 d_ptr(new QBarModelMapperPrivate(this))
{
}
QAbstractItemModel* QBarModelMapper::model() const
{
Q_D(const QBarModelMapper);
return d->m_model;
}
void QBarModelMapper::setModel(QAbstractItemModel *model)
{
if (model == 0)
return;
Q_D(QBarModelMapper);
if (d->m_model) {
disconnect(d->m_model, 0, d, 0);
}
d->m_model = model;
d->initializeBarFromModel();
// connect signals from the model
connect(d->m_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), d, SLOT(modelUpdated(QModelIndex,QModelIndex)));
Marek Rosa
Added support for headerDataChanged() signal from the model to BarModelMapper
r1394 connect(d->m_model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)), d, SLOT(modelHeaderDataUpdated(Qt::Orientation,int,int)));
Marek Rosa
BarModel mapper refactored.
r1293 connect(d->m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), d, SLOT(modelRowsAdded(QModelIndex,int,int)));
connect(d->m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)), d, SLOT(modelRowsRemoved(QModelIndex,int,int)));
connect(d->m_model, SIGNAL(columnsInserted(QModelIndex,int,int)), d, SLOT(modelColumnsAdded(QModelIndex,int,int)));
connect(d->m_model, SIGNAL(columnsRemoved(QModelIndex,int,int)), d, SLOT(modelColumnsRemoved(QModelIndex,int,int)));
Marek Rosa
Added NOTIFY to BarModelMapper properties
r1478
emit modelReplaced();
Marek Rosa
BarModel mapper refactored.
r1293 }
QBarSeries* QBarModelMapper::series() const
{
Q_D(const QBarModelMapper);
return d->m_series;
}
void QBarModelMapper::setSeries(QBarSeries *series)
Marek Rosa
BarSeries Model mapper added
r1170 {
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(QBarModelMapper);
if (d->m_series) {
disconnect(d->m_series, 0, d, 0);
}
if (series == 0)
return;
d->m_series = series;
d->initializeBarFromModel();
// connect the signals from the series
Marek Rosa
BarSeries API can now be used when the series is used with BarModelMapper
r1435 connect(d->m_series, SIGNAL(barsetsAdded(QList<QBarSet*>)), d, SLOT(barSetsAdded(QList<QBarSet*>)));
connect(d->m_series, SIGNAL(barsetsRemoved(QList<QBarSet*>)), d, SLOT(barSetsRemoved(QList<QBarSet*>)));
Marek Rosa
Added NOTIFY to BarModelMapper properties
r1478
emit seriesReplaced();
Marek Rosa
BarSeries Model mapper added
r1170 }
int QBarModelMapper::first() const
{
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(const QBarModelMapper);
return d->m_first;
Marek Rosa
BarSeries Model mapper added
r1170 }
void QBarModelMapper::setFirst(int first)
{
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(QBarModelMapper);
Marek Rosa
Added NOTIFY to BarModelMapper properties
r1478 if (first != d->m_first) {
d->m_first = qMax(first, 0);
d->initializeBarFromModel();
emit firstChanged();
}
Marek Rosa
BarSeries Model mapper added
r1170 }
int QBarModelMapper::count() const
{
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(const QBarModelMapper);
return d->m_count;
Marek Rosa
BarSeries Model mapper added
r1170 }
void QBarModelMapper::setCount(int count)
{
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(QBarModelMapper);
Marek Rosa
Added NOTIFY to BarModelMapper properties
r1478 if (count != d->m_count) {
d->m_count = qMax(count, -1);
d->initializeBarFromModel();
emit countChanged();
}
Marek Rosa
BarSeries Model mapper added
r1170 }
Marek Rosa
Added documentation for BarModelMapper classes
r1348 /*!
Returns the orientation that is used when QBarModelMapper accesses the model.
This mean whether the consecutive values of the bar set are read from row (Qt::Horizontal)
or from columns (Qt::Vertical)
*/
Marek Rosa
BarSeries Model mapper added
r1170 Qt::Orientation QBarModelMapper::orientation() const
{
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(const QBarModelMapper);
return d->m_orientation;
Marek Rosa
BarSeries Model mapper added
r1170 }
Marek Rosa
Added documentation for BarModelMapper classes
r1348 /*!
Returns the \a orientation that is used when QBarModelMapper accesses the model.
This mean whether the consecutive values of the pie are read from row (Qt::Horizontal)
or from columns (Qt::Vertical)
*/
Marek Rosa
BarSeries Model mapper added
r1170 void QBarModelMapper::setOrientation(Qt::Orientation orientation)
{
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(QBarModelMapper);
d->m_orientation = orientation;
d->initializeBarFromModel();
Marek Rosa
BarSeries Model mapper added
r1170 }
Marek Rosa
Added documentation for BarModelMapper classes
r1348 /*!
Returns which section of the model is used as the data source for the first bar set
*/
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 int QBarModelMapper::firstBarSetSection() const
Marek Rosa
BarSeries Model mapper added
r1170 {
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(const QBarModelMapper);
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 return d->m_firstBarSetSection;
Marek Rosa
BarSeries Model mapper added
r1170 }
Marek Rosa
Added documentation for BarModelMapper classes
r1348 /*!
Sets the model section that is used as the data source for the first bar set
Parameter \a firstBarSetSection specifies the section of the model.
*/
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 void QBarModelMapper::setFirstBarSetSection(int firstBarSetSection)
Marek Rosa
BarSeries Model mapper added
r1170 {
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(QBarModelMapper);
Marek Rosa
Added some tests for BarModelMapper
r1364 d->m_firstBarSetSection = qMax(-1, firstBarSetSection);
Marek Rosa
BarModel mapper refactored.
r1293 d->initializeBarFromModel();
Marek Rosa
BarSeries Model mapper added
r1170 }
Marek Rosa
Added documentation for BarModelMapper classes
r1348 /*!
Returns which section of the model is used as the data source for the last bar set
*/
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 int QBarModelMapper::lastBarSetSection() const
Marek Rosa
BarSeries Model mapper added
r1170 {
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(const QBarModelMapper);
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 return d->m_lastBarSetSection;
Marek Rosa
BarSeries Model mapper added
r1170 }
Marek Rosa
Added documentation for BarModelMapper classes
r1348 /*!
Sets the model section that is used as the data source for the last bar set
Parameter \a lastBarSetSection specifies the section of the model.
*/
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 void QBarModelMapper::setLastBarSetSection(int lastBarSetSection)
Marek Rosa
BarSeries Model mapper added
r1170 {
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(QBarModelMapper);
Marek Rosa
Added some tests for BarModelMapper
r1364 d->m_lastBarSetSection = qMax(-1, lastBarSetSection);
Marek Rosa
BarModel mapper refactored.
r1293 d->initializeBarFromModel();
Marek Rosa
BarSeries Model mapper added
r1170 }
Marek Rosa
Added documentation for BarModelMapper classes
r1348 /*!
Resets the QBarModelMapper to the default state.
first: 0; count: -1; firstBarSetSection: -1; lastBarSetSection: -1; categoriesSection: -1
*/
Marek Rosa
BarSeries Model mapper added
r1170 void QBarModelMapper::reset()
{
Marek Rosa
BarModel mapper refactored.
r1293 Q_D(QBarModelMapper);
d->m_first = 0;
d->m_count = -1;
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 d->m_firstBarSetSection = -1;
d->m_lastBarSetSection = -1;
Marek Rosa
BarModel mapper refactored.
r1293 d->initializeBarFromModel();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
QBarModelMapperPrivate::QBarModelMapperPrivate(QBarModelMapper *q) :
m_series(0),
m_model(0),
m_first(0),
m_count(-1),
m_orientation(Qt::Vertical),
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 m_firstBarSetSection(-1),
m_lastBarSetSection(-1),
Marek Rosa
BarModel mapper refactored.
r1293 m_seriesSignalsBlock(false),
m_modelSignalsBlock(false),
q_ptr(q)
{
}
void QBarModelMapperPrivate::blockModelSignals(bool block)
{
m_modelSignalsBlock = block;
}
void QBarModelMapperPrivate::blockSeriesSignals(bool block)
{
m_seriesSignalsBlock = block;
}
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 QBarSet* QBarModelMapperPrivate::barSet(QModelIndex index)
{
if (!index.isValid())
return 0;
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 if (m_orientation == Qt::Vertical && index.column() >= m_firstBarSetSection && index.column() <= m_lastBarSetSection) {
Marek Rosa
Added placeholders for mappers documentation
r1331 if (index.row() >= m_first && (m_count == - 1 || index.row() < m_first + m_count)) {
Marek Rosa
Fixes to BarSeries and BarModelMapper
r1356 // if (m_model->index(index.row(), m_valuesSection).isValid() && m_model->index(index.row(), m_labelsSection).isValid())
return m_series->barSets().at(index.column() - m_firstBarSetSection);
// else
// return 0;
Marek Rosa
Added placeholders for mappers documentation
r1331 }
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 } else if (m_orientation == Qt::Horizontal && index.row() >= m_firstBarSetSection && index.row() <= m_lastBarSetSection) {
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 if (index.column() >= m_first && (m_count == - 1 || index.column() < m_first + m_count))
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 return m_series->barSets().at(index.row() - m_firstBarSetSection);
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 }
return 0; // This part of model has not been mapped to any slice
}
Marek Rosa
BarModel mapper refactored.
r1293 QModelIndex QBarModelMapperPrivate::barModelIndex(int barSection, int posInBar)
{
if (m_count != -1 && posInBar >= m_count)
return QModelIndex(); // invalid
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 if (barSection < m_firstBarSetSection || barSection > m_lastBarSetSection)
Marek Rosa
BarModel mapper refactored.
r1293 return QModelIndex(); // invalid
if (m_orientation == Qt::Vertical)
return m_model->index(posInBar + m_first, barSection);
else
return m_model->index(barSection, posInBar + m_first);
}
void QBarModelMapperPrivate::modelUpdated(QModelIndex topLeft, QModelIndex bottomRight)
{
Q_UNUSED(topLeft)
Q_UNUSED(bottomRight)
Marek Rosa
Added Vertical and Horizontal BarModelMappers
r1294
if (m_model == 0 || m_series == 0)
return;
Marek Rosa
BarModel mapper refactored.
r1293 if (m_modelSignalsBlock)
return;
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 blockSeriesSignals();
QModelIndex index;
for (int row = topLeft.row(); row <= bottomRight.row(); row++) {
for (int column = topLeft.column(); column <= bottomRight.column(); column++) {
index = topLeft.sibling(row, column);
QBarSet* bar = barSet(index);
if (bar) {
if (m_orientation == Qt::Vertical)
bar->replace(row - m_first, m_model->data(index).toReal());
else
bar->replace(column - m_first, m_model->data(index).toReal());
}
}
}
blockSeriesSignals(false);
Marek Rosa
BarModel mapper refactored.
r1293 }
Marek Rosa
Added support for headerDataChanged() signal from the model to BarModelMapper
r1394 void QBarModelMapperPrivate::modelHeaderDataUpdated(Qt::Orientation orientation, int first, int last)
{
if (m_model == 0 || m_series == 0)
return;
if (m_modelSignalsBlock)
return;
blockSeriesSignals();
if (orientation != m_orientation) {
for (int section = first; section <= last; section++) {
if (section >= m_firstBarSetSection && section <= m_lastBarSetSection) {
QBarSet* bar = m_series->barSets().at(section - m_firstBarSetSection);
if (bar)
sauimone
changed barset name to label to be consistent with pie series. Series have names, barsets and pieslices have labels
r1429 bar->setLabel(m_model->headerData(section, orientation).toString());
Marek Rosa
Added support for headerDataChanged() signal from the model to BarModelMapper
r1394 }
}
}
blockSeriesSignals(false);
}
Marek Rosa
BarModel mapper refactored.
r1293 void QBarModelMapperPrivate::modelRowsAdded(QModelIndex parent, int start, int end)
{
Q_UNUSED(parent);
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 Q_UNUSED(end)
Marek Rosa
BarModel mapper refactored.
r1293 if (m_modelSignalsBlock)
return;
blockSeriesSignals();
if (m_orientation == Qt::Vertical)
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 // insertData(start, end);
initializeBarFromModel();
Marek Rosa
Removed categories support from BarModelMapper
r1354 else if (start <= m_firstBarSetSection || start <= m_lastBarSetSection) // if the changes affect the map - reinitialize
Marek Rosa
BarModel mapper refactored.
r1293 initializeBarFromModel();
blockSeriesSignals(false);
}
void QBarModelMapperPrivate::modelRowsRemoved(QModelIndex parent, int start, int end)
{
Q_UNUSED(parent);
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 Q_UNUSED(end)
Marek Rosa
BarModel mapper refactored.
r1293 if (m_modelSignalsBlock)
return;
blockSeriesSignals();
if (m_orientation == Qt::Vertical)
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 // removeData(start, end);
initializeBarFromModel();
Marek Rosa
Removed categories support from BarModelMapper
r1354 else if (start <= m_firstBarSetSection || start <= m_lastBarSetSection) // if the changes affect the map - reinitialize
Marek Rosa
BarModel mapper refactored.
r1293 initializeBarFromModel();
blockSeriesSignals(false);
}
void QBarModelMapperPrivate::modelColumnsAdded(QModelIndex parent, int start, int end)
{
Q_UNUSED(parent);
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 Q_UNUSED(end)
Marek Rosa
BarModel mapper refactored.
r1293 if (m_modelSignalsBlock)
return;
blockSeriesSignals();
if (m_orientation == Qt::Horizontal)
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 // insertData(start, end);
initializeBarFromModel();
Marek Rosa
Removed categories support from BarModelMapper
r1354 else if (start <= m_firstBarSetSection || start <= m_lastBarSetSection) // if the changes affect the map - reinitialize
Marek Rosa
BarModel mapper refactored.
r1293 initializeBarFromModel();
blockSeriesSignals(false);
}
void QBarModelMapperPrivate::modelColumnsRemoved(QModelIndex parent, int start, int end)
{
Q_UNUSED(parent);
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 Q_UNUSED(end)
Marek Rosa
BarModel mapper refactored.
r1293 if (m_modelSignalsBlock)
return;
blockSeriesSignals();
if (m_orientation == Qt::Horizontal)
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 // removeData(start, end);
initializeBarFromModel();
Marek Rosa
Removed categories support from BarModelMapper
r1354 else if (start <= m_firstBarSetSection || start <= m_lastBarSetSection) // if the changes affect the map - reinitialize
Marek Rosa
BarModel mapper refactored.
r1293 initializeBarFromModel();
blockSeriesSignals(false);
}
void QBarModelMapperPrivate::insertData(int start, int end)
{
Q_UNUSED(end)
Marek Rosa
Removed commented out code and unnecessary lines from model mapper classes
r1379 Q_UNUSED(start)
Q_UNUSED(end)
// To be implemented
Marek Rosa
BarModel mapper refactored.
r1293 }
void QBarModelMapperPrivate::removeData(int start, int end)
{
Q_UNUSED(end)
Marek Rosa
Removed commented out code and unnecessary lines from model mapper classes
r1379 Q_UNUSED(start)
Q_UNUSED(end)
// To be implemented
Marek Rosa
BarModel mapper refactored.
r1293 }
Marek Rosa
BarSeries API can now be used when the series is used with BarModelMapper
r1435 void QBarModelMapperPrivate::barSetsAdded(QList<QBarSet*> sets)
{
if (m_seriesSignalsBlock)
return;
if (sets.count() == 0)
return;
int firstIndex = m_series->barSets().indexOf(sets.at(0));
if (firstIndex == -1)
return;
int maxCount = 0;
for(int i = 0; i < sets.count(); i++)
if (sets.at(i)->count() > m_count)
maxCount = sets.at(i)->count();
if (m_count != -1 && m_count < maxCount)
m_count = maxCount;
m_lastBarSetSection += sets.count();
blockModelSignals();
int modelCapacity = m_orientation == Qt::Vertical ? m_model->rowCount() - m_first : m_model->columnCount() - m_first;
if (maxCount > modelCapacity) {
if (m_orientation == Qt::Vertical)
m_model->insertRows(m_model->rowCount(), maxCount - modelCapacity);
else
m_model->insertColumns(m_model->columnCount(), maxCount - modelCapacity);
}
if (m_orientation == Qt::Vertical)
m_model->insertColumns(firstIndex + m_firstBarSetSection, sets.count());
else
m_model->insertRows(firstIndex + m_firstBarSetSection, sets.count());
for(int i = firstIndex + m_firstBarSetSection; i < firstIndex + m_firstBarSetSection + sets.count(); i++) {
m_model->setHeaderData(i, m_orientation == Qt::Vertical ? Qt::Horizontal : Qt::Vertical, sets.at(i - firstIndex - m_firstBarSetSection)->label());
for (int j = 0; j < sets.at(i - firstIndex - m_firstBarSetSection)->count(); j++)
m_model->setData(barModelIndex(i, j), sets.at(i - firstIndex - m_firstBarSetSection)->at(j).y());
}
blockModelSignals(false);
initializeBarFromModel();
}
void QBarModelMapperPrivate::barSetsRemoved(QList<QBarSet*> sets)
{
if (m_seriesSignalsBlock)
return;
if (sets.count() == 0)
return;
int firstIndex = m_barSets.indexOf(sets.at(0));
if (firstIndex == -1)
return;
m_lastBarSetSection -= sets.count();
for (int i = firstIndex + sets.count() - 1; i >= firstIndex; i--)
m_barSets.removeAt(i);
blockModelSignals();
if (m_orientation == Qt::Vertical)
m_model->removeColumns(firstIndex + m_firstBarSetSection, sets.count());
else
m_model->removeRows(firstIndex + m_firstBarSetSection, sets.count());
blockModelSignals(false);
initializeBarFromModel();
}
void QBarModelMapperPrivate::valuesAdded(int index, int count)
{
if (m_seriesSignalsBlock)
return;
if (m_count != -1)
m_count += count;
int barSetIndex = m_barSets.indexOf(qobject_cast<QBarSet *>(QObject::sender()));
blockModelSignals();
if (m_orientation == Qt::Vertical)
m_model->insertRows(index + m_first, count);
else
m_model->insertColumns(index + m_first, count);
for (int j = index; j < index + count; j++)
m_model->setData(barModelIndex(barSetIndex + m_firstBarSetSection, j), m_barSets.at(barSetIndex)->at(j).y());
blockModelSignals(false);
initializeBarFromModel();
}
void QBarModelMapperPrivate::valuesRemoved(int index, int count)
{
if (m_seriesSignalsBlock)
return;
if (m_count != -1)
m_count -= count;
blockModelSignals();
if (m_orientation == Qt::Vertical)
m_model->removeRows(index + m_first, count);
else
m_model->removeColumns(index + m_first, count);
blockModelSignals(false);
initializeBarFromModel();
}
void QBarModelMapperPrivate::barLabelChanged()
{
if (m_seriesSignalsBlock)
return;
int barSetIndex = m_barSets.indexOf(qobject_cast<QBarSet *>(QObject::sender()));
blockModelSignals();
m_model->setHeaderData(barSetIndex + m_firstBarSetSection, m_orientation == Qt::Vertical ? Qt::Horizontal : Qt::Vertical, m_barSets.at(barSetIndex)->label());
blockModelSignals(false);
initializeBarFromModel();
}
void QBarModelMapperPrivate::barValueChanged(int index)
{
if (m_seriesSignalsBlock)
return;
int barSetIndex = m_barSets.indexOf(qobject_cast<QBarSet *>(QObject::sender()));
blockModelSignals();
m_model->setData(barModelIndex(barSetIndex + m_firstBarSetSection, index), m_barSets.at(barSetIndex)->at(index).y());
blockModelSignals(false);
initializeBarFromModel();
}
Marek Rosa
BarModel mapper refactored.
r1293 void QBarModelMapperPrivate::initializeBarFromModel()
{
if (m_model == 0 || m_series == 0)
return;
blockSeriesSignals();
// clear current content
Marek Rosa
BarModelMapper: implemented model updated slots. Some more work needed with categories
r1295 m_series->clear();
Marek Rosa
BarSeries API can now be used when the series is used with BarModelMapper
r1435 m_barSets.clear();
Marek Rosa
BarModel mapper refactored.
r1293
// create the initial bar sets
Marek Rosa
Replaced 'Bar' with 'BarSet' in BarModelMapper functions and member variables
r1312 for (int i = m_firstBarSetSection; i <= m_lastBarSetSection; i++) {
Marek Rosa
BarModel mapper refactored.
r1293 int posInBar = 0;
QModelIndex barIndex = barModelIndex(i, posInBar);
Marek Rosa
Fixes to BarSeries and BarModelMapper
r1356 // check if there is such model index
if (barIndex.isValid()) {
Marek Rosa
Added support for headerDataChanged() signal from the model to BarModelMapper
r1394 QBarSet *barSet = new QBarSet(m_model->headerData(i, m_orientation == Qt::Vertical ? Qt::Horizontal : Qt::Vertical).toString());
Marek Rosa
Fixes to BarSeries and BarModelMapper
r1356 while (barIndex.isValid()) {
barSet->append(m_model->data(barIndex, Qt::DisplayRole).toDouble());
posInBar++;
barIndex = barModelIndex(i, posInBar);
}
Marek Rosa
BarSeries API can now be used when the series is used with BarModelMapper
r1435 connect(barSet, SIGNAL(valuesAdded(int, int)), this, SLOT(valuesAdded(int, int)));
connect(barSet, SIGNAL(valuesRemoved(int, int)), this, SLOT(valuesRemoved(int, int)));
connect(barSet, SIGNAL(valueChanged(int)), this, SLOT(barValueChanged(int)));
connect(barSet, SIGNAL(labelChanged()), this, SLOT(barLabelChanged()));
Marek Rosa
Fixes to BarSeries and BarModelMapper
r1356 m_series->append(barSet);
Marek Rosa
BarSeries API can now be used when the series is used with BarModelMapper
r1435 m_barSets.append(barSet);
Marek Rosa
Fixes to BarSeries and BarModelMapper
r1356 } else {
break;
Marek Rosa
BarModel mapper refactored.
r1293 }
}
blockSeriesSignals(false);
Marek Rosa
BarSeries Model mapper added
r1170 }
#include "moc_qbarmodelmapper.cpp"
Marek Rosa
BarModel mapper refactored.
r1293 #include "moc_qbarmodelmapper_p.cpp"
Marek Rosa
BarSeries Model mapper added
r1170
QTCOMMERCIALCHART_END_NAMESPACE