/******************************************************************************** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).** All rights reserved.** Contact: Nokia Corporation (developer.feedback@nokia.com)**** This file is part of the HbWidgets module of the UI Extensions for Mobile.**** GNU Lesser General Public License Usage** This file may be used under the terms of the GNU Lesser General Public** License version 2.1 as published by the Free Software Foundation and** appearing in the file LICENSE.LGPL included in the packaging of this file.** Please review the following information to ensure the GNU Lesser General** Public License version 2.1 requirements will be met:** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.**** In addition, as a special exception, Nokia gives you certain additional** rights. These rights are described in the Nokia Qt LGPL Exception** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.**** If you have questions regarding the use of this file, please contact** Nokia at developer.feedback@nokia.com.******************************************************************************/#include "hblistwidgetitem_p.h"#include "hblistmodel_p.h"#include <hblistwidgetitem.h>#include <QVariant>/* HbListWidgetItemPrivate in a internal class, which implements data container for HblistWidgetItems and HblistWidget. */HbListWidgetItemPrivate::HbListWidgetItemPrivate( HbListWidgetItem *itemWidget) : mItem(itemWidget), mModel(0), id(0), flags(Qt::ItemIsSelectable|Qt::ItemIsEnabled){}HbListWidgetItemPrivate::~HbListWidgetItemPrivate(){}void HbListWidgetItemPrivate::setData(const QVariant &value, int role, int index){ QVector<HbWidgetItemData>::iterator it; for (it = mValues.begin(); it != mValues.end(); ++it) { if ((*it).role == role) { QVariantList list; if ((*it).value.canConvert<QVariantList>()) { list = (*it).value.toList(); } else { list.append((*it).value); } if (index < list.count()) { // Existing value -> replace if different if (list.at(index) == value) return; list.replace(index, value); } else { // New value -> grow the list if needed while (list.count() < index) { list.append(QVariant()); } list.append(value); } (*it).value = list; return; } } // role is not present yet QVariantList list; for (int i = 0; i < index; i++) { list.append(QVariant()); } list.append(value); mValues.append(HbWidgetItemData(role, list));}void HbListWidgetItemPrivate::setData(const QVariant &value, int role){ //Note: no more call to itemChanged, caller is responsible for calling it role = (role == Qt::EditRole) ? Qt::DisplayRole : role; QVector<HbWidgetItemData>::iterator it; for (it = mValues.begin(); it != mValues.end(); ++it) { if ((*it).role == role) { (*it).value = value; return; } } mValues.append(HbWidgetItemData(role, value));}QVariant HbListWidgetItemPrivate::data(int role, int index) const{ QVariant value = data(role); if (value.canConvert<QVariantList>()) { QVariantList list = value.toList(); return list.value(index); } else if (index == 0) { return value; } else { return QVariant(); }}/* Returns the item's data for the given \a role, or an invalid QVariant if there is no data for the role. \note The default implementation treats Qt::EditRole and Qt::DisplayRole as referring to the same data. */QVariant HbListWidgetItemPrivate::data(int role) const{ role = (role == Qt::EditRole) ? Qt::DisplayRole : role; QVector<HbWidgetItemData>::const_iterator it; for (it = mValues.begin(); it != mValues.end(); ++it) { if ((*it).role == role) { return (*it).value; } } if (role == Hb::ItemTypeRole) { return Hb::StandardItem; } return QVariant();}