21 #include <QtCore/QDir>
22 #include <QtCore/QFileInfo>
23 #include <KDE/KConfig>
24 #include <KDE/KConfigGroup>
26 #include <KDE/KStandardDirs>
28 class KgTheme::Private
31 const QByteArray m_identifier;
32 QString m_name, m_description, m_author, m_authorEmail, m_graphicsPath, m_previewPath;
33 QMap<QString, QString> m_customData;
35 Private(
const QByteArray&
id) : m_identifier(id) {}
37 static QStringList s_configGroupNames;
40 QStringList KgTheme::Private::s_configGroupNames;
44 , d(new Private(identifier))
55 return d->m_identifier;
58 #define KGTHEME_STRING_PROPERTY(PROP, SETTER) \
59 QString KgTheme::PROP() const { return d->m_##PROP; } \
60 void KgTheme::SETTER(const QString& val) { d->m_##PROP = val; }
69 QMap<QString, QString>
KgTheme::customData()
const
71 return d->m_customData;
76 return d->m_customData.value(key, defaultValue);
88 kDebug(11000) <<
"Refusing to load theme with no name";
93 if (QFileInfo(path).isRelative())
95 path = KStandardDirs::locate(
"appdata", path);
98 kDebug(11000) <<
"Could not find theme description" << path;
103 if (Private::s_configGroupNames.isEmpty())
105 Private::s_configGroupNames << QLatin1String(
"KGameTheme");
108 KConfig config(path, KConfig::SimpleConfig);
110 foreach (
const QString& groupName, Private::s_configGroupNames)
112 if (config.hasGroup(groupName))
114 group = config.group(groupName);
117 if (!group.isValid())
119 kDebug(11000) <<
"Could not read theme description at" << path;
123 if (group.readEntry(
"VersionFormat", 1) > 1)
125 kDebug(11000) <<
"Format of theme description too new at" << path;
130 const QFileInfo fi(path);
131 const QDir dir = fi.dir();
132 QString
graphicsPath = group.readEntry(
"FileName", QString());
133 if (!graphicsPath.isEmpty() && QFileInfo(graphicsPath).isRelative())
134 graphicsPath = dir.absoluteFilePath(graphicsPath);
135 QString
previewPath = group.readEntry(
"Preview", QString());
136 if (!previewPath.isEmpty() && QFileInfo(previewPath).isRelative())
137 previewPath = dir.absoluteFilePath(previewPath);
139 setName(group.readEntry(
"Name", QString()));
141 setAuthor(group.readEntry(
"Author", QString()));
148 setProperty(
"_k_themeDescTimestamp", fi.lastModified().toTime_t());
152 #include "kgtheme.moc"
#define KGTHEME_STRING_PROPERTY(PROP, SETTER)
void setAuthor(const QString &author)
virtual ~KgTheme()
Destructor.
virtual bool readFromDesktopFile(const QString &path)
Initializes a KgTheme instance by reading a description file.
void setCustomData(const QMap< QString, QString > &customData)
KgTheme(const QByteArray &identifier, QObject *parent=0)
Constructor. The identifier must be application-unique.
void setGraphicsPath(const QString &path)
void setDescription(const QString &description)
KDEGAMES_EXPORT const char * name(StandardGameAction id)
This will return the internal name of a given standard action.
QMap< QString, QString > customData() const
QString previewPath() const
QByteArray identifier() const
void setPreviewPath(const QString &path)
void setName(const QString &name)
A theme describes the visual appearance of a game.
QString graphicsPath() const
void setAuthorEmail(const QString &authorEmail)