void SitRepPanel::Update() { DebugLogger() << "SitRepPanel::Update()"; m_sitreps_lb->Clear(); // Get back to sane default if (m_showing_turn == INVALID_GAME_TURN) m_showing_turn = 1; // get sitrep entries for this client's player empire, or for all empires // if this client is an observer or moderator. // todo: double check that no-empire players are actually moderator or // observers, instead of just passing the client empire id. std::map<int, std::list<SitRepEntry> > turns = GetSitRepsSortedByTurn(HumanClientApp::GetApp()->EmpireID(), m_hidden_sitrep_templates); std::list<SitRepEntry> currentTurnSitreps; if (turns.find(m_showing_turn) != turns.end()) currentTurnSitreps = turns[m_showing_turn]; if (currentTurnSitreps.size() == 0) { m_showing_turn = GetNextNonEmptySitrepsTurn(turns, m_showing_turn, false); currentTurnSitreps = turns[m_showing_turn]; } if (m_showing_turn < 1) this->SetName(UserString("SITREP_PANEL_TITLE")); else this->SetName(boost::io::str(FlexibleFormat(UserString("SITREP_PANEL_TITLE_TURN")) % m_showing_turn)); // order sitreps for display std::vector<SitRepEntry> orderedSitreps; std::vector<std::string> ordered_templates = OrderedSitrepTemplateStrings(); for (std::vector<std::string>::const_iterator template_it = ordered_templates.begin(); template_it != ordered_templates.end(); ++template_it) { for (std::list<SitRepEntry>::iterator sitrep_it = currentTurnSitreps.begin(); sitrep_it != currentTurnSitreps.end(); sitrep_it++) { if (sitrep_it->GetTemplateString() == *template_it) { //DebugLogger() << "saving into orderedSitreps - sitrep of template "<<*template_it<<" with full string "<< sitrep_it->GetText(); orderedSitreps.push_back(*sitrep_it); //DebugLogger()<< "deleting above sitrep from currentTurnSitreps"; sitrep_it = --currentTurnSitreps.erase(sitrep_it); } } } // copy remaining unordered sitreps for (std::list<SitRepEntry>::iterator sitrep_it = currentTurnSitreps.begin(); sitrep_it != currentTurnSitreps.end(); sitrep_it++) { orderedSitreps.push_back(*sitrep_it); } // create UI rows for all sitrps GG::X width = m_sitreps_lb->Width() - 8; for (std::vector<SitRepEntry>::iterator sitrep_it = orderedSitreps.begin(); sitrep_it != orderedSitreps.end(); sitrep_it++) { m_sitreps_lb->Insert(new SitRepRow(width, GG::Y(ClientUI::Pts()*2), *sitrep_it)); } // if at first turn with visible sitreps, disable back button int firstTurnWithSR = GetNextNonEmptySitrepsTurn(turns, m_showing_turn, false); if ((m_showing_turn < 1) || (turns.size() < 2) || (m_showing_turn == firstTurnWithSR)) { m_prev_turn_button->Disable(); } else { m_prev_turn_button->Disable(false); } // if at last turn with visible sitreps, disable forward button int lastTurnWithSR = GetNextNonEmptySitrepsTurn(turns, m_showing_turn, true); if ((turns.size() < 2) || (m_showing_turn == lastTurnWithSR)) { m_next_turn_button->Disable(); m_last_turn_button->Disable(); } else { m_next_turn_button->Disable(false); m_last_turn_button->Disable(false); } }
void SitRepPanel::Update() { Logger().debugStream() << "SitRepPanel::Update()"; m_sitreps_lb->Clear(); if (m_showing_turn == INVALID_GAME_TURN) this->SetName(UserString("SITREP_PANEL_TITLE")); else this->SetName(boost::io::str(FlexibleFormat(UserString("SITREP_PANEL_TITLE_TURN")) % m_showing_turn)); // get sitrep entries for this client's player empire, or for all empires // if this client is an observer or moderator. // todo: double check that no-empire players are actually moderator or // observers, instead of just passing the client empire id. std::list<SitRepEntry> currentTurnSitreps; GetTurnSitrepsFromEmpire(currentTurnSitreps, HumanClientApp::GetApp()->EmpireID()); // order sitreps for display std::vector<SitRepEntry> orderedSitreps; std::vector<std::string> ordered_templates = OrderedSitrepTemplateStrings(); for (std::vector<std::string>::const_iterator template_it = ordered_templates.begin(); template_it != ordered_templates.end(); ++template_it) { for (std::list<SitRepEntry>::iterator sitrep_it = currentTurnSitreps.begin(); sitrep_it != currentTurnSitreps.end(); sitrep_it++) { if (sitrep_it->GetTemplateString() == *template_it) { //Logger().debugStream() << "saving into orderedSitreps - sitrep of template "<<*template_it<<" with full string "<< sitrep_it->GetText(); orderedSitreps.push_back(*sitrep_it); //Logger().debugStream()<< "deleting above sitrep from currentTurnSitreps"; sitrep_it = --currentTurnSitreps.erase(sitrep_it); } } } // copy remaining unordered sitreps for (std::list<SitRepEntry>::iterator sitrep_it = currentTurnSitreps.begin(); sitrep_it != currentTurnSitreps.end(); sitrep_it++) { orderedSitreps.push_back(*sitrep_it); } // create UI rows for all sitrps GG::X width = m_sitreps_lb->Width() - 8; for (std::vector<SitRepEntry>::iterator sitrep_it = orderedSitreps.begin(); sitrep_it != orderedSitreps.end(); sitrep_it++) { m_sitreps_lb->Insert(new SitRepRow(width, GG::Y(ClientUI::Pts()*2), *sitrep_it)); } // if at first turn, disable back button if (CurrentTurn() >= 1 && m_showing_turn > 1) { m_prev_turn_button->Disable(false); } else { m_prev_turn_button->Disable(); } // if at current turn, disable forward button if (CurrentTurn() >= 1 && m_showing_turn < CurrentTurn()) { m_next_turn_button->Disable(false); m_last_turn_button->Disable(false); } else { m_next_turn_button->Disable(); m_last_turn_button->Disable(); } }