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