diff -r 22d3abee08da -r 2883a5458389 controlpanelplugins/themeplugin/src/cpthemelistmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/controlpanelplugins/themeplugin/src/cpthemelistmodel.cpp Thu Jun 10 16:07:41 2010 +0800 @@ -0,0 +1,108 @@ +/* + * ============================================================================ + * Name : cpthemelistmodel_p.cpp + * Part of : LibHb / theme + * Description : Private implementation of the theme listmodel. + * Version : %version: 1 % << Don't touch! Updated by Synergy at check-out. + * + * Copyright (c) 2008-2009 Nokia. All rights reserved. + * This material, including documentation and any related computer + * programs, is protected by copyright controlled by Nokia. All + * rights are reserved. Copying, including reproducing, storing, + * adapting or translating, any or all of this material requires the + * prior written consent of Nokia. This material also contains + * confidential information which may not be disclosed to others + * without the prior written consent of Nokia. + * ============================================================================ + */ + +#include "cpthemelistmodel.h" +#include "cpthemechanger_p.h" +#include + +/* + CpThemeChangerModel provides an interface to the data contained in the + CpThemeChanger using QAbstractListModel. +*/ + +/* + Constructor +*/ +CpThemeListModel::CpThemeListModel(CpThemeChangerPrivate *dd, QObject* parent) + : QAbstractListModel(parent) + , mThemeChangerPrivate(dd) +{ + connect(dd->mFileWatcher, SIGNAL(directoryChanged(const QString&)), + this, SLOT(themeListChanged())); +} + +/* + Destructor +*/ +CpThemeListModel::~CpThemeListModel() +{ + +} + +/* + Reimplemented from QAbstractListModel. +*/ +int CpThemeListModel::rowCount(const QModelIndex&) const +{ + return mThemeChangerPrivate->mThemeList.size(); +} + +/* + Reimplemented from QAbstractListModel. Provides the data for Qt::DisplayRole and + Qt::DecorationRole. +*/ +QVariant CpThemeListModel::data(const QModelIndex& index, int role) const +{ + QVariant retVal = QVariant(); + + if (index.isValid()) { + switch (role) { + case Qt::DisplayRole: + retVal = mThemeChangerPrivate->mThemeList.at(index.row()).name; + break; + + case Qt::DecorationRole: + retVal = mThemeChangerPrivate->mThemeList.at(index.row()).icon; + break; + + case Qt::SizeHintRole: + retVal = mThemeChangerPrivate->mThemeList.at(index.row()).icon.size(); + break; + + case CpThemeChanger::PortraitPreviewRole: + retVal = mThemeChangerPrivate->mThemeList.at(index.row()).portraitPreviewIcon; + break; + + case CpThemeChanger::LandscapePreviewRole: + retVal = mThemeChangerPrivate->mThemeList.at(index.row()).landscapePreviewIcon; + break; + + default: + // do nothing + qt_noop(); + } + } + + return retVal; +} + +/* + Responds appropriately when the underlying data in the theme changer is modified. + + Unfortunately the directory watcher from QFileWatcher only says when something changed + not what changed. Therefore the model is considered reset rather than having rows + with dataChanged. +*/ +void CpThemeListModel::themeListChanged() +{ + beginResetModel(); + + mThemeChangerPrivate->themes(); + + endResetModel(); +}