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(); }
ResourcePanel::ResourcePanel(GG::X w, int object_id) : AccordionPanel(w), m_rescenter_id(object_id), m_meter_stats(), m_multi_icon_value_indicator(0), m_multi_meter_status_bar(0) { SetName("ResourcePanel"); TemporaryPtr<const ResourceCenter> res = GetResCenter(); if (!res) throw std::invalid_argument("Attempted to construct a ResourcePanel with an UniverseObject that is not a ResourceCenter"); SetChildClippingMode(ClipToClient); GG::Connect(m_expand_button->LeftClickedSignal, &ResourcePanel::ExpandCollapseButtonPressed, this); // small meter indicators - for use when panel is collapsed m_meter_stats.push_back(std::make_pair(METER_INDUSTRY, new StatisticIcon(ClientUI::MeterIcon(METER_INDUSTRY), 0, 3, false))); m_meter_stats.push_back(std::make_pair(METER_RESEARCH, new StatisticIcon(ClientUI::MeterIcon(METER_RESEARCH), 0, 3, false))); m_meter_stats.push_back(std::make_pair(METER_CONSTRUCTION, new StatisticIcon(ClientUI::MeterIcon(METER_CONSTRUCTION), 0, 3, false))); m_meter_stats.push_back(std::make_pair(METER_TRADE, new StatisticIcon(ClientUI::MeterIcon(METER_TRADE), 0, 3, false))); // meter and production indicators std::vector<std::pair<MeterType, MeterType> > meters; for (std::vector<std::pair<MeterType, StatisticIcon*> >::iterator it = m_meter_stats.begin(); it != m_meter_stats.end(); ++it) { AttachChild(it->second); meters.push_back(std::make_pair(it->first, AssociatedMeterType(it->first))); } // attach and show meter bars and large resource indicators m_multi_meter_status_bar = new MultiMeterStatusBar(Width() - 2*EDGE_PAD, m_rescenter_id, meters); m_multi_icon_value_indicator = new MultiIconValueIndicator(Width() - 2*EDGE_PAD, m_rescenter_id, meters); // determine if this panel has been created yet. std::map<int, bool>::iterator 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(); }