controlpanelplugins/themeplugin/src/cpthemelistmodel.cpp
author hgs
Thu, 10 Jun 2010 16:07:41 +0800
changeset 21 2883a5458389
child 22 a5692c68d772
permissions -rw-r--r--
201023
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * ============================================================================
hgs
parents:
diff changeset
     3
 *  Name        : cpthemelistmodel_p.cpp
hgs
parents:
diff changeset
     4
 *  Part of     : LibHb / theme
hgs
parents:
diff changeset
     5
 *  Description : Private implementation of the theme listmodel.
hgs
parents:
diff changeset
     6
 *  Version     : %version: 1 % << Don't touch! Updated by Synergy at check-out.
hgs
parents:
diff changeset
     7
 *
hgs
parents:
diff changeset
     8
 *  Copyright (c) 2008-2009 Nokia.  All rights reserved.
hgs
parents:
diff changeset
     9
 *  This material, including documentation and any related computer
hgs
parents:
diff changeset
    10
 *  programs, is protected by copyright controlled by Nokia.  All
hgs
parents:
diff changeset
    11
 *  rights are reserved.  Copying, including reproducing, storing,
hgs
parents:
diff changeset
    12
 *  adapting or translating, any or all of this material requires the
hgs
parents:
diff changeset
    13
 *  prior written consent of Nokia.  This material also contains
hgs
parents:
diff changeset
    14
 *  confidential information which may not be disclosed to others
hgs
parents:
diff changeset
    15
 *  without the prior written consent of Nokia.
hgs
parents:
diff changeset
    16
 * ============================================================================
hgs
parents:
diff changeset
    17
 */
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include "cpthemelistmodel.h"
hgs
parents:
diff changeset
    20
#include "cpthemechanger_p.h"
hgs
parents:
diff changeset
    21
#include <QFileSystemWatcher>
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
/*
hgs
parents:
diff changeset
    24
    CpThemeChangerModel provides an interface to the data contained in the
hgs
parents:
diff changeset
    25
    CpThemeChanger using QAbstractListModel.
hgs
parents:
diff changeset
    26
*/
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
/*
hgs
parents:
diff changeset
    29
    Constructor
hgs
parents:
diff changeset
    30
*/
hgs
parents:
diff changeset
    31
CpThemeListModel::CpThemeListModel(CpThemeChangerPrivate *dd, QObject* parent)
hgs
parents:
diff changeset
    32
    : QAbstractListModel(parent)
hgs
parents:
diff changeset
    33
    , mThemeChangerPrivate(dd)
hgs
parents:
diff changeset
    34
{
hgs
parents:
diff changeset
    35
    connect(dd->mFileWatcher, SIGNAL(directoryChanged(const QString&)),
hgs
parents:
diff changeset
    36
        this, SLOT(themeListChanged()));
hgs
parents:
diff changeset
    37
}
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
/*
hgs
parents:
diff changeset
    40
    Destructor
hgs
parents:
diff changeset
    41
*/
hgs
parents:
diff changeset
    42
CpThemeListModel::~CpThemeListModel()
hgs
parents:
diff changeset
    43
{
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
}
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
/*
hgs
parents:
diff changeset
    48
    Reimplemented from QAbstractListModel.
hgs
parents:
diff changeset
    49
*/
hgs
parents:
diff changeset
    50
int CpThemeListModel::rowCount(const QModelIndex&) const
hgs
parents:
diff changeset
    51
{
hgs
parents:
diff changeset
    52
    return mThemeChangerPrivate->mThemeList.size();
hgs
parents:
diff changeset
    53
}
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
/*
hgs
parents:
diff changeset
    56
    Reimplemented from QAbstractListModel.  Provides the data for Qt::DisplayRole and
hgs
parents:
diff changeset
    57
    Qt::DecorationRole.
hgs
parents:
diff changeset
    58
*/
hgs
parents:
diff changeset
    59
QVariant CpThemeListModel::data(const QModelIndex& index, int role) const
hgs
parents:
diff changeset
    60
{
hgs
parents:
diff changeset
    61
    QVariant retVal = QVariant();
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    if (index.isValid()) {
hgs
parents:
diff changeset
    64
        switch (role) {
hgs
parents:
diff changeset
    65
            case Qt::DisplayRole:
hgs
parents:
diff changeset
    66
                retVal = mThemeChangerPrivate->mThemeList.at(index.row()).name;
hgs
parents:
diff changeset
    67
                break;
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
            case Qt::DecorationRole:
hgs
parents:
diff changeset
    70
                retVal = mThemeChangerPrivate->mThemeList.at(index.row()).icon;
hgs
parents:
diff changeset
    71
                break;
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
            case Qt::SizeHintRole:
hgs
parents:
diff changeset
    74
                retVal = mThemeChangerPrivate->mThemeList.at(index.row()).icon.size();
hgs
parents:
diff changeset
    75
                break;
hgs
parents:
diff changeset
    76
                
hgs
parents:
diff changeset
    77
        	  case CpThemeChanger::PortraitPreviewRole:
hgs
parents:
diff changeset
    78
          	    retVal = mThemeChangerPrivate->mThemeList.at(index.row()).portraitPreviewIcon;
hgs
parents:
diff changeset
    79
                break;
hgs
parents:
diff changeset
    80
                
hgs
parents:
diff changeset
    81
            case CpThemeChanger::LandscapePreviewRole:
hgs
parents:
diff changeset
    82
                retVal = mThemeChangerPrivate->mThemeList.at(index.row()).landscapePreviewIcon;
hgs
parents:
diff changeset
    83
                break;
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
            default:
hgs
parents:
diff changeset
    86
                // do nothing
hgs
parents:
diff changeset
    87
                qt_noop();
hgs
parents:
diff changeset
    88
        }
hgs
parents:
diff changeset
    89
    }
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
    return retVal;
hgs
parents:
diff changeset
    92
}
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
/*
hgs
parents:
diff changeset
    95
    Responds appropriately when the underlying data in the theme changer is modified.
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
    Unfortunately the directory watcher from QFileWatcher only says when something changed
hgs
parents:
diff changeset
    98
    not what changed.  Therefore the model is considered reset rather than having rows
hgs
parents:
diff changeset
    99
    with dataChanged.
hgs
parents:
diff changeset
   100
*/
hgs
parents:
diff changeset
   101
void CpThemeListModel::themeListChanged()
hgs
parents:
diff changeset
   102
{
hgs
parents:
diff changeset
   103
    beginResetModel();
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
    mThemeChangerPrivate->themes();
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
    endResetModel();
hgs
parents:
diff changeset
   108
}