14 #include <fc_config.h>
17 #include <QApplication>
18 #include <QCloseEvent>
19 #include <QHBoxLayout>
20 #include <QHeaderView>
23 #include <QMainWindow>
24 #include <QMessageBox>
25 #include <QProgressBar>
26 #include <QPushButton>
27 #include <QTableWidget>
57 #define ML_COL_SUBTYPE 4
63 #define ML_COL_COUNT 8
66 const QString &version,
67 const QString &license,
68 enum modpack_type type,
69 const QString &subtype,
const QString ¬es);
79 int main(
int argc,
char **argv)
81 QApplication app(argc, argv);
83 app.setDesktopFileName(QStringLiteral(
"net.longturn.freeciv21.modpack"));
86 QIcon::setThemeSearchPaths(
get_data_dirs() + QIcon::themeSearchPaths());
87 QIcon::setFallbackThemeName(QIcon::themeName());
88 QIcon::setThemeName(QStringLiteral(
"icons"));
90 qApp->setWindowIcon(QIcon::fromTheme(QStringLiteral(
"freeciv21-modpack")));
104 central =
new QWidget;
107 main_window->resize(820, 140);
108 main_window->setWindowTitle(
109 QString::fromUtf8(
_(
"Freeciv21 modpack installer (Qt)")));
115 main_window->setCentralWidget(central);
116 main_window->setVisible(
true);
119 if (errmsg !=
nullptr) {
126 if (
worker->isRunning()) {
167 #define URL_LABEL_TEXT N_("Modpack URL")
168 QVBoxLayout *main_layout =
new QVBoxLayout();
169 QHBoxLayout *hl =
new QHBoxLayout();
170 QPushButton *install_button =
171 new QPushButton(QString::fromUtf8(
_(
"Install modpack")));
177 version_label->setAlignment(Qt::AlignHCenter);
178 version_label->setParent(central);
179 version_label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
180 main_layout->addWidget(version_label);
183 mplist_table->setSizePolicy(QSizePolicy::MinimumExpanding,
184 QSizePolicy::MinimumExpanding);
186 headers << QString::fromUtf8(
_(
"Name")) << QString::fromUtf8(
_(
"Version"));
187 headers << QString::fromUtf8(
_(
"Installed"))
188 << QString::fromUtf8(
Q_(
"?modpack:Type"));
189 headers << QString::fromUtf8(
_(
"Subtype"))
190 << QString::fromUtf8(
_(
"License"));
191 headers << QString::fromUtf8(
_(
"URL")) << QStringLiteral(
"typeint");
194 mplist_table->setEditTriggers(QAbstractItemView::NoEditTriggers);
195 mplist_table->setSelectionBehavior(QAbstractItemView::SelectRows);
196 mplist_table->setSelectionMode(QAbstractItemView::SingleSelection);
201 connect(
mplist_table, &QAbstractItemView::doubleClicked,
this,
211 URL_label->setParent(central);
212 hl->addWidget(URL_label);
214 URLedit =
new QLineEdit(central);
225 main_layout->addLayout(hl);
227 connect(install_button, &QAbstractButton::pressed,
this,
229 main_layout->addWidget(install_button);
231 bar =
new QProgressBar(central);
232 main_layout->addWidget(
bar);
234 msg_dspl =
new QLabel(QString::fromUtf8(
_(
"Select modpack to install")));
238 msg_dspl->setAlignment(Qt::AlignHCenter);
240 central->setLayout(main_layout);
248 QByteArray msg_bytes = msg.toLocal8Bit();
250 qDebug(
"%s", msg_bytes.data());
267 bar->setMaximum(max);
268 bar->setValue(downloaded);
285 if (
worker->isRunning()) {
307 for (
int i = 0; i <
mpcount; i++) {
310 enum modpack_type type;
311 QByteArray name_bytes;
315 type = (
enum modpack_type) type_int;
316 name_bytes = name_str.toUtf8();
319 QString new_inst = tmp ? tmp :
_(
"Not installed");
340 const QString &version,
const QString &license,
341 enum modpack_type type,
const QString &subtype,
342 const QString ¬es)
346 modpack_type_is_valid(type) ? (modpack_type_name(type)) :
_(
"?");
349 QString lic_str = license.isEmpty() ?
Q_(
"?license:Unknown") : license;
352 QString inst_str = tmp ? tmp :
_(
"Not installed");
356 QTableWidgetItem *
item;
361 item->setToolTip(notes);
363 item =
new QTableWidgetItem(version);
364 item->setToolTip(notes);
366 item =
new QTableWidgetItem(inst_str);
367 item->setToolTip(notes);
369 item =
new QTableWidgetItem(type_str);
370 item->setToolTip(notes);
372 item =
new QTableWidgetItem(subtype);
373 item->setToolTip(notes);
375 item =
new QTableWidgetItem(lic_str);
376 item->setToolTip(notes);
378 item =
new QTableWidgetItem(url.toDisplayString());
379 item->setToolTip(notes);
382 type_nbr.setNum(type);
383 item =
new QTableWidgetItem(type_nbr);
384 item->setToolTip(notes);
395 const QString &version,
396 const QString &license,
397 enum modpack_type type,
398 const QString &subtype,
const QString ¬es)
445 "Modpack installation in progress.\nAre you sure you want to quit?"));
446 ask.setStandardButtons(QMessageBox::No | QMessageBox::Yes);
447 ask.setDefaultButton(QMessageBox::No);
448 ask.setIcon(QMessageBox::Warning);
449 ask.setWindowTitle(
_(
"Quit?"));
453 case QMessageBox::Cancel:
456 case QMessageBox::Ok:
void popup_quit_dialog()
Open dialog to confirm that user wants to quit modpack installer.
mpgui_main(QApplication *qapp_in, QWidget *central_in)
Main window constructor.
void closeEvent(QCloseEvent *event) override
User clicked windows close button.
void refresh_list_versions_thr()
Refresh display of modpack list modpack versions from another thread.
void row_selected(int, int)
User activated another table row.
void row_download(const QModelIndex &)
User activated another table row.
void display_msg_thr_signal(QString msg)
void refresh_list_versions_thr_signal()
void URL_given()
User entered URL.
void progress_thr_signal(int downloaded, int max)
QTableWidget * mplist_table
void progress_thr(int downloaded, int max)
Update progress bar from another thread.
void refresh_list_versions()
Refresh display of modpack list modpack versions.
void display_msg(const QString &msg)
Display status message.
void setup(QWidget *central, struct fcmp_params *fcmp)
Setup GUI object.
void progress(int downloaded, int max)
Update progress bar.
void setup_list(const QString &name, const QUrl &url, const QString &version, const QString &license, enum modpack_type type, const QString &subtype, const QString ¬es)
Build main modpack list view.
void display_msg_thr(const QString &msg)
Display status message from another thread.
void download(const QUrl &url, mpgui *gui, fcmp_params *fcmp, const dl_msg_callback &msg_callback, const dl_pb_callback &pb_callback)
Start thread to download and install given modpack.
const char * download_modpack_list(const struct fcmp_params *fcmp, const modpack_list_setup_cb &cb, const dl_msg_callback &mcb)
Download modpack list.
void fcmp_deinit()
Deinitialize modpack installer.
void load_install_info_lists(struct fcmp_params *fcmp)
Load all required install info lists.
void fcmp_init()
Initialize modpack installer.
#define DEFAULT_URL_START
void fcmp_parse_cmdline(const QCoreApplication &app)
Parse commandline parameters.
void close_mpdbs()
Close open databases.
const char * mpdb_installed_version(const char *name, enum modpack_type type)
Return version of modpack.
static void progress_callback_thr(int downloaded, int max)
Progress indications from downloader.
int main(int argc, char **argv)
Entry point for whole freeciv-mp-qt program.
static void gui_download_modpack(const QString &url)
Download modpack from given URL.
static void setup_modpack_list(const QString &name, const QUrl &url, const QString &version, const QString &license, enum modpack_type type, const QString &subtype, const QString ¬es)
Build main modpack list view.
static void msg_callback(const QString &msg)
Progress indications from downloader.
static void msg_callback_thr(const QString &msg)
Progress indications from downloader thread.
static mpqt_worker * worker
const QStringList & get_data_dirs()
Returns a list of data directory paths, in the order in which they should be searched.
const char * freeciv21_version()
Returns the raw version string.