21 #include "fc_version.h"
27 #include <QFileDialog>
37 ui.scenarios_view->setObjectName(QStringLiteral(
"scenarios_view"));
38 ui.scenarios_text->setTextFormat(Qt::RichText);
39 ui.scenarios_text->setWordWrap(
true);
40 sav <<
_(
"Choose a Scenario");
41 ui.scenarios_load->setRowCount(0);
42 ui.scenarios_load->setColumnCount(sav.count());
43 ui.scenarios_load->setHorizontalHeaderLabels(sav);
44 ui.scenarios_load->setProperty(
"showGrid",
"false");
45 ui.scenarios_load->setProperty(
"selectionBehavior",
"SelectRows");
46 ui.scenarios_load->setEditTriggers(QAbstractItemView::NoEditTriggers);
47 ui.scenarios_load->setSelectionMode(QAbstractItemView::SingleSelection);
48 ui.scenarios_load->verticalHeader()->setVisible(
false);
49 ui.scenarios_view->setReadOnly(
true);
50 ui.scenarios_view->setWordWrapMode(QTextOption::WordWrap);
51 ui.scenarios_text->setAlignment(Qt::AlignCenter);
53 header =
ui.scenarios_load->horizontalHeader();
54 header->setSectionResizeMode(0, QHeaderView::Stretch);
55 header->setStretchLastSection(
true);
56 connect(
ui.scenarios_load->selectionModel(),
57 &QItemSelectionModel::selectionChanged,
this,
60 ui.bbrowse->setText(
_(
"Browse..."));
62 QApplication::style()->standardIcon(QStyle::SP_DirIcon));
63 connect(
ui.bbrowse, &QAbstractButton::clicked,
this,
66 ui.bcancel->setText(
_(
"Cancel"));
68 QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton));
69 connect(
ui.bcancel, &QAbstractButton::clicked,
gui,
71 ui.bload->setText(
_(
"Load Scenario"));
73 QApplication::style()->standardIcon(QStyle::SP_DialogOkButton));
74 connect(
ui.bload, &QAbstractButton::clicked,
this,
76 setLayout(
ui.gridLayout);
88 str = QString(
_(
"Scenarios Files"))
89 + QStringLiteral(
" (*.sav *.sav.bz2 *.sav.gz *.sav.xz *.sav.zst)");
90 current_file = QFileDialog::getOpenFileName(
this,
_(
"Open Scenario File"),
91 QDir::homePath(), str);
109 ui.scenarios_load->clearContents();
110 ui.scenarios_load->setRowCount(0);
111 ui.scenarios_text->setText(QLatin1String(
""));
112 ui.scenarios_view->setText(QLatin1String(
""));
115 QStringLiteral(
"*.sav*"),
false);
116 for (
const auto &info : files) {
118 info.absoluteFilePath(), QStringLiteral(
"scenario"),
true);
122 const char *sname, *sdescription, *sauthors;
123 QTableWidgetItem *
item;
128 int current_ver = MAJOR_VERSION * 1000000 + MINOR_VERSION * 10000;
137 fcver -= (fcver % 10000);
142 if (fcver <= current_ver) {
144 bool add_item =
true;
155 maj = fcver / 1000000;
158 version = QStringLiteral(
"%1.%2").arg(maj).arg(min);
161 version = QString(
_(
"pre-2.6"));
164 rows =
ui.scenarios_load->rowCount();
165 for (i = 0; i < rows; ++i) {
166 if (
ui.scenarios_load->item(i, 0)
167 &&
ui.scenarios_load->item(i, 0)->text() == info.baseName()) {
169 item =
ui.scenarios_load->takeItem(i, 0);
175 sl =
item->data(Qt::UserRole).toStringList();
176 found_ver = sl.at(3).toInt();
177 if (found_ver < fcver) {
184 item =
new QTableWidgetItem();
185 ui.scenarios_load->insertRow(row);
187 item->setText(info.baseName());
188 format = QStringLiteral(
"<br>") + QString(
_(
"Format:")) +
" "
189 + version.toHtmlEscaped();
191 st = QStringLiteral(
"\n") + QStringLiteral(
"<b>") +
_(
"Authors: ")
192 + QStringLiteral(
"</b>") + QString(sauthors).toHtmlEscaped();
194 st = QLatin1String(
"");
197 + QString(sname && qstrlen(sname) ?
Q_(sname)
201 << info.absoluteFilePath()
202 << QString(
nullptr != sdescription &&
'\0' != sdescription[0]
207 << QString::number(fcver).toHtmlEscaped();
208 sl.replaceInStrings(QStringLiteral(
"\n"), QStringLiteral(
"<br>"));
209 item->setData(Qt::UserRole, sl);
211 ui.scenarios_load->setItem(row, 0,
item);
214 ui.scenarios_load->setItem(i, 0,
item);
220 ui.scenarios_load->sortItems(0);
221 ui.scenarios_load->update();
225 const QItemSelection &deselected)
229 if (selected.isEmpty()) {
233 auto sl = selected.indexes().front().data(Qt::UserRole).toStringList();
234 ui.scenarios_text->setText(sl.at(0));
235 if (sl.count() > 1) {
236 ui.scenarios_view->setText(sl.at(2));
void slot_disconnect()
Disconnect from server and return to MAIN PAGE.
void start_from_file(const QString &file)
start from save file
~page_scenario() override
void update_scenarios_page()
Gets scenarios list and updates it in TableWidget = scenarios_load.
void start_scenario()
Starts game from chosen scenario - chosen_file (save or scenario)
page_scenario(QWidget *, fc_client *)
void browse_scenarios()
Browse scenarios directory.
void slot_selection_changed(const QItemSelection &, const QItemSelection &)
void secfile_destroy(struct section_file *secfile)
Free a section file.
struct section_file * secfile_load_section(const QString &filename, const QString §ion, bool allow_duplicates)
Create a section file from a file, read only one particular section.
bool secfile_lookup_bool_default(const struct section_file *secfile, bool def, const char *path,...)
Lookup a boolean value in the secfile.
const char * secfile_lookup_str_default(const struct section_file *secfile, const char *def, const char *path,...)
Lookup a string value in the secfile.
int secfile_lookup_int_default(const struct section_file *secfile, int def, const char *path,...)
Lookup a integer value in the secfile.
QFileInfoList find_files_in_path(const QStringList &path, const QString &pattern, bool nodups)
Search for file names matching the pattern in the provided list of directories.
const QStringList & get_scenario_dirs()
Returns a list of scenario directory paths, in the order in which they should be searched.