void FieldIcon::RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) { if (!Disabled()) RightClickedSignal(m_field_id); GG::MenuItem menu_contents; TemporaryPtr<const Field> field = GetField(m_field_id); if (!field) return; const std::string& field_type_name = field->FieldTypeName(); if (field_type_name.empty()) return; std::string popup_label = boost::io::str(FlexibleFormat(UserString("ENC_LOOKUP")) % UserString(field_type_name)); menu_contents.next_level.push_back(GG::MenuItem(popup_label, 1, false, false)); GG::PopupMenu popup(pt.x, pt.y, ClientUI::GetFont(), menu_contents, ClientUI::TextColor(), ClientUI::WndOuterBorderColor(), ClientUI::WndColor(), ClientUI::EditHiliteColor()); if (!popup.Run() || popup.MenuID() != 1) return; ClientUI::GetClientUI()->ZoomToFieldType(field_type_name); }
void BuildingIndicator::RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) { // verify that this indicator represents an existing building, and not a // queued production item, and that the owner of the building is this // client's player's empire int empire_id = HumanClientApp::GetApp()->EmpireID(); TemporaryPtr<Building> building = GetBuilding(m_building_id); if (!building) return; const MapWnd* map_wnd = ClientUI::GetClientUI()->GetMapWnd(); if (ClientPlayerIsModerator() && map_wnd->GetModeratorActionSetting() != MAS_NoAction) { RightClickedSignal(m_building_id); // response handled in MapWnd return; } GG::MenuItem menu_contents; if (!building->OrderedScrapped()) { // create popup menu with "Scrap" option menu_contents.next_level.push_back(GG::MenuItem(UserString("ORDER_BUIDLING_SCRAP"), 3, false, false)); } else { // create popup menu with "Cancel Scrap" option menu_contents.next_level.push_back(GG::MenuItem(UserString("ORDER_CANCEL_BUIDLING_SCRAP"), 4, false, false)); } const std::string& building_type = building->BuildingTypeName(); const BuildingType* bt = GetBuildingType(building_type); if (bt) { std::string popup_label = boost::io::str(FlexibleFormat(UserString("ENC_LOOKUP")) % UserString(building_type)); menu_contents.next_level.push_back(GG::MenuItem(popup_label, 5, false, false)); } GG::PopupMenu popup(pt.x, pt.y, ClientUI::GetFont(), menu_contents, ClientUI::TextColor(), ClientUI::WndOuterBorderColor(), ClientUI::WndColor(), ClientUI::EditHiliteColor()); if (popup.Run()) { switch (popup.MenuID()) { case 3: { // scrap building if (m_order_issuing_enabled) HumanClientApp::GetApp()->Orders().IssueOrder( OrderPtr(new ScrapOrder(empire_id, m_building_id))); break; } case 4: { // un-scrap building if (!m_order_issuing_enabled) break; // find order to scrap this building, and recind it std::map<int, int> pending_scrap_orders = PendingScrapOrders(); std::map<int, int>::const_iterator it = pending_scrap_orders.find(building->ID()); if (it != pending_scrap_orders.end()) { HumanClientApp::GetApp()->Orders().RecindOrder(it->second); break; } } case 5: { // pedia lookup building type ClientUI::GetClientUI()->ZoomToBuildingType(building_type); break; } default: break; } } }
void FieldIcon::RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) { if (!Disabled()) RightClickedSignal(m_field_id); }