Freeciv21
Develop your civilization from humble roots to a global empire
view_nations.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 // client
15 
16 // Qt
17 #include <QAbstractListModel>
18 #include <QItemDelegate>
19 #include <QTableView>
20 #include <QWidget>
21 
22 class QHBoxLayout;
23 class QItemSelection;
24 class QLabel;
25 class QMouseEvent;
26 class QPainter;
27 class QPoint;
28 class QPushButton;
29 class QSortFilterProxyModel;
30 class QSplitter;
31 class QVBoxLayout;
32 class plr_report;
33 
34 /***************************************************************************
35  Item delegate for painting in model of nations view table
36 ***************************************************************************/
37 class plr_item_delegate : public QItemDelegate {
38  Q_OBJECT
39 
40 public:
41  plr_item_delegate(QObject *parent) : QItemDelegate(parent) {}
42  ~plr_item_delegate() override = default;
43  void paint(QPainter *painter, const QStyleOptionViewItem &option,
44  const QModelIndex &index) const override;
45  QSize sizeHint(const QStyleOptionViewItem &option,
46  const QModelIndex &index) const override;
47 };
48 
49 /***************************************************************************
50  Single item in model of nations view table
51 ***************************************************************************/
52 class plr_item : public QObject {
53  Q_OBJECT
54 
55 public:
56  plr_item(struct player *pplayer);
57  inline int columnCount() const { return num_player_dlg_columns; }
58  QVariant data(int column, int role = Qt::DisplayRole) const;
59  bool setData(int column, const QVariant &value,
60  int role = Qt::DisplayRole);
61 
62 private:
63  struct player *ipplayer;
64 };
65 
66 /***************************************************************************
67  Nation/Player model
68 ***************************************************************************/
69 class plr_model : public QAbstractListModel {
70  Q_OBJECT
71 
72 public:
73  plr_model(QObject *parent = 0);
74  ~plr_model() override;
75  inline int
76  rowCount(const QModelIndex &index = QModelIndex()) const override
77  {
78  Q_UNUSED(index);
79  return plr_list.size();
80  }
81  int columnCount(const QModelIndex &parent = QModelIndex()) const override
82  {
83  Q_UNUSED(parent);
85  }
86  QVariant data(const QModelIndex &index,
87  int role = Qt::DisplayRole) const override;
88  bool setData(const QModelIndex &index, const QVariant &value,
89  int role = Qt::DisplayRole) override;
90  QVariant headerData(int section, Qt::Orientation orientation,
91  int role) const override;
92  QVariant hide_data(int section) const;
93  void populate();
94 private slots:
95  void notify_plr_changed(int row);
96 
97 private:
98  QList<plr_item *> plr_list;
99 };
100 
101 /***************************************************************************
102  Player widget to show player/nation model
103 ***************************************************************************/
104 class plr_widget : public QTableView {
105  Q_OBJECT
110  QString techs_known;
111  QString techs_unknown;
113 
114 public:
115  plr_widget(QWidget *);
116  ~plr_widget() override;
117  void set_pr_rep(plr_report *pr);
118  void restore_selection();
119  plr_model *get_model() const;
120  QString intel_str;
121  QString ally_str;
122  QString tech_str;
124 public slots:
125  void display_header_menu(const QPoint);
126  void nation_selected(const QItemSelection &sl, const QItemSelection &ds);
127 
128 private:
129  void mousePressEvent(QMouseEvent *event) override;
130  void hide_columns();
131 };
132 
133 #include "ui_view_nations.h"
134 /***************************************************************************
135  Widget to show as tab widget in players view.
136 ***************************************************************************/
137 class plr_report : public QWidget {
138  Q_OBJECT
139 
140 public:
141  plr_report();
142  ~plr_report() override;
143  void update_report(bool update_selection = true);
144  void init();
145  void call_meeting();
146 
147 private:
148  Ui::FormPlrDlg ui;
150  int index;
151 private slots:
152  void req_meeeting();
153  void plr_cancel_threaty();
154  void plr_withdraw_vision();
155  void toggle_ai_mode();
156  void plr_diplomacy();
157 };
158 
160 void update_top_bar_diplomacy_status(bool notify);
A sort and filter proxy model supporting string collation.
~plr_item_delegate() override=default
plr_item_delegate(QObject *parent)
Definition: view_nations.h:41
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
Slighty increase deafult cell height.
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
Paint evenet for custom player item delegation.
bool setData(int column, const QVariant &value, int role=Qt::DisplayRole)
Sets data for plr_item (not used)
QVariant data(int column, int role=Qt::DisplayRole) const
Returns data from item.
int columnCount() const
Definition: view_nations.h:57
struct player * ipplayer
Definition: view_nations.h:63
plr_item(struct player *pplayer)
Constructor for plr_item.
plr_model(QObject *parent=0)
Constructor for player model.
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Definition: view_nations.h:81
void populate()
Fills model with data.
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::DisplayRole) override
Sets data in model.
QVariant hide_data(int section) const
Returns information about column if hidden.
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
Returns header data from model.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
Returns data from model.
QList< plr_item * > plr_list
Definition: view_nations.h:98
void notify_plr_changed(int row)
Notifies that row has been changed.
int rowCount(const QModelIndex &index=QModelIndex()) const override
Definition: view_nations.h:76
~plr_model() override
Destructor for player model.
void plr_withdraw_vision()
Slot for withdrawing vision.
Ui::FormPlrDlg ui
Definition: view_nations.h:148
void call_meeting()
Public function to call meeting.
void plr_diplomacy()
Slot for diplomacy.
void update_report(bool update_selection=true)
Updates widget.
void plr_cancel_threaty()
Slot for canceling treaty.
struct player * other_player
Definition: view_nations.h:149
void toggle_ai_mode()
Slot for changing AI mode.
void req_meeeting()
Slot for meeting request.
plr_report()
Constructor for plr_report.
void init()
Adds plr_report to tab widget.
~plr_report() override
Destructor for plr_report.
plr_widget(QWidget *)
Constructor for plr_widget.
void nation_selected(const QItemSelection &sl, const QItemSelection &ds)
Slot for selecting player/nation.
QString techs_known
Definition: view_nations.h:110
struct player * selected_player
Definition: view_nations.h:112
freeciv::collated_sort_filter_proxy_model * filter_model
Definition: view_nations.h:107
~plr_widget() override
Destructor for player widget.
plr_report * plr
Definition: view_nations.h:109
plr_model * list_model
Definition: view_nations.h:106
plr_item_delegate * pid
Definition: view_nations.h:108
void mousePressEvent(QMouseEvent *event) override
Handle mouse click.
QString tech_str
Definition: view_nations.h:122
plr_model * get_model() const
Returns model used in widget.
QString intel_str
Definition: view_nations.h:120
struct player * other_player
Definition: view_nations.h:123
QString ally_str
Definition: view_nations.h:121
QString techs_unknown
Definition: view_nations.h:111
void display_header_menu(const QPoint)
Displays menu on header by right clicking.
void hide_columns()
Hides columns in plr widget, depending on info from plr_list.
void restore_selection()
Restores selection of previously selected nation.
void set_pr_rep(plr_report *pr)
enum event_type event
Definition: events.cpp:68
The base class for options.
Definition: options.cpp:209
Definition: player.h:231
void update_top_bar_diplomacy_status(bool notify)
Function to update the top bar button.
void popdown_players_report()
Closes players report.
const int num_player_dlg_columns