From 24dd0e4dacd8f493d647e3090be389bdc753d9a1 Mon Sep 17 00:00:00 2001 From: James Date: Sat, 24 Feb 2024 12:20:45 -0600 Subject: [PATCH] Add refresh button for techleak Closes #1753 --- client/views/view_research.cpp | 37 ++++++++++++++++++++++++++++++++-- client/views/view_research.h | 3 +++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/client/views/view_research.cpp b/client/views/view_research.cpp index 31d15da89f..c351f89bb3 100644 --- a/client/views/view_research.cpp +++ b/client/views/view_research.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -26,6 +27,7 @@ #include "game.h" #include "government.h" #include "research.h" + // client #include "citydlg.h" #include "client_main.h" @@ -40,6 +42,9 @@ #include "views/view_research.h" #include "views/view_research_reqtree.h" +// server +#include "../server/techtools.h" + extern QString split_text(const QString &text, bool cut); extern QString cut_helptext(const QString &text); extern QString get_tooltip_improvement(impr_type *building, @@ -273,15 +278,22 @@ science_report::science_report() : QWidget() auto sci_layout = new QGridLayout(); res_diag = new research_diagram(); auto scroll = new QScrollArea(); + refresh_but = new QPushButton(); + refresh_but->setText(_("Refresh")); + refresh_but->setToolTip(_("Press to refresh currently researched " + "technology calculation again.")); + refresh_but->setVisible(false); progress->setTextVisible(true); progress_label->setSizePolicy(size_fixed_policy); sci_layout->addWidget(progress_label, 0, 0, 1, 8); - sci_layout->addWidget(researching_combo, 1, 0, 1, 4); + sci_layout->addWidget(researching_combo, 1, 0, 1, 3); + sci_layout->addWidget(refresh_but, 1, 3, 1, 1); researching_combo->setSizePolicy(size_fixed_policy); + refresh_but->setSizePolicy(size_fixed_policy); sci_layout->addWidget(progress, 1, 5, 1, 4); progress->setSizePolicy(size_fixed_policy); - sci_layout->addWidget(goal_combo, 2, 0, 1, 4); + sci_layout->addWidget(goal_combo, 2, 0, 1, 3); goal_combo->setSizePolicy(size_fixed_policy); sci_layout->addWidget(info_label, 2, 5, 1, 4); info_label->setSizePolicy(size_fixed_policy); @@ -298,6 +310,9 @@ science_report::science_report() : QWidget() QOverload::of(&QComboBox::currentIndexChanged), this, &science_report::current_tech_changed); + QObject::connect(refresh_but, &QAbstractButton::pressed, this, + &science_report::push_research); + QObject::connect(goal_combo, QOverload::of(&QComboBox::currentIndexChanged), this, &science_report::goal_tech_changed); @@ -500,6 +515,12 @@ void science_report::update_report() researching_combo->setDisabled(false); goal_combo->setDisabled(false); } + + // If tech leak happens we enable a button to force/push a refresh. + if (done >= total) { + refresh_but->setVisible(true); + } + update_reqtree(); } @@ -540,6 +561,18 @@ void science_report::goal_tech_changed(int changed_index) } } +/** + * Push (redo) research when qty bulbs researched is + * greater than the number needed + */ +void science_report::push_research() +{ + if (can_client_issue_orders()) { + auto research = research_get(client_player()); + dsend_packet_player_research(&client.conn, research->researching); + } +} + /** Update the science report. */ diff --git a/client/views/view_research.h b/client/views/view_research.h index f0de3490dd..57d551b8cb 100644 --- a/client/views/view_research.h +++ b/client/views/view_research.h @@ -23,6 +23,7 @@ class QObject; class QPaintEvent; class QScrollArea; class progress_bar; +class QPushButton; /**************************************************************************** Custom widget representing research diagram in science_report @@ -72,6 +73,7 @@ class science_report : public QWidget { QComboBox *goal_combo; QComboBox *researching_combo; + QPushButton *refresh_but; progress_bar *progress; QLabel *info_label; QLabel *progress_label; @@ -94,6 +96,7 @@ class science_report : public QWidget { private slots: void current_tech_changed(int index); void goal_tech_changed(int index); + void push_research(); }; void popdown_science_report();