File indexing completed on 2024-12-01 06:50:33

0001 /*
0002     SPDX-FileCopyrightText: 2009 Mathias Kraus <k.hias@gmx.de>
0003     SPDX-FileCopyrightText: 2006 Mauricio Piacentini <mauricio@tabuleiro.com>
0004     SPDX-FileCopyrightText: 2007 Matt Williams <matt@milliams.com>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef ARENASELECTOR_H
0010 #define ARENASELECTOR_H
0011 
0012 #include <QWidget>
0013 
0014 class KConfigSkeleton; 
0015 class ArenaSelectorPrivate;
0016 
0017 /**
0018  * \class ArenaSelector arenaselector.h <ArenaSelector>
0019  * 
0020  * @short A widget used to select the game's arena
0021  *
0022  * The most common way to use the arena selector is to add it as page to a KConfigDialog
0023  * \code
0024  * KConfigDialog *dialog = new KConfigDialog(this, "settings", Settings::self());
0025  * dialog->addPage(new ArenaSelector(dialog, Settings::self()), i18n("Arena"), "game_arena");
0026  * dialog->show();
0027  * \endcode
0028  * This will create a page in your KConfigDialog with the title "Arena" and using the 
0029  * "game_arena" icon. By default, the widget will search in the share/apps/appname/arenas 
0030  * directory for .desktop files with a group called "Arena".
0031  *
0032  * @author Mauricio Piacentini
0033  **/
0034 class ArenaSelector : public QWidget
0035 {
0036 Q_OBJECT
0037 public:
0038     ///Flags which control the behavior of ArenaSelector.
0039     enum Option {
0040         DefaultBehavior = 0,
0041         ///Enable downloading of additional themes with KNewStuff3.
0042         ///This requires a KNS3 config file to be installed for this app.
0043         EnableNewStuffDownload = 1 << 0
0044     };
0045     Q_DECLARE_FLAGS(Options, Option)
0046     
0047     /**
0048     * Load a specific arena file.
0049     * @param parent the parent widget
0050     * @param aconfig the KConfigSceleton
0051     * @param randomArenaModeArenaList the arena mode list
0052     * @param options the options
0053     * @param groupName the title of the config group in the arena .desktop file
0054     * @param directory subdirectory (of share/apps/appname) to search in
0055     * @return true if the arena files and properties could be loaded
0056     */
0057     ArenaSelector(QWidget* parent, KConfigSkeleton* aconfig, QStringList* randomArenaModeArenaList, Options options = DefaultBehavior, const QString& groupName = QStringLiteral("Arena"), const QString& directory = QStringLiteral("arenas"));
0058     ~ArenaSelector() override;
0059     
0060 protected:
0061     /**
0062     * Resizes the items when the view is resized.
0063     * @param p_event the resize event
0064     */
0065     void resizeEvent(QResizeEvent* p_event) override;
0066     
0067     /**
0068     * Resizes the items when the view is showed.
0069     * @param p_event the resize event
0070     */
0071     void showEvent(QShowEvent* p_event) override;
0072 
0073 private:
0074     class Private;
0075     Private* const d;
0076 
0077     Q_DISABLE_COPY(ArenaSelector)
0078 
0079     Q_PRIVATE_SLOT(d, void _k_updatePreview(QListWidgetItem* currentItem = NULL))
0080     Q_PRIVATE_SLOT(d, void _k_updateArenaList(const QString&))
0081     Q_PRIVATE_SLOT(d, void _k_setRandomArenaMode(bool randomModeEnabled))
0082     Q_PRIVATE_SLOT(d, void _k_updateRandomArenaModeArenaList(QListWidgetItem* item))
0083 };
0084 
0085 #endif