Freeciv21
Develop your civilization from humble roots to a global empire
messageoptions.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 1996-2020 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 "messageoptions.h"
12 // Qt
13 #include <QApplication>
14 #include <QGridLayout>
15 #include <QHeaderView>
16 #include <QLabel>
17 #include <QPushButton>
18 #include <QTableWidget>
19 // utility
20 #include "log.h"
21 // client
22 #include "fc_client.h"
23 #include "options.h"
24 #include "page_game.h"
25 
30 {
31  int index;
32  QStringList slist;
33  QLabel *empty1, *empty2;
34  QPushButton *but1;
35  QPushButton *but2;
36  QMargins margins;
37  int len;
38 
39  setAttribute(Qt::WA_DeleteOnClose);
40  empty1 = new QLabel;
41  empty2 = new QLabel;
42  layout = new QGridLayout;
43  msgtab = new QTableWidget;
44  slist << _("Event") << _("Out") << _("Mes") << _("Pop");
45  msgtab->setColumnCount(slist.count());
46  msgtab->setHorizontalHeaderLabels(slist);
47  msgtab->setProperty("showGrid", "false");
48  msgtab->setEditTriggers(QAbstractItemView::NoEditTriggers);
49  msgtab->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
50  msgtab->verticalHeader()->setVisible(false);
51  msgtab->setSelectionMode(QAbstractItemView::SingleSelection);
52  msgtab->setSelectionBehavior(QAbstractItemView::SelectRows);
53  msgtab->setAlternatingRowColors(true);
54 
55  but1 = new QPushButton(
56  style()->standardIcon(QStyle::SP_DialogCancelButton), _("Cancel"));
57  connect(but1, &QAbstractButton::clicked, this,
59  layout->addWidget(but1, 1, 1, 1, 1);
60  but2 = new QPushButton(style()->standardIcon(QStyle::SP_DialogOkButton),
61  _("Ok"));
62  connect(but2, &QAbstractButton::clicked, this,
64  layout->addWidget(but2, 1, 2, 1, 1, Qt::AlignRight);
65  layout->addWidget(empty1, 0, 0, 1, 1);
66  layout->addWidget(msgtab, 0, 1, 1, 2);
67  layout->addWidget(empty2, 0, 3, 1, 1);
68  layout->setColumnStretch(0, 1);
69  layout->setColumnStretch(1, 10);
70  layout->setColumnStretch(3, 1);
71  setLayout(layout);
72  queen()->gimmePlace(this, QStringLiteral("MSD"));
73  index = queen()->addGameTab(this);
74  queen()->game_tab_widget->setCurrentIndex(index);
75 
76  fill_data();
77  margins = msgtab->contentsMargins();
78  len = msgtab->horizontalHeader()->length() + margins.left()
79  + margins.right()
80  + qApp->style()->pixelMetric(QStyle::PM_ScrollBarExtent);
81  msgtab->setFixedWidth(len);
82  msgtab->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
83  but1->setFixedWidth(len / 3);
84  but2->setFixedWidth(len / 3);
85 }
86 
91 {
92  queen()->removeRepoDlg(QStringLiteral("MSD"));
93 }
94 
99 {
100  int i, j;
101  QTableWidgetItem *item;
102  i = 0;
103  msgtab->setRowCount(0);
104 
106  {
107  item = new QTableWidgetItem;
108  item->setText(get_event_message_text(ev));
109  msgtab->insertRow(i);
110  msgtab->setItem(i, 0, item);
111  for (j = 0; j < NUM_MW; j++) {
112  bool checked;
113  item = new QTableWidgetItem;
114  checked = messages_where[ev] & (1 << j);
115  if (checked) {
116  item->setCheckState(Qt::Checked);
117  } else {
118  item->setCheckState(Qt::Unchecked);
119  }
120  msgtab->setItem(i, j + 1, item);
121  }
122  i++;
123  }
125  msgtab->resizeColumnsToContents();
126 }
127 
132 {
133  int i, j;
134  QTableWidgetItem *item;
135  Qt::CheckState state;
136  for (i = 0; i <= event_type_max(); i++) {
137  // Include possible undefined messages.
138  messages_where[i] = 0;
139  }
140  i = 0;
142  {
143  for (j = 0; j < NUM_MW; j++) {
144  bool checked;
145  item = msgtab->item(i, j + 1);
146  checked = messages_where[ev] & (1 << j);
147  state = item->checkState();
148  if ((state == Qt::Checked && !checked)
149  || (state == Qt::Unchecked && checked)) {
150  messages_where[ev] |= (1 << j);
151  }
152  }
153  i++;
154  }
156  close();
157 }
158 
162 void message_dlg::cancel_changes() { close(); }
163 
168 {
169  message_dlg *mdlg;
170  int i;
171  QWidget *w;
172 
173  if (!queen()->isRepoDlgOpen(QStringLiteral("MSD"))) {
174  mdlg = new message_dlg;
175  } else {
176  i = queen()->gimmeIndexOf(QStringLiteral("MSD"));
177  fc_assert(i != -1);
178  if (queen()->game_tab_widget->currentIndex() == i) {
179  return;
180  }
181  w = queen()->game_tab_widget->widget(i);
182  mdlg = reinterpret_cast<message_dlg *>(w);
183  queen()->game_tab_widget->setCurrentWidget(mdlg);
184  }
185 }
message_dlg()
Message widget constructor.
void cancel_changes()
Closes widget.
~message_dlg() override
Message widget destructor.
void apply_changes()
Apply changes and closes widget.
QTableWidget * msgtab
QGridLayout * layout
void fill_data()
Fills column in table.
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
const char * get_event_message_text(enum event_type event)
Returns the translated description of the given event.
Definition: events.cpp:239
#define sorted_event_iterate_end
Definition: events.h:207
#define sorted_event_iterate(event)
Definition: events.h:197
#define _(String)
Definition: fcintl.h:50
#define fc_assert(condition)
Definition: log.h:89
void popup_messageopt_dialog(void)
Popup a window to let the user edit their message options.
int messages_where[E_COUNT]
Message Options:
Definition: options.cpp:3383
#define NUM_MW
Message Options:
Definition: options.h:314
int len
Definition: packhand.cpp:127
pageGame * queen()
Return game instandce.
Definition: page_game.cpp:557
Definition: climisc.h:66