File indexing completed on 2024-05-12 07:58:47

0001 /*
0002     SPDX-FileCopyrightText: 2002 Marco Krüger <grisuji@gmx.de>
0003     SPDX-FileCopyrightText: 2002 Ian Wadham <iandw.au@gmail.com>
0004     SPDX-FileCopyrightText: 2009 Ian Wadham <iandw.au@gmail.com>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef KGOLDRUNNER_H
0010 #define KGOLDRUNNER_H
0011 
0012 #include "kgrglobals.h"
0013 
0014 #include <KXmlGuiWindow>
0015 
0016 class QAction;
0017 class KToggleAction;
0018 
0019 class KGrGame;
0020 class KGrView;
0021 class KGrScene;
0022 class KGrRenderer;
0023 
0024 /**
0025  * This class serves as the main window for KGoldrunner.  It handles the menu,
0026  * toolbar and keystroke actions and sets up the game, scene and view.
0027  *
0028  * @short Main window class
0029  */
0030 class KGoldrunner : public KXmlGuiWindow
0031 {
0032     Q_OBJECT
0033 public:
0034     /**
0035      * Default Constructor
0036      */
0037     KGoldrunner();
0038 
0039     /**
0040      * Default Destructor
0041      */
0042     ~KGoldrunner() override;
0043 
0044     /**
0045      * Used to indicate if the class initialised properly.
0046      */
0047     bool startedOK() {return (startupOK);}
0048 
0049     void setToggle      (const char * actionName, const bool onOff);
0050     void setAvail       (const char * actionName, const bool onOff);
0051     void redrawEditToolbar();
0052 
0053 protected:
0054     void keyPressEvent (QKeyEvent * event) override;
0055     void keyReleaseEvent (QKeyEvent * event) override;
0056 
0057 private:
0058     void setUpKeyboardControl();
0059     bool identifyMoveAction (QKeyEvent * event, bool pressed);
0060 
0061 protected:
0062     /**
0063      * This function is called when it is time for the app to save its
0064      * properties for session management purposes.
0065      */
0066     void saveProperties (KConfigGroup &) override;
0067 
0068     /**
0069      * This function is called when this app is restored.  The KConfig
0070      * object points to the session management config file that was saved
0071      * with @ref saveProperties.
0072      */
0073     void readProperties (const KConfigGroup &) override;
0074 
0075     /// To save edits before closing.
0076     bool queryClose() override;
0077 
0078 private Q_SLOTS:
0079     // An extension of the constructor.  Gives us two scans of the event queue.
0080     void KGoldrunner_2();
0081 
0082     // Slot to change the graphics theme.
0083     void changeTheme ();
0084 
0085     void optionsConfigureKeys();
0086 
0087     void gameFreeze (bool);     // Status feedback on Pause state.
0088 
0089     void adjustHintAction (bool);   // Enable/disable "Hint" action.
0090     void setEditMenu (bool on_off); // Enable/disable "Save Edits" action.
0091     void setEditIcon (const QString & actionName, const char iconType);
0092     void viewFullScreen (bool activation);
0093 
0094     QSize sizeHint() const override;
0095 
0096 private:
0097     void setupActions();
0098     void setupEditToolbarActions();
0099 
0100     QAction * gameAction (const QString & name, const int code,
0101                           const QString & text, const QString & toolTip,
0102                           const QString & whatsThis, const QKeySequence & key);
0103 
0104     QAction * editAction (const QString & name, const int code,
0105                           const QString & text, const QString & toolTip,
0106                           const QString & whatsThis);
0107 
0108     KToggleAction * settingAction (const QString & name,
0109                                    const int       code,
0110                                    const QString & text,
0111                                    const QString & toolTip,
0112                                    const QString & whatsThis);
0113 
0114     KToggleAction * editToolbarAction
0115                          (const QString & name, const char code,
0116                           const QString & shortText, const QString & text,
0117                           const QString & toolTip, const QString & whatsThis);
0118 
0119     void keyControl      (const QString & name, const QString & text,
0120                           const QKeySequence & shortcut, const int code,
0121                           const bool mover = false);
0122 
0123     void keyControlDebug (const QString & name, const QString & text,
0124                           const QKeySequence & shortcut, const int code,
0125                           const bool mover = false);
0126 
0127     bool startupOK;
0128 
0129     KGrGame     *   game;       // Overall control of the gameplay.
0130 
0131     KGrView     *   view;       // Central widget.
0132     KGrScene    *   scene;      // Sets text for game-status messages.
0133     KGrRenderer *   renderer;       // Changes themes and gets icon pixmaps.
0134 
0135     bool frozen;
0136     bool getDirectories();      // Get directory paths, as below.
0137 
0138     QString systemDataDir;      // Where the system levels are stored.
0139     QString userDataDir;        // Where the user levels are stored.
0140 
0141     QAction *       saveGame;   // Save game, level, lives and score.
0142 
0143     // A QAction is needed here, to get access to KShortcut::setAlternate().
0144     QAction *       myPause;    // Pause or resume the game.
0145 
0146     QAction *       hintAction; // Display a hint, if available.
0147     QAction *       killHero;   // Kill hero (disabled during edits).
0148     QAction *       highScore;  // High scores (disabled during edits).
0149 
0150     QAction *       saveEdits;  // Save a level that has been edited.
0151 
0152     KToolBar *      editToolbar;    // Toolbar for creating/editing levels.
0153 };
0154 
0155 #endif // KGOLDRUNNER_H