diff -r dbfb5e38438b -r 305818acdca4 tsdevicedialog/tsdevicedialogplugin/src/tsmodel.cpp --- a/tsdevicedialog/tsdevicedialogplugin/src/tsmodel.cpp Wed Aug 18 10:39:24 2010 +0300 +++ b/tsdevicedialog/tsdevicedialogplugin/src/tsmodel.cpp Mon Sep 13 13:26:33 2010 +0300 @@ -49,8 +49,8 @@ \param query used to create model \param pointer to parent object */ -TsModel::TsModel(TsTaskMonitor &applicationSrv, - QObject &activitySrv, +TsModel::TsModel(TsTaskMonitor &applicationSrv, + QObject &activitySrv, QObject *parent) : QAbstractListModel(parent), mEntries(), @@ -58,11 +58,11 @@ mActivityService(activitySrv), mMaxItems(maxItems) { - + #ifdef Q_OS_SYMBIAN XQSettingsManager *crManager = new XQSettingsManager; XQCentralRepositorySettingsKey itemsNumberKey(TSDeviceDialogUid, ItemsLimit); - QVariant itemsNumberVariant = + QVariant itemsNumberVariant = crManager->readItemValue(itemsNumberKey, XQSettingsManager::TypeInt); if (!itemsNumberVariant.isNull()) { int number = itemsNumberVariant.toInt(); @@ -70,19 +70,18 @@ mMaxItems = number; } } - iAppArcSession.Connect(); #endif connect(&activitySrv, - SIGNAL(dataChanged()), - this, - SLOT(updateActivities())); + SIGNAL(dataChanged()), + this, + SLOT(updateActivities())); connect(&applicationSrv, - SIGNAL(taskListChanged()), - this, - SLOT(updateApplications())); + SIGNAL(taskListChanged()), + this, + SLOT(updateApplications())); - fullUpdate(); + fullUpdate(); } /*! @@ -90,9 +89,6 @@ */ TsModel::~TsModel() { -#ifdef Q_OS_SYMBIAN - iAppArcSession.Close(); -#endif qDeleteAll(mEntries); } @@ -107,7 +103,7 @@ return mEntries.count(); } -bool TsModel::insertRows(int row, int count, TsModelItem* item, const QModelIndex & parent) +bool TsModel::insertRows(int row, int count, TsModelItem *item, const QModelIndex &parent) { beginInsertRows(parent, row, row+count-1); mEntries.insert(row, item); @@ -115,25 +111,27 @@ return true; } -bool TsModel::removeRows(int row, int count, const QModelIndex & parent) +bool TsModel::removeRows(int row, int count, const QModelIndex &parent) { + TsModelItem *oldItem = mEntries.at(row); beginRemoveRows(parent, row, row + count - 1); mEntries.removeAt(row); + delete oldItem; endRemoveRows(); return true; } -bool TsModel::moveRows(int oldPosition, int newPosition, const QModelIndex & parent) +bool TsModel::moveRows(int oldPosition, int newPosition, const QModelIndex &parent) { - beginMoveRows(parent, oldPosition, oldPosition, parent, newPosition); - mEntries.move(oldPosition, newPosition); - endMoveRows(); - return true; + beginMoveRows(parent, oldPosition, oldPosition, parent, newPosition); + mEntries.move(oldPosition, newPosition); + endMoveRows(); + return true; } -bool TsModel::updateRows(int row, TsModelItem* item) +bool TsModel::updateRows(int row, TsModelItem *item) { TsModelItem *oldItem = mEntries.at(row); mEntries[row] = item; @@ -181,8 +179,8 @@ */ void TsModel::closeApplication(const QModelIndex &index) { - if (!index.isValid() || - !entry(index)->data(TsDataRoles::Closable).toBool()) { + if (!index.isValid() || + !entry(index)->data(TsDataRoles::Closable).toBool()) { return; } entry(index)->close(); @@ -193,12 +191,9 @@ */ void TsModel::updateApplications() { - RDebug::Printf( "TsModel::updateApps \n"); - RDebug::Printf(" from %d \n: ",this); QList changes(mApplicationService.changeList()); - - if(changes.count() == 0) - { + + if (changes.count() == 0) { //no applications - only activities on list return; } @@ -211,20 +206,32 @@ switch (changes[iter].first.changeType()) { case TsTaskChangeInfo::EChangeDelete : removeRows(changes[iter].first.oldOffset(), 1); - break; + //we had max rows before delete - so there is possibility to add + //one activity + if(mEntries.count() + 1 == maxRowCount()) { + beginInsertRows(QModelIndex(), mEntries.count(), mEntries.count()); + getActivities(false); + endInsertRows(); + } + break; case TsTaskChangeInfo::EChangeInsert : insertRows(changes[iter].first.newOffset(), 1, - new TsEntryModelItem(changes[iter].second)); - break; + new TsEntryModelItem(changes[iter].second)); + //we have too many items - delete some activities if we can + while(mEntries.count() > maxRowCount() && mActivitiesCount > 0) { + removeRows(mEntries.count()-1, 1); + mActivitiesCount--; + } + break; case TsTaskChangeInfo::EChangeMove : moveRows(changes[iter].first.oldOffset(), changes[iter].first.newOffset()); - break; + break; case TsTaskChangeInfo::EChangeUpdate : updateRows(changes[iter].first.oldOffset(), new TsEntryModelItem(changes[iter].second)); - break; + break; default: - break; + break; } } @@ -246,8 +253,10 @@ */ void TsModel::fullUpdate() { + beginResetModel(); qDeleteAll(mEntries); mEntries.clear(); + mActivitiesCount = 0; getApplications(); getActivities(); endResetModel(); @@ -259,11 +268,10 @@ */ void TsModel::getApplications() { - RDebug::Printf( "CTsTaskMonitorClientImpl::RunL \n"); //get all running applications and append to entries list TsModelItem *entry(0); QList< TsTaskChange> tasks(mApplicationService.changeList(true)); - foreach (TsTaskChange taskData, tasks) { + foreach(TsTaskChange taskData, tasks) { if (!taskData.second.isNull()) { entry = new TsEntryModelItem(taskData.second); if (entry) { @@ -276,56 +284,25 @@ /*! Read current activities */ -void TsModel::getActivities() +void TsModel::getActivities(bool fullUpdate) { //get activities - TsModelItem *entry(0); - QList activities; - QMetaObject::invokeMethod(&mActivityService, - "activitiesList", - Q_RETURN_ARG(QList, - activities)); - foreach(QVariantHash activity, activities) { - prepareActivityEntry(activity); - entry = new TsActivityModelItem(*this, mActivityService, activity); - if (maxRowCount() <= mEntries.count()) { - delete entry; - break; + int maxActivitiesCount = maxRowCount() - mEntries.count() + mActivitiesCount; + if (maxActivitiesCount > 0) { + QList activities; + QMetaObject::invokeMethod(&mActivityService, + "activitiesList", + Q_RETURN_ARG(QList, activities), + Q_ARG(int, maxActivitiesCount)); + int iterPos = fullUpdate ? 0 : mActivitiesCount; + for(int iter(iterPos); iter< activities.count(); iter++) { + mEntries.append(new TsActivityModelItem(*this, mActivityService, activities[iter])); + mActivitiesCount++; } - mEntries.append(entry); } } /*! - Modify activity entry replacing application id with name -*/ -void TsModel::prepareActivityEntry(QVariantHash &activity) -{ - if (!activity.contains(TsActivityModelItem::applicationKeyword())) { - activity.insert(TsActivityModelItem::applicationKeyword(), - activity.contains(ActivityApplicationKeyword) ? - getApplicationName(activity[ActivityApplicationKeyword].toInt()) : - QString::null); - } -} - -/*! - Return application name - \param id - reqiested application identyfier -*/ -QString TsModel::getApplicationName(int id) -{ - QString retVal; -#ifdef Q_OS_SYMBIAN - TApaAppInfo info; - iAppArcSession.GetAppInfo( info, TUid::Uid(id)); - retVal = QString::fromUtf16(info.iShortCaption.Ptr(), - info.iShortCaption.Length()); -#endif - return retVal; -} - -/*! Called when some item was changed \param itemPtr - address of updated item */ @@ -346,4 +323,3 @@ { return mEntries.at(index.row()); } -