File indexing completed on 2024-12-01 06:52:14

0001 /*
0002     SPDX-FileCopyrightText: 2003 Russell Steffen <rsteffen@bayarea.net>
0003     SPDX-FileCopyrightText: 2003 Stephan Zehetner <s.zehetner@nevox.org>
0004     SPDX-FileCopyrightText: 2006 Dmitry Suzdalev <dimsuz@gmail.com>
0005     SPDX-FileCopyrightText: 2006 Inge Wallin <inge@lysator.liu.se>
0006     SPDX-FileCopyrightText: 2006 Pierre Ducroquet <pinaraf@gmail.com>
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #ifndef KONQUEST_GAMEVIEW_H
0012 #define KONQUEST_GAMEVIEW_H
0013 
0014 #include <QWidget>
0015 
0016 #include "planet.h"
0017 #include "players/player.h"
0018 #include "game.h"
0019 
0020 //************************************************************************
0021 // forward declarations
0022 //************************************************************************
0023 
0024 class QCheckBox;
0025 class QDockWidget;
0026 class QLabel;
0027 class QPushButton;
0028 class QLineEdit;
0029 class QTextEdit;
0030 class QIntValidator;
0031 
0032 class KLocalizedString;
0033 
0034 class Player;
0035 class MapView;
0036 class MapScene;
0037 class StandingsWidget;
0038 
0039 
0040 struct GameMessage {
0041     QString  text;
0042     Player  *sender;
0043     Player  *receiver;
0044 };
0045 
0046 
0047 enum GUIState { 
0048     NONE, 
0049     SOURCE_PLANET, 
0050     DEST_PLANET, 
0051     SHIP_COUNT, 
0052     RULER_SOURCE, 
0053     RULER_DEST
0054 };
0055 
0056 
0057 //************************************************************************
0058 // GameView Widget
0059 //************************************************************************
0060 
0061 
0062 class GameView : public QWidget
0063 {
0064     Q_OBJECT
0065 
0066 public:
0067     explicit  GameView(QWidget *parent, Game *game, QDockWidget *messagesDock, QDockWidget *standingsDock);
0068     ~GameView() override;
0069     bool  confirmNewGame();
0070 
0071     bool  shutdownGame();
0072     void  planetSelected( Planet * );
0073     void  newShipCount();
0074     void  nextPlayer();
0075     void  standingOrdersClicked();
0076 
0077     //***************************************************************
0078     // Toolbar items
0079     //***************************************************************
0080     void  measureDistance();
0081     void  showFleets();
0082 
0083     void  startNewGame();
0084     void  gameMsg(const KLocalizedString &msg, Player *player = nullptr,
0085           Planet *planet = nullptr, Player *planetPlayer = nullptr);
0086     void  turnPreparation();
0087 
0088 Q_SIGNALS:
0089     void  newGUIState( GUIState newState );
0090 
0091     //***************************************************************
0092     // Event Handlers
0093     //***************************************************************
0094 protected:
0095     void  keyPressEvent( QKeyEvent * ) override;
0096     void  resizeEvent ( QResizeEvent * event ) override;
0097 
0098 private:
0099     void  gameOver();
0100 
0101     void  changeGameView();
0102     void  cleanupGame();
0103 
0104     void  turn();
0105 
0106     //***************************************************************
0107     // Display Widgets
0108     //***************************************************************
0109 
0110     MapView       *m_mapWidget;
0111     MapScene      *m_mapScene;
0112     QLabel        *m_gameMessage;
0113     QPushButton   *m_endTurnBtn;
0114     QLineEdit     *m_shipCountEdit;
0115     QCheckBox     *m_standingOrder;
0116     QIntValidator *m_shipValidator;
0117     QLabel        *m_splashScreen;
0118 
0119     QTextEdit     *m_msgWidget;
0120     int            m_msgWidgetLastTurn;
0121 
0122     StandingsWidget *m_standingsWidget;
0123 
0124     QDockWidget   *m_messagesDock;
0125     QDockWidget   *m_standingsDock;
0126 
0127     //***************************************************************
0128     // Game objects
0129     //***************************************************************
0130 
0131     Game *m_game;
0132 
0133     bool                m_queueMessages;
0134     QList<GameMessage>  m_messageQueue;
0135     bool                m_showInformations;
0136     bool                m_initCompleted, m_cleanupNeeded;
0137 
0138     // States in the user interaction
0139     // FIXME: Break out into another file?
0140     bool                haveSourcePlanet;
0141     Planet             *sourcePlanet;
0142 
0143     bool                haveDestPlanet;
0144     Planet             *destPlanet;
0145 
0146     bool                haveShipCount, standingOrder;
0147     long long           shipCount;
0148 
0149     //***************************************************************
0150     // Game State information
0151     //***************************************************************
0152     GUIState            m_guiState;
0153 };
0154 
0155 #endif // KONQUEST_GAMEVIEW_H