File indexing completed on 2024-04-28 04:02:30

0001 /*
0002     SPDX-FileCopyrightText: 2007 Dmitry Suzdalev <dimsuz@gmail.com>
0003     SPDX-FileCopyrightText: 2010 Brian Croom <brian.s.croom@gmail.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #ifndef SCENE_H
0009 #define SCENE_H
0010 
0011 // KDEGames
0012 #include <KGameRenderer>
0013 // Qt
0014 #include <QGraphicsView>
0015 #include <QGraphicsScene>
0016 
0017 class MineFieldItem;
0018 class KGamePopupItem;
0019 
0020 /**
0021  * Graphics scene for KMines game
0022  */
0023 class KMinesScene : public QGraphicsScene
0024 {
0025     Q_OBJECT
0026 public:
0027     /**
0028      * Constructs scene
0029      */
0030     explicit KMinesScene( QObject* parent );
0031     /**
0032      * Resizes scene to given dimensions
0033      */
0034     void resizeScene(int width, int height);
0035     /**
0036      * @return total number of mines in field
0037      */
0038     int totalMines() const;
0039     /**
0040      * Starts new game
0041      */
0042     void startNewGame(int rows, int cols, int numMines);
0043     /**
0044      * Toggles paused state for all cells in the field item
0045      */
0046     void setGamePaused(bool paused);
0047     /**
0048      * Resets the scene
0049      */
0050     void reset();
0051 
0052     KGameRenderer& renderer() {return m_renderer;}
0053     /**
0054      * Represents if the scores should be considered for the highscores
0055      */
0056     bool canScore() const;
0057     void setCanScore(bool value);
0058 
0059 Q_SIGNALS:
0060     void minesCountChanged(int);
0061     void gameOver(bool);
0062     void firstClickDone();
0063 private Q_SLOTS:
0064     void onGameOver(bool);
0065 private:
0066     bool m_canScore;
0067     KGameRenderer m_renderer;
0068     /**
0069      * Game field graphics item
0070      */
0071     MineFieldItem* m_fieldItem = nullptr;
0072     KGamePopupItem* m_messageItem = nullptr;
0073     KGamePopupItem* m_gamePausedMessageItem = nullptr;
0074 };
0075 
0076 class QResizeEvent;
0077 
0078 class KMinesView : public QGraphicsView
0079 {
0080     Q_OBJECT
0081 public:
0082     KMinesView( KMinesScene* scene, QWidget *parent );
0083 private:
0084     void resizeEvent( QResizeEvent *ev ) override;
0085 
0086     KMinesScene* m_scene = nullptr;
0087 };
0088 #endif