Freeciv21
Develop your civilization from humble roots to a global empire
fc_client.h
Go to the documentation of this file.
1 /**************************************************************************
2  Copyright (c) 1996-2023 Freeciv21 and Freeciv contributors. This file is
3  part of Freeciv21. Freeciv21 is free software: you can redistribute it
4  and/or modify it under the terms of the GNU General Public License as
5  published by the Free Software Foundation, either version 3 of the
6  License, or (at your option) any later version. You should have received
7  a copy of the GNU General Public License along with Freeciv21. If not,
8  see https://www.gnu.org/licenses/.
9 **************************************************************************/
10 #pragma once
11 
12 // Qt
13 #include <QMainWindow>
14 #include <QPixmapCache>
15 #include <QStackedWidget>
16 
17 // common
18 #include "packets.h"
19 // client
20 #include "chatline.h"
21 #include "menu.h"
22 #include "pages_g.h"
23 #include "servers.h"
24 #include "tileset/tilespec.h"
25 #include "tradecalculation.h"
26 
27 class QApplication;
28 class QGridLayout;
29 class QObject;
30 class QPoint;
31 class QSocketNotifier;
32 class QStackedLayout;
33 class QStatusBar;
34 class QTimerEvent;
35 class choice_dialog;
36 struct server_scan;
37 
38 namespace freeciv {
39 class tileset_debugger;
40 }
41 
47 };
48 
49 /****************************************************************************
50  Some qt-specific options like size to save between restarts
51 ****************************************************************************/
52 struct fc_settings {
53  float chat_fwidth;
54  float chat_fheight;
55  float chat_fx_pos;
56  float chat_fy_pos;
60  bool show_chat; // Only used when loading
61  bool show_messages; // Only used when loading
62  Qt::SortOrder player_report_sort;
64  Qt::SortOrder city_report_sort;
65  QByteArray help_geometry;
66  QByteArray help_splitter1;
69  float minimap_x;
70  float minimap_y;
74  float battlelog_x;
75  float battlelog_y;
76 };
77 
78 /****************************************************************************
79  Corner widget for menu
80 ****************************************************************************/
81 class fc_corner : public QWidget {
82  Q_OBJECT
83  QMainWindow *mw;
84 
85 public:
86  fc_corner(QMainWindow *qmw);
87 public slots:
88  void maximize();
89  void minimize();
90  void close_fc();
91 };
92 
93 class fc_client : public QMainWindow {
94  Q_OBJECT
95 
96  enum client_pages page;
97  QGridLayout *pages_layout[PAGE_COUNT];
98  QLabel *status_bar_label{nullptr};
99  QSocketNotifier *server_notifier{nullptr};
100  QStackedLayout *central_layout{nullptr};
101  QStatusBar *status_bar{nullptr};
102  QString current_file;
103  QStringList status_bar_queue;
104  bool quitting{false};
107 
108 public:
109  fc_client();
110  ~fc_client() override;
111  QWidget *pages[static_cast<int>(PAGE_GAME) + 2];
112  void fc_main(QApplication *);
113  void add_server_source(QIODevice *socket);
114 
115  enum client_pages current_page();
116 
117  void set_status_bar(const QString &str, int timeout = 20000);
118  void set_diplo_dialog(choice_dialog *widget);
120  void write_settings();
121  bool is_closing();
123  QWidget *central_wdg{nullptr};
124  bool interface_locked{false};
127  mr_menu *menu_bar{nullptr};
130 
131 private slots:
132  void server_input();
133  void closing();
134  void clear_status_bar();
135 
136 public slots:
137  void slot_disconnect();
138  void start_tutorial();
139  void start_from_file(const QString &file);
140  void start_new_game();
141  void switch_page(int i);
142  void load_modpack();
143 
144 private:
145  void create_loading_page();
146  void create_cursors();
147  void delete_cursors();
148  void read_settings();
149 
150 protected:
151  bool eventFilter(QObject *obj, QEvent *event) override;
152 
153  void timerEvent(QTimerEvent *) override;
154  void closeEvent(QCloseEvent *event) override;
155 
156 signals:
157  void keyCaught(QKeyEvent *e);
158 };
159 
160 // Return fc_client instance. Implementation in gui_main.cpp
161 class fc_client *king();
162 void popup_client_options();
void load_modpack()
Load the modpack-installer from the start menu.
Definition: fc_client.cpp:695
QStringList status_bar_queue
Definition: fc_client.h:103
QSocketNotifier * server_notifier
Definition: fc_client.h:99
bool interface_locked
Definition: fc_client.h:124
trade_generator trade_gen
Definition: fc_client.h:129
fc_settings qt_settings
Definition: fc_client.h:126
mr_menu * menu_bar
Definition: fc_client.h:127
bool quitting
Definition: fc_client.h:104
void closing()
Called when fc_client is going to quit.
Definition: fc_client.cpp:172
void closeEvent(QCloseEvent *event) override
Closes main window.
Definition: fc_client.cpp:291
fc_client()
Constructor.
Definition: fc_client.cpp:58
~fc_client() override
Destructor.
Definition: fc_client.cpp:130
QGridLayout * pages_layout[PAGE_COUNT]
Definition: fc_client.h:97
void timerEvent(QTimerEvent *) override
Timer event handling.
Definition: fc_client.cpp:310
choice_dialog * opened_dialog
Definition: fc_client.h:106
void create_cursors()
Setup cursors.
Definition: fc_client.cpp:554
void read_settings()
Loads qt-specific options.
Definition: fc_client.cpp:372
choice_dialog * get_diplo_dialog()
Get current diplo dialog.
Definition: dialogs.cpp:3812
enum client_pages page
Definition: fc_client.h:96
enum client_pages current_page()
Returns currently open page.
Definition: fc_client.cpp:274
QStatusBar * status_bar
Definition: fc_client.h:101
QCursor * fc_cursors[CURSOR_LAST][NUM_CURSOR_FRAMES]
Definition: fc_client.h:122
bool eventFilter(QObject *obj, QEvent *event) override
Used to keep track of the size and location of the chat widget.
Definition: fc_client.cpp:349
QStackedLayout * central_layout
Definition: fc_client.h:100
void keyCaught(QKeyEvent *e)
void write_settings()
Save qt-specific options.
Definition: fc_client.cpp:514
void slot_disconnect()
Disconnect from server and return to MAIN PAGE.
Definition: fc_client.cpp:323
qfc_rally_list rallies
Definition: fc_client.h:128
void clear_status_bar()
Clears status bar or shows next message in queue if exists.
Definition: fc_client.cpp:622
QLabel * status_bar_label
Definition: fc_client.h:98
bool send_new_aifill_to_server
Definition: fc_client.h:105
void add_server_source(QIODevice *socket)
Add notifier for server input.
Definition: fc_client.cpp:279
void switch_page(int i)
Switch from one client page to another.
Definition: fc_client.cpp:180
QWidget * pages[static_cast< int >(PAGE_GAME)+2]
Definition: fc_client.h:111
void create_loading_page()
Creates page LOADING, showing label with Loading text.
Definition: fc_client.cpp:638
void set_diplo_dialog(choice_dialog *widget)
Set current diplo dialog.
Definition: dialogs.cpp:3804
QWidget * central_wdg
Definition: fc_client.h:123
void fc_main(QApplication *)
This is not called simply 'fc_client::main()', since SDL includes ould sometimes cause 'main' to be c...
Definition: fc_client.cpp:144
QString current_file
Definition: fc_client.h:102
void set_status_bar(const QString &str, int timeout=20000)
Sets application status bar for given time in miliseconds.
Definition: fc_client.cpp:606
void server_input()
There is input from server.
Definition: fc_client.cpp:300
void start_tutorial()
start tutorial
Definition: fc_client.cpp:649
void start_from_file(const QString &file)
start from save file
Definition: fc_client.cpp:669
void delete_cursors()
Deletes cursors.
Definition: fc_client.cpp:334
fc_corner * corner_wid
Definition: fc_client.h:125
bool is_closing()
Returns status if fc_client is being closed.
Definition: fc_client.cpp:167
void start_new_game()
spawn a server, if there isn't one, using the default settings.
Definition: fc_client.cpp:685
void minimize()
Slot for minimizing freeciv window via corner widget.
Definition: fc_client.cpp:785
QMainWindow * mw
Definition: fc_client.h:83
void maximize()
Slot for maximizing freeciv window via corner widget.
Definition: fc_client.cpp:773
void close_fc()
Slot for closing freeciv via corner widget.
Definition: fc_client.cpp:768
fc_corner(QMainWindow *qmw)
Contructor for corner widget (used for menubar)
Definition: fc_client.cpp:732
Definition: menu.h:157
enum event_type event
Definition: events.cpp:68
connection_state
Definition: fc_client.h:42
@ LOGIN_TYPE
Definition: fc_client.h:43
@ NEW_PASSWORD_TYPE
Definition: fc_client.h:44
@ WAITING_TYPE
Definition: fc_client.h:46
@ ENTER_PASSWORD_TYPE
Definition: fc_client.h:45
void popup_client_options()
Popups client options.
Definition: fc_client.cpp:546
class fc_client * king()
Return fc_client instance.
Definition: gui_main.cpp:58
Definition: path.cpp:10
QByteArray help_geometry
Definition: fc_client.h:65
float unit_info_pos_fx
Definition: fc_client.h:67
float unit_info_pos_fy
Definition: fc_client.h:68
float chat_fwidth
Definition: fc_client.h:53
float chat_fheight
Definition: fc_client.h:54
QByteArray help_splitter1
Definition: fc_client.h:66
float chat_fx_pos
Definition: fc_client.h:55
float battlelog_scale
Definition: fc_client.h:73
float battlelog_x
Definition: fc_client.h:74
float minimap_x
Definition: fc_client.h:69
Qt::SortOrder player_report_sort
Definition: fc_client.h:62
bool show_messages
Definition: fc_client.h:61
float minimap_height
Definition: fc_client.h:72
Qt::SortOrder city_report_sort
Definition: fc_client.h:64
bool show_battle_log
Definition: fc_client.h:59
int city_repo_sort_col
Definition: fc_client.h:63
float minimap_width
Definition: fc_client.h:71
float battlelog_y
Definition: fc_client.h:75
bool show_chat
Definition: fc_client.h:60
float chat_fy_pos
Definition: fc_client.h:56
bool show_new_turn_text
Definition: fc_client.h:58
float minimap_y
Definition: fc_client.h:70
int player_repo_sort_col
Definition: fc_client.h:57
#define NUM_CURSOR_FRAMES
Definition: tilespec.h:169
@ CURSOR_LAST
Definition: tilespec.h:165