/**************************************************************************** ** ** 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 "declarativepieseries.h" #include "declarativechart.h" #include "qchart.h" #include #include "qpiemodelmapper.h" QTCOMMERCIALCHART_BEGIN_NAMESPACE DeclarativePieSeries::DeclarativePieSeries(QObject *parent) : QPieSeries(parent) { // TODO: set default model on init? setModel(new DeclarativeTableModel()); // Set default mapper parameters to allow easy to use PieSeries api QPieModelMapper *mapper = new QPieModelMapper(); mapper->setMapLabels(0); mapper->setMapValues(1); mapper->setOrientation(Qt::Vertical); mapper->setFirst(0); mapper->setCount(-1); setModelMapper(mapper); } void DeclarativePieSeries::classBegin() { } void DeclarativePieSeries::componentComplete() { foreach(QObject *child, children()) { qDebug() << "pie child: " << child; if (qobject_cast(child)) { QPieSlice *slice = qobject_cast(child); QVariantList values; values.insert(modelMapper()->mapLabels(), slice->label()); values.insert(modelMapper()->mapValues(), slice->value()); DeclarativeTableModel *m = qobject_cast(model()); Q_ASSERT(m); m->append(values); } } } QDeclarativeListProperty DeclarativePieSeries::initialSlices() { return QDeclarativeListProperty(this, 0, &DeclarativePieSeries::appendInitialSlices); } QPieSlice *DeclarativePieSeries::slice(int index) { QList sliceList = slices(); if (index < sliceList.count()) return sliceList[index]; return 0; } void DeclarativePieSeries::setPieModel(DeclarativeTableModel *model) { QAbstractItemModel *m = qobject_cast(model); if (m) { QPieSeries::setModel(m); } else { qWarning("DeclarativePieSeries: Illegal model"); } } DeclarativeTableModel *DeclarativePieSeries::pieModel() { return qobject_cast(model()); } #include "moc_declarativepieseries.cpp" QTCOMMERCIALCHART_END_NAMESPACE