diff -r 8af2bf10ee62 -r 7f77fa908a4e QTfrontend/model/ThemeModel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/model/ThemeModel.cpp Thu Apr 26 16:15:37 2012 +0200 @@ -0,0 +1,75 @@ + +#include "ThemeModel.h" + +ThemeModel::ThemeModel(QObject *parent) : + QAbstractListModel(parent) +{ + m_data = QList >(); +} + +int ThemeModel::rowCount(const QModelIndex &parent) const +{ + if(parent.isValid()) + return 0; + else + return m_data.size(); +} + + +QVariant ThemeModel::data(const QModelIndex &index, int role) const +{ + if(index.column() > 0 || index.row() >= m_data.size()) + return QVariant(); + else + return m_data.at(index.row()).value(role); +} + + +void ThemeModel::loadThemes() +{ + beginResetModel(); + + + DataManager & datamgr = DataManager::instance(); + + QStringList themes = + datamgr.entryList("Themes", QDir::AllDirs | QDir::NoDotAndDotDot); + + m_data.clear(); + +#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) + m_data.reserve(themes.size()); +#endif + + foreach (QString theme, themes) + { + // themes without icon are supposed to be hidden + QString iconpath = + datamgr.findFileForRead(QString("Themes/%1/icon.png").arg(theme)); + + if (!QFile::exists(iconpath)) + continue; + + QMap dataset; + + // set name + dataset.insert(Qt::DisplayRole, theme); + + // load and set icon + QIcon icon(iconpath); + dataset.insert(Qt::DecorationRole, icon); + + // load and set preview icon + QIcon preview(datamgr.findFileForRead(QString("Themes/%1/icon@2x.png").arg(theme))); + dataset.insert(Qt::UserRole, preview); + + m_data.append(dataset); + } + + + endResetModel(); +} + + + +