widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #01266
[Merge] lp:~widelands-dev/widelands/workers_table into lp:widelands
cghislai has proposed merging lp:~widelands-dev/widelands/workers_table into lp:widelands.
Requested reviews:
Widelands Developers (widelands-dev)
For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/workers_table/+merge/175635
Fix the workers table.
Besides the fix of Hans Joachim Desserud, another signal call was required.
I tested updates from _vacant to _coming, from _coming to the worker as well as gained experience.
--
https://code.launchpad.net/~widelands-dev/widelands/workers_table/+merge/175635
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/workers_table into lp:widelands.
=== modified file 'src/logic/productionsite.cc'
--- src/logic/productionsite.cc 2013-07-16 10:17:53 +0000
+++ src/logic/productionsite.cc 2013-07-18 16:59:30 +0000
@@ -582,6 +582,7 @@
// the last one we need to start working.
w->start_task_idle(game, 0, -1);
psite.try_start_working(game);
+ psite.workers_changed();
}
=== modified file 'src/wui/productionsitewindow.cc'
--- src/wui/productionsitewindow.cc 2013-07-16 10:17:53 +0000
+++ src/wui/productionsitewindow.cc 2013-07-18 16:59:30 +0000
@@ -112,12 +112,14 @@
void ProductionSite_Window::think()
{
Building_Window::think();
- // If we have pending requests, update table as the worker might be coming
+ // If we have pending requests, update table each tick.
+ // This is required to update from 'vacant' to 'coming'
for
(unsigned int i = 0;
i < productionsite().descr().nr_working_positions(); ++i)
{
- if (productionsite().working_positions()[i].worker_request) {
+ Widelands::Request* r = productionsite().working_positions()[i].worker_request;
+ if (r) {
update_worker_table();
break;
}
@@ -133,69 +135,71 @@
(Interactive_GameBase & parent, UI::Window * & registry)
{
ProductionSite_Window* win = new ProductionSite_Window(parent, *this, registry);
- options_window_connections.push_back
- (workers_changed.connect(boost::bind
+ Building::options_window_connections.push_back
+ (Building::workers_changed.connect(boost::bind
(&ProductionSite_Window::update_worker_table, boost::ref(*win))));
}
+
void ProductionSite_Window::update_worker_table()
{
- if (m_worker_table) {
- assert
- (productionsite().descr().nr_working_positions() ==
- m_worker_table->size());
-
- for
- (unsigned int i = 0;
- i < productionsite().descr().nr_working_positions(); ++i)
- {
- const Widelands::Worker * worker =
- productionsite().working_positions()[i].worker;
- const Widelands::Request * request =
- productionsite().working_positions()[i].worker_request;
- UI::Table<uintptr_t>::Entry_Record & er =
- m_worker_table->get_record(i);
-
- if (worker) {
- er.set_picture(0, worker->icon(), worker->descname());
-
- if
- (worker->get_current_experience() != -1
- and
- worker->get_needed_experience () != -1)
- {
- assert(worker->becomes());
-
- // Fill upgrade status
- char buffer[7];
- snprintf
- (buffer, sizeof(buffer),
- "%i/%i",
- worker->get_current_experience(),
- worker->get_needed_experience());
-
- er.set_string(1, buffer);
- er.set_string
- (2, worker->tribe().get_worker_descr
- (worker->becomes())->descname());
- } else {
- // Worker is not upgradeable
- er.set_string(1, "---");
- er.set_string(2, "---");
- }
- } else if (request) {
- const Widelands::Worker_Descr * desc =
- productionsite().tribe().get_worker_descr(request->get_index());
- er.set_picture
- (0, desc->icon(),
- request->is_open() ? _("(vacant)") : _("(coming)"));
-
- er.set_string(1, "");
- er.set_string(2, "");
+ if (m_worker_table == NULL) {
+ return;
+ }
+ assert
+ (productionsite().descr().nr_working_positions() ==
+ m_worker_table->size());
+
+ for
+ (unsigned int i = 0;
+ i < productionsite().descr().nr_working_positions(); ++i)
+ {
+ const Widelands::Worker * worker =
+ productionsite().working_positions()[i].worker;
+ const Widelands::Request * request =
+ productionsite().working_positions()[i].worker_request;
+ UI::Table<uintptr_t>::Entry_Record & er =
+ m_worker_table->get_record(i);
+
+ if (worker) {
+ er.set_picture(0, worker->icon(), worker->descname());
+
+ if
+ (worker->get_current_experience() != -1
+ and
+ worker->get_needed_experience () != -1)
+ {
+ assert(worker->becomes());
+
+ // Fill upgrade status
+ char buffer[7];
+ snprintf
+ (buffer, sizeof(buffer),
+ "%i/%i",
+ worker->get_current_experience(),
+ worker->get_needed_experience());
+
+ er.set_string(1, buffer);
+ er.set_string
+ (2, worker->tribe().get_worker_descr
+ (worker->becomes())->descname());
} else {
- // Occurs during cleanup
- return;
+ // Worker is not upgradeable
+ er.set_string(1, "---");
+ er.set_string(2, "---");
}
+ } else if (request) {
+ const Widelands::Worker_Descr * desc =
+ productionsite().tribe().get_worker_descr(request->get_index());
+ er.set_picture
+ (0, desc->icon(),
+ request->is_open() ? _("(vacant)") : _("(coming)"));
+
+ er.set_string(1, "");
+ er.set_string(2, "");
+ } else {
+ // Should only occur during cleanup
+ continue;
}
}
m_worker_table->update();
Follow ups