diff -r 2d2d25361590 -r d1838696558c iaupdate/IAD/ui/src/iaupdateapplistmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iaupdate/IAD/ui/src/iaupdateapplistmodel.cpp Thu Oct 14 14:11:30 2010 +0300 @@ -0,0 +1,297 @@ +/* +* Copyright (c) 2010 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: This module contains the implementation of IAUpdateAppListModel +* class member functions. +* +*/ + +#include +#include +#include + +#include "iaupdateapplistmodel.h" +#include "iaupdatefwnode.h" +#include "iaupdatebasenode.h" +#include "iaupdatedebug.h" + + +const int KKiloByte = 1024; +const int KMegaByte = 1024 * 1024; +const int KMaxShownInKiloBytes = 10 * KMegaByte; + +IAUpdateAppListModel::IAUpdateAppListModel() : +QAbstractListModel() +{ + mRefreshedCount = 0; + mFwNode = NULL; +} + + +QVariant IAUpdateAppListModel::data(const QModelIndex &index, int role) const +{ + if (index.row() < rowCount()) + { + if (role == Qt::DisplayRole) + { + QString name; + QString importanceDescription; + if (mFwNode) + { + MIAUpdateFwNode::TUIUpdateState fwUiState = mFwNode->UiState(); + if (fwUiState == MIAUpdateFwNode::EPreparing) + { + name = QString("Preparing "); + } + else + { + name = XQConversions::s60DescToQString(mFwNode->Base().Name()); + name.append(" DEVICE SOFTWARE"); + } + setImportance(mFwNode,importanceDescription); + } + else + { + MIAUpdateNode *node = mNodes[index.row()]; + + MIAUpdateNode::TUIUpdateState uiState = node->UiState(); + + + if (uiState == MIAUpdateNode::EDownloading) + { + name = QString("Downloading "); + } + else if (uiState == MIAUpdateNode::EInstalling) + { + name = QString("Installing "); + } + name.append(XQConversions::s60DescToQString(node->Base().Name())); + + + if (uiState == MIAUpdateNode::ENormal) + { + setImportance(node,importanceDescription); + } + else if (uiState == MIAUpdateNode::EUpdated) + { + importanceDescription = "Updated"; + } + else if (uiState == MIAUpdateNode::EFailed) + { + importanceDescription = "Failed"; + } + else if (uiState == MIAUpdateNode::EDownloaded) + { + importanceDescription = "Downloaded"; + } + } + QStringList stringList; + stringList << name << importanceDescription; + return stringList; + } + else if (role == ProgressRole) + { + if (mFwNode) + { + return (mFwNode->UiState() == MIAUpdateFwNode::EPreparing); + } + else + { + return (mNodes[index.row()]->UiState() == MIAUpdateNode::EDownloading || + mNodes[index.row()]->UiState() == MIAUpdateNode::EInstalling); + } + } + else if (role == ProgressValueRole) + { + QList list; + if (mFwNode) + { + list << 0 << 0; + } + else + { + list << mNodes[index.row()]->Progress() << mNodes[index.row()]->Total(); + } + return list; + } + } + return QVariant(); +} + + +int IAUpdateAppListModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent) + int nodeCount = mNodes.Count(); + if (nodeCount == 0 && mFwNode) + { + nodeCount = 1; + } + return nodeCount; +} + +void IAUpdateAppListModel::setNodeArray(const RPointerArray &nodes) +{ + mNodes = nodes; +} + + + +void IAUpdateAppListModel::setFwNode(MIAUpdateFwNode *fwNode) +{ + mFwNode = fwNode; +} + +bool IAUpdateAppListModel::removeRows(int row, int count, const QModelIndex &parent) +{ + int lastRow = row + count - 1; + + for (int i = lastRow; i >= row; --i) + { + beginRemoveRows(parent, i, i); + endRemoveRows(); + } + return true; +} + +void IAUpdateAppListModel::refresh() +{ + if (!mFwNode) + { + if (mRefreshedCount > mNodes.Count()) + { + removeRows(mNodes.Count(), mRefreshedCount - mNodes.Count()); + } + } + emit dataChanged(index(0,0),index(rowCount() -1, 0)); + mRefreshedCount = mNodes.Count(); +} + +void IAUpdateAppListModel::refreshProgress() +{ + emit layoutChanged(); + emit dataChanged(index(0,0), index(0,0)); +} + + +void IAUpdateAppListModel::setImportance(MIAUpdateAnyNode *node, QString &importanceDescription) const +{ + IAUPDATE_TRACE("[IAUPDATE] IAUpdateAppListModel::setImportance() begin"); + int sizeInBytes = node->Base().ContentSizeL(); + int size = 0; + bool shownInMegabytes = false; + if (sizeInBytes >= KMaxShownInKiloBytes) + { + shownInMegabytes = true; + size = sizeInBytes / KMegaByte; + if (sizeInBytes % KMegaByte != 0) + { + size++; + } + } + else + { + size = sizeInBytes / KKiloByte; + if (sizeInBytes % KKiloByte != 0) + { + size++; + } + } + QString sizeString; + sizeString.setNum(size); + switch(node->Base().Importance()) + { + case MIAUpdateBaseNode::EMandatory: + { + if (shownInMegabytes) + { + importanceDescription = + hbTrId("txt_software_dblist_update_1_val_required_mb").arg(size); + } + else + { + importanceDescription = + hbTrId("txt_software_dblist_update_1_val_required_kb").arg(size); + } + break; + } + + case MIAUpdateBaseNode::ECritical: + { + bool isNSU = false; + if(node->NodeType() == MIAUpdateAnyNode::ENodeTypeFw) + { + MIAUpdateFwNode *fwnode = static_cast(node); + if (fwnode->FwType() == MIAUpdateFwNode::EFotiNsu) + { + isNSU = true; + } + } + if (!size || isNSU) + { + //for firmware when size info is not provided by server + } + else + { + if (shownInMegabytes) + { + + importanceDescription = + hbTrId("txt_software_dblist_update_1_val_important_mb").arg(size); + } + else + { + importanceDescription = + hbTrId("txt_software_dblist_update_1_val_important_kb").arg(size); + } + } + break; + } + + case MIAUpdateBaseNode::ERecommended: + { + if (shownInMegabytes) + { + importanceDescription = + hbTrId("txt_software_dblist_update_1_val_recommended_mb").arg(size); + } + else + { + importanceDescription = + hbTrId("txt_software_dblist_update_1_val_recommended_kb").arg(size); + } + break; + } + + case MIAUpdateBaseNode::ENormal: + { + if (shownInMegabytes) + { + importanceDescription = + hbTrId("txt_software_dblist_update_1_val_optional_mb").arg(size); + } + else + { + importanceDescription = + hbTrId("txt_software_dblist_update_1_val_optional_kb").arg(size); + } + break; + } + + default: + { + break; + } + } + IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::setImportance() end"); +}