PopulationPanel::PopulationPanel(GG::X w, int object_id) : AccordionPanel(w, GG::Y(ClientUI::Pts()*2)), m_popcenter_id(object_id), m_meter_stats(), m_multi_icon_value_indicator(nullptr), m_multi_meter_status_bar(nullptr) { SetName("PopulationPanel"); std::shared_ptr<const PopCenter> pop = GetPopCenter(); if (!pop) throw std::invalid_argument("Attempted to construct a PopulationPanel with an object id is not a PopCenter"); m_expand_button->LeftClickedSignal.connect( boost::bind(&PopulationPanel::ExpandCollapseButtonPressed, this)); const auto obj = GetUniverseObject(m_popcenter_id); if (!obj) { ErrorLogger() << "Invalid object id " << m_popcenter_id; return; } // small meter indicators - for use when panel is collapsed m_meter_stats.push_back( std::make_pair(METER_POPULATION, new StatisticIcon(ClientUI::SpeciesIcon(pop->SpeciesName()), obj->InitialMeterValue(METER_POPULATION), 3, false, MeterIconSize().x, MeterIconSize().y))); m_meter_stats.push_back( std::make_pair(METER_HAPPINESS, new StatisticIcon(ClientUI::MeterIcon(METER_HAPPINESS), obj->InitialMeterValue(METER_HAPPINESS), 3, false, MeterIconSize().x, MeterIconSize().y))); m_meter_stats.push_back( std::make_pair(METER_CONSTRUCTION, new StatisticIcon(ClientUI::MeterIcon(METER_CONSTRUCTION), obj->InitialMeterValue(METER_CONSTRUCTION), 3, false, MeterIconSize().x, MeterIconSize().y))); // meter and production indicators std::vector<std::pair<MeterType, MeterType>> meters; for (std::pair<MeterType, StatisticIcon*>& meter_stat : m_meter_stats) { meter_stat.second->InstallEventFilter(this); AttachChild(meter_stat.second); meters.push_back(std::make_pair(meter_stat.first, AssociatedMeterType(meter_stat.first))); } // attach and show meter bars and large resource indicators m_multi_icon_value_indicator = new MultiIconValueIndicator(Width() - 2*EDGE_PAD, m_popcenter_id, meters); m_multi_meter_status_bar = new MultiMeterStatusBar(Width() - 2*EDGE_PAD, m_popcenter_id, meters); // determine if this panel has been created yet. std::map<int, bool>::iterator it = s_expanded_map.find(m_popcenter_id); if (it == s_expanded_map.end()) s_expanded_map[m_popcenter_id] = false; // if not, default to collapsed state Refresh(); }
void ResourcePanel::Update() { // remove any old browse wnds for (auto& meter_stat : m_meter_stats) { meter_stat.second->ClearBrowseInfoWnd(); m_multi_icon_value_indicator->ClearToolTip(meter_stat.first); } auto obj = GetUniverseObject(m_rescenter_id); if (!obj) { ErrorLogger() << "BuildingPanel::Update couldn't get object with id " << m_rescenter_id; return; } // meter bar displays resource stats m_multi_meter_status_bar->Update(); m_multi_icon_value_indicator->Update(); // tooltips for (auto& meter_stat : m_meter_stats) { meter_stat.second->SetValue(obj->InitialMeterValue(meter_stat.first)); auto browse_wnd = GG::Wnd::Create<MeterBrowseWnd>(m_rescenter_id, meter_stat.first, AssociatedMeterType(meter_stat.first)); meter_stat.second->SetBrowseInfoWnd(browse_wnd); m_multi_icon_value_indicator->SetToolTip(meter_stat.first, browse_wnd); } std::sort(m_meter_stats.begin(), m_meter_stats.end(), SortByMeterValue); }
void PopulationPanel::Update() { // remove any old browse wnds for (auto& meter_stat : m_meter_stats) { meter_stat.second->ClearBrowseInfoWnd(); m_multi_icon_value_indicator->ClearToolTip(meter_stat.first); } auto pop = GetPopCenter(); if (!pop) { ErrorLogger() << "PopulationPanel::Update couldn't get PopCenter or couldn't get UniverseObject"; return; } // meter bar displays population stats m_multi_meter_status_bar->Update(); m_multi_icon_value_indicator->Update(); // tooltips for (auto& meter_stat : m_meter_stats) { meter_stat.second->SetValue(pop->InitialMeterValue(meter_stat.first)); auto browse_wnd = GG::Wnd::Create<MeterBrowseWnd>(m_popcenter_id, meter_stat.first, AssociatedMeterType(meter_stat.first)); meter_stat.second->SetBrowseInfoWnd(browse_wnd); m_multi_icon_value_indicator->SetToolTip(meter_stat.first, browse_wnd); } }
void ResourcePanel::CompleteConstruction() { AccordionPanel::CompleteConstruction(); SetName("ResourcePanel"); auto res = GetResCenter(); if (!res) throw std::invalid_argument("Attempted to construct a ResourcePanel with an UniverseObject that is not a ResourceCenter"); m_expand_button->LeftClickedSignal.connect( boost::bind(&ResourcePanel::ExpandCollapseButtonPressed, this)); const auto obj = GetUniverseObject(m_rescenter_id); if (!obj) { ErrorLogger() << "Invalid object id " << m_rescenter_id; return; } // meter and production indicators std::vector<std::pair<MeterType, MeterType>> meters; // small meter indicators - for use when panel is collapsed for (MeterType meter : {METER_INDUSTRY, METER_RESEARCH, METER_SUPPLY, METER_STOCKPILE}) { auto stat = GG::Wnd::Create<StatisticIcon>( ClientUI::MeterIcon(meter), obj->InitialMeterValue(meter), 3, false, MeterIconSize().x, MeterIconSize().y); stat->InstallEventFilter(shared_from_this()); AttachChild(stat); m_meter_stats.push_back({meter, stat}); meters.push_back({meter, AssociatedMeterType(meter)}); } // attach and show meter bars and large resource indicators m_multi_meter_status_bar = GG::Wnd::Create<MultiMeterStatusBar>(Width() - 2*EDGE_PAD, m_rescenter_id, meters); m_multi_icon_value_indicator = GG::Wnd::Create<MultiIconValueIndicator>(Width() - 2*EDGE_PAD, m_rescenter_id, meters); // determine if this panel has been created yet. auto it = s_expanded_map.find(m_rescenter_id); if (it == s_expanded_map.end()) s_expanded_map[m_rescenter_id] = false; // if not, default to collapsed state Refresh(); }