From: <geo...@us...> - 2009-03-29 12:46:43
|
Revision: 2952 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2952&view=rev Author: geoffthemedio Date: 2009-03-29 12:46:38 +0000 (Sun, 29 Mar 2009) Log Message: ----------- -Maked changing fleet selection or clicking on selected fleet change the active FleetWnd to the one containing the clicked fleet(s) -Fixed FleetWnd fleet populating so that only the appropriate empire's fleets are included -Added an option to adjust the size of the fleet selection indicator Modified Paths: -------------- trunk/FreeOrion/UI/FleetButton.cpp trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/FleetWnd.h trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/OptionsWnd.cpp trunk/FreeOrion/default/eng_stringtable.txt Modified: trunk/FreeOrion/UI/FleetButton.cpp =================================================================== --- trunk/FreeOrion/UI/FleetButton.cpp 2009-03-29 02:15:33 UTC (rev 2951) +++ trunk/FreeOrion/UI/FleetButton.cpp 2009-03-29 12:46:38 UTC (rev 2952) @@ -114,6 +114,11 @@ glVertex2d(vertsXY[6], vertsXY[7]); glEnd(); } + + void AddOptions(OptionsDB& db) { + db.Add("UI.fleet-selection-indicator-size", "OPTIONS_DB_UI_FLEET_SELECTION_INDICATOR_SIZE", 1.625, RangedStepValidator<double>(0.125, 0.5, 5)); + } + bool temp_bool = RegisterOptions(&AddOptions); } /////////////////////////// @@ -301,15 +306,15 @@ void FleetButton::RenderUnpressed() { glColor(Color()); GG::Pt ul = UpperLeft(), lr = LowerRight(); + const double midX = static_cast<double>(Value(ul.x + lr.x))/2.0; + const double midY = static_cast<double>(Value(ul.y + lr.y))/2.0; + if (m_vertex_components.empty()) { if (m_size_icon) m_size_icon->OrthoBlit(ul); if (m_head_icon) m_head_icon->OrthoBlit(ul); } else { - const double midX = static_cast<double>(Value(ul.x + lr.x))/2.0; - const double midY = static_cast<double>(Value(ul.y + lr.y))/2.0; - std::vector<double> vertsXY; vertsXY.push_back(midX + m_vertex_components[0]); vertsXY.push_back(midY + m_vertex_components[1]); @@ -325,10 +330,15 @@ } if (m_selected && m_selection_texture) { - GG::Pt selector_ul = GG::Pt(ul.x - Width()/2, ul.y - Height()/2); - GG::Pt selector_lr = GG::Pt(lr.x + Width()/2, lr.y + Height()/2); + double sel_ind_scale = GetOptionsDB().Get<double>("UI.fleet-selection-indicator-size"); + double sel_ind_half_size = Value(Width()) * sel_ind_scale / 2.0; + + GG::Pt button_mid = GG::Pt(GG::X(midX), GG::Y(midY)); + GG::Pt sel_ul = button_mid - GG::Pt(GG::X(sel_ind_half_size), GG::Y(sel_ind_half_size)); + GG::Pt sel_lr = button_mid + GG::Pt(GG::X(sel_ind_half_size), GG::Y(sel_ind_half_size)); + glColor(GG::CLR_WHITE); - m_selection_texture->OrthoBlit(selector_ul, selector_lr); + m_selection_texture->OrthoBlit(sel_ul, sel_lr); } } @@ -339,7 +349,7 @@ CircleArc(UpperLeft(), LowerRight(), 0.0, TWO_PI, true); glEnable(GL_TEXTURE_2D); - RenderUnpressed(); // TODO: do something else + RenderUnpressed(); } void FleetButton::RenderRollover() { @@ -349,7 +359,7 @@ CircleArc(UpperLeft(), LowerRight(), 0.0, TWO_PI, true); glEnable(GL_TEXTURE_2D); - RenderUnpressed(); // TODO: do something else + RenderUnpressed(); } void FleetButton::PlayFleetButtonRolloverSound() { Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-03-29 02:15:33 UTC (rev 2951) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-03-29 12:46:38 UTC (rev 2952) @@ -1020,9 +1020,9 @@ GetLayout()->SetRowStretch(1, 1.0); GetLayout()->SetMinimumRowHeight(2, GG::Y(ClientUI::Pts() + 4)); - GG::Connect(m_ships_lb->SelChangedSignal, &FleetDetailPanel::ShipSelectionChanged, this); - GG::Connect(m_ships_lb->BrowsedSignal, &FleetDetailPanel::ShipBrowsed, this); - GG::Connect(m_ships_lb->RightClickedSignal, &FleetDetailPanel::ShipRightClicked, this); + GG::Connect(m_ships_lb->SelChangedSignal, &FleetDetailPanel::ShipSelectionChanged, this); + GG::Connect(m_ships_lb->BrowsedSignal, &FleetDetailPanel::ShipBrowsed, this); + GG::Connect(m_ships_lb->RightClickedSignal, &FleetDetailPanel::ShipRightClicked, this); } void FleetDetailPanel::Refresh() @@ -1296,6 +1296,7 @@ GetLayout()->SetBorderMargin(7); GG::Connect(m_fleets_lb->SelChangedSignal, &FleetWnd::FleetSelectionChanged, this); + GG::Connect(m_fleets_lb->LeftClickedSignal, &FleetWnd::FleetLeftClicked, this); GG::Connect(m_fleets_lb->RightClickedSignal, &FleetWnd::FleetRightClicked, this); GG::Connect(m_fleets_lb->DoubleClickedSignal, &FleetWnd::FleetDoubleClicked, this); GG::Connect(m_fleets_lb->ErasedSignal, &FleetWnd::FleetDeleted, this); @@ -1384,6 +1385,7 @@ fleet_panel->Select(rows.find(it) != rows.end()); } + ClickedSignal(this); SelectedFleetsChangedSignal(); } @@ -1425,8 +1427,14 @@ } } +void FleetWnd::FleetLeftClicked(GG::ListBox::iterator it, const GG::Pt& pt) +{ + ClickedSignal(this); +} + void FleetWnd::FleetDoubleClicked(GG::ListBox::iterator it) { + ClickedSignal(this); Fleet* row_fleet = FleetInRow(it); int num_open_windows = FleetUIManager::GetFleetUIManager().OpenDetailWnds(this); GG::Pt window_posn(std::max(GG::X0, 25 + LowerRight().x + num_open_windows * 25), Modified: trunk/FreeOrion/UI/FleetWnd.h =================================================================== --- trunk/FreeOrion/UI/FleetWnd.h 2009-03-29 02:15:33 UTC (rev 2951) +++ trunk/FreeOrion/UI/FleetWnd.h 2009-03-29 12:46:38 UTC (rev 2952) @@ -116,6 +116,7 @@ void Init(const std::vector<Fleet*>& fleets, int selected_fleet); void FleetSelectionChanged(const GG::ListBox::SelectionSet& rows); void FleetRightClicked(GG::ListBox::iterator it, const GG::Pt& pt); + void FleetLeftClicked(GG::ListBox::iterator it, const GG::Pt& pt); void FleetDoubleClicked(GG::ListBox::iterator it); void FleetDeleted(GG::ListBox::iterator it); Fleet* FleetInRow(GG::ListBox::iterator it) const; Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-03-29 02:15:33 UTC (rev 2951) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-03-29 12:46:38 UTC (rev 2952) @@ -1562,8 +1562,33 @@ // fleets at the same universe location std::vector<Fleet*> wnd_fleets; if (system) { - // get all fleets in system - wnd_fleets = system->FindObjects<Fleet>(); + // Can't just get the fleets represented by a single FleetButton (as is done for + // moving fleets) because a single FleetButton at a system represents only + // departing or only stationary fleets, while the FleetWnd should contain both. + + // get all fleets in system. + std::vector<Fleet*> all_system_fleets = system->FindObjects<Fleet>(); + + // determine which empire's fleets to populate new FleetWnd with + int owner = ALL_EMPIRES; + if (owners.size() == 1) { + owner = *owners.begin(); + + // transfer appropriately owned fleets + for (std::vector<Fleet*>::const_iterator it = all_system_fleets.begin(); it != all_system_fleets.end(); ++it) { + Fleet* wnd_fleet = *it; + if (wnd_fleet->OwnedBy(owner)) + wnd_fleets.push_back(wnd_fleet); + } + } else { + // couldn't get a single empire whose fleets to show, so show all fleets + wnd_fleets = all_system_fleets; + } + + // could also find the set of FleetButton for this system, and find the button (or buttons?) + // in the set that contains a fleet owned by selected fleet's empire, but the above seemed + // abit simpler + } else { // get all (moving) fleets represented by fleet button for this fleet std::map<const Fleet*, FleetButton*>::iterator it = m_fleet_buttons.find(fleet); Modified: trunk/FreeOrion/UI/OptionsWnd.cpp =================================================================== --- trunk/FreeOrion/UI/OptionsWnd.cpp 2009-03-29 02:15:33 UTC (rev 2951) +++ trunk/FreeOrion/UI/OptionsWnd.cpp 2009-03-29 12:46:38 UTC (rev 2952) @@ -732,6 +732,7 @@ DoubleOption("UI.tiny-fleet-button-minimum-zoom", UserString("OPTIONS_UI_TINY_FLEET_BUTTON_MIN_ZOOM")); DoubleOption("UI.small-fleet-button-minimum-zoom", UserString("OPTIONS_UI_SMALL_FLEET_BUTTON_MIN_ZOOM")); DoubleOption("UI.medium-fleet-button-minimum-zoom", UserString("OPTIONS_UI_MEDIUM_FLEET_BUTTON_MIN_ZOOM")); + DoubleOption("UI.fleet-selection-indicator-size", UserString("OPTIONS_UI_FLEET_SELECTION_INDICATOR_SIZE")); EndSection(); BeginSection(UserString("OPTIONS_STARLANES")); DoubleOption("UI.starlane-thickness", UserString("OPTIONS_STARLANE_THICKNESS")); Modified: trunk/FreeOrion/default/eng_stringtable.txt =================================================================== --- trunk/FreeOrion/default/eng_stringtable.txt 2009-03-29 02:15:33 UTC (rev 2951) +++ trunk/FreeOrion/default/eng_stringtable.txt 2009-03-29 12:46:38 UTC (rev 2952) @@ -411,6 +411,9 @@ OPTIONS_DB_UI_TINY_FLEET_BUTTON_MIN_ZOOM Sets minimum zoom level at which tiny fleet icons are shown. At smaller zooms, no fleet icons are shown on the galaxy map. +OPTIONS_DB_UI_FLEET_SELECTION_INDICATOR_SIZE +Sets size of fleet selection indicator (relative to fleet icon). + OPTIONS_DB_UI_SYSTEM_SELECTION_INDICATOR_SIZE Sets size of system selection indicator (relative to system icon). @@ -968,6 +971,9 @@ OPTIONS_UI_MEDIUM_FLEET_BUTTON_MIN_ZOOM Medium fleet icon minimum zoom +OPTIONS_UI_FLEET_SELECTION_INDICATOR_SIZE +Fleet selection indicator relative size + OPTIONS_GALAXY_MAP_GENERAL General |