1/***************************************************************************
2 * Copyright 2012 Stefan Majewsky <majewsky@gmx.net> *
3 * *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU Library General Public License *
6 * version 2 as published by the Free Software Foundation *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU Library General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU Library General Public *
14 * License along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19#ifndef KGTHEMESELECTOR_H
20#define KGTHEMESELECTOR_H
21
22#include <QtGui/QWidget>
23#include <kgthemeprovider.h>
24
25#include <libkdegames_export.h>
26
27/**
28 * @class KgThemeSelector kgthemeselector.h <KgThemeSelector>
29 * @brief Theme selection widget.
30 *
31 * This widget allows the user to change the theme selection of a
32 * KgThemeProvider. Selections are immediately applied to allow the user
33 * to quickly preview themes. In simple cases, the widget can be used
34 * standalone with the showAsDialog() method.
35 *
36 * @code
37 * K_GLOBAL_STATIC_WITH_ARGS(KgThemeSelector, selector, (provider))
38 * ...
39 * selector->showAsDialog();
40 * @endcode
41 */
42class KDEGAMES_EXPORT KgThemeSelector : public QWidget
43{
44 Q_OBJECT
45 Q_DISABLE_COPY(KgThemeSelector)
46 public:
47 ///Flags which control the behavior of KgThemeSelector.
48 enum Option {
49 DefaultBehavior = 0,
50 ///Enable downloading of additional themes with KNewStuff3.
51 ///This requires a KNS3 config file to be installed for this app.
52 EnableNewStuffDownload = 1 << 0
53 };
54 Q_DECLARE_FLAGS(Options, Option)
55
56 explicit KgThemeSelector(KgThemeProvider* provider, Options options = DefaultBehavior, QWidget* parent = 0);
57 virtual ~KgThemeSelector();
58 public Q_SLOTS:
59 ///Create and show a non-modal dialog which displays this selector.
60 ///The dialog will be automatically cleaned up when it's closed, but it
61 ///is ensured that the selector is not deleted.
62 ///
63 ///This method does nothing if the selector widget is already visible.
64 void showAsDialog(const QString& caption = QString());
65 private:
66 class Dialog;
67 class Private;
68 Private* const d;
69
70 Q_PRIVATE_SLOT(d, void _k_updateListSelection(const KgTheme*));
71 Q_PRIVATE_SLOT(d, void _k_updateProviderSelection());
72 Q_PRIVATE_SLOT(d, void _k_showNewStuffDialog());
73};
74
75Q_DECLARE_OPERATORS_FOR_FLAGS(KgThemeSelector::Options)
76
77#endif // KGTHEMESELECTOR_H
78