← Back to team overview

widelands-dev team mailing list archive

[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