ssu
Loading...
Searching...
No Matches
ssufeaturemodel.cpp
Go to the documentation of this file.
1
7
8#include "ssufeaturemodel.h"
9#include <QList>
10#include <QSettings>
11#include <QHash>
12#include <QDebug>
13#include <QDirIterator>
14#include "../constants.h"
15
16bool featureLessThan(const QHash<QByteArray, QString> &feature1, const QHash<QByteArray, QString> &feature2)
17{
18 return feature1.value("name") < feature2.value("name");
19}
20
21class SsuFeatureModelPrivate
22{
23public:
24 SsuFeatureModelPrivate(const QString &p) : path(p)
25 {
26 load();
27 }
28
29 ~SsuFeatureModelPrivate()
30 {}
31
32 void load()
33 {
34 QDirIterator it(path, QDir::AllEntries | QDir::NoDot | QDir::NoDotDot, QDirIterator::FollowSymlinks);
35 QStringList settingsFiles;
36
37 while (it.hasNext()) {
38 it.next();
39 settingsFiles.append(it.filePath());
40 }
41 foreach (const QString &settingsFile, settingsFiles) {
42 QSettings settings(settingsFile, QSettings::IniFormat);
43
44 foreach (const QString &childGroup, settings.childGroups()) {
45 settings.beginGroup(childGroup);
46 QStringList keys = settings.childKeys();
47
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());
53 } else {
54 feature.insert("version", QString());
55 }
56 features.append(feature);
57 }
58 settings.endGroup();
59 }
60 }
61 std::sort(features.begin(), features.end(), featureLessThan);
62 }
63
64 QString path;
65 QList<QHash<QByteArray, QString> > features;
66};
67
68SsuFeatureModel::SsuFeatureModel(QObject *parent, const QString &path)
69 : QAbstractListModel(parent),
70 d(new SsuFeatureModelPrivate(path))
71{
72}
73
74SsuFeatureModel::SsuFeatureModel(QObject *parent)
75 : QAbstractListModel(parent),
77{
78}
79
80SsuFeatureModel::~SsuFeatureModel()
81{
82 delete d;
83}
84
85int SsuFeatureModel::count() const
86{
87 return rowCount();
88}
89
90const QHash<QByteArray, QString> &SsuFeatureModel::featureAt(int index) const
91{
92 return d->features.at(index);
93}
94
95int SsuFeatureModel::rowCount(const QModelIndex &parent) const
96{
97 return parent.isValid() ? 0 : d->features.count();
98}
99
100void SsuFeatureModel::reload()
101{
102 beginResetModel();
103 d->features.clear();
104 d->load();
105 endResetModel();
106}
107
108QVariant SsuFeatureModel::data(const QModelIndex &index, int role) const
109{
110 int row = index.row();
111 if (!index.isValid() || row < 0 || row >= d->features.count())
112 return QVariant();
113
114 switch (role) {
115 case Name:
116 return d->features.at(row).value("name");
117 case Version:
118 return d->features.at(row).value("version");
119 }
120 return QVariant();
121}
122
123QHash<int, QByteArray> SsuFeatureModel::roleNames() const
124{
125 QHash<int, QByteArray> roles;
126 roles.insert(Name, "name");
127 roles.insert(Version, "version");
128 return roles;
129}
#define SSU_FEATURE_CONFIGURATION_DIR
Path to the main ssu configuration file.
Definition constants.h:34