contentstorage/caclient/src/caitemmodel.cpp
author hgs
Wed, 06 Oct 2010 16:00:22 +0300
changeset 125 26079c1bb561
parent 119 50e220be30d1
child 127 7b66bc3c6dc9
permissions -rw-r--r--
201039_01
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.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
86
hgs
parents: 85
diff changeset
    18
#include <HbIcon>
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
    19
#include <HbParameterLengthLimiter>
98
hgs
parents: 96
diff changeset
    20
#include "caclient_defines.h"
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    21
#include "caitemmodel.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
// Constants
112
hgs
parents: 107
diff changeset
    28
const QSizeF defaultIconSize(30, 30);
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    29
7feec50967db 201003_02
hgs
parents:
diff changeset
    30
// ======== MEMBER FUNCTIONS ========
7feec50967db 201003_02
hgs
parents:
diff changeset
    31
7feec50967db 201003_02
hgs
parents:
diff changeset
    32
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    33
 *   \class CaItemModel
7feec50967db 201003_02
hgs
parents:
diff changeset
    34
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    35
 *   \brief This class provides model containing CaEntry class objects.
7feec50967db 201003_02
hgs
parents:
diff changeset
    36
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    37
 *   To create instance of CaItemModel object, you need to pass CaQuery
7feec50967db 201003_02
hgs
parents:
diff changeset
    38
 *   object in constructor. CaQuery should describe items that you want
7feec50967db 201003_02
hgs
parents:
diff changeset
    39
 *   to have in a model.
7feec50967db 201003_02
hgs
parents:
diff changeset
    40
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    41
 *   \example
7feec50967db 201003_02
hgs
parents:
diff changeset
    42
 *   \code
7feec50967db 201003_02
hgs
parents:
diff changeset
    43
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    44
 *   CaQuery query;
7feec50967db 201003_02
hgs
parents:
diff changeset
    45
 *   query.setFlagsOn(VisibleEntryFlag);
7feec50967db 201003_02
hgs
parents:
diff changeset
    46
 *   query.setParentId(collectionId);
7feec50967db 201003_02
hgs
parents:
diff changeset
    47
 *   CaItemModel* model = new CaItemModel(query, this);
7feec50967db 201003_02
hgs
parents:
diff changeset
    48
 *
7feec50967db 201003_02
hgs
parents:
diff changeset
    49
 *   \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
    50
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    51
7feec50967db 201003_02
hgs
parents:
diff changeset
    52
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    53
 Constructor.
7feec50967db 201003_02
hgs
parents:
diff changeset
    54
 \param query query describing entries that should be present in a model.
7feec50967db 201003_02
hgs
parents:
diff changeset
    55
 \param parent parent of a model
7feec50967db 201003_02
hgs
parents:
diff changeset
    56
 */
87
hgs
parents: 86
diff changeset
    57
CaItemModel::CaItemModel(const CaQuery &query, QObject *parent) :
85
7feec50967db 201003_02
hgs
parents:
diff changeset
    58
    QAbstractItemModel(parent), m_d(new CaItemModelPrivate(query, this))
7feec50967db 201003_02
hgs
parents:
diff changeset
    59
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    60
7feec50967db 201003_02
hgs
parents:
diff changeset
    61
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    62
7feec50967db 201003_02
hgs
parents:
diff changeset
    63
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    64
 Destructor
7feec50967db 201003_02
hgs
parents:
diff changeset
    65
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    66
CaItemModel::~CaItemModel()
7feec50967db 201003_02
hgs
parents:
diff changeset
    67
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    68
    delete m_d;
7feec50967db 201003_02
hgs
parents:
diff changeset
    69
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    70
7feec50967db 201003_02
hgs
parents:
diff changeset
    71
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    72
 Returns number of columns
7feec50967db 201003_02
hgs
parents:
diff changeset
    73
 \param parent not used
7feec50967db 201003_02
hgs
parents:
diff changeset
    74
 \retval 1
7feec50967db 201003_02
hgs
parents:
diff changeset
    75
7feec50967db 201003_02
hgs
parents:
diff changeset
    76
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
    77
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
    78
 // to get number of columns in a model
7feec50967db 201003_02
hgs
parents:
diff changeset
    79
 int columns = model->columnCount();
7feec50967db 201003_02
hgs
parents:
diff changeset
    80
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
    81
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
    82
7feec50967db 201003_02
hgs
parents:
diff changeset
    83
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
    84
int CaItemModel::columnCount(const QModelIndex &parent) const
7feec50967db 201003_02
hgs
parents:
diff changeset
    85
{
7feec50967db 201003_02
hgs
parents:
diff changeset
    86
    Q_UNUSED(parent);
7feec50967db 201003_02
hgs
parents:
diff changeset
    87
    //model keeps entries in a column 0 and a parent entry in a column 1
7feec50967db 201003_02
hgs
parents:
diff changeset
    88
    //parent entry is treated as an invisible root item,
7feec50967db 201003_02
hgs
parents:
diff changeset
    89
    //so column count is always 1
7feec50967db 201003_02
hgs
parents:
diff changeset
    90
    return 1;
7feec50967db 201003_02
hgs
parents:
diff changeset
    91
}
7feec50967db 201003_02
hgs
parents:
diff changeset
    92
7feec50967db 201003_02
hgs
parents:
diff changeset
    93
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
    94
 Returns number of rows
7feec50967db 201003_02
hgs
parents:
diff changeset
    95
 \param parent not used
7feec50967db 201003_02
hgs
parents:
diff changeset
    96
 \retval number of rows
7feec50967db 201003_02
hgs
parents:
diff changeset
    97
7feec50967db 201003_02
hgs
parents:
diff changeset
    98
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
    99
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   100
 // to get number of rows in a model
7feec50967db 201003_02
hgs
parents:
diff changeset
   101
 int rows = model->rowCount();
7feec50967db 201003_02
hgs
parents:
diff changeset
   102
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   103
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   104
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   105
int CaItemModel::rowCount(const QModelIndex &parent) const
7feec50967db 201003_02
hgs
parents:
diff changeset
   106
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   107
    Q_UNUSED(parent);
7feec50967db 201003_02
hgs
parents:
diff changeset
   108
    return m_d->rowCount();
7feec50967db 201003_02
hgs
parents:
diff changeset
   109
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   110
7feec50967db 201003_02
hgs
parents:
diff changeset
   111
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   112
 Returns QModelIndex of an item
7feec50967db 201003_02
hgs
parents:
diff changeset
   113
 \param row row in which an item is placed
7feec50967db 201003_02
hgs
parents:
diff changeset
   114
 \param column not used
7feec50967db 201003_02
hgs
parents:
diff changeset
   115
 \param parent not used
7feec50967db 201003_02
hgs
parents:
diff changeset
   116
 \retval index of item in model
7feec50967db 201003_02
hgs
parents:
diff changeset
   117
7feec50967db 201003_02
hgs
parents:
diff changeset
   118
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   119
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   120
 // to get model index of an item
7feec50967db 201003_02
hgs
parents:
diff changeset
   121
 QModelIndex modelIndex = model->index(5);
7feec50967db 201003_02
hgs
parents:
diff changeset
   122
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   123
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   124
7feec50967db 201003_02
hgs
parents:
diff changeset
   125
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   126
QModelIndex CaItemModel::index(int row, int column,
87
hgs
parents: 86
diff changeset
   127
                               const QModelIndex &parent) const
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   128
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   129
    Q_UNUSED(column);
7feec50967db 201003_02
hgs
parents:
diff changeset
   130
    Q_UNUSED(parent);
7feec50967db 201003_02
hgs
parents:
diff changeset
   131
    return m_d->index(row);
7feec50967db 201003_02
hgs
parents:
diff changeset
   132
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   133
7feec50967db 201003_02
hgs
parents:
diff changeset
   134
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   135
 Returns parent item
7feec50967db 201003_02
hgs
parents:
diff changeset
   136
 \param child index (ignored)
7feec50967db 201003_02
hgs
parents:
diff changeset
   137
 \retval parent index. in case of CaItemModel it is always QModelIndex()
7feec50967db 201003_02
hgs
parents:
diff changeset
   138
7feec50967db 201003_02
hgs
parents:
diff changeset
   139
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   140
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   141
 // to get model index of a parent of an item
7feec50967db 201003_02
hgs
parents:
diff changeset
   142
 QModelIndex parentModelIndex = model->parent(childModelIndex);
7feec50967db 201003_02
hgs
parents:
diff changeset
   143
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   144
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   145
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   146
QModelIndex CaItemModel::parent(const QModelIndex &index) const
7feec50967db 201003_02
hgs
parents:
diff changeset
   147
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   148
    Q_UNUSED(index);
7feec50967db 201003_02
hgs
parents:
diff changeset
   149
    return QModelIndex();
7feec50967db 201003_02
hgs
parents:
diff changeset
   150
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   151
7feec50967db 201003_02
hgs
parents:
diff changeset
   152
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   153
 Returns root item model index
7feec50967db 201003_02
hgs
parents:
diff changeset
   154
 \retval root item model index
7feec50967db 201003_02
hgs
parents:
diff changeset
   155
7feec50967db 201003_02
hgs
parents:
diff changeset
   156
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   157
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   158
 // to get model index of a root item
7feec50967db 201003_02
hgs
parents:
diff changeset
   159
 QModelIndex rootIndex = model->root();
7feec50967db 201003_02
hgs
parents:
diff changeset
   160
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   161
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   162
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   163
QModelIndex CaItemModel::root() const
7feec50967db 201003_02
hgs
parents:
diff changeset
   164
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   165
    return m_d->root();
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
 Returns appropiate model's data
7feec50967db 201003_02
hgs
parents:
diff changeset
   170
 \param index model index
7feec50967db 201003_02
hgs
parents:
diff changeset
   171
 \param role which data role to return
7feec50967db 201003_02
hgs
parents:
diff changeset
   172
 \retval models data
7feec50967db 201003_02
hgs
parents:
diff changeset
   173
7feec50967db 201003_02
hgs
parents:
diff changeset
   174
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   175
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   176
 // to get data for model item
7feec50967db 201003_02
hgs
parents:
diff changeset
   177
 QVariant = model->data(itemModelIndex, Qt::DisplayRole);
7feec50967db 201003_02
hgs
parents:
diff changeset
   178
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   179
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   180
7feec50967db 201003_02
hgs
parents:
diff changeset
   181
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   182
QVariant CaItemModel::data(const QModelIndex &index, int role) const
7feec50967db 201003_02
hgs
parents:
diff changeset
   183
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   184
    return m_d->data(index, role);
7feec50967db 201003_02
hgs
parents:
diff changeset
   185
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   186
7feec50967db 201003_02
hgs
parents:
diff changeset
   187
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   188
 Disables or enables auto-update feature of the model
7feec50967db 201003_02
hgs
parents:
diff changeset
   189
 \param autoUpdate true to enable autoupdate, false to disable
7feec50967db 201003_02
hgs
parents:
diff changeset
   190
7feec50967db 201003_02
hgs
parents:
diff changeset
   191
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   192
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   193
 // to enable model auto update
7feec50967db 201003_02
hgs
parents:
diff changeset
   194
 model->setAutoUpdate(true);
7feec50967db 201003_02
hgs
parents:
diff changeset
   195
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   196
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   197
7feec50967db 201003_02
hgs
parents:
diff changeset
   198
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   199
void CaItemModel::setAutoUpdate(bool autoUpdate)
7feec50967db 201003_02
hgs
parents:
diff changeset
   200
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   201
    m_d->setAutoUpdate(autoUpdate);
7feec50967db 201003_02
hgs
parents:
diff changeset
   202
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   203
7feec50967db 201003_02
hgs
parents:
diff changeset
   204
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   205
 Disables or enables secondline feature of the model
7feec50967db 201003_02
hgs
parents:
diff changeset
   206
 \param secondLine enable or disable second line
7feec50967db 201003_02
hgs
parents:
diff changeset
   207
7feec50967db 201003_02
hgs
parents:
diff changeset
   208
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   209
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   210
 // to enable model second line visibility
7feec50967db 201003_02
hgs
parents:
diff changeset
   211
 model->setSecondLineVisibility(true);
7feec50967db 201003_02
hgs
parents:
diff changeset
   212
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   213
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   214
7feec50967db 201003_02
hgs
parents:
diff changeset
   215
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   216
void CaItemModel::setSecondLineVisibility(bool secondLineVisible)
7feec50967db 201003_02
hgs
parents:
diff changeset
   217
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   218
    m_d->setSecondLineVisibility(secondLineVisible);
7feec50967db 201003_02
hgs
parents:
diff changeset
   219
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   220
7feec50967db 201003_02
hgs
parents:
diff changeset
   221
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   222
 Gets second line visibility attribute
7feec50967db 201003_02
hgs
parents:
diff changeset
   223
 \retrun second line visibility attribute
7feec50967db 201003_02
hgs
parents:
diff changeset
   224
7feec50967db 201003_02
hgs
parents:
diff changeset
   225
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   226
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   227
 // to check second line visibility attribute
7feec50967db 201003_02
hgs
parents:
diff changeset
   228
 bool visibility = model->secondLineVisibility();
7feec50967db 201003_02
hgs
parents:
diff changeset
   229
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   230
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   231
7feec50967db 201003_02
hgs
parents:
diff changeset
   232
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   233
bool CaItemModel::secondLineVisibility() const
7feec50967db 201003_02
hgs
parents:
diff changeset
   234
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   235
    return m_d->secondLineVisibility();
7feec50967db 201003_02
hgs
parents:
diff changeset
   236
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   237
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   238
 Returns auto update status
7feec50967db 201003_02
hgs
parents:
diff changeset
   239
 \retval true if autoupdate is on, false if not
7feec50967db 201003_02
hgs
parents:
diff changeset
   240
7feec50967db 201003_02
hgs
parents:
diff changeset
   241
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   242
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   243
 // to check auto update attribute
7feec50967db 201003_02
hgs
parents:
diff changeset
   244
 bool autoUpdate = model->isAutoUpdate();
7feec50967db 201003_02
hgs
parents:
diff changeset
   245
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   246
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   247
7feec50967db 201003_02
hgs
parents:
diff changeset
   248
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   249
bool CaItemModel::isAutoUpdate() const
7feec50967db 201003_02
hgs
parents:
diff changeset
   250
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   251
    return m_d->notifierExists();
7feec50967db 201003_02
hgs
parents:
diff changeset
   252
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   253
7feec50967db 201003_02
hgs
parents:
diff changeset
   254
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   255
 Method for setting sorting order on model
7feec50967db 201003_02
hgs
parents:
diff changeset
   256
 \param sortAttribute sort attribute (by name, timestamp, ect...)
7feec50967db 201003_02
hgs
parents:
diff changeset
   257
 \param sortOrder sort order (ascending, descending)
7feec50967db 201003_02
hgs
parents:
diff changeset
   258
7feec50967db 201003_02
hgs
parents:
diff changeset
   259
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   260
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   261
 // to set sort order in a model
7feec50967db 201003_02
hgs
parents:
diff changeset
   262
 model->setSort(NameSortAttribute, Qt::Ascending);
7feec50967db 201003_02
hgs
parents:
diff changeset
   263
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   264
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   265
7feec50967db 201003_02
hgs
parents:
diff changeset
   266
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   267
void CaItemModel::setSort(SortAttribute sortAttribute,
87
hgs
parents: 86
diff changeset
   268
                          Qt::SortOrder sortOrder)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   269
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   270
    m_d->setSort(sortAttribute, sortOrder);
7feec50967db 201003_02
hgs
parents:
diff changeset
   271
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   272
7feec50967db 201003_02
hgs
parents:
diff changeset
   273
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   274
 Method for setting icon size
7feec50967db 201003_02
hgs
parents:
diff changeset
   275
 \param  size icon size to display
7feec50967db 201003_02
hgs
parents:
diff changeset
   276
7feec50967db 201003_02
hgs
parents:
diff changeset
   277
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   278
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   279
 // to set an icon size in a model
7feec50967db 201003_02
hgs
parents:
diff changeset
   280
 QSize iconSize(50,50);
7feec50967db 201003_02
hgs
parents:
diff changeset
   281
 model->setIconSize(iconSize);
7feec50967db 201003_02
hgs
parents:
diff changeset
   282
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   283
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   284
7feec50967db 201003_02
hgs
parents:
diff changeset
   285
 */
112
hgs
parents: 107
diff changeset
   286
void CaItemModel::setIconSize(const QSizeF &size)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   287
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   288
    m_d->setIconSize(size);
7feec50967db 201003_02
hgs
parents:
diff changeset
   289
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   290
7feec50967db 201003_02
hgs
parents:
diff changeset
   291
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   292
 Method for getting icon size
7feec50967db 201003_02
hgs
parents:
diff changeset
   293
 \param  size icon size to display
7feec50967db 201003_02
hgs
parents:
diff changeset
   294
 */
112
hgs
parents: 107
diff changeset
   295
QSizeF CaItemModel::getIconSize() const
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   296
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   297
    return m_d->getIconSize();
7feec50967db 201003_02
hgs
parents:
diff changeset
   298
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   299
7feec50967db 201003_02
hgs
parents:
diff changeset
   300
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   301
 Updates model with fresh entries
7feec50967db 201003_02
hgs
parents:
diff changeset
   302
7feec50967db 201003_02
hgs
parents:
diff changeset
   303
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   304
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   305
 // to refresh a model
7feec50967db 201003_02
hgs
parents:
diff changeset
   306
 model->updateModel();
7feec50967db 201003_02
hgs
parents:
diff changeset
   307
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   308
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   309
7feec50967db 201003_02
hgs
parents:
diff changeset
   310
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   311
void CaItemModel::updateModel()
7feec50967db 201003_02
hgs
parents:
diff changeset
   312
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   313
    m_d->updateModel();
7feec50967db 201003_02
hgs
parents:
diff changeset
   314
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   315
7feec50967db 201003_02
hgs
parents:
diff changeset
   316
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   317
 Sets parent and fetch children items from a storage
7feec50967db 201003_02
hgs
parents:
diff changeset
   318
 \param parentId id of a collection
7feec50967db 201003_02
hgs
parents:
diff changeset
   319
7feec50967db 201003_02
hgs
parents:
diff changeset
   320
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   321
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   322
 // to set a new parent id
7feec50967db 201003_02
hgs
parents:
diff changeset
   323
 int newParentId = 10;
7feec50967db 201003_02
hgs
parents:
diff changeset
   324
 model->setParentId(newParentId);
7feec50967db 201003_02
hgs
parents:
diff changeset
   325
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   326
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   327
7feec50967db 201003_02
hgs
parents:
diff changeset
   328
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   329
void CaItemModel::setParentId(int parentId)
7feec50967db 201003_02
hgs
parents:
diff changeset
   330
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   331
    m_d->setParentId(parentId);
7feec50967db 201003_02
hgs
parents:
diff changeset
   332
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   333
7feec50967db 201003_02
hgs
parents:
diff changeset
   334
/*!
87
hgs
parents: 86
diff changeset
   335
 Sets flags to mQuery which should be enabled.
hgs
parents: 86
diff changeset
   336
 This method does not update current model - only mQuery member.
hgs
parents: 86
diff changeset
   337
 Now to do this setParentId have to be invoke.
hgs
parents: 86
diff changeset
   338
 \param onFlags flags.
hgs
parents: 86
diff changeset
   339
hgs
parents: 86
diff changeset
   340
 \code
hgs
parents: 86
diff changeset
   341
 ...
hgs
parents: 86
diff changeset
   342
 // to set a flags enabled
hgs
parents: 86
diff changeset
   343
 model->setFlagsOn(RemovableEntryFlag);
hgs
parents: 86
diff changeset
   344
 ...
hgs
parents: 86
diff changeset
   345
 \endcode
hgs
parents: 86
diff changeset
   346
hgs
parents: 86
diff changeset
   347
 */
hgs
parents: 86
diff changeset
   348
void CaItemModel::setFlagsOn(const EntryFlags &onFlags)
hgs
parents: 86
diff changeset
   349
{
hgs
parents: 86
diff changeset
   350
    m_d->setFlagsOn(onFlags);
hgs
parents: 86
diff changeset
   351
}
hgs
parents: 86
diff changeset
   352
hgs
parents: 86
diff changeset
   353
/*!
hgs
parents: 86
diff changeset
   354
 Sets flags to mQuery which should be disabled.
hgs
parents: 86
diff changeset
   355
 This method does not update current model - only mQuery member.
hgs
parents: 86
diff changeset
   356
 Now to do this setParentId have to be invoke.
hgs
parents: 86
diff changeset
   357
 \param offFlags flags.
hgs
parents: 86
diff changeset
   358
hgs
parents: 86
diff changeset
   359
 \code
hgs
parents: 86
diff changeset
   360
 ...
hgs
parents: 86
diff changeset
   361
 // to set a flags disabled
hgs
parents: 86
diff changeset
   362
 model->setFlagsOff(RemovableEntryFlag);
hgs
parents: 86
diff changeset
   363
 ...
hgs
parents: 86
diff changeset
   364
 \endcode
hgs
parents: 86
diff changeset
   365
hgs
parents: 86
diff changeset
   366
 */
hgs
parents: 86
diff changeset
   367
void CaItemModel::setFlagsOff(const EntryFlags &offFlags)
hgs
parents: 86
diff changeset
   368
{
hgs
parents: 86
diff changeset
   369
    m_d->setFlagsOff(offFlags);
hgs
parents: 86
diff changeset
   370
}
hgs
parents: 86
diff changeset
   371
hgs
parents: 86
diff changeset
   372
/*!
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   373
 Returns an entry from model
7feec50967db 201003_02
hgs
parents:
diff changeset
   374
 \param index of entry in model
7feec50967db 201003_02
hgs
parents:
diff changeset
   375
 \retval pointer to an entry
7feec50967db 201003_02
hgs
parents:
diff changeset
   376
7feec50967db 201003_02
hgs
parents:
diff changeset
   377
 \code
7feec50967db 201003_02
hgs
parents:
diff changeset
   378
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   379
 // to get an entry from a model
7feec50967db 201003_02
hgs
parents:
diff changeset
   380
 CaEntry* entry = model->entry(entryModelIndex);
7feec50967db 201003_02
hgs
parents:
diff changeset
   381
 ...
7feec50967db 201003_02
hgs
parents:
diff changeset
   382
 delete entry;
7feec50967db 201003_02
hgs
parents:
diff changeset
   383
 \endcode
7feec50967db 201003_02
hgs
parents:
diff changeset
   384
7feec50967db 201003_02
hgs
parents:
diff changeset
   385
 */
92
hgs
parents: 89
diff changeset
   386
QSharedPointer<CaEntry> CaItemModel::entry(const QModelIndex &index) const
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   387
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   388
    return m_d->entry(index);
7feec50967db 201003_02
hgs
parents:
diff changeset
   389
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   390
107
hgs
parents: 106
diff changeset
   391
QList<int> CaItemModel::getUninstallingEntriesIds(int componentId)
hgs
parents: 106
diff changeset
   392
{
hgs
parents: 106
diff changeset
   393
    return m_d->getUninstallingEntriesIds(componentId);
hgs
parents: 106
diff changeset
   394
}
hgs
parents: 106
diff changeset
   395
hgs
parents: 106
diff changeset
   396
void CaItemModel::updateProgress(int id, int valueOfProgress)
hgs
parents: 106
diff changeset
   397
{
hgs
parents: 106
diff changeset
   398
    m_d->updateProgress(id, valueOfProgress);
hgs
parents: 106
diff changeset
   399
}
hgs
parents: 106
diff changeset
   400
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   401
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   402
 Constructor
7feec50967db 201003_02
hgs
parents:
diff changeset
   403
 \param query needed to create model
7feec50967db 201003_02
hgs
parents:
diff changeset
   404
 \param pointer to public implementation object connected
7feec50967db 201003_02
hgs
parents:
diff changeset
   405
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   406
CaItemModelPrivate::CaItemModelPrivate(const CaQuery &query,
87
hgs
parents: 86
diff changeset
   407
                                       CaItemModel *itemModelPublic) :
92
hgs
parents: 89
diff changeset
   408
    QObject(), m_q(itemModelPublic), mParentEntry(), mQuery(query),
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   409
    mService(CaService::instance()), mEntries(mService), mNotifier(NULL),
7feec50967db 201003_02
hgs
parents:
diff changeset
   410
    mSize(defaultIconSize), mSecondLineVisibility(true)
7feec50967db 201003_02
hgs
parents:
diff changeset
   411
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   412
    updateModel();
7feec50967db 201003_02
hgs
parents:
diff changeset
   413
    setAutoUpdate(true);
7feec50967db 201003_02
hgs
parents:
diff changeset
   414
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   415
7feec50967db 201003_02
hgs
parents:
diff changeset
   416
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   417
 Destructor
7feec50967db 201003_02
hgs
parents:
diff changeset
   418
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   419
CaItemModelPrivate::~CaItemModelPrivate()
7feec50967db 201003_02
hgs
parents:
diff changeset
   420
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   421
    mEntries.clear();
7feec50967db 201003_02
hgs
parents:
diff changeset
   422
    delete mNotifier;
7feec50967db 201003_02
hgs
parents:
diff changeset
   423
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   424
7feec50967db 201003_02
hgs
parents:
diff changeset
   425
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   426
 Returns count of rows in model
7feec50967db 201003_02
hgs
parents:
diff changeset
   427
 \retval number of rows
7feec50967db 201003_02
hgs
parents:
diff changeset
   428
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   429
int CaItemModelPrivate::rowCount() const
7feec50967db 201003_02
hgs
parents:
diff changeset
   430
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   431
    return mEntries.count();
7feec50967db 201003_02
hgs
parents:
diff changeset
   432
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   433
7feec50967db 201003_02
hgs
parents:
diff changeset
   434
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   435
 Returns QModelIndex of an item
7feec50967db 201003_02
hgs
parents:
diff changeset
   436
 \param row row
7feec50967db 201003_02
hgs
parents:
diff changeset
   437
 \retval QModelIndex of item in model
7feec50967db 201003_02
hgs
parents:
diff changeset
   438
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   439
QModelIndex CaItemModelPrivate::index(int row)
7feec50967db 201003_02
hgs
parents:
diff changeset
   440
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   441
    if ((row >= 0) && (row < mEntries.count())) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   442
        return m_q->createIndex(row, 0);
7feec50967db 201003_02
hgs
parents:
diff changeset
   443
    } else {
7feec50967db 201003_02
hgs
parents:
diff changeset
   444
        return QModelIndex();
7feec50967db 201003_02
hgs
parents:
diff changeset
   445
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   446
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   447
7feec50967db 201003_02
hgs
parents:
diff changeset
   448
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   449
 Returns appropiate model's data
7feec50967db 201003_02
hgs
parents:
diff changeset
   450
 \param modelIndex model index
7feec50967db 201003_02
hgs
parents:
diff changeset
   451
 \param role which data role to return
7feec50967db 201003_02
hgs
parents:
diff changeset
   452
 \retval models data as QVariant
7feec50967db 201003_02
hgs
parents:
diff changeset
   453
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   454
QVariant CaItemModelPrivate::data(const QModelIndex &modelIndex,
87
hgs
parents: 86
diff changeset
   455
                                  int role) const
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   456
{
87
hgs
parents: 86
diff changeset
   457
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::data");
hgs
parents: 86
diff changeset
   458
    QVariant variant;
106
hgs
parents: 98
diff changeset
   459
    QSharedPointer<CaEntry> pEntry = entry(modelIndex);
hgs
parents: 98
diff changeset
   460
    if (!pEntry.isNull()) {
87
hgs
parents: 86
diff changeset
   461
        switch (role) {
hgs
parents: 86
diff changeset
   462
        case Qt::DisplayRole:
106
hgs
parents: 98
diff changeset
   463
            variant = displayRole(pEntry.data());
87
hgs
parents: 86
diff changeset
   464
            break;
hgs
parents: 86
diff changeset
   465
        case Qt::DecorationRole:
106
hgs
parents: 98
diff changeset
   466
            variant = QVariant(HbIcon(pEntry->makeIcon(mSize)));
87
hgs
parents: 86
diff changeset
   467
            break;
hgs
parents: 86
diff changeset
   468
        case CaItemModel::IdRole:
106
hgs
parents: 98
diff changeset
   469
            variant = QVariant(pEntry->id());
87
hgs
parents: 86
diff changeset
   470
            break;
hgs
parents: 86
diff changeset
   471
        case CaItemModel::TypeRole:
106
hgs
parents: 98
diff changeset
   472
            variant = QVariant(pEntry->entryTypeName());
87
hgs
parents: 86
diff changeset
   473
            break;
hgs
parents: 86
diff changeset
   474
        case CaItemModel::FlagsRole:
106
hgs
parents: 98
diff changeset
   475
            variant = qVariantFromValue(pEntry->flags());
87
hgs
parents: 86
diff changeset
   476
            break;
hgs
parents: 86
diff changeset
   477
        case CaItemModel::TextRole:
106
hgs
parents: 98
diff changeset
   478
            variant = QVariant(pEntry->text());
87
hgs
parents: 86
diff changeset
   479
            break;
119
hgs
parents: 112
diff changeset
   480
        case CaItemModel::DescriptionRole:
hgs
parents: 112
diff changeset
   481
            variant = QVariant(pEntry->description());
hgs
parents: 112
diff changeset
   482
            break;            
92
hgs
parents: 89
diff changeset
   483
        case CaItemModel::FullTextRole:
106
hgs
parents: 98
diff changeset
   484
            variant = QVariant(pEntry->text() + QString(" ") + pEntry->description());
92
hgs
parents: 89
diff changeset
   485
            break;
98
hgs
parents: 96
diff changeset
   486
        case CaItemModel::UninstalRole:
106
hgs
parents: 98
diff changeset
   487
            variant = QVariant(
hgs
parents: 98
diff changeset
   488
                pEntry->attribute(UNINSTALL_PROGRESS_APPLICATION_ATTRIBUTE_NAME).toInt());
98
hgs
parents: 96
diff changeset
   489
            break;
106
hgs
parents: 98
diff changeset
   490
        case CaItemModel::CollectionTitleRole:
hgs
parents: 98
diff changeset
   491
            if (!pEntry->attribute(COLLECTION_TITLE_NAME).isNull()) {
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
   492
                variant = QVariant(
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
   493
                        HbParameterLengthLimiter(pEntry->attribute(COLLECTION_TITLE_NAME))
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
   494
                        .arg(this->rowCount()).arg(pEntry->text()));
106
hgs
parents: 98
diff changeset
   495
            }
hgs
parents: 98
diff changeset
   496
            else {
hgs
parents: 98
diff changeset
   497
                variant = QVariant(pEntry->text());
hgs
parents: 98
diff changeset
   498
            }
hgs
parents: 98
diff changeset
   499
            break;
hgs
parents: 98
diff changeset
   500
            
87
hgs
parents: 86
diff changeset
   501
        default:
hgs
parents: 86
diff changeset
   502
            variant = QVariant(QVariant::Invalid);
hgs
parents: 86
diff changeset
   503
        }
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   504
    }
87
hgs
parents: 86
diff changeset
   505
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::data");
hgs
parents: 86
diff changeset
   506
    return variant;
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   507
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   508
7feec50967db 201003_02
hgs
parents:
diff changeset
   509
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   510
 Disables or enables auto-update feature of the model
7feec50967db 201003_02
hgs
parents:
diff changeset
   511
 \param autoUpdate (HsMenuAutoUpdate)
7feec50967db 201003_02
hgs
parents:
diff changeset
   512
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   513
void CaItemModelPrivate::setAutoUpdate(bool autoUpdate)
7feec50967db 201003_02
hgs
parents:
diff changeset
   514
{
87
hgs
parents: 86
diff changeset
   515
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::setAutoUpdate");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   516
    if (autoUpdate) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   517
        if (!mNotifier) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   518
            CaNotifierFilter filter(mQuery);
7feec50967db 201003_02
hgs
parents:
diff changeset
   519
            mNotifier = mService->createNotifier(filter);
7feec50967db 201003_02
hgs
parents:
diff changeset
   520
            connectSlots();
7feec50967db 201003_02
hgs
parents:
diff changeset
   521
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   522
    } else {
7feec50967db 201003_02
hgs
parents:
diff changeset
   523
        disconnectSlots();
7feec50967db 201003_02
hgs
parents:
diff changeset
   524
        delete mNotifier;
7feec50967db 201003_02
hgs
parents:
diff changeset
   525
        mNotifier = NULL;
7feec50967db 201003_02
hgs
parents:
diff changeset
   526
    }
87
hgs
parents: 86
diff changeset
   527
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::setAutoUpdate");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   528
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   529
7feec50967db 201003_02
hgs
parents:
diff changeset
   530
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   531
 Method for setting sorting order on model
7feec50967db 201003_02
hgs
parents:
diff changeset
   532
 (probably will be moved to MenuService)
7feec50967db 201003_02
hgs
parents:
diff changeset
   533
 \param  sortOrder sorting order (SortAttribute)
7feec50967db 201003_02
hgs
parents:
diff changeset
   534
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   535
void CaItemModelPrivate::setSort(SortAttribute sortAttribute,
87
hgs
parents: 86
diff changeset
   536
                                 Qt::SortOrder sortOrder)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   537
{
87
hgs
parents: 86
diff changeset
   538
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::setSort");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   539
    mQuery.setSort(sortAttribute, sortOrder);
7feec50967db 201003_02
hgs
parents:
diff changeset
   540
    updateLayout();
87
hgs
parents: 86
diff changeset
   541
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::setSort");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   542
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   543
7feec50967db 201003_02
hgs
parents:
diff changeset
   544
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   545
 Method for setting icon size
7feec50967db 201003_02
hgs
parents:
diff changeset
   546
 \param size icon size to display
7feec50967db 201003_02
hgs
parents:
diff changeset
   547
 */
112
hgs
parents: 107
diff changeset
   548
void CaItemModelPrivate::setIconSize(const QSizeF &size)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   549
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   550
    if (mSize == size)
7feec50967db 201003_02
hgs
parents:
diff changeset
   551
        return;
7feec50967db 201003_02
hgs
parents:
diff changeset
   552
    m_q->layoutAboutToBeChanged();
7feec50967db 201003_02
hgs
parents:
diff changeset
   553
    mSize = size;
7feec50967db 201003_02
hgs
parents:
diff changeset
   554
    m_q->layoutChanged();
7feec50967db 201003_02
hgs
parents:
diff changeset
   555
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   556
7feec50967db 201003_02
hgs
parents:
diff changeset
   557
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   558
 Method for getting icon size
7feec50967db 201003_02
hgs
parents:
diff changeset
   559
 \retval icon size to display
7feec50967db 201003_02
hgs
parents:
diff changeset
   560
 */
112
hgs
parents: 107
diff changeset
   561
QSizeF CaItemModelPrivate::getIconSize() const
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   562
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   563
    return mSize;
7feec50967db 201003_02
hgs
parents:
diff changeset
   564
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   565
7feec50967db 201003_02
hgs
parents:
diff changeset
   566
7feec50967db 201003_02
hgs
parents:
diff changeset
   567
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   568
 Gets index of the parent item
7feec50967db 201003_02
hgs
parents:
diff changeset
   569
 \retval QModelIndex representing root item
7feec50967db 201003_02
hgs
parents:
diff changeset
   570
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   571
QModelIndex CaItemModelPrivate::root()
7feec50967db 201003_02
hgs
parents:
diff changeset
   572
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   573
    if (mQuery.parentId()) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   574
        return m_q->createIndex(0, 1);
7feec50967db 201003_02
hgs
parents:
diff changeset
   575
    } else {
7feec50967db 201003_02
hgs
parents:
diff changeset
   576
        return QModelIndex();
7feec50967db 201003_02
hgs
parents:
diff changeset
   577
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   578
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   579
7feec50967db 201003_02
hgs
parents:
diff changeset
   580
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   581
 Returns an entry from model
7feec50967db 201003_02
hgs
parents:
diff changeset
   582
 \param modelIndex index of entry in model
7feec50967db 201003_02
hgs
parents:
diff changeset
   583
 \retval pointer to an entry
7feec50967db 201003_02
hgs
parents:
diff changeset
   584
 */
92
hgs
parents: 89
diff changeset
   585
QSharedPointer<CaEntry> CaItemModelPrivate::entry(const QModelIndex &modelIndex) const
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   586
{
106
hgs
parents: 98
diff changeset
   587
    if (modelIndex.isValid()) {
hgs
parents: 98
diff changeset
   588
        if (modelIndex.column() == 1) {
hgs
parents: 98
diff changeset
   589
            return mParentEntry;
hgs
parents: 98
diff changeset
   590
        }
hgs
parents: 98
diff changeset
   591
        else {
hgs
parents: 98
diff changeset
   592
            int row = modelIndex.row();
hgs
parents: 98
diff changeset
   593
            if (row >= mEntries.count()) {
hgs
parents: 98
diff changeset
   594
                return QSharedPointer<CaEntry> ();
hgs
parents: 98
diff changeset
   595
            }
hgs
parents: 98
diff changeset
   596
            else {
hgs
parents: 98
diff changeset
   597
                return mEntries.at(row);
hgs
parents: 98
diff changeset
   598
            }
hgs
parents: 98
diff changeset
   599
        }
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   600
    }
106
hgs
parents: 98
diff changeset
   601
    return QSharedPointer<CaEntry> ();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   602
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   603
7feec50967db 201003_02
hgs
parents:
diff changeset
   604
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   605
 Disables or enables secondline feature of the model
7feec50967db 201003_02
hgs
parents:
diff changeset
   606
 \param secondLine disables or enables second line
7feec50967db 201003_02
hgs
parents:
diff changeset
   607
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   608
void CaItemModelPrivate::setSecondLineVisibility(bool secondLineVisibility)
7feec50967db 201003_02
hgs
parents:
diff changeset
   609
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   610
    if (mSecondLineVisibility == secondLineVisibility)
7feec50967db 201003_02
hgs
parents:
diff changeset
   611
        return;
7feec50967db 201003_02
hgs
parents:
diff changeset
   612
    m_q->layoutAboutToBeChanged();
7feec50967db 201003_02
hgs
parents:
diff changeset
   613
    mSecondLineVisibility = secondLineVisibility;
7feec50967db 201003_02
hgs
parents:
diff changeset
   614
    m_q->layoutChanged();
7feec50967db 201003_02
hgs
parents:
diff changeset
   615
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   616
7feec50967db 201003_02
hgs
parents:
diff changeset
   617
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   618
 Gets second line visibility attribute
7feec50967db 201003_02
hgs
parents:
diff changeset
   619
 \retrun second line visibility attribute
7feec50967db 201003_02
hgs
parents:
diff changeset
   620
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   621
bool CaItemModelPrivate::secondLineVisibility() const
7feec50967db 201003_02
hgs
parents:
diff changeset
   622
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   623
    return mSecondLineVisibility;
7feec50967db 201003_02
hgs
parents:
diff changeset
   624
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   625
7feec50967db 201003_02
hgs
parents:
diff changeset
   626
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   627
 Returns proper display role for item
7feec50967db 201003_02
hgs
parents:
diff changeset
   628
 \param modelIndex item index
7feec50967db 201003_02
hgs
parents:
diff changeset
   629
 \retval QVariant containing display role
7feec50967db 201003_02
hgs
parents:
diff changeset
   630
 */
106
hgs
parents: 98
diff changeset
   631
QVariant CaItemModelPrivate::displayRole(const CaEntry* entry) const
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   632
{
87
hgs
parents: 86
diff changeset
   633
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::displayRole")
hgs
parents: 86
diff changeset
   634
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   635
    QVariant result;
7feec50967db 201003_02
hgs
parents:
diff changeset
   636
    if (mSecondLineVisibility) {
106
hgs
parents: 98
diff changeset
   637
        if (entry->description().isEmpty()) {
hgs
parents: 98
diff changeset
   638
            result = entry->text();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   639
        } else {
7feec50967db 201003_02
hgs
parents:
diff changeset
   640
            QList<QVariant> text;
106
hgs
parents: 98
diff changeset
   641
            text << entry->text();
hgs
parents: 98
diff changeset
   642
            text << entry->description();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   643
            result = QVariant(text);
7feec50967db 201003_02
hgs
parents:
diff changeset
   644
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   645
    } else {
106
hgs
parents: 98
diff changeset
   646
        result = entry->text();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   647
    }
87
hgs
parents: 86
diff changeset
   648
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::displayRole")
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   649
    return result;
7feec50967db 201003_02
hgs
parents:
diff changeset
   650
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   651
7feec50967db 201003_02
hgs
parents:
diff changeset
   652
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   653
 Sets parent
7feec50967db 201003_02
hgs
parents:
diff changeset
   654
 \param parentId
7feec50967db 201003_02
hgs
parents:
diff changeset
   655
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   656
void CaItemModelPrivate::setParentId(int parentId)
7feec50967db 201003_02
hgs
parents:
diff changeset
   657
{
87
hgs
parents: 86
diff changeset
   658
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::setParentId");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   659
    mQuery.setParentId(parentId);
7feec50967db 201003_02
hgs
parents:
diff changeset
   660
    if (mNotifier) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   661
        delete mNotifier;
7feec50967db 201003_02
hgs
parents:
diff changeset
   662
        mNotifier = mService->createNotifier(CaNotifierFilter(mQuery));
7feec50967db 201003_02
hgs
parents:
diff changeset
   663
        reconnectSlots();
7feec50967db 201003_02
hgs
parents:
diff changeset
   664
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   665
    updateModel();
87
hgs
parents: 86
diff changeset
   666
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::setParentId");
hgs
parents: 86
diff changeset
   667
hgs
parents: 86
diff changeset
   668
}
hgs
parents: 86
diff changeset
   669
hgs
parents: 86
diff changeset
   670
/*!
hgs
parents: 86
diff changeset
   671
 Sets flags to mQuery which should be enabled.
hgs
parents: 86
diff changeset
   672
 \param onFlags flags.
hgs
parents: 86
diff changeset
   673
hgs
parents: 86
diff changeset
   674
  */
hgs
parents: 86
diff changeset
   675
void CaItemModelPrivate::setFlagsOn(const EntryFlags &onFlags)
hgs
parents: 86
diff changeset
   676
{
hgs
parents: 86
diff changeset
   677
    mQuery.setFlagsOn(onFlags);
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   678
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   679
87
hgs
parents: 86
diff changeset
   680
/*!
hgs
parents: 86
diff changeset
   681
 Sets flags to mQuery which should be disabled.
hgs
parents: 86
diff changeset
   682
 \param offFlags flags.
hgs
parents: 86
diff changeset
   683
hgs
parents: 86
diff changeset
   684
 \code
hgs
parents: 86
diff changeset
   685
 ...
hgs
parents: 86
diff changeset
   686
 // to set a new parent id
hgs
parents: 86
diff changeset
   687
 model->setFlagsOff(RemovableEntryFlag);
hgs
parents: 86
diff changeset
   688
 ...
hgs
parents: 86
diff changeset
   689
 \endcode
hgs
parents: 86
diff changeset
   690
hgs
parents: 86
diff changeset
   691
 */
hgs
parents: 86
diff changeset
   692
void CaItemModelPrivate::setFlagsOff(const EntryFlags &offFlags)
hgs
parents: 86
diff changeset
   693
{
hgs
parents: 86
diff changeset
   694
    mQuery.setFlagsOff(offFlags);
hgs
parents: 86
diff changeset
   695
}
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   696
7feec50967db 201003_02
hgs
parents:
diff changeset
   697
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   698
 Checks if notifier exists
7feec50967db 201003_02
hgs
parents:
diff changeset
   699
  \retval true if notifier exists otherwise false
7feec50967db 201003_02
hgs
parents:
diff changeset
   700
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   701
bool CaItemModelPrivate::notifierExists() const
7feec50967db 201003_02
hgs
parents:
diff changeset
   702
{
7feec50967db 201003_02
hgs
parents:
diff changeset
   703
    if (mNotifier) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   704
        return true;
7feec50967db 201003_02
hgs
parents:
diff changeset
   705
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   706
    return false;
7feec50967db 201003_02
hgs
parents:
diff changeset
   707
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   708
7feec50967db 201003_02
hgs
parents:
diff changeset
   709
107
hgs
parents: 106
diff changeset
   710
QList<int> CaItemModelPrivate::getUninstallingEntriesIds(int componentId)
hgs
parents: 106
diff changeset
   711
{
hgs
parents: 106
diff changeset
   712
    CaQuery* query = new CaQuery(mQuery);
hgs
parents: 106
diff changeset
   713
    QString compId(QString().setNum(componentId));
hgs
parents: 106
diff changeset
   714
    query->setAttribute(QString("component_id"), compId);
112
hgs
parents: 107
diff changeset
   715
    query->setFlagsOn(RemovableEntryFlag | VisibleEntryFlag);
107
hgs
parents: 106
diff changeset
   716
    QList<int> ids = mService->getEntryIds(*query);
hgs
parents: 106
diff changeset
   717
    delete query;
hgs
parents: 106
diff changeset
   718
    return ids;
hgs
parents: 106
diff changeset
   719
}
hgs
parents: 106
diff changeset
   720
hgs
parents: 106
diff changeset
   721
void CaItemModelPrivate::updateProgress(int id, int valueOfProgress)
hgs
parents: 106
diff changeset
   722
{
hgs
parents: 106
diff changeset
   723
    int updateIndex = mEntries.updateProgress(id, valueOfProgress);
hgs
parents: 106
diff changeset
   724
    if (updateIndex >= 0) {
hgs
parents: 106
diff changeset
   725
        emit m_q->dataChanged(
hgs
parents: 106
diff changeset
   726
                index(updateIndex), index(updateIndex));
hgs
parents: 106
diff changeset
   727
    }        
hgs
parents: 106
diff changeset
   728
}
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   729
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   730
 Updates model with fresh entries and resets model
7feec50967db 201003_02
hgs
parents:
diff changeset
   731
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   732
void CaItemModelPrivate::updateModel()
7feec50967db 201003_02
hgs
parents:
diff changeset
   733
{
87
hgs
parents: 86
diff changeset
   734
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::updateModel");
hgs
parents: 86
diff changeset
   735
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   736
    mEntries.reloadEntries(mQuery);
7feec50967db 201003_02
hgs
parents:
diff changeset
   737
    updateParentEntry();
7feec50967db 201003_02
hgs
parents:
diff changeset
   738
    m_q->reset();
87
hgs
parents: 86
diff changeset
   739
hgs
parents: 86
diff changeset
   740
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::updateModel");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   741
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   742
7feec50967db 201003_02
hgs
parents:
diff changeset
   743
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   744
 Updates parent entry
7feec50967db 201003_02
hgs
parents:
diff changeset
   745
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   746
void CaItemModelPrivate::updateParentEntry()
7feec50967db 201003_02
hgs
parents:
diff changeset
   747
{
87
hgs
parents: 86
diff changeset
   748
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::updateParentEntry");
hgs
parents: 86
diff changeset
   749
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   750
    if (mQuery.parentId()) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   751
        mParentEntry = mService->getEntry(mQuery.parentId());
7feec50967db 201003_02
hgs
parents:
diff changeset
   752
    }
87
hgs
parents: 86
diff changeset
   753
hgs
parents: 86
diff changeset
   754
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::updateParentEntry");
hgs
parents: 86
diff changeset
   755
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   756
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   757
7feec50967db 201003_02
hgs
parents:
diff changeset
   758
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   759
 Updates model item with fresh data
98
hgs
parents: 96
diff changeset
   760
 \param entry item to update
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   761
 */
98
hgs
parents: 96
diff changeset
   762
void CaItemModelPrivate::updateItemData(const QSharedPointer<CaEntry> &entry)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   763
{
87
hgs
parents: 86
diff changeset
   764
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::updateItemData");
hgs
parents: 86
diff changeset
   765
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   766
98
hgs
parents: 96
diff changeset
   767
    int id = entry->id();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   768
    QList<int> ids = mService->getEntryIds(mQuery);
92
hgs
parents: 89
diff changeset
   769
    if (mEntries.indexOf(id) >= 0
89
hgs
parents: 87
diff changeset
   770
           && ids.indexOf(id) == mEntries.indexOf(id)) {
98
hgs
parents: 96
diff changeset
   771
        mEntries.updateEntry(entry);
hgs
parents: 96
diff changeset
   772
        emit m_q->dataChanged(
hgs
parents: 96
diff changeset
   773
            index(mEntries.indexOf(id)), index(mEntries.indexOf(id)));
89
hgs
parents: 87
diff changeset
   774
    } else if (mParentEntry && id == mParentEntry->id()) {
hgs
parents: 87
diff changeset
   775
        updateParentEntry();
hgs
parents: 87
diff changeset
   776
        m_q->reset();
98
hgs
parents: 96
diff changeset
   777
    } else if (ids.indexOf(id) < 0) {
hgs
parents: 96
diff changeset
   778
        removeItem(id);
hgs
parents: 96
diff changeset
   779
    } else if (mEntries.indexOf(id) < 0) {
hgs
parents: 96
diff changeset
   780
        addItem(id);
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   781
    } else {
89
hgs
parents: 87
diff changeset
   782
        updateModel();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   783
    }
87
hgs
parents: 86
diff changeset
   784
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::updateItemData");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   785
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   786
7feec50967db 201003_02
hgs
parents:
diff changeset
   787
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   788
 Adds new item to model
7feec50967db 201003_02
hgs
parents:
diff changeset
   789
 \param id id of item to add
7feec50967db 201003_02
hgs
parents:
diff changeset
   790
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   791
void CaItemModelPrivate::addItem(int id)
7feec50967db 201003_02
hgs
parents:
diff changeset
   792
{
87
hgs
parents: 86
diff changeset
   793
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::addItem");
hgs
parents: 86
diff changeset
   794
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   795
    int row = itemRow(id);
7feec50967db 201003_02
hgs
parents:
diff changeset
   796
    //we use beginInsertRows and endInsertRows to emit proper signal
7feec50967db 201003_02
hgs
parents:
diff changeset
   797
    //(see Qt documentation of QAbstractItemModel)
7feec50967db 201003_02
hgs
parents:
diff changeset
   798
    if (mEntries.indexOf(id) < 0 && row >= 0) {
94
hgs
parents: 92
diff changeset
   799
        if (row > mEntries.count()) {
hgs
parents: 92
diff changeset
   800
        	m_q->beginInsertRows(QModelIndex(), mEntries.count(), mEntries.count());
hgs
parents: 92
diff changeset
   801
        	mEntries.insert(mEntries.count(), id);
hgs
parents: 92
diff changeset
   802
        } else {
hgs
parents: 92
diff changeset
   803
			m_q->beginInsertRows(QModelIndex(), row , row);
hgs
parents: 92
diff changeset
   804
        	mEntries.insert(row, id);
hgs
parents: 92
diff changeset
   805
        }
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   806
        m_q->endInsertRows();
94
hgs
parents: 92
diff changeset
   807
    } else if (row == -1) {
hgs
parents: 92
diff changeset
   808
        //we udpade whole model because we do not know parent collecion for given item
hgs
parents: 92
diff changeset
   809
        updateModel();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   810
    }
87
hgs
parents: 86
diff changeset
   811
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::addItem");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   812
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   813
7feec50967db 201003_02
hgs
parents:
diff changeset
   814
/*!
92
hgs
parents: 89
diff changeset
   815
 Adds new item block to model
hgs
parents: 89
diff changeset
   816
 Use in cases when inserting / appending an adjacent block of items
hgs
parents: 89
diff changeset
   817
 \param itemsList list of adjacent items
hgs
parents: 89
diff changeset
   818
 */
hgs
parents: 89
diff changeset
   819
void CaItemModelPrivate::addItemBlock(const QList<int> &itemsList)
hgs
parents: 89
diff changeset
   820
{
hgs
parents: 89
diff changeset
   821
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::addItemBlock");
hgs
parents: 89
diff changeset
   822
    if (!itemsList.isEmpty()) {
hgs
parents: 89
diff changeset
   823
        int firstRow = itemRow(itemsList.first());
hgs
parents: 89
diff changeset
   824
        int lastRow = itemRow(itemsList.last());
hgs
parents: 89
diff changeset
   825
        m_q->beginInsertRows(QModelIndex(), firstRow, lastRow);
hgs
parents: 89
diff changeset
   826
        for (int i = 0; i < itemsList.count(); ++i) {
hgs
parents: 89
diff changeset
   827
            mEntries.insert(firstRow + i, itemsList.at(i));
hgs
parents: 89
diff changeset
   828
        }
hgs
parents: 89
diff changeset
   829
        m_q->endInsertRows();
hgs
parents: 89
diff changeset
   830
        emit m_q->scrollTo(firstRow, QAbstractItemView::PositionAtTop);
hgs
parents: 89
diff changeset
   831
    }
hgs
parents: 89
diff changeset
   832
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::addItemBlock");
hgs
parents: 89
diff changeset
   833
}
hgs
parents: 89
diff changeset
   834
hgs
parents: 89
diff changeset
   835
/*!
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   836
 Adds new items to model
7feec50967db 201003_02
hgs
parents:
diff changeset
   837
 \param itemsList current items list
7feec50967db 201003_02
hgs
parents:
diff changeset
   838
 */
92
hgs
parents: 89
diff changeset
   839
void CaItemModelPrivate::handleAddItems(const QList<int> &itemsList)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   840
{
87
hgs
parents: 86
diff changeset
   841
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::handleAddItems");
92
hgs
parents: 89
diff changeset
   842
    const int oldItemCount(mEntries.count());
hgs
parents: 89
diff changeset
   843
    if (oldItemCount) {
hgs
parents: 89
diff changeset
   844
        const int newItemCount(itemsList.count());
106
hgs
parents: 98
diff changeset
   845
        int i = 0;
hgs
parents: 98
diff changeset
   846
        QList<int> oldList = mEntries.orderedIdList();
hgs
parents: 98
diff changeset
   847
        //we loop through items to find first added
hgs
parents: 98
diff changeset
   848
        while (i < oldList.count()) {
hgs
parents: 98
diff changeset
   849
            if (oldList[i] != itemsList[i]) {
hgs
parents: 98
diff changeset
   850
                oldList.takeAt(i);
hgs
parents: 98
diff changeset
   851
            } else {
hgs
parents: 98
diff changeset
   852
                ++i;
hgs
parents: 98
diff changeset
   853
            }
hgs
parents: 98
diff changeset
   854
        }
92
hgs
parents: 89
diff changeset
   855
        if (newItemCount == oldItemCount) {
hgs
parents: 89
diff changeset
   856
            // count is the same - check if item order changed
106
hgs
parents: 98
diff changeset
   857
            if (itemsList == oldList) {
92
hgs
parents: 89
diff changeset
   858
                // assume that if the order has not changed
hgs
parents: 89
diff changeset
   859
                // it had to be the secondary lines
107
hgs
parents: 106
diff changeset
   860
                emit m_q->dataChanged(index(0), index(m_q->rowCount()-1));
92
hgs
parents: 89
diff changeset
   861
            } else {
89
hgs
parents: 87
diff changeset
   862
                updateLayout();
hgs
parents: 87
diff changeset
   863
            }
92
hgs
parents: 89
diff changeset
   864
        } else {
89
hgs
parents: 87
diff changeset
   865
            updateModel();
92
hgs
parents: 89
diff changeset
   866
            //i is the index of first added item
hgs
parents: 89
diff changeset
   867
        }
106
hgs
parents: 98
diff changeset
   868
        emit m_q->scrollTo(i, QAbstractItemView::PositionAtTop);
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   869
    } else {
92
hgs
parents: 89
diff changeset
   870
        // items added to an empty list - add all as a single block
hgs
parents: 89
diff changeset
   871
        addItemBlock(itemsList);
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   872
    }
87
hgs
parents: 86
diff changeset
   873
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::handleAddItems");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   874
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   875
7feec50967db 201003_02
hgs
parents:
diff changeset
   876
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   877
 Gets index/row for new item
7feec50967db 201003_02
hgs
parents:
diff changeset
   878
 \param id of item to add
7feec50967db 201003_02
hgs
parents:
diff changeset
   879
 \retval row in model list for new item to insert
7feec50967db 201003_02
hgs
parents:
diff changeset
   880
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   881
int CaItemModelPrivate::itemRow(int id)
7feec50967db 201003_02
hgs
parents:
diff changeset
   882
{
87
hgs
parents: 86
diff changeset
   883
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::itemRow");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   884
    QList<int> ids = mService->getEntryIds(mQuery);
87
hgs
parents: 86
diff changeset
   885
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::itemRow");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   886
    return ids.indexOf(id);
7feec50967db 201003_02
hgs
parents:
diff changeset
   887
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   888
7feec50967db 201003_02
hgs
parents:
diff changeset
   889
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   890
 Removes item from model
7feec50967db 201003_02
hgs
parents:
diff changeset
   891
 \param id of item to remove
7feec50967db 201003_02
hgs
parents:
diff changeset
   892
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   893
void CaItemModelPrivate::removeItem(int id)
7feec50967db 201003_02
hgs
parents:
diff changeset
   894
{
87
hgs
parents: 86
diff changeset
   895
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::removeItem");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   896
    int row = mEntries.indexOf(id);
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
   897
    if (row >= 0 && rowCount() > 1) {
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   898
        m_q->beginRemoveRows(QModelIndex(), mEntries.indexOf(id),
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
   899
        mEntries.indexOf(id));
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   900
        mEntries.remove(id);
7feec50967db 201003_02
hgs
parents:
diff changeset
   901
        m_q->endRemoveRows();
87
hgs
parents: 86
diff changeset
   902
    } else {
89
hgs
parents: 87
diff changeset
   903
        updateModel();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   904
    }
87
hgs
parents: 86
diff changeset
   905
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::removeItem");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   906
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   907
7feec50967db 201003_02
hgs
parents:
diff changeset
   908
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   909
 Removes missing items from model
7feec50967db 201003_02
hgs
parents:
diff changeset
   910
 \param itemsList current items list
7feec50967db 201003_02
hgs
parents:
diff changeset
   911
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   912
void CaItemModelPrivate::removeItems(const QList<int> &itemsList)
7feec50967db 201003_02
hgs
parents:
diff changeset
   913
{
87
hgs
parents: 86
diff changeset
   914
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::removeItems");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   915
    int i = 0;
7feec50967db 201003_02
hgs
parents:
diff changeset
   916
    for (i = 0; i < itemsList.count(); i++) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   917
        if (itemsList[i] != mEntries[i]) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   918
            removeItem(mEntries[i]);
7feec50967db 201003_02
hgs
parents:
diff changeset
   919
        }
7feec50967db 201003_02
hgs
parents:
diff changeset
   920
    }
7feec50967db 201003_02
hgs
parents:
diff changeset
   921
    while (i < mEntries.count()) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   922
        removeItem(mEntries[i]);
7feec50967db 201003_02
hgs
parents:
diff changeset
   923
        i++;
7feec50967db 201003_02
hgs
parents:
diff changeset
   924
    }
87
hgs
parents: 86
diff changeset
   925
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::removeItems");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   926
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   927
7feec50967db 201003_02
hgs
parents:
diff changeset
   928
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   929
 Layout update
89
hgs
parents: 87
diff changeset
   930
 NOTE: this method should be called only if the entries get rearranged
hgs
parents: 87
diff changeset
   931
 and do not change their contents!
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   932
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   933
void CaItemModelPrivate::updateLayout()
7feec50967db 201003_02
hgs
parents:
diff changeset
   934
{
87
hgs
parents: 86
diff changeset
   935
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::updateLayout");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   936
    m_q->layoutAboutToBeChanged();
89
hgs
parents: 87
diff changeset
   937
hgs
parents: 87
diff changeset
   938
    // get the ID list from before the update
hgs
parents: 87
diff changeset
   939
    QList<int> oldOrderedIdList = mEntries.orderedIdList();
hgs
parents: 87
diff changeset
   940
hgs
parents: 87
diff changeset
   941
    // do the update, the entries should only get rearranged
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   942
    mEntries.updateEntries(mQuery);
89
hgs
parents: 87
diff changeset
   943
hgs
parents: 87
diff changeset
   944
    // get the new ID list after the entries got rearranged
hgs
parents: 87
diff changeset
   945
    QList<int> newOrderedIdList = mEntries.orderedIdList();
hgs
parents: 87
diff changeset
   946
    // this list will contain the new position indices
hgs
parents: 87
diff changeset
   947
    QList<int> newPositionsList;
hgs
parents: 87
diff changeset
   948
    int entry;
hgs
parents: 87
diff changeset
   949
    foreach (entry, oldOrderedIdList) {
hgs
parents: 87
diff changeset
   950
        newPositionsList << newOrderedIdList.indexOf(entry);
hgs
parents: 87
diff changeset
   951
    }
hgs
parents: 87
diff changeset
   952
hgs
parents: 87
diff changeset
   953
    // now check which items in the previous persistent index list changed
hgs
parents: 87
diff changeset
   954
    // their positions, make new indices for them and store in the new
hgs
parents: 87
diff changeset
   955
    // persistent index list
hgs
parents: 87
diff changeset
   956
    QModelIndexList oldPersistentIndexList = m_q->persistentIndexList();
hgs
parents: 87
diff changeset
   957
    QModelIndexList newPersistentIndexList;
hgs
parents: 87
diff changeset
   958
    QModelIndex index;
hgs
parents: 87
diff changeset
   959
    foreach (index, oldPersistentIndexList) {
hgs
parents: 87
diff changeset
   960
        newPersistentIndexList <<
hgs
parents: 87
diff changeset
   961
            m_q->createIndex(
92
hgs
parents: 89
diff changeset
   962
                newPositionsList.at(index.row()), 0, index.internalPointer());
89
hgs
parents: 87
diff changeset
   963
    }
92
hgs
parents: 89
diff changeset
   964
    m_q->changePersistentIndexList(
hgs
parents: 89
diff changeset
   965
        oldPersistentIndexList, newPersistentIndexList);
89
hgs
parents: 87
diff changeset
   966
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   967
    m_q->layoutChanged();
87
hgs
parents: 86
diff changeset
   968
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::updateLayout");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   969
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   970
7feec50967db 201003_02
hgs
parents:
diff changeset
   971
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   972
 Connects slots
7feec50967db 201003_02
hgs
parents:
diff changeset
   973
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   974
void CaItemModelPrivate::connectSlots()
7feec50967db 201003_02
hgs
parents:
diff changeset
   975
{
87
hgs
parents: 86
diff changeset
   976
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::connectSlots");
98
hgs
parents: 96
diff changeset
   977
    connect(mNotifier, SIGNAL(entryChanged(CaEntry ,ChangeType)),
hgs
parents: 96
diff changeset
   978
            this, SLOT(updateModelItem(CaEntry, ChangeType)));
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   979
7feec50967db 201003_02
hgs
parents:
diff changeset
   980
    if (mQuery.parentId() > 0) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   981
        connect(mNotifier, SIGNAL(groupContentChanged(int)),
87
hgs
parents: 86
diff changeset
   982
                this, SLOT(updateModelContent(int)));
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   983
    }
87
hgs
parents: 86
diff changeset
   984
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::connectSlots");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   985
}
7feec50967db 201003_02
hgs
parents:
diff changeset
   986
7feec50967db 201003_02
hgs
parents:
diff changeset
   987
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
   988
 Disconnects slots
7feec50967db 201003_02
hgs
parents:
diff changeset
   989
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
   990
void CaItemModelPrivate::disconnectSlots()
7feec50967db 201003_02
hgs
parents:
diff changeset
   991
{
87
hgs
parents: 86
diff changeset
   992
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::disconnectSlots");
98
hgs
parents: 96
diff changeset
   993
    disconnect(mNotifier, SIGNAL(entryChanged(CaEntry ,ChangeType)),
hgs
parents: 96
diff changeset
   994
            this, SLOT(updateModelItem(CaEntry, ChangeType)));
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   995
    if (mQuery.parentId() > 0) {
7feec50967db 201003_02
hgs
parents:
diff changeset
   996
        disconnect(mNotifier, SIGNAL(groupContentChanged(int)),
87
hgs
parents: 86
diff changeset
   997
                   this, SLOT(updateModelContent(int)));
85
7feec50967db 201003_02
hgs
parents:
diff changeset
   998
    }
87
hgs
parents: 86
diff changeset
   999
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::disconnectSlots");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1000
}
7feec50967db 201003_02
hgs
parents:
diff changeset
  1001
7feec50967db 201003_02
hgs
parents:
diff changeset
  1002
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
  1003
 Reconnects slots
7feec50967db 201003_02
hgs
parents:
diff changeset
  1004
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
  1005
void CaItemModelPrivate::reconnectSlots()
7feec50967db 201003_02
hgs
parents:
diff changeset
  1006
{
87
hgs
parents: 86
diff changeset
  1007
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::reconnectSlots");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1008
    disconnectSlots();
7feec50967db 201003_02
hgs
parents:
diff changeset
  1009
    connectSlots();
87
hgs
parents: 86
diff changeset
  1010
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::reconnectSlots");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1011
}
7feec50967db 201003_02
hgs
parents:
diff changeset
  1012
7feec50967db 201003_02
hgs
parents:
diff changeset
  1013
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
  1014
 Updates model with fresh entries
7feec50967db 201003_02
hgs
parents:
diff changeset
  1015
 \param id of item to handle
7feec50967db 201003_02
hgs
parents:
diff changeset
  1016
 \param changeType change type
7feec50967db 201003_02
hgs
parents:
diff changeset
  1017
 */
98
hgs
parents: 96
diff changeset
  1018
void CaItemModelPrivate::updateModelItem(
hgs
parents: 96
diff changeset
  1019
    const CaEntry &entry, ChangeType changeType)
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1020
{
87
hgs
parents: 86
diff changeset
  1021
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::updateModelItem");
98
hgs
parents: 96
diff changeset
  1022
    QSharedPointer<CaEntry> sharedEntry(new CaEntry(entry));
96
hgs
parents: 94
diff changeset
  1023
    int previousCount = rowCount();
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1024
    switch (changeType) {
98
hgs
parents: 96
diff changeset
  1025
        case AddChangeType:
hgs
parents: 96
diff changeset
  1026
            addItem(sharedEntry->id());
hgs
parents: 96
diff changeset
  1027
            break;
hgs
parents: 96
diff changeset
  1028
        case RemoveChangeType:
hgs
parents: 96
diff changeset
  1029
            removeItem(sharedEntry->id());
hgs
parents: 96
diff changeset
  1030
            break;
hgs
parents: 96
diff changeset
  1031
        default:
hgs
parents: 96
diff changeset
  1032
            updateItemData(sharedEntry);
hgs
parents: 96
diff changeset
  1033
            break;
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1034
    }
96
hgs
parents: 94
diff changeset
  1035
    emitEmpty(previousCount);
125
26079c1bb561 201039_01
hgs
parents: 119
diff changeset
  1036
    emitCountChange(previousCount);
87
hgs
parents: 86
diff changeset
  1037
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::updateModelItem");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1038
}
7feec50967db 201003_02
hgs
parents:
diff changeset
  1039
7feec50967db 201003_02
hgs
parents:
diff changeset
  1040
/*!
7feec50967db 201003_02
hgs
parents:
diff changeset
  1041
 Updates model with fresh entries
7feec50967db 201003_02
hgs
parents:
diff changeset
  1042
 \param id of parent
7feec50967db 201003_02
hgs
parents:
diff changeset
  1043
 */
7feec50967db 201003_02
hgs
parents:
diff changeset
  1044
void CaItemModelPrivate::updateModelContent(int id)
7feec50967db 201003_02
hgs
parents:
diff changeset
  1045
{
7feec50967db 201003_02
hgs
parents:
diff changeset
  1046
    Q_UNUSED(id);
96
hgs
parents: 94
diff changeset
  1047
    int previousCount = rowCount();
hgs
parents: 94
diff changeset
  1048
87
hgs
parents: 86
diff changeset
  1049
    CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::updateModelContent");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1050
    QList<int> ids = mService->getEntryIds(mQuery);
7feec50967db 201003_02
hgs
parents:
diff changeset
  1051
7feec50967db 201003_02
hgs
parents:
diff changeset
  1052
    if (ids.count() >= mEntries.count()) {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1053
        handleAddItems(ids);
7feec50967db 201003_02
hgs
parents:
diff changeset
  1054
    } else {
7feec50967db 201003_02
hgs
parents:
diff changeset
  1055
        removeItems(ids);
7feec50967db 201003_02
hgs
parents:
diff changeset
  1056
    }
96
hgs
parents: 94
diff changeset
  1057
    emitEmpty(previousCount);
106
hgs
parents: 98
diff changeset
  1058
    emitCountChange(previousCount);
87
hgs
parents: 86
diff changeset
  1059
    CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::updateModelContent");
85
7feec50967db 201003_02
hgs
parents:
diff changeset
  1060
}
96
hgs
parents: 94
diff changeset
  1061
hgs
parents: 94
diff changeset
  1062
/*!
hgs
parents: 94
diff changeset
  1063
 Emits empty signal if model state was changed
hgs
parents: 94
diff changeset
  1064
 \param id of parent
hgs
parents: 94
diff changeset
  1065
 */
hgs
parents: 94
diff changeset
  1066
void CaItemModelPrivate::emitEmpty(int previousCount)
hgs
parents: 94
diff changeset
  1067
{
hgs
parents: 94
diff changeset
  1068
    if ( previousCount && !rowCount()) {
hgs
parents: 94
diff changeset
  1069
        emit m_q->empty(true);
hgs
parents: 94
diff changeset
  1070
    }
hgs
parents: 94
diff changeset
  1071
    if ( !previousCount && rowCount()) {
hgs
parents: 94
diff changeset
  1072
        emit m_q->empty(false);
hgs
parents: 94
diff changeset
  1073
    }
hgs
parents: 94
diff changeset
  1074
}
106
hgs
parents: 98
diff changeset
  1075
hgs
parents: 98
diff changeset
  1076
/*!
hgs
parents: 98
diff changeset
  1077
 Emits empty signal if count of item in model was change
hgs
parents: 98
diff changeset
  1078
 \param previousCount 
hgs
parents: 98
diff changeset
  1079
 */
hgs
parents: 98
diff changeset
  1080
void CaItemModelPrivate::emitCountChange(int previousCount)
hgs
parents: 98
diff changeset
  1081
{
hgs
parents: 98
diff changeset
  1082
    if (previousCount != rowCount()) {
hgs
parents: 98
diff changeset
  1083
        emit m_q->countChange();
hgs
parents: 98
diff changeset
  1084
    }
hgs
parents: 98
diff changeset
  1085
}
107
hgs
parents: 106
diff changeset
  1086