From: <geo...@us...> - 2015-02-06 11:44:31
|
Revision: 7911 http://sourceforge.net/p/freeorion/code/7911 Author: geoffthemedio Date: 2015-02-06 11:44:28 +0000 (Fri, 06 Feb 2015) Log Message: ----------- -Patch by vincele adding right-click popup command to objects list to set planet focus. -Added vincele to credits. Modified Paths: -------------- trunk/FreeOrion/UI/ObjectListWnd.cpp trunk/FreeOrion/default/credits.xml trunk/FreeOrion/default/stringtables/en.txt Modified: trunk/FreeOrion/UI/ObjectListWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ObjectListWnd.cpp 2015-02-05 18:04:41 UTC (rev 7910) +++ trunk/FreeOrion/UI/ObjectListWnd.cpp 2015-02-06 11:44:28 UTC (rev 7911) @@ -7,6 +7,7 @@ #include "../client/human/HumanClientApp.h" #include "../util/i18n.h" #include "../util/Logger.h" +#include "../util/Order.h" #include "../util/ModeratorAction.h" #include "../Empire/Empire.h" #include "../Empire/EmpireManager.h" @@ -24,6 +25,8 @@ #include <GG/DrawUtil.h> #include <GG/Layout.h> +#include <sstream> + std::vector<std::string> SpecialNames(); namespace { @@ -2211,6 +2214,9 @@ if (app->GetClientType() == Networking::CLIENT_TYPE_HUMAN_MODERATOR) moderator = true; + // Right click on an unselected row should automatically select it + m_list_box->SelectRow(it); + // create popup menu with object commands in it GG::MenuItem menu_contents; menu_contents.next_level.push_back(GG::MenuItem(UserString("DUMP"), 1, false, false)); @@ -2220,10 +2226,35 @@ if (!obj) return; + const int MENUITEM_SET_FOCUS_BASE = 20; + int menuitem_id = MENUITEM_SET_FOCUS_BASE; + std::map<std::string, int> all_foci; UniverseObjectType type = obj->ObjectType(); - if (type == OBJ_PLANET) + if (type == OBJ_PLANET) { menu_contents.next_level.push_back(GG::MenuItem(UserString("SP_PLANET_SUITABILITY"), 2, false, false)); + const GG::ListBox::SelectionSet sel = m_list_box->Selections(); + for (GG::ListBox::SelectionSet::const_iterator it = sel.begin(); it != sel.end(); ++it) { + ObjectRow *row = dynamic_cast<ObjectRow *>(**it); + if (row) { + TemporaryPtr<Planet> one_planet = GetPlanet(row->ObjectID()); + if (one_planet && one_planet->OwnedBy(app->EmpireID())) { + std::vector<std::string> planet_foci = one_planet->AvailableFoci(); + for (std::vector<std::string>::iterator it = planet_foci.begin(); it != planet_foci.end(); ++it) + all_foci[*it]++; + } + } + } + GG::MenuItem focusMenuItem(UserString("MENUITEM_SET_FOCUS"), 3, false, false); + for (std::map<std::string, int>::iterator it = all_foci.begin(); it != all_foci.end(); ++it) { + menuitem_id++; + std::stringstream out; + out << UserString(it->first) << " (" << it->second << ")"; + focusMenuItem.next_level.push_back(GG::MenuItem(out.str(), menuitem_id, false, false)); + } + if (menuitem_id > MENUITEM_SET_FOCUS_BASE) + menu_contents.next_level.push_back(focusMenuItem); + } // moderator actions... if (moderator) { menu_contents.next_level.push_back(GG::MenuItem(UserString("MOD_DESTROY"), 10, false, false)); @@ -2243,6 +2274,10 @@ ClientUI::GetClientUI()->ZoomToPlanetPedia(object_id); break; } + case 3: { + // should never happen, Set Focus parent menu item is disabled + break; + } case 10: { net.SendMessage(ModeratorActionMessage(app->PlayerID(), Moderator::DestroyUniverseObject(object_id))); break; @@ -2251,9 +2286,28 @@ net.SendMessage(ModeratorActionMessage(app->PlayerID(), Moderator::SetOwner(object_id, ALL_EMPIRES))); break; } - default: + default: { + int id = popup.MenuID(); + if (id > MENUITEM_SET_FOCUS_BASE && id <= menuitem_id) { + std::map<std::string, int>::iterator it = all_foci.begin(); + std::advance(it, id - MENUITEM_SET_FOCUS_BASE - 1); + std::string focus = it->first; + const GG::ListBox::SelectionSet sel = m_list_box->Selections(); + for (GG::ListBox::SelectionSet::const_iterator it = sel.begin(); it != sel.end(); ++it) { + ObjectRow *row = dynamic_cast<ObjectRow *>(**it); + if (row) { + TemporaryPtr<Planet> one_planet = GetPlanet(row->ObjectID()); + if (one_planet && one_planet->OwnedBy(app->EmpireID())) { + one_planet->SetFocus(focus); + app->Orders().IssueOrder(OrderPtr(new ChangeFocusOrder(app->EmpireID(), one_planet->ID(), focus))); + } + } + } + } + Refresh(); break; } + } } } Modified: trunk/FreeOrion/default/credits.xml =================================================================== --- trunk/FreeOrion/default/credits.xml 2015-02-05 18:04:41 UTC (rev 7910) +++ trunk/FreeOrion/default/credits.xml 2015-02-06 11:44:28 UTC (rev 7911) @@ -56,6 +56,7 @@ <PERSON name="" nick="Vegavis" task="Programming"/> <PERSON name="" nick="Mitten.O" task="Programming"/> <PERSON name="Mark de Ruijter" nick="Eloque" task="Programming"/> + <PERSON name="Vincent Legoll" nick="vincele" task="Programming"/> </GROUP> <GROUP name="GAMEDESIGN and CONTENT"> <PERSON name="Krum Stanoev" nick="" task="Game Design"/> Modified: trunk/FreeOrion/default/stringtables/en.txt =================================================================== --- trunk/FreeOrion/default/stringtables/en.txt 2015-02-05 18:04:41 UTC (rev 7910) +++ trunk/FreeOrion/default/stringtables/en.txt 2015-02-06 11:44:28 UTC (rev 7911) @@ -2408,6 +2408,9 @@ PL_APPARENT_STEALTH_DOES_NOT_EXCEED_DETECTION Latest known stealth is out of date. Actual stealth exceeds [[DETECTION_TITLE]] or local [[DETECTION_RANGE_TITLE]] is excessively impaired. +MENUITEM_SET_FOCUS +Set focus + ## Resources Panel ########## RP_FOCUS_TOOLTIP |