Fixes bug in Atlas player panel (AtIter definition must be checked before incrementing).

This was SVN commit r10102.
This commit is contained in:
historic_bruno 2011-08-26 22:58:55 +00:00
parent dace16913f
commit 29dc9c3094

View File

@ -527,12 +527,18 @@ void PlayerSettingsControl::CreateWidgets()
} }
// Create player pages // Create player pages
AtIter player = m_PlayerDefaults["item"]; AtIter playerDefs = m_PlayerDefaults["item"];
++player; // Skip gaia if (playerDefs.defined())
for (size_t i = 0; i < MAX_NUM_PLAYERS; ++i, ++player) ++playerDefs; // Skip gaia
for (size_t i = 0; i < MAX_NUM_PLAYERS; ++i)
{ {
// Create new player tab and get controls // Create new player tab and get controls
PlayerPageControls controls = m_Players->AddPlayer(wxString(player["Name"]), i); wxString name(_("Unknown"));
if (playerDefs["Name"].defined())
name = playerDefs["Name"];
PlayerPageControls controls = m_Players->AddPlayer(name, i);
m_PlayerControls.push_back(controls); m_PlayerControls.push_back(controls);
// Populate civ choice box // Populate civ choice box
@ -547,6 +553,10 @@ void PlayerSettingsControl::CreateWidgets()
for (size_t j = 0; j < ais.Count(); ++j) for (size_t j = 0; j < ais.Count(); ++j)
aiChoice->Append(ais[j]->GetName(), new wxStringClientData(ais[j]->GetID())); aiChoice->Append(ais[j]->GetName(), new wxStringClientData(ais[j]->GetID()));
aiChoice->SetSelection(0); aiChoice->SetSelection(0);
// Only increment AtIters if they are defined
if (playerDefs.defined())
++playerDefs;
} }
m_InGUIUpdate = false; m_InGUIUpdate = false;
@ -590,25 +600,26 @@ void PlayerSettingsControl::ReadFromEngine()
// To prevent recursion, don't handle GUI events right now // To prevent recursion, don't handle GUI events right now
m_InGUIUpdate = true; m_InGUIUpdate = true;
// Update player controls with player data
AtIter playerDefs = m_PlayerDefaults["item"];
++playerDefs; // skip gaia
wxDynamicCast(FindWindow(ID_NumPlayers), wxSpinCtrl)->SetValue(m_NumPlayers); wxDynamicCast(FindWindow(ID_NumPlayers), wxSpinCtrl)->SetValue(m_NumPlayers);
// Remove / add extra player pages as needed // Remove / add extra player pages as needed
m_Players->ResizePlayers(m_NumPlayers); m_Players->ResizePlayers(m_NumPlayers);
for (size_t i = 0; i < MAX_NUM_PLAYERS; ++i, ++player, ++playerDefs) // Update player controls with player data
AtIter playerDefs = m_PlayerDefaults["item"];
if (playerDefs.defined())
++playerDefs; // skip gaia
for (size_t i = 0; i < MAX_NUM_PLAYERS; ++i)
{ {
PlayerPageControls controls = m_PlayerControls[i]; PlayerPageControls controls = m_PlayerControls[i];
// name // name
wxString name; wxString name(_("Unknown"));
if (player["Name"].defined()) if (player["Name"].defined())
name = wxString(player["Name"]); name = wxString(player["Name"]);
else else if (playerDefs["Name"].defined())
name = wxString(playerDefs["Name"]); name = wxString(playerDefs["Name"]);
controls.name->SetValue(name); controls.name->SetValue(name);
@ -725,6 +736,11 @@ void PlayerSettingsControl::ReadFromEngine()
else else
controls.page->SetCamera(sCameraInfo(), false); controls.page->SetCamera(sCameraInfo(), false);
// Only increment AtIters if they are defined
if (player.defined())
++player;
if (playerDefs.defined())
++playerDefs;
} }
m_InGUIUpdate = false; m_InGUIUpdate = false;