13#include <QDirIterator>
16bool featureLessThan(
const QHash<QByteArray, QString> &feature1,
const QHash<QByteArray, QString> &feature2)
18 return feature1.value(
"name") < feature2.value(
"name");
21class SsuFeatureModelPrivate
24 SsuFeatureModelPrivate(
const QString &p) : path(p)
29 ~SsuFeatureModelPrivate()
34 QDirIterator it(path, QDir::AllEntries | QDir::NoDot | QDir::NoDotDot, QDirIterator::FollowSymlinks);
35 QStringList settingsFiles;
37 while (it.hasNext()) {
39 settingsFiles.append(it.filePath());
41 foreach (
const QString &settingsFile, settingsFiles) {
42 QSettings settings(settingsFile, QSettings::IniFormat);
44 foreach (
const QString &childGroup, settings.childGroups()) {
45 settings.beginGroup(childGroup);
46 QStringList keys = settings.childKeys();
48 if (keys.contains(
"name")) {
49 QHash<QByteArray, QString> feature;
50 feature.insert(
"name", settings.value(
"name").toString());
51 if (keys.contains(
"version")) {
52 feature.insert(
"version", settings.value(
"version").toString());
54 feature.insert(
"version", QString());
56 features.append(feature);
61 std::sort(features.begin(), features.end(), featureLessThan);
65 QList<QHash<QByteArray, QString> > features;
68SsuFeatureModel::SsuFeatureModel(QObject *parent,
const QString &path)
69 : QAbstractListModel(parent),
74SsuFeatureModel::SsuFeatureModel(QObject *parent)
75 : QAbstractListModel(parent),
80SsuFeatureModel::~SsuFeatureModel()
85int SsuFeatureModel::count()
const
90const QHash<QByteArray, QString> &SsuFeatureModel::featureAt(
int index)
const
92 return d->features.at(index);
95int SsuFeatureModel::rowCount(
const QModelIndex &parent)
const
97 return parent.isValid() ? 0 : d->features.count();
100void SsuFeatureModel::reload()
108QVariant SsuFeatureModel::data(
const QModelIndex &index,
int role)
const
110 int row = index.row();
111 if (!index.isValid() || row < 0 || row >= d->features.count())
116 return d->features.at(row).value(
"name");
118 return d->features.at(row).value(
"version");
123QHash<int, QByteArray> SsuFeatureModel::roleNames()
const
125 QHash<int, QByteArray> roles;
126 roles.insert(Name,
"name");
127 roles.insert(Version,
"version");
#define SSU_FEATURE_CONFIGURATION_DIR
Path to the main ssu configuration file.