contentstorage/caclient/src/caitemmodellist.cpp
author hgs
Fri, 06 Aug 2010 13:40:46 +0300
changeset 107 b34d53f6acdf
parent 98 d2f833ab7940
permissions -rw-r--r--
201031
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
85
7feec50967db 201003_02
hgs
parents:
diff changeset
     1
/*
7feec50967db 201003_02
hgs
parents:
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
7feec50967db 201003_02
hgs
parents:
diff changeset
     3
 * All rights reserved.
7feec50967db 201003_02
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
7feec50967db 201003_02
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
7feec50967db 201003_02
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
7feec50967db 201003_02
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
7feec50967db 201003_02
hgs
parents:
diff changeset
     8
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
     9
 * Initial Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
7feec50967db 201003_02
hgs
parents:
diff changeset
    11
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    12
 * Contributors:
7feec50967db 201003_02
hgs
parents:
diff changeset
    13
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    14
 * Description: caitemmodel_p.cpp
7feec50967db 201003_02
hgs
parents:
diff changeset
    15
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    16
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    17
7feec50967db 201003_02
hgs
parents:
diff changeset
    18
#include <QIcon>
7feec50967db 201003_02
hgs
parents:
diff changeset
    19
107
hgs
parents: 98
diff changeset
    20
#include "caclient_defines.h"
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    21
#include "caitemmodellist.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    22
#include "caitemmodel_p.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    23
#include "canotifier.h"
7feec50967db 201003_02
hgs
parents:
diff changeset
    24
#include "canotifierfilter.h"
87
hgs
parents: 86
diff changeset
    25
#include "caclienttest_global.h"
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    26
7feec50967db 201003_02
hgs
parents:
diff changeset
    27
// ======== MEMBER FUNCTIONS ========
7feec50967db 201003_02
hgs
parents:
diff changeset
    28
7feec50967db 201003_02
hgs
parents:
diff changeset
    29
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    30
 Constructor
7feec50967db 201003_02
hgs
parents:
diff changeset
    31
 \param aService content arsenall service provider
7feec50967db 201003_02
hgs
parents:
diff changeset
    32
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    33
CaItemModelList::CaItemModelList(QSharedPointer<CaService> service) :
7feec50967db 201003_02
hgs
parents:
diff changeset
    34
    mOrderedList(), mEntriesHash(), mService(service)
7feec50967db 201003_02
hgs
parents:
diff changeset
    35
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    36
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    37
7feec50967db 201003_02
hgs
parents:
diff changeset
    38
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    39
 Destructor
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
CaItemModelList::~CaItemModelList()
7feec50967db 201003_02
hgs
parents:
diff changeset
    42
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    43
    clear();
7feec50967db 201003_02
hgs
parents:
diff changeset
    44
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
 Clears list
7feec50967db 201003_02
hgs
parents:
diff changeset
    48
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    49
void CaItemModelList::clear()
7feec50967db 201003_02
hgs
parents:
diff changeset
    50
{
87
hgs
parents: 86
diff changeset
    51
    CACLIENTTEST_FUNC_ENTRY("CaItemModelList::clear");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    52
    mOrderedList.clear();
7feec50967db 201003_02
hgs
parents:
diff changeset
    53
    mEntriesHash.clear();
87
hgs
parents: 86
diff changeset
    54
    CACLIENTTEST_FUNC_EXIT("CaItemModelList::clear");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    56
7feec50967db 201003_02
hgs
parents:
diff changeset
    57
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
 List count
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
 \retval list count
7feec50967db 201003_02
hgs
parents:
diff changeset
    60
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
int CaItemModelList::count() const
7feec50967db 201003_02
hgs
parents:
diff changeset
    62
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
    return mOrderedList.count();
7feec50967db 201003_02
hgs
parents:
diff changeset
    64
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    65
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    67
 Returns entry at aRow
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
 \param row of model list
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
 \retval entry at row
7feec50967db 201003_02
hgs
parents:
diff changeset
    70
 */
92
hgs
parents: 89
diff changeset
    71
QSharedPointer<CaEntry> CaItemModelList::at(int row) const
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
    int id = mOrderedList[row];
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
    return mEntriesHash.value(id);
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
7feec50967db 201003_02
hgs
parents:
diff changeset
    77
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
 Reloads entries
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
 \param query needed to reload model list
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    81
void CaItemModelList::reloadEntries(const CaQuery &query)
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
{
87
hgs
parents: 86
diff changeset
    83
    CACLIENTTEST_FUNC_ENTRY("CaItemModelList::reloadEntries");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
    clear();
86
hgs
parents: 85
diff changeset
    85
    int id=0;
92
hgs
parents: 89
diff changeset
    86
    QList< QSharedPointer<CaEntry> > eList = mService->getEntries(query);
86
hgs
parents: 85
diff changeset
    87
    for (int i = 0; i < eList.count(); i++) {
hgs
parents: 85
diff changeset
    88
        id = eList[i]->id();
hgs
parents: 85
diff changeset
    89
        mOrderedList << id;
hgs
parents: 85
diff changeset
    90
        mEntriesHash.insert(id, eList[i]);
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
    }
87
hgs
parents: 86
diff changeset
    92
    CACLIENTTEST_FUNC_EXIT("CaItemModelList::reloadEntries");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    93
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    94
7feec50967db 201003_02
hgs
parents:
diff changeset
    95
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    96
 Updates entry with given id
98
hgs
parents: 92
diff changeset
    97
 \param entry of item in the list
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    98
 */
98
hgs
parents: 92
diff changeset
    99
void CaItemModelList::updateEntry(const QSharedPointer<CaEntry> &entry)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   100
{
87
hgs
parents: 86
diff changeset
   101
    CACLIENTTEST_FUNC_ENTRY("CaItemModelList::updateEntry");
98
hgs
parents: 92
diff changeset
   102
    if (mEntriesHash.contains(entry->id())) {
hgs
parents: 92
diff changeset
   103
        mEntriesHash.insert(entry->id(), entry);
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
    }
87
hgs
parents: 86
diff changeset
   105
    CACLIENTTEST_FUNC_EXIT("CaItemModelList::updateEntry");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
107
hgs
parents: 98
diff changeset
   108
int CaItemModelList::updateProgress(int id, int valueOfProgress)
hgs
parents: 98
diff changeset
   109
{
hgs
parents: 98
diff changeset
   110
    if (mEntriesHash.contains(id)) {
hgs
parents: 98
diff changeset
   111
        QSharedPointer<CaEntry> entry = at(indexOf(id));
hgs
parents: 98
diff changeset
   112
        if (valueOfProgress < 0) {
hgs
parents: 98
diff changeset
   113
            //we need to reload this entry from database
hgs
parents: 98
diff changeset
   114
            mEntriesHash.insert(id, mService->getEntry(entry->id()));
hgs
parents: 98
diff changeset
   115
        }
hgs
parents: 98
diff changeset
   116
        else {
hgs
parents: 98
diff changeset
   117
            entry->setFlags(entry->flags() | UsedEntryFlag 
hgs
parents: 98
diff changeset
   118
                    | UninstallEntryFlag);
hgs
parents: 98
diff changeset
   119
            entry->setAttribute(UNINSTALL_PROGRESS_APPLICATION_ATTRIBUTE_NAME,
hgs
parents: 98
diff changeset
   120
                    QString().setNum(valueOfProgress));
hgs
parents: 98
diff changeset
   121
            mEntriesHash.insert(id, entry);
hgs
parents: 98
diff changeset
   122
        }
hgs
parents: 98
diff changeset
   123
    }
hgs
parents: 98
diff changeset
   124
    return indexOf(id);
hgs
parents: 98
diff changeset
   125
}
hgs
parents: 98
diff changeset
   126
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   127
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
 Updates entries
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
 \param query with sort order
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
void CaItemModelList::updateEntries(const CaQuery &query)
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
{
87
hgs
parents: 86
diff changeset
   133
    CACLIENTTEST_FUNC_ENTRY("CaItemModelList::updateEntries");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
    mOrderedList = mService->getEntryIds(query);
7feec50967db 201003_02
hgs
parents:
diff changeset
   135
    for (int i = 0; i < mOrderedList.count(); i++) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
        if (!mEntriesHash.contains(mOrderedList[i])) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   137
            mEntriesHash.insert(mOrderedList[i], mService->getEntry(
87
hgs
parents: 86
diff changeset
   138
                                    mOrderedList[i]));
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   139
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   140
    }
87
hgs
parents: 86
diff changeset
   141
    CACLIENTTEST_FUNC_EXIT("CaItemModelList::updateEntries");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   142
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   143
7feec50967db 201003_02
hgs
parents:
diff changeset
   144
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   145
 Returns index with given id value
7feec50967db 201003_02
hgs
parents:
diff changeset
   146
 \param id item id
7feec50967db 201003_02
hgs
parents:
diff changeset
   147
 \retval index of item with given aId
7feec50967db 201003_02
hgs
parents:
diff changeset
   148
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   149
int CaItemModelList::indexOf(const int &id) const
7feec50967db 201003_02
hgs
parents:
diff changeset
   150
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   151
    return mOrderedList.indexOf(id);
7feec50967db 201003_02
hgs
parents:
diff changeset
   152
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   153
7feec50967db 201003_02
hgs
parents:
diff changeset
   154
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   155
 Inserts item with given id at row
7feec50967db 201003_02
hgs
parents:
diff changeset
   156
 (entry for given id is created and inserted in list)
7feec50967db 201003_02
hgs
parents:
diff changeset
   157
 \param row at which item is to be inserted
7feec50967db 201003_02
hgs
parents:
diff changeset
   158
 \param id of item to be inserted
7feec50967db 201003_02
hgs
parents:
diff changeset
   159
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   160
void CaItemModelList::insert(int row, int id)
7feec50967db 201003_02
hgs
parents:
diff changeset
   161
{
87
hgs
parents: 86
diff changeset
   162
    CACLIENTTEST_FUNC_ENTRY("CaItemModelList::insert");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   163
    mOrderedList.insert(row, id);
7feec50967db 201003_02
hgs
parents:
diff changeset
   164
    mEntriesHash.insert(id, mService->getEntry(id));
87
hgs
parents: 86
diff changeset
   165
    CACLIENTTEST_FUNC_EXIT("CaItemModelList::insert");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   166
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   167
7feec50967db 201003_02
hgs
parents:
diff changeset
   168
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   169
 Removes item with given id
7feec50967db 201003_02
hgs
parents:
diff changeset
   170
 \param id of item to remove
7feec50967db 201003_02
hgs
parents:
diff changeset
   171
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   172
void CaItemModelList::remove(int id)
7feec50967db 201003_02
hgs
parents:
diff changeset
   173
{
87
hgs
parents: 86
diff changeset
   174
    CACLIENTTEST_FUNC_ENTRY("CaItemModelList::remove");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   175
    if (mEntriesHash.contains(id)) {
92
hgs
parents: 89
diff changeset
   176
        mEntriesHash.remove(id);
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   177
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   178
    mOrderedList.removeOne(id);
87
hgs
parents: 86
diff changeset
   179
    CACLIENTTEST_FUNC_EXIT("CaItemModelList::remove");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   180
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   181
7feec50967db 201003_02
hgs
parents:
diff changeset
   182
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   183
 Returns the item id at row position - aRow
7feec50967db 201003_02
hgs
parents:
diff changeset
   184
 \param row item row
7feec50967db 201003_02
hgs
parents:
diff changeset
   185
 \retval id of item at given row
7feec50967db 201003_02
hgs
parents:
diff changeset
   186
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   187
const int &CaItemModelList::operator[](int row) const
7feec50967db 201003_02
hgs
parents:
diff changeset
   188
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   189
    return mOrderedList[row];
7feec50967db 201003_02
hgs
parents:
diff changeset
   190
}
89
hgs
parents: 87
diff changeset
   191
hgs
parents: 87
diff changeset
   192
/*!
hgs
parents: 87
diff changeset
   193
 Returns on ordered list of entry IDs
hgs
parents: 87
diff changeset
   194
 \retval Copy of the internal ID list
hgs
parents: 87
diff changeset
   195
 */
hgs
parents: 87
diff changeset
   196
QList<int> CaItemModelList::orderedIdList()
hgs
parents: 87
diff changeset
   197
{
hgs
parents: 87
diff changeset
   198
    return mOrderedList;
hgs
parents: 87
diff changeset
   199
}