Freeciv21
Develop your civilization from humble roots to a global empire
endgamereport.cpp
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 
11 #include "endgamereport.h"
12 // Qt
13 #include <QGridLayout>
14 #include <QHeaderView>
15 #include <QTableWidget>
16 // common
17 #include "nation.h"
18 // client
19 #include "fc_client.h"
20 #include "page_game.h"
21 #include "tileset/sprite.h"
22 
26 endgame_report::endgame_report(const struct packet_endgame_report *packet)
27  : QWidget()
28 {
29  QGridLayout *end_layout = new QGridLayout;
30  end_widget = new QTableWidget;
31  unsigned int i;
32 
33  players = 0;
34  const size_t col_num = packet->category_num + 3;
35  QStringList slist;
36  slist << _("Player") << _("Nation") << _("Score");
37  for (i = 0; i < col_num - 3; i++) {
38  slist << Q_(packet->category_name[i]);
39  }
40  end_widget->setColumnCount(slist.count());
41  end_widget->setHorizontalHeaderLabels(slist);
42  end_widget->setProperty("showGrid", "false");
43  end_widget->setProperty("selectionBehavior", "SelectRows");
44  end_widget->setEditTriggers(QAbstractItemView::NoEditTriggers);
45  end_widget->verticalHeader()->setVisible(false);
46  end_widget->setSelectionMode(QAbstractItemView::SingleSelection);
47  end_widget->horizontalHeader()->setSectionResizeMode(
48  QHeaderView::ResizeToContents);
49  end_layout->addWidget(end_widget, 1, 0, 5, 5);
50  queen()->gimmePlace(this, QStringLiteral("END"));
51  index = queen()->addGameTab(this);
52  setLayout(end_layout);
53 }
54 
59 {
60  queen()->removeRepoDlg(QStringLiteral("END"));
61 }
62 
67 {
68  queen()->game_tab_widget->setCurrentIndex(index);
69 }
70 
75  const struct packet_endgame_player *packet)
76 {
77  QTableWidgetItem *item;
78  unsigned int i;
79  const struct player *pplayer = player_by_number(packet->player_id);
80  const size_t col_num = packet->category_num + 3;
81  end_widget->insertRow(players);
82  for (i = 0; i < col_num; i++) {
83  item = new QTableWidgetItem;
84  switch (i) {
85  case 0:
86  item->setText(player_name(pplayer));
87  break;
88  case 1: {
89  auto pix = get_nation_flag_sprite(tileset, nation_of_player(pplayer));
90  if (pix != nullptr) {
91  item->setData(Qt::DecorationRole, *pix);
92  }
93  } break;
94  case 2:
95  item->setText(QString::number(packet->score));
96  item->setTextAlignment(Qt::AlignHCenter);
97  break;
98  default:
99  item->setText(QString::number(packet->category_score[i - 3]));
100  item->setTextAlignment(Qt::AlignHCenter);
101  break;
102  }
103  end_widget->setItem(players, i, item);
104  }
105  players++;
106  end_widget->resizeRowsToContents();
107 }
108 
112 void endgame_report_dialog_start(const struct packet_endgame_report *packet)
113 {
114  endgame_report *end_rep;
115  end_rep = new endgame_report(packet);
116  end_rep->init();
117 }
118 
123 {
124  int i;
125  if (queen()->isRepoDlgOpen(QStringLiteral("END"))) {
126  i = queen()->gimmeIndexOf(QStringLiteral("END"));
127  fc_assert(i != -1);
128  delete queen()->game_tab_widget->widget(i);
129  }
130 }
131 
136 {
137  int i;
138  if (queen()->isRepoDlgOpen(QStringLiteral("END"))) {
139  i = queen()->gimmeIndexOf(QStringLiteral("END"));
140  queen()->game_tab_widget->setCurrentIndex(i);
141  }
142 }
143 
147 void endgame_report_dialog_player(const struct packet_endgame_player *packet)
148 {
149  int i;
150  endgame_report *end_rep;
151  QWidget *w;
152 
153  if (queen()->isRepoDlgOpen(QStringLiteral("END"))) {
154  i = queen()->gimmeIndexOf(QStringLiteral("END"));
155  fc_assert(i != -1);
156  w = queen()->game_tab_widget->widget(i);
157  end_rep = reinterpret_cast<endgame_report *>(w);
158  end_rep->update_report(packet);
159  }
160 }
QTableWidget * end_widget
Definition: endgamereport.h:26
endgame_report(const struct packet_endgame_report *packet)
Constructor for endgame report.
void update_report(const struct packet_endgame_player *packet)
Refresh all widgets for economy report.
~endgame_report() override
Destructor for endgame report.
void init()
Initializes place in tab for endgame report.
int gimmeIndexOf(const QString &str)
Returns index on game tab page of given report dialog.
Definition: page_game.cpp:706
int addGameTab(QWidget *widget)
Inserts tab widget to game view page.
Definition: page_game.cpp:670
void removeRepoDlg(const QString &str)
Removes report dialog string from the list marking it as closed.
Definition: page_game.cpp:723
void gimmePlace(QWidget *widget, const QString &str)
Finds not used index on game_view_tab and returns it.
Definition: page_game.cpp:690
fc_game_tab_widget * game_tab_widget
Definition: page_game.h:72
void endgame_report_dialog_start(const struct packet_endgame_report *packet)
Show a dialog with player statistics at endgame.
void endgame_report_dialog_player(const struct packet_endgame_player *packet)
Received endgame report information about single player.
void popdown_endgame_report()
Removes endgame report.
void popup_endgame_report()
Popups endgame report to front if exists.
#define Q_(String)
Definition: fcintl.h:53
#define _(String)
Definition: fcintl.h:50
#define fc_assert(condition)
Definition: log.h:89
struct nation_type * nation_of_player(const struct player *pplayer)
Return the nation of a player.
Definition: nation.cpp:419
pageGame * queen()
Return game instandce.
Definition: page_game.cpp:557
struct player * player_by_number(const int player_id)
Return struct player pointer for the given player index.
Definition: player.cpp:768
const char * player_name(const struct player *pplayer)
Return the leader name of the player.
Definition: player.cpp:816
Definition: climisc.h:66
Definition: player.h:231
const QPixmap * get_nation_flag_sprite(const struct tileset *t, const struct nation_type *pnation)
Return the sprite for the nation.
Definition: tilespec.cpp:3367