diff -r 7cc7d74059f9 -r 4ecbe3571b5a phonebookui/cntcommonui/collections/cntgroupdeletepopupmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/cntcommonui/collections/cntgroupdeletepopupmodel.cpp Mon Oct 04 00:06:02 2010 +0300 @@ -0,0 +1,202 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "cntgroupdeletepopupmodel.h" +#include "cntthumbnailmanager.h" +#include "cntfavourite.h" +#include +#include "cntglobal.h" + +#include +#include +#include + +/*! +Constructor +*/ +CntGroupDeletePopupModel::CntGroupDeletePopupModel(CntAbstractEngine *aEngine, QObject *parent) + : QAbstractListModel(parent), + mFavoriteGroupId(-1) +{ + d = new CntGroupPopupListData(); + d->mContactManager = &aEngine->contactManager( SYMBIAN_BACKEND ); + + mFavoriteGroupId = CntFavourite::createFavouriteGroup( d->mContactManager ); + + d->mThumbnailManager = &aEngine->thumbnailManager(); + connect(d->mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void *, int, int)), + this, SLOT(onIconReady(QPixmap, void *, int, int))); +} + +/*! +Destructor +*/ +CntGroupDeletePopupModel::~CntGroupDeletePopupModel() +{ + foreach (int id, d->mIconRequests.keys()) + { + d->mThumbnailManager->cancelRequest(id); + } + + d->mIconRequests.clear(); +} + +/*! +Initialize groups +*/ +void CntGroupDeletePopupModel::initializeGroupsList() +{ + QContactDetailFilter groupFilter; + groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType); + groupFilter.setValue(QString(QLatin1String(QContactType::TypeGroup))); + + QContactSortOrder sortOrderGroupName; + sortOrderGroupName.setDetailDefinitionName(QContactName::DefinitionName, + QContactName::FieldCustomLabel); + sortOrderGroupName.setCaseSensitivity(Qt::CaseInsensitive); + + QList groupsOrder; + groupsOrder.append(sortOrderGroupName); + + QList groupContactIds = d->mContactManager->contactIds(groupFilter, groupsOrder); + + if (!groupContactIds.isEmpty()) + { + for(int i = 0;i < groupContactIds.count();i++) + { + QVariantList dataList; + + // group name + QStringList displayList; + + QContact contact = d->mContactManager->contact(groupContactIds.at(i)); + QContactName contactName = contact.detail(); + QString groupName = contactName.customLabel(); + if(groupContactIds.at(i) != mFavoriteGroupId ) + { + if (groupName.isNull()) + { + QString unnamed(hbTrId("txt_phob_dblist_unnamed")); + displayList.append(unnamed); + } + else + { + displayList.append(groupName); + } + + dataList.append(displayList); + + // contact Id for identification + dataList.append(groupContactIds.at(i)); + + // Default if no image for group + dataList.append(HbIcon("qtg_large_custom")); + + QList details = contact.details(); + for (int k = 0;k < details.count();k++) + { + if (details.at(k).imageUrl().isValid()) + { + int id = d->mThumbnailManager->getThumbnail(ThumbnailManager::ThumbnailSmall, details.at(k).imageUrl().toString()); + d->mIconRequests.insert(id, rowCount()); + break; + } + } + + d->mDataList.append(dataList); + } + } + } +} + +int CntGroupDeletePopupModel::favoriteGroupId() +{ + return mFavoriteGroupId; +} + +/*! +Returns the number of rows in the model +*/ +int CntGroupDeletePopupModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return d->mDataList.count(); +} +/*! +Returns data for given index with a given role +*/ +QVariant CntGroupDeletePopupModel::data(const QModelIndex &index, int role) const +{ + int row = index.row(); + + if (row < 0) + { + return QVariant(); + } + + QVariantList values = d->mDataList.at(row); + + if (role == Qt::DisplayRole) + { + QStringList list = values[0].toStringList(); + return QVariant(list); + } + + else if (role == Qt::DecorationRole) + { + return values[2]; + } + + else if (role == Qt::UserRole) + { + int contactId = values[1].toInt(); + return QVariant(contactId); + } + return QVariant(); +} + + +QContact CntGroupDeletePopupModel::contact(QModelIndex &index) const +{ + int row = index.row(); + QVariantList values = d->mDataList.at(row); + int groupId = values[1].toInt(); + return d->mContactManager->contact( groupId ); +} + +void CntGroupDeletePopupModel::onIconReady(const QPixmap& pixmap, void *data, int id, int error) +{ + Q_UNUSED(data); + + if (error == 0) + { + int row = d->mIconRequests.take(id); + + QVariantList values = d->mDataList.at(row); + QVariantList newValues; + + newValues.append(values[0]); + newValues.append(values[1]); + newValues.append(HbIcon(pixmap)); + + d->mDataList.removeAt(row); + + d->mDataList.insert(row, newValues); + + emit dataChanged(index(row, 0), index(row, 0)); + } +}