Freeciv21
Develop your civilization from humble roots to a global empire
dialogs.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 <QDialog>
14 #include <QMessageBox>
15 #include <QVariant>
16 // utility
17 #include "fc_types.h"
18 // client
19 #include "dialogs_g.h"
20 #include "hudwidget.h"
21 #include "widgets/decorations.h"
22 
23 class QCloseEvent;
24 class QComboBox;
25 class QGridLayout;
26 class QHBoxLayout;
27 class QItemSelection;
28 class QKeyEvent;
29 class QMouseEvent;
30 class QObject;
31 class QPaintEvent;
32 class QPainter;
33 class QRadioButton;
34 class QTableWidget;
35 class QTextEdit;
36 class QVBoxLayout;
37 class QWheelEvent;
38 struct tile;
39 struct unit;
40 
41 typedef void (*pfcn_void)(QVariant, QVariant);
43 void popup_races_dialog(struct player *pplayer);
44 
45 class qdef_act {
47 
48 private:
49  explicit qdef_act();
53 
54 public:
55  static qdef_act *action();
56  static void drop();
57  void vs_city_set(int i);
58  void vs_unit_set(int i);
61 };
62 
63 /***************************************************************************
64  Dialog with themed titlebar
65 ***************************************************************************/
66 class qfc_dialog : public QDialog {
67  Q_OBJECT
68 public:
69  qfc_dialog(QWidget *parent);
70  ~qfc_dialog() override;
71 
72 private:
74  QPoint point;
75  bool moving_now;
76  QPixmap *close_pix;
77 
78 protected:
79  void paintEvent(QPaintEvent *event) override;
80  void mouseMoveEvent(QMouseEvent *event) override;
81  void mousePressEvent(QMouseEvent *event) override;
82  void mouseReleaseEvent(QMouseEvent *event) override;
83 };
84 
85 /***************************************************************************
86  Nonmodal message box for disbanding units
87 ***************************************************************************/
88 class disband_box : public hud_message_box {
89  Q_OBJECT
90  const std::vector<unit *> cpunits;
91 
92 public:
93  explicit disband_box(const std::vector<unit *> &punits,
94  QWidget *parent = 0);
95  ~disband_box() override;
96 private slots:
97  void disband_clicked();
98 };
99 
100 /***************************************************************************
101  Dialog for goto popup
102 ***************************************************************************/
103 class notify_goto : public QMessageBox {
104  Q_OBJECT
105  QPushButton *goto_but;
106  QPushButton *inspect_but;
107  QPushButton *close_but;
108  struct tile *gtile;
109 
110 public:
111  notify_goto(const char *headline, const char *lines,
112  const struct text_tag_list *tags, struct tile *ptile,
113  QWidget *parent);
114 
115 private slots:
116  void goto_tile();
117  void inspect_city();
118 };
119 
120 /***************************************************************************
121  Dialog for selecting nation, style and leader leader
122 ***************************************************************************/
123 class races_dialog : public qfc_dialog {
124  Q_OBJECT
125  QGridLayout *main_layout;
126  QTableWidget *nation_tabs;
127  QList<QWidget *> *nations_tabs_list;
128  QTableWidget *selected_nation_tabs;
129  QComboBox *leader_name;
130  QComboBox *qnation_set;
131  QRadioButton *is_male;
132  QRadioButton *is_female;
133  QTableWidget *styles;
134  QTextEdit *description;
135  QPushButton *ok_button;
136  QPushButton *random_button;
137 
138 public:
139  races_dialog(struct player *pplayer, QWidget *parent = 0);
140  ~races_dialog() override;
141  void refresh();
142  void update_nationset_combo();
143 
144 private slots:
145  void set_index(int index);
146  void nation_selected(const QItemSelection &sl, const QItemSelection &ds);
147  void style_selected(const QItemSelection &sl, const QItemSelection &ds);
148  void group_selected(const QItemSelection &sl, const QItemSelection &ds);
149  void nationset_changed(int index);
150  void leader_selected(int index);
151  void ok_pressed();
152  void cancel_pressed();
153  void random_pressed();
154 
155 private:
158  struct player *tplayer;
160 };
161 
162 /**************************************************************************
163  A QPushButton that includes data like function to call and parmeters
164 **************************************************************************/
165 class Choice_dialog_button : public QPushButton {
166  Q_OBJECT
168  QVariant data1, data2;
169 
170 public:
171  Choice_dialog_button(const QString title, pfcn_void func_in,
172  QVariant data1_in, QVariant data2_in);
173  pfcn_void getFunc();
174  QVariant getData1();
175  QVariant getData2();
176  void setData1(QVariant wariat);
177  void setData2(QVariant wariat);
178 };
179 
180 /***************************************************************************
181  Simple choice dialog, allowing choosing one of set actions
182 ***************************************************************************/
183 class choice_dialog : public QWidget {
184  Q_OBJECT
185  QPushButton *target_unit_button;
186  QVBoxLayout *layout;
187  QHBoxLayout *unit_skip;
188  QList<Choice_dialog_button *> buttons_list;
189  QList<Choice_dialog_button *> last_buttons_stack;
190  QList<Choice_dialog_button *> action_button_map;
191  void (*run_on_close)(int);
192  void switch_target();
193 
194 public:
195  choice_dialog(const QString title, const QString text,
196  QWidget *parent = nullptr,
197  void (*run_on_close_in)(int) = nullptr);
198  ~choice_dialog() override;
199  void set_layout();
200  void add_item(QString title, pfcn_void func, QVariant data1,
201  QVariant data2, QString tool_tip, const int button_id);
202  void show_me();
203  void stack_button(Choice_dialog_button *button);
204  void unstack_all_buttons();
205  QVBoxLayout *get_layout();
207  int unit_id;
208  int target_id[ATK_COUNT];
209  int sub_target_id[ASTK_COUNT];
211  void update_dialog(const struct act_prob *act_probs);
212 public slots:
213  void execute_action(const int action);
214 private slots:
215  void prev_unit();
216  void next_unit();
217 };
218 
219 void popup_revolution_dialog(struct government *government = nullptr);
221 void popup_upgrade_dialog(const std::vector<unit *> &punits);
222 void popup_disband_dialog(const std::vector<unit *> &punits);
223 bool try_default_unit_action(QVariant q1, QVariant q2);
224 bool try_default_city_action(QVariant q1, QVariant q2);
pfcn_void func
Definition: dialogs.h:167
QVariant getData2()
Get the second piece of data to feed the function when the button is pressed.
Definition: dialogs.cpp:1124
Choice_dialog_button(const QString title, pfcn_void func_in, QVariant data1_in, QVariant data2_in)
Constructor for choice_dialog_button_data.
Definition: dialogs.cpp:1100
void setData2(QVariant wariat)
Sets the second piece of data.
Definition: dialogs.cpp:1134
void setData1(QVariant wariat)
Sets the first piece of data.
Definition: dialogs.cpp:1129
QVariant getData1()
Get the first piece of data to feed the function when the button is pressed.
Definition: dialogs.cpp:1118
pfcn_void getFunc()
Get the function to call when the button is pressed.
Definition: dialogs.cpp:1112
void stack_button(Choice_dialog_button *button)
Put the button in the stack and temporarily remove it.
Definition: dialogs.cpp:1458
void prev_unit()
Focus previous target.
Definition: dialogs.cpp:1374
QVBoxLayout * layout
Definition: dialogs.h:186
struct unit * targeted_unit
Definition: dialogs.h:210
void unstack_all_buttons()
Put all the buttons in the stack back to the dialog.
Definition: dialogs.cpp:1475
Choice_dialog_button * get_identified_button(const int id)
Get the button with the given identity.
Definition: dialogs.cpp:1284
QPushButton * target_unit_button
Definition: dialogs.h:185
void set_layout()
Sets layout for choice dialog.
Definition: dialogs.cpp:1191
void update_dialog(const struct act_prob *act_probs)
Update dialog for new target (targeted_unit)
Definition: dialogs.cpp:1405
QList< Choice_dialog_button * > last_buttons_stack
Definition: dialogs.h:189
~choice_dialog() override
Destructor for choice dialog.
Definition: dialogs.cpp:1176
void next_unit()
Focus next target.
Definition: dialogs.cpp:1332
void show_me()
Shows choice dialog.
Definition: dialogs.cpp:1265
QVBoxLayout * get_layout()
Returns layout in choice dialog.
Definition: dialogs.cpp:1279
QHBoxLayout * unit_skip
Definition: dialogs.h:187
QList< Choice_dialog_button * > buttons_list
Definition: dialogs.h:188
void(* run_on_close)(int)
Definition: dialogs.h:191
choice_dialog(const QString title, const QString text, QWidget *parent=nullptr, void(*run_on_close_in)(int)=nullptr)
Constructor for choice_dialog.
Definition: dialogs.cpp:1139
int target_id[ATK_COUNT]
Definition: dialogs.h:208
void switch_target()
Switches target unit.
Definition: dialogs.cpp:1425
QList< Choice_dialog_button * > action_button_map
Definition: dialogs.h:190
int sub_target_id[ASTK_COUNT]
Definition: dialogs.h:209
void execute_action(const int action)
Run chosen action and close dialog.
Definition: dialogs.cpp:1441
void add_item(QString title, pfcn_void func, QVariant data1, QVariant data2, QString tool_tip, const int button_id)
Adds new action for choice dialog.
Definition: dialogs.cpp:1236
void disband_clicked()
Clicked Yes in disband box.
Definition: dialogs.cpp:3378
const std::vector< unit * > cpunits
Definition: dialogs.h:90
disband_box(const std::vector< unit * > &punits, QWidget *parent=0)
Disband Message box contructor.
Definition: dialogs.cpp:3353
~disband_box() override
Destructor for disband box.
QPushButton * close_but
Definition: dialogs.h:107
notify_goto(const char *headline, const char *lines, const struct text_tag_list *tags, struct tile *ptile, QWidget *parent)
Notify goto dialog constructor.
Definition: dialogs.cpp:862
QPushButton * goto_but
Definition: dialogs.h:105
void inspect_city()
Clicked inspect city in notify goto dialog.
Definition: dialogs.cpp:909
struct tile * gtile
Definition: dialogs.h:108
QPushButton * inspect_but
Definition: dialogs.h:106
void goto_tile()
Clicked goto tile in notify goto dialog.
Definition: dialogs.cpp:900
qdef_act()
Default actions provider constructor.
Definition: dialogs.cpp:802
action_id vs_unit
Definition: dialogs.h:52
static qdef_act * action()
Returns instance of qdef_act.
Definition: dialogs.cpp:807
action_id vs_city_get()
Returns default action vs city.
Definition: dialogs.cpp:837
static qdef_act * m_instance
Definition: dialogs.h:50
Q_DISABLE_COPY(qdef_act)
static void drop()
Deletes qdef_act instance.
Definition: dialogs.cpp:818
action_id vs_city
Definition: dialogs.h:51
void vs_city_set(int i)
Sets default action vs city.
Definition: dialogs.cpp:827
void vs_unit_set(int i)
Sets default action vs unit.
Definition: dialogs.cpp:832
action_id vs_unit_get()
Returns default action vs unit.
Definition: dialogs.cpp:842
QPoint point
Definition: dialogs.h:74
void mouseReleaseEvent(QMouseEvent *event) override
Mouse release event for themed dialog.
Definition: dialogs.cpp:357
int titlebar_height
Definition: dialogs.h:73
void mouseMoveEvent(QMouseEvent *event) override
Mouse move event for themed titlebar (moves dialog with left mouse)
Definition: dialogs.cpp:331
QPixmap * close_pix
Definition: dialogs.h:76
~qfc_dialog() override
Definition: dialogs.cpp:283
qfc_dialog(QWidget *parent)
Constructor for custom dialog with themed titlebar.
Definition: dialogs.cpp:274
void mousePressEvent(QMouseEvent *event) override
Mouse press event - catches left click.
Definition: dialogs.cpp:341
void paintEvent(QPaintEvent *event) override
Paint event for themed dialog.
Definition: dialogs.cpp:288
bool moving_now
Definition: dialogs.h:75
int selected_style
Definition: dialogs.h:157
QComboBox * leader_name
Definition: dialogs.h:129
void random_pressed()
Sets random nation.
Definition: dialogs.cpp:852
void style_selected(const QItemSelection &sl, const QItemSelection &ds)
Sets selected style.
Definition: dialogs.cpp:731
int last_index
Definition: dialogs.h:159
QTableWidget * selected_nation_tabs
Definition: dialogs.h:128
QPushButton * random_button
Definition: dialogs.h:136
~races_dialog() override
Destructor for races dialog.
Definition: dialogs.cpp:540
void refresh()
Sets first index to call update of nation list.
Definition: dialogs.cpp:545
void nation_selected(const QItemSelection &sl, const QItemSelection &ds)
Sets selected nation and updates style and leaders selector.
Definition: dialogs.cpp:673
void nationset_changed(int index)
User changed nation_set.
Definition: dialogs.cpp:921
int selected_nation
Definition: dialogs.h:156
void ok_pressed()
Button accepting all selection has been pressed, closes dialog if everything is ok.
Definition: dialogs.cpp:766
void leader_selected(int index)
Sets selected leader.
Definition: dialogs.cpp:751
QPushButton * ok_button
Definition: dialogs.h:135
QList< QWidget * > * nations_tabs_list
Definition: dialogs.h:127
QTextEdit * description
Definition: dialogs.h:134
void group_selected(const QItemSelection &sl, const QItemSelection &ds)
Selected group of nation.
Definition: dialogs.cpp:605
void set_index(int index)
Sets new nations' group by current current selection, index is used only when there is no current sel...
Definition: dialogs.cpp:623
QComboBox * qnation_set
Definition: dialogs.h:130
QRadioButton * is_male
Definition: dialogs.h:131
void update_nationset_combo()
Updates nation_set combo ( usually called from option change )
Definition: dialogs.cpp:589
QTableWidget * styles
Definition: dialogs.h:133
struct player * tplayer
Definition: dialogs.h:158
races_dialog(struct player *pplayer, QWidget *parent=0)
Constructor for selecting nations.
Definition: dialogs.cpp:367
QRadioButton * is_female
Definition: dialogs.h:132
QTableWidget * nation_tabs
Definition: dialogs.h:126
QGridLayout * main_layout
Definition: dialogs.h:125
void cancel_pressed()
Button canceling all selections has been pressed.
Definition: dialogs.cpp:847
void(* pfcn_void)(QVariant, QVariant)
Definition: dialogs.h:41
bool try_default_unit_action(QVariant q1, QVariant q2)
Try to pick up default unit action.
Definition: dialogs.cpp:1297
void update_nationset_combo()
Updates nationset combobox.
Definition: dialogs.cpp:1039
void popup_revolution_dialog(struct government *government=nullptr)
Popup a dialog asking if the player wants to start a revolution.
Definition: dialogs.cpp:1071
void popup_races_dialog(struct player *pplayer)
Popup the nation selection dialog.
Definition: dialogs.cpp:997
void popup_upgrade_dialog(const std::vector< unit * > &punits)
Popup dialog for upgrade units.
Definition: dialogs.cpp:3759
void revolution_response(struct government *government)
Starts revolution with targeted government as target or anarchy otherwise.
Definition: dialogs.cpp:1630
bool try_default_city_action(QVariant q1, QVariant q2)
Try to pick up default city action.
Definition: dialogs.cpp:1315
void popup_disband_dialog(const std::vector< unit * > &punits)
Pops up a dialog to confirm disband of the unit(s).
Definition: dialogs.cpp:3395
enum event_type event
Definition: events.cpp:68
int action_id
Definition: fc_types.h:306
get_token_fn_t func
Definition: inputfile.cpp:119
char * headline
Definition: packhand.cpp:130
char * lines
Definition: packhand.cpp:131
Definition: player.h:231
Definition: tile.h:42
Definition: unit.h:134