/usr/include/KF5/KF5KDEGames/kgthemeprovider.h is in libkf5kdegames-dev 4:17.12.3-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | /***************************************************************************
* Copyright 2012 Stefan Majewsky <majewsky@gmx.net> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Library General Public License *
* version 2 as published by the Free Software Foundation *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#ifndef KGTHEMEPROVIDER_H
#define KGTHEMEPROVIDER_H
#include <QObject>
#include <QtQml>
#include <kgtheme.h>
#include <libkdegames_export.h>
/**
* @class KgThemeProvider kgthemeprovider.h <KgThemeProvider>
*
* A theme provider manages KgTheme instances, and maintains a selection of
* the currentTheme(). It can automatically coordinate its selection with a
* KGameRenderer instance.
*
* @note KgThemeProvider instances store selections in the application config,
* in the group [KgTheme]. This is documented here because this
* information is relevant for kconfig_
*/
class KDEGAMES_EXPORT KgThemeProvider : public QObject
{
Q_OBJECT
Q_PROPERTY(const KgTheme* currentTheme READ currentTheme WRITE setCurrentTheme NOTIFY currentThemeChanged)
Q_PROPERTY(QString name READ name NOTIFY nameChanged)
Q_PROPERTY(QString currentThemeName READ currentThemeName NOTIFY currentThemeNameChanged)
Q_DISABLE_COPY(KgThemeProvider)
public:
///Constructor. If you don't want KgThemeProvider to store the current
///theme selection in the application config file automatically, set
///@a configKey to an empty QByteArray.
///
///If there are multiple KgThemeProvider instances, make sure they use
///different config keys to avoid collisions.
explicit KgThemeProvider(const QByteArray& configKey = QByteArray("Theme"), QObject* parent = 0);
///Destructor.
virtual ~KgThemeProvider();
///@return the name of the KgThemeProvider object. This name can be
///used as QML element ID to reference the object inside QML.
///@since 4.11
QString name() const;
///@return the themes in this provider
QList<const KgTheme*> themes() const;
///@return the default theme, or 0 if the provider does not contain any
///themes
const KgTheme* defaultTheme() const;
///@see defaultTheme()
///
///Usually this will be set automatically by discoverThemes(). Call this
///before the first call to currentTheme(), it won't have any effect
///afterwards. @a theme must already have been added to this instance.
void setDefaultTheme(const KgTheme* theme);
///@return the currently selected theme, or 0 if the provider does not
///contain any themes
///
///After the KgThemeProvider instance has been created, the current
///theme will not be determined until this method is called
///for the first time. This allows the application developer to set up
///the theme provider before it restores the theme selection from the
///configuration file.
const KgTheme* currentTheme() const;
///@return the name of the current theme
///@since 4.11
QString currentThemeName() const;
///Adds a @a theme to this instance. The theme provider takes ownership
///of @a theme.
void addTheme(KgTheme* theme);
///This method reads theme description files from a standard location.
///The first two arguments are passed to KStandardDirs like this:
///@code
///KGlobal::dirs()->findAllResources(resource, directory + "/*.desktop");
///@endcode
///The typical usage is to install theme description files in
///@code ${DATA_INSTALL_DIR}/themes @endcode and then call:
///@code
///themeProvider.discoverThemes("appdata", QLatin1String("themes"));
///@endcode
///If a @a themeClass's QMetaObject is given, the created themes will be
///instances of this KgTheme subclass. The @a themeClass must export
///(with the Q_INVOKABLE marker) a constructor with the same signature
///as the KgTheme constructor.
void discoverThemes(const QByteArray& resource, const QString& directory, const QString& defaultThemeName = QStringLiteral("default"), const QMetaObject* themeClass = 0);
///After this provider has been set up with discoverThemes(), this
///method may be used to read additional themes which were added since
///the discoverThemes() call. This is esp. useful for KNewStuff
///integration.
void rediscoverThemes();
///Generate a preview pixmap for the given theme. The application will
///typically want to reimplement this to load the given theme into a
///KGameRenderer and then arrange some sprites into a preview.
///
///@a size is the maximal allowed size.
///
///The default implementation tries to load a preview image from
///KgTheme::previewPath(), and resizes the result to fit in @a size.
virtual QPixmap generatePreview(const KgTheme* theme, const QSize& size);
///Registers this KgThemeProvider with @a engine's root context with ID
///@a name and constructs a KgImageProvider corresponding
///to this KgThemeProvider and adds it to the QML engine, also
///with @a name, which will receive sprite requests
///@since 4.11
void setDeclarativeEngine(const QString& name, QQmlEngine* engine);
Q_SIGNALS:
///Emitted when the current theme changes. @see setCurrentTheme
void currentThemeChanged(const KgTheme* theme);
///Emitted when the name of the provider changes.
///@since 4.11
void nameChanged(const QString& name);
///Emitted when the name of the current theme changes.
///@since 4.11
void currentThemeNameChanged(const QString& themeName);
public Q_SLOTS:
///Select a new theme. The given theme must already have been added to
///this instance.
void setCurrentTheme(const KgTheme* theme);
private:
class Private;
Private* const d;
Q_PRIVATE_SLOT(d, void updateThemeName());
};
Q_DECLARE_METATYPE(KgThemeProvider*)
QML_DECLARE_TYPE(KgThemeProvider*)
#endif // KGTHEMEPROVIDER_H
|