From: <geo...@us...> - 2009-04-04 16:32:11
|
Revision: 2966 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2966&view=rev Author: geoffthemedio Date: 2009-04-04 16:31:57 +0000 (Sat, 04 Apr 2009) Log Message: ----------- Fixed bug where closing a fleetwnd with the X at the top right would prevent the same fleetwnd from opening when clicking on its fleetbutton Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-04-04 15:03:04 UTC (rev 2965) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-04-04 16:31:57 UTC (rev 2966) @@ -191,14 +191,19 @@ void FleetUIManager::FleetWndClosing(FleetWnd* fleet_wnd) { - if (fleet_wnd == m_active_fleet_wnd) + bool active_wnd_affected = false; + if (fleet_wnd == m_active_fleet_wnd) { m_active_fleet_wnd = 0; + active_wnd_affected = true; + } std::vector<FleetDetailWnd*> vec(m_fleet_and_detail_wnds[fleet_wnd].begin(), m_fleet_and_detail_wnds[fleet_wnd].end()); for (std::size_t i = 0; i < vec.size(); ++i) { delete vec[i]; } m_fleet_wnds.erase(fleet_wnd); m_fleet_and_detail_wnds.erase(fleet_wnd); + if (active_wnd_affected) + ActiveFleetWndChangedSignal(); // let anything that cares know the active fleetwnd just closed } void FleetUIManager::FleetDetailWndClosing(FleetWnd* fleet_wnd, FleetDetailWnd* fleet_detail_wnd) |
From: <geo...@us...> - 2009-09-05 23:50:48
|
Revision: 3143 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3143&view=rev Author: geoffthemedio Date: 2009-09-05 23:50:39 +0000 (Sat, 05 Sep 2009) Log Message: ----------- -Moved destination text ("Moving To Unknown System", "Holding at System") from fleet detail panel (bottom half of FleetWnd and contents of a single fleet window) to the fleet data panel in the top half of the FleetWnd, to make it easier to see at a glance what all fleets in a system are doing -Fixed issue where selected and then deselected fleets in FleetWnd were left with hard-to-read dark text Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-09-05 22:30:50 UTC (rev 3142) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-09-05 23:50:39 UTC (rev 3143) @@ -70,6 +70,54 @@ boost::shared_ptr<GG::Texture> SpeedIcon() { return ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / "meter" / "speed.png", true); } + + std::string FleetDestinationText(int fleet_id) { + std::string retval = ""; + const Fleet* fleet = GetUniverse().Object<Fleet>(fleet_id); + if (!fleet) + return retval; + + const System* dest = fleet->FinalDestination(); + const System* current = fleet->GetSystem(); + if (dest && dest != current) { + std::pair<int, int> eta = fleet->ETA(); // .first is turns to final destination. .second is turns to next system on route + + // name of final destination + std::string dest_name = dest->Name(); + if (dest_name.empty()) + dest_name = UserString("UNKNOWN_SYSTEM"); + + // next system on path + std::string next_eta_text; + if (eta.second == Fleet::ETA_UNKNOWN) + next_eta_text = UserString("FW_FLEET_ETA_UNKNOWN"); + else if (eta.second == Fleet::ETA_NEVER) + next_eta_text = UserString("FW_FLEET_ETA_NEVER"); + else if (eta.second == Fleet::ETA_OUT_OF_RANGE) + next_eta_text = UserString("FW_FLEET_ETA_OUT_OF_RANGE"); + else + next_eta_text = boost::lexical_cast<std::string>(eta.second); + + // final destination + std::string final_eta_text; + if (eta.first == Fleet::ETA_UNKNOWN) + final_eta_text = UserString("FW_FLEET_ETA_UNKNOWN"); + else if (eta.first == Fleet::ETA_NEVER) + final_eta_text = UserString("FW_FLEET_ETA_NEVER"); + else if (eta.first == Fleet::ETA_OUT_OF_RANGE) + final_eta_text = UserString("FW_FLEET_ETA_OUT_OF_RANGE"); + else + final_eta_text = boost::lexical_cast<std::string>(eta.first); + + + retval = boost::io::str(FlexibleFormat(UserString("FW_FLEET_MOVING_TO")) % + dest_name % final_eta_text % next_eta_text); + + } else if (current) { + retval = boost::io::str(FlexibleFormat(UserString("FW_FLEET_HOLDING_AT")) % current->Name()); + } + return retval; + } } @@ -677,6 +725,7 @@ GG::Control* m_fleet_icon; GG::TextControl* m_fleet_name_text; + GG::TextControl* m_fleet_destination_text; std::vector<std::pair<std::string, StatisticIcon*> > m_stat_icons; // statistic icons and associated meter types @@ -694,6 +743,7 @@ m_y(y), m_fleet_icon(0), m_fleet_name_text(0), + m_fleet_destination_text(0), m_stat_icons(), m_selected(false) { @@ -706,6 +756,10 @@ GG::FORMAT_LEFT | GG::FORMAT_VCENTER); AttachChild(m_fleet_name_text); + m_fleet_destination_text = new GG::TextControl(GG::X0, GG::Y0, GG::X1, LabelHeight(), "", ClientUI::GetFont(), + fleet ? ClientUI::TextColor() : GG::CLR_BLACK, + GG::FORMAT_RIGHT | GG::FORMAT_VCENTER); + AttachChild(m_fleet_destination_text); if (fleet) { int tooltip_delay = GetOptionsDB().Get<int>("UI.tooltip-delay"); @@ -838,13 +892,14 @@ GG::Clr text_color_to_use = m_selected ? selected_text_color : unselected_text_color; - if (GetUniverse().Object(m_fleet_id)) // use different colors for the "new fleet" panel - text_color_to_use = GG::CLR_BLACK; - if (Disabled()) text_color_to_use = DisabledColor(text_color_to_use); - m_fleet_name_text->SetTextColor(text_color_to_use); + if (m_fleet_name_text) + m_fleet_name_text->SetTextColor(text_color_to_use); + + if (m_fleet_destination_text) + m_fleet_destination_text->SetTextColor(text_color_to_use); } } @@ -863,8 +918,9 @@ m_fleet_icon = 0; if (const Fleet* fleet = GetUniverse().Object<Fleet>(m_fleet_id)) { - // set fleet name + // set fleet name and destination text m_fleet_name_text->SetText(fleet->Name()); + m_fleet_destination_text->SetText(FleetDestinationText(m_fleet_id)); // set icons boost::shared_ptr<GG::Texture> head_icon = FleetHeadIcon(fleet, FleetButton::FLEET_BUTTON_LARGE); @@ -881,6 +937,7 @@ } } else { m_fleet_name_text->SetText(UserString("FW_NEW_FLEET_LABEL")); + m_fleet_destination_text->Clear(); } DoLayout(); @@ -921,6 +978,7 @@ GG::Pt name_ul = GG::Pt(GG::X(ICON_SIZE + PAD), GG::Y0); GG::Pt name_lr = GG::Pt(Width() - GG::X(PAD), LabelHeight()); m_fleet_name_text->SizeMove(name_ul, name_lr); + m_fleet_destination_text->SizeMove(name_ul, name_lr); // set stat icon positions GG::Pt icon_ul(GG::X(ICON_SIZE + PAD), LabelHeight()); @@ -1442,14 +1500,11 @@ void ShipSelectionChanged(const GG::ListBox::SelectionSet& rows); void ShipBrowsed(GG::ListBox::iterator it); void ShipRightClicked(GG::ListBox::iterator it, const GG::Pt& pt); - std::string DestinationText() const; - std::string ShipStatusText(int ship_id) const; int m_fleet_id; const bool m_read_only; boost::signals::connection m_fleet_connection; - GG::TextControl* m_destination_text; ShipsListBox* m_ships_lb; }; @@ -1458,16 +1513,11 @@ GG::Wnd(GG::X0, GG::Y0, w, h, flags), m_fleet_id(UniverseObject::INVALID_OBJECT_ID), m_read_only(read_only), - m_destination_text(0), m_ships_lb(0) { SetName("FleetDetailPanel"); EnableChildClipping(true); - m_destination_text = new GG::TextControl(GG::X0, GG::Y0, w, LabelHeight(), "", ClientUI::GetFont(), - ClientUI::TextColor(), GG::FORMAT_LEFT); - AttachChild(m_destination_text); - m_ships_lb = new ShipsListBox(0, read_only); AttachChild(m_ships_lb); m_ships_lb->SetHiliteColor(GG::CLR_ZERO); @@ -1505,14 +1555,11 @@ if (m_fleet_id != old_fleet_id || m_fleet_id == UniverseObject::INVALID_OBJECT_ID) m_fleet_connection.disconnect(); - *m_destination_text << ""; - m_ships_lb->SetFleet(fleet_id); if (const Fleet* fleet = GetUniverse().Object<Fleet>(fleet_id)) { if (fleet && !fleet->Empty()) { // update desintation text and change signal connection - *m_destination_text << DestinationText(); if (old_fleet_id != fleet_id) m_fleet_connection = GG::Connect(fleet->StateChangedSignal, &FleetDetailPanel::Refresh, this); } else { @@ -1553,8 +1600,6 @@ GG::Pt ul = GG::Pt(LEFT, top); GG::Pt lr = GG::Pt(RIGHT, top + LabelHeight()); - m_destination_text->SizeMove(ul, lr); - top += (LabelHeight() + GG::Y(PAD)); ul = GG::Pt(LEFT, top); lr = GG::Pt(RIGHT, bottom); @@ -1625,63 +1670,8 @@ } } -std::string FleetDetailPanel::DestinationText() const -{ - std::string retval = ""; - const Fleet* fleet = GetUniverse().Object<Fleet>(m_fleet_id); - if (!fleet) - return retval; - System* dest = fleet->FinalDestination(); - System* current = fleet->GetSystem(); - if (dest && dest != current) { - std::pair<int, int> eta = fleet->ETA(); // .first is turns to final destination. .second is turns to next system on route - // name of final destination - std::string dest_name = dest->Name(); - if (dest_name.empty()) - dest_name = UserString("UNKNOWN_SYSTEM"); - - // next system on path - std::string next_eta_text; - if (eta.second == Fleet::ETA_UNKNOWN) - next_eta_text = UserString("FW_FLEET_ETA_UNKNOWN"); - else if (eta.second == Fleet::ETA_NEVER) - next_eta_text = UserString("FW_FLEET_ETA_NEVER"); - else if (eta.second == Fleet::ETA_OUT_OF_RANGE) - next_eta_text = UserString("FW_FLEET_ETA_OUT_OF_RANGE"); - else - next_eta_text = boost::lexical_cast<std::string>(eta.second); - - // final destination - std::string final_eta_text; - if (eta.first == Fleet::ETA_UNKNOWN) - final_eta_text = UserString("FW_FLEET_ETA_UNKNOWN"); - else if (eta.first == Fleet::ETA_NEVER) - final_eta_text = UserString("FW_FLEET_ETA_NEVER"); - else if (eta.first == Fleet::ETA_OUT_OF_RANGE) - final_eta_text = UserString("FW_FLEET_ETA_OUT_OF_RANGE"); - else - final_eta_text = boost::lexical_cast<std::string>(eta.first); - - - retval = boost::io::str(FlexibleFormat(UserString("FW_FLEET_MOVING_TO")) % - dest_name % final_eta_text % next_eta_text); - - } else if (current) { - retval = boost::io::str(FlexibleFormat(UserString("FW_FLEET_HOLDING_AT")) % current->Name()); - } - return retval; -} - -std::string FleetDetailPanel::ShipStatusText(int ship_id) const -{ - Ship* ship = GetUniverse().Object<Ship>(ship_id); - const ShipDesign* design = ship->Design(); - return UserString("FW_SHIP_CLASS") + " \"" + (design ? design->Name() : UserString("FW_UNKNOWN_DESIGN_NAME")) + "\""; -} - - //////////////////////////////////////////////// // FleetDetailWnd //////////////////////////////////////////////// |
From: <geo...@us...> - 2009-09-08 10:33:43
|
Revision: 3151 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3151&view=rev Author: geoffthemedio Date: 2009-09-08 10:33:31 +0000 (Tue, 08 Sep 2009) Log Message: ----------- Fixed stat icons on ship panels, which were showing all zeroes due to weirdness with MeterType enum string representation lookup functions acting weird. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-09-07 19:36:16 UTC (rev 3150) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-09-08 10:33:31 UTC (rev 3151) @@ -34,16 +34,23 @@ const std::string FLEET_DROP_TYPE_STRING = "FleetWnd FleetRow"; const std::string SPEED_STAT_STRING = "Speed Stat"; - const std::string& MeterStatString(MeterType meter_type) { - return GG::GetEnumMap<MeterType>().FromEnum(meter_type); + const std::string MeterStatString(MeterType meter_type) { + std::string retval = GG::GetEnumMap<MeterType>().FromEnum(meter_type); + //std::cout << "MeterStatString for meter type " << boost::lexical_cast<std::string>(meter_type) << " returning: " << retval << std::endl; + return retval; } MeterType MeterTypeFromStatString(const std::string& stat_name) { + //std::cout << "MeterTypeFromStatString passed stat_name " << stat_name << std::endl; for (MeterType meter_type = MeterType(0); meter_type != NUM_METER_TYPES; meter_type = MeterType(meter_type + 1)) { - const std::string& meter_name_string = GG::GetEnumMap<MeterType>().FromEnum(meter_type); - if (meter_name_string == stat_name) + std::string meter_name_string = MeterStatString(meter_type); + //std::cout << " ... comparing to meter name string " << meter_name_string << " which was derived from meter type " << boost::lexical_cast<std::string>(meter_type) << std::endl; + if (meter_name_string == stat_name) { + //std::cout << " ... ... match! returning " << boost::lexical_cast<std::string>(meter_type) << std::endl; return meter_type; + } } + //std::cout << " ... didn't find match. returning INVALID_METER_TYPE" << std::endl; return INVALID_METER_TYPE; } @@ -591,6 +598,7 @@ // update stat icon values. browse wnds should refresh themselves every time they're shown, so don't need to be reset here GG::Pt icon_ul(GG::X(ICON_SIZE) + GG::X(PAD), LabelHeight()); for (std::vector<std::pair<std::string, StatisticIcon*> >::const_iterator it = m_stat_icons.begin(); it != m_stat_icons.end(); ++it) { + //std::cout << "setting ship stat " << it->first << " to value: " << StatValue(it->first) << std::endl; it->second->SetValue(StatValue(it->first)); } @@ -605,8 +613,11 @@ return ship->Speed(); } else { MeterType meter_type = MeterTypeFromStatString(stat_name); - if (ship->GetMeter(meter_type)) + //std::cout << "got meter type " << boost::lexical_cast<std::string>(meter_type) << " from stat_name " << stat_name << std::endl; + if (ship->GetMeter(meter_type)) { + //std::cout << " ... ship has meter! returning meter points value " << ship->MeterPoints(meter_type) << std::endl; return ship->MeterPoints(meter_type); + } } } return 0.0; |
From: <on...@us...> - 2009-12-22 13:35:26
|
Revision: 3288 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3288&view=rev Author: ondrejr Date: 2009-12-22 13:35:19 +0000 (Tue, 22 Dec 2009) Log Message: ----------- fixed bug 2845946 by wrwrwr Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-12-22 13:09:37 UTC (rev 3287) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-12-22 13:35:19 UTC (rev 3288) @@ -246,6 +246,7 @@ int FleetID() const; virtual void CloseClicked(); virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr); + void Refresh(); ///< update title to show the current fleet name //@} static const GG::Pt& LastPosition(); ///< returns the last position of the last FleetWnd that was closed @@ -265,9 +266,11 @@ FleetDetailPanel* m_fleet_panel; - static GG::Pt s_last_position; ///< the latest position to which any FleetDetailWnd has been moved. - static GG::Pt s_last_size; ///< the latest size to which any FleetDetailWnd has been resized. + static GG::Pt s_last_position; ///< the latest position to which any FleetDetailWnd has been moved. + static GG::Pt s_last_size; ///< the latest size to which any FleetDetailWnd has been resized. + boost::signals::connection m_fleet_connection; ///< needed to keep track of the fleet name + friend class FleetUIManager; }; @@ -1862,10 +1865,14 @@ m_fleet_panel(0) { Sound::TempUISoundDisabler sound_disabler; + m_fleet_panel = new FleetDetailPanel(GG::X1, GG::Y1, fleet_id, read_only); AttachChild(m_fleet_panel); + EnableChildClipping(false); + SetName(TitleText()); - EnableChildClipping(false); + m_fleet_connection = GG::Connect(GetObject<Fleet>(fleet_id)->StateChangedSignal, &FleetDetailWnd::Refresh, this); + DoLayout(); } @@ -1922,6 +1929,11 @@ return ""; } +void FleetDetailWnd::Refresh() +{ + SetName(TitleText()); +} + const GG::Pt& FleetDetailWnd::LastPosition() { return s_last_position; |
From: <geo...@us...> - 2009-12-22 20:02:43
|
Revision: 3290 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3290&view=rev Author: geoffthemedio Date: 2009-12-22 20:02:33 +0000 (Tue, 22 Dec 2009) Log Message: ----------- Fixed fleets list and ships list resizing issues. The bulk of this was a patch submitted by wrwrwr, which I tweaked for formatting and then duplicated to fix the behaviour of both lists. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-12-22 18:00:12 UTC (rev 3289) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-12-22 20:02:33 UTC (rev 3290) @@ -1189,13 +1189,17 @@ CUIListBox(x, y, w, h), m_highlighted_row_it(end()), m_read_only(read_only) - {} + { + InitRowSizes(); + } FleetsListBox(bool read_only) : CUIListBox(GG::X0, GG::Y0, GG::X1, GG::Y1), m_highlighted_row_it(end()), m_read_only(read_only) - {} + { + InitRowSizes(); + } virtual void DropsAcceptable(DropsAcceptableIter first, DropsAcceptableIter last, const GG::Pt& pt) const { // default result, possibly to be updated later: reject all drops @@ -1513,6 +1517,14 @@ m_highlighted_row_it = end(); } + void InitRowSizes() { + // preinitialize listbox/row column widths, because what + // ListBox::Insert does on default is not suitable for this case + SetNumCols(1); + SetColWidth(0, GG::X0); + LockColWidths(); + } + iterator m_highlighted_row_it; const bool m_read_only; }; @@ -1549,6 +1561,12 @@ const GG::Pt row_size = ListRowSize(); + // preinitialize listbox/row column widths, because what + // ListBox::Insert does on default is not suitable for this case + SetNumCols(1); + SetColWidth(0, GG::X0); + LockColWidths(); + for (Fleet::const_iterator it = fleet->begin(); it != fleet->end(); ++it) { int ship_id = *it; ShipRow* row = new ShipRow(GG::X1, row_size.y, ship_id); |
From: <geo...@us...> - 2009-12-25 06:36:14
|
Revision: 3294 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3294&view=rev Author: geoffthemedio Date: 2009-12-25 06:36:05 +0000 (Fri, 25 Dec 2009) Log Message: ----------- Fixed crash bug where dragging a fleetrow onto a shipslistbox would cause a bad pointer cast that wasn't caught. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-12-24 22:57:59 UTC (rev 3293) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-12-25 06:36:05 UTC (rev 3294) @@ -1584,13 +1584,22 @@ continue; // leave false: not modifyable ShipsListBox - const ShipRow* ship_row = boost::polymorphic_downcast<const ShipRow*>(it->first); + const ShipRow* ship_row = dynamic_cast<const ShipRow*>(it->first); if (!ship_row) continue; // leave false: dropped Wnd not a ShipRow const Ship* ship = ship_row->GetShip(); + if (!ship) { + Logger().errorStream() << "ShipsListBox::DropsAcceptable couldn't get ship for ship row"; + continue; + } + const Fleet* fleet = GetObject<Fleet>(ship->FleetID()); + if (!fleet) { + Logger().errorStream() << "ShipsListBox::DropsAcceptable couldn't get fleet with id " << ship->FleetID(); + continue; + } if (ship && ValidShipTransfer(ship, fleet)) continue; // leave false: ship transfer not valid |
From: <geo...@us...> - 2010-01-03 23:44:05
|
Revision: 3315 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3315&view=rev Author: geoffthemedio Date: 2010-01-03 23:43:54 +0000 (Sun, 03 Jan 2010) Log Message: ----------- FleetWnd layout tweaks and code cleanup patch by wrwrwr Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2010-01-03 23:32:30 UTC (rev 3314) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2010-01-03 23:43:54 UTC (rev 3315) @@ -27,7 +27,13 @@ #include <boost/cast.hpp> namespace { - const int ICON_SIZE = 38; + const GG::X DATA_PANEL_ICON_SPACE = GG::X(38); // width reserved for ship or fleet icon in data panels + const GG::X DATA_PANEL_TEXT_PAD = GG::X(4); // padding on the left and right of fleet/ship description + const GG::Y DATA_PANEL_MIN_HEIGHT = GG::Y(38); // minimum height of a ship or fleet row, excluding border and padding + const GG::Flags<GG::GraphicStyle> + DATA_PANEL_ICON_STYLE = GG::GRAPHIC_CENTER | GG::GRAPHIC_VCENTER | GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE; + // how should ship and fleet icons be scaled and/or positioned in the reserved space + const int PAD = 4; const std::string SHIP_DROP_TYPE_STRING = "FleetWnd ShipRow"; const std::string FLEET_DROP_TYPE_STRING = "FleetWnd FleetRow"; @@ -67,7 +73,7 @@ } GG::Y ListRowHeight() { - return GG::Y(std::max(ICON_SIZE, Value(LabelHeight() + StatIconSize().y) + PAD)); + return std::max(DATA_PANEL_MIN_HEIGHT, LabelHeight() + StatIconSize().y) + PAD; } boost::shared_ptr<GG::Texture> SpeedIcon() { @@ -613,8 +619,8 @@ GG::Clr border_colour = m_selected ? selected_colour : unselected_colour; if (Disabled()) border_colour = DisabledColor(border_colour); - GG::Pt text_ul = ul + GG::Pt(GG::X(ICON_SIZE), GG::Y0); - GG::Pt text_lr = ul + GG::Pt(Width(), LabelHeight()); + GG::Pt text_ul = ul + GG::Pt(DATA_PANEL_ICON_SPACE, GG::Y0); + GG::Pt text_lr = ul + GG::Pt(Width(), LabelHeight()); // render GG::FlatRectangle(ul, lr, background_colour, border_colour, 1); // background and border @@ -659,7 +665,6 @@ if (!ship) return; - const int ICON_OFFSET = Value((Size().y - ICON_SIZE) / 2); boost::shared_ptr<GG::Texture> icon; if (const ShipDesign* design = ship->Design()) @@ -667,16 +672,12 @@ else icon = ClientUI::ShipIcon(UniverseObject::INVALID_OBJECT_ID); // default icon - m_ship_icon = new GG::StaticGraphic(GG::X(ICON_OFFSET), GG::Y(ICON_OFFSET), - GG::X(ICON_SIZE), GG::Y(ICON_SIZE), - icon, GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); + m_ship_icon = new GG::StaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE, Height(), icon, DATA_PANEL_ICON_STYLE); AttachChild(m_ship_icon); if (ship->OrderedScrapped()) { boost::shared_ptr<GG::Texture> scrap_texture = ClientUI::GetTexture(ClientUI::ArtDir() / "misc" / "scrapped.png", true); - m_scrap_indicator = new GG::StaticGraphic(GG::X(ICON_OFFSET), GG::Y(ICON_OFFSET), - GG::X(ICON_SIZE), GG::Y(ICON_SIZE), - scrap_texture, GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); + m_scrap_indicator = new GG::StaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE, Height(), scrap_texture, DATA_PANEL_ICON_STYLE); AttachChild(m_scrap_indicator); } } @@ -721,7 +722,7 @@ // update stat icon values and browse wnds - GG::Pt icon_ul(GG::X(ICON_SIZE) + GG::X(PAD), LabelHeight()); + GG::Pt icon_ul(DATA_PANEL_ICON_SPACE + GG::X(PAD), LabelHeight()); for (std::vector<std::pair<std::string, StatisticIcon*> >::const_iterator it = m_stat_icons.begin(); it != m_stat_icons.end(); ++it) { //std::cout << "setting ship stat " << it->first << " to value: " << StatValue(it->first) << std::endl; it->second->SetValue(StatValue(it->first)); @@ -760,26 +761,22 @@ } void DoLayout() { - if (m_ship_icon) { - // position ship icon in the centre of available space - const int ICON_OFFSET = std::max(0, (Value(Height()) - ICON_SIZE) / 2); - const GG::Pt icon_ul = GG::Pt(GG::X(ICON_OFFSET), GG::Y(ICON_OFFSET)); - const GG::Pt icon_lr = icon_ul + GG::Pt(GG::X(ICON_SIZE), GG::Y(ICON_SIZE)); - if (m_ship_icon) - m_ship_icon->SizeMove(icon_ul, icon_lr); - if (m_scrap_indicator) - m_scrap_indicator->SizeMove(icon_ul, icon_lr); - } + // resize ship and scrap indicator icons, they can fit and position themselves in the space provided + if (m_ship_icon) + m_ship_icon->Resize(GG::Pt(DATA_PANEL_ICON_SPACE, Height())); + if (m_scrap_indicator) + m_scrap_indicator->Resize(GG::Pt(DATA_PANEL_ICON_SPACE, Height())); - const GG::Pt name_ul = GG::Pt(GG::X(ICON_SIZE + PAD), GG::Y0); - const GG::Pt name_lr = GG::Pt(Width() - GG::X(PAD), LabelHeight()); + // position ship name text at the top to the right of icons + const GG::Pt name_ul = GG::Pt(DATA_PANEL_ICON_SPACE + DATA_PANEL_TEXT_PAD, GG::Y0); + const GG::Pt name_lr = GG::Pt(Width() - DATA_PANEL_TEXT_PAD, LabelHeight()); m_ship_name_text->SizeMove(name_ul, name_lr); if (m_design_name_text) m_design_name_text->SizeMove(name_ul, name_lr); // position ship statistic icons one after another horizontally and centered vertically - GG::Pt icon_ul = GG::Pt(GG::X(ICON_SIZE + PAD), LabelHeight() + std::max(GG::Y0, (Height() - LabelHeight() - StatIconSize().y) / 2)); + GG::Pt icon_ul = GG::Pt(name_ul.x, LabelHeight() + std::max(GG::Y0, (Height() - LabelHeight() - StatIconSize().y) / 2)); for (std::vector<std::pair<std::string, StatisticIcon*> >::const_iterator it = m_stat_icons.begin(); it != m_stat_icons.end(); ++it) { it->second->SizeMove(icon_ul, icon_ul + StatIconSize()); icon_ul.x += StatIconSize().x; @@ -943,7 +940,7 @@ { // main background position and colour const GG::Clr& background_colour = ClientUI::WndColor(); - GG::Pt ul = UpperLeft(), lr = LowerRight(); + const GG::Pt ul = UpperLeft(), lr = LowerRight(); // title background colour and position const GG::Clr& unselected_colour = ClientUI::WndOuterBorderColor(); @@ -951,8 +948,8 @@ GG::Clr border_colour = m_selected ? selected_colour : unselected_colour; if (Disabled()) border_colour = DisabledColor(border_colour); - GG::Pt text_ul = ul + GG::Pt(GG::X(ICON_SIZE), GG::Y0); - GG::Pt text_lr = ul + GG::Pt(Width(), LabelHeight()); + const GG::Pt text_ul = ul + GG::Pt(DATA_PANEL_ICON_SPACE, GG::Y0); + const GG::Pt text_lr = ul + GG::Pt(Width(), LabelHeight()); // render GG::FlatRectangle(ul, lr, background_colour, border_colour, 1); // background and border @@ -1070,16 +1067,18 @@ m_fleet_destination_text->SetText(FleetDestinationText(m_fleet_id)); // set icons - std::vector<boost::shared_ptr<GG::Texture> > icons; + std::vector<boost::shared_ptr<GG::Texture> > icons; + std::vector<GG::Flags<GG::GraphicStyle> > styles; boost::shared_ptr<GG::Texture> head_icon = FleetHeadIcon(fleet, FleetButton::FLEET_BUTTON_LARGE); icons.push_back(head_icon); + styles.push_back(DATA_PANEL_ICON_STYLE); boost::shared_ptr<GG::Texture> size_icon = FleetSizeIcon(fleet, FleetButton::FLEET_BUTTON_LARGE); icons.push_back(size_icon); + styles.push_back(DATA_PANEL_ICON_STYLE); - m_fleet_icon = new MultiTextureStaticGraphic(GG::X0, GG::Y0, GG::X(ICON_SIZE), GG::Y(ICON_SIZE), - icons); + m_fleet_icon = new MultiTextureStaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE, Height(), icons, styles); AttachChild(m_fleet_icon); // set stat icon values @@ -1121,20 +1120,18 @@ void FleetDataPanel::DoLayout() { if (m_fleet_icon) { - // position fleet icon in centre of available space - const int ICON_OFFSET = std::max(0, (Value(Height()) - ICON_SIZE) / 2); - const GG::Pt icon_ul = GG::Pt(GG::X(ICON_OFFSET), GG::Y(ICON_OFFSET)); - const GG::Pt icon_lr = icon_ul + GG::Pt(GG::X(ICON_SIZE), GG::Y(ICON_SIZE)); - m_fleet_icon->SizeMove(icon_ul, icon_lr); + // fleet icon will scale and position itself in the provided space + m_fleet_icon->Resize(GG::Pt(DATA_PANEL_ICON_SPACE, Height())); } - const GG::Pt name_ul = GG::Pt(GG::X(ICON_SIZE + PAD), GG::Y0); - const GG::Pt name_lr = GG::Pt(Width() - GG::X(PAD), LabelHeight()); + // position fleet name and destination texts + const GG::Pt name_ul = GG::Pt(DATA_PANEL_ICON_SPACE + DATA_PANEL_TEXT_PAD, GG::Y0); + const GG::Pt name_lr = GG::Pt(Width() - DATA_PANEL_TEXT_PAD, LabelHeight()); m_fleet_name_text->SizeMove(name_ul, name_lr); m_fleet_destination_text->SizeMove(name_ul, name_lr); // position stat icons, centering them vertically if there's more space than required - GG::Pt icon_ul = GG::Pt(GG::X(ICON_SIZE + PAD), LabelHeight() + std::max(GG::Y0, (Height() - LabelHeight() - StatIconSize().y) / 2)); + GG::Pt icon_ul = GG::Pt(name_ul.x, LabelHeight() + std::max(GG::Y0, (Height() - LabelHeight() - StatIconSize().y) / 2)); for (std::vector<std::pair<std::string, StatisticIcon*> >::const_iterator it = m_stat_icons.begin(); it != m_stat_icons.end(); ++it) { it->second->SizeMove(icon_ul, icon_ul + StatIconSize()); icon_ul.x += StatIconSize().x; |
From: <geo...@us...> - 2010-01-06 01:52:25
|
Revision: 3319 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3319&view=rev Author: geoffthemedio Date: 2010-01-06 01:52:19 +0000 (Wed, 06 Jan 2010) Log Message: ----------- Patch by wrwrwr to tweak the size of the client area of ship and fleet data panels to add borders Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2010-01-05 06:39:36 UTC (rev 3318) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2010-01-06 01:52:19 UTC (rev 3319) @@ -27,13 +27,16 @@ #include <boost/cast.hpp> namespace { - const GG::X DATA_PANEL_ICON_SPACE = GG::X(38); // width reserved for ship or fleet icon in data panels - const GG::X DATA_PANEL_TEXT_PAD = GG::X(4); // padding on the left and right of fleet/ship description - const GG::Y DATA_PANEL_MIN_HEIGHT = GG::Y(38); // minimum height of a ship or fleet row, excluding border and padding + const GG::Pt DATA_PANEL_ICON_SPACE = GG::Pt(GG::X(38), GG::Y(38)); + // area reserved for ship or fleet icon in data panels + // (actual height can be bigger if the row expands due to font size) const GG::Flags<GG::GraphicStyle> DATA_PANEL_ICON_STYLE = GG::GRAPHIC_CENTER | GG::GRAPHIC_VCENTER | GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE; // how should ship and fleet icons be scaled and/or positioned in the reserved space + const GG::X DATA_PANEL_TEXT_PAD = GG::X(4); // padding on the left and right of fleet/ship description + const int DATA_PANEL_BORDER = 1; // how thick should the border around ship or fleet panel be + const int PAD = 4; const std::string SHIP_DROP_TYPE_STRING = "FleetWnd ShipRow"; const std::string FLEET_DROP_TYPE_STRING = "FleetWnd FleetRow"; @@ -72,7 +75,7 @@ } GG::Y ListRowHeight() { - return std::max(DATA_PANEL_MIN_HEIGHT, LabelHeight() + StatIconSize().y) + PAD; + return std::max(DATA_PANEL_ICON_SPACE.y, LabelHeight() + StatIconSize().y) + 2*DATA_PANEL_BORDER + PAD; } boost::shared_ptr<GG::Texture> SpeedIcon() { @@ -545,7 +548,6 @@ EnableChildClipping(); - // ship name text. blank if no ship. TODO: if no ship show "No Ship" or somesuch? std::string ship_name = ""; if (ship) @@ -607,10 +609,23 @@ m_fleet_connection.disconnect(); } + /** Excludes border from the client area. */ + virtual GG::Pt ClientUpperLeft() const + { + return UpperLeft() + GG::Pt(GG::X(DATA_PANEL_BORDER), GG::Y(DATA_PANEL_BORDER)); + } + + /** Excludes border from the client area. */ + virtual GG::Pt ClientLowerRight() const + { + return LowerRight() - GG::Pt(GG::X(DATA_PANEL_BORDER), GG::Y(DATA_PANEL_BORDER)); + } + + /** Renders black panel background, border with color depending on the current state and a background for the ship's name text. */ virtual void Render() { // main background position and colour const GG::Clr& background_colour = ClientUI::WndColor(); - GG::Pt ul = UpperLeft(), lr = LowerRight(); + const GG::Pt ul = UpperLeft(), lr = LowerRight(), cul = ClientUpperLeft(); // title background colour and position const GG::Clr& unselected_colour = ClientUI::WndOuterBorderColor(); @@ -618,12 +633,12 @@ GG::Clr border_colour = m_selected ? selected_colour : unselected_colour; if (Disabled()) border_colour = DisabledColor(border_colour); - GG::Pt text_ul = ul + GG::Pt(DATA_PANEL_ICON_SPACE, GG::Y0); - GG::Pt text_lr = ul + GG::Pt(Width(), LabelHeight()); + const GG::Pt text_ul = cul + GG::Pt(DATA_PANEL_ICON_SPACE.x, GG::Y0); + const GG::Pt text_lr = cul + GG::Pt(ClientWidth(), LabelHeight()); // render - GG::FlatRectangle(ul, lr, background_colour, border_colour, 1); // background and border - GG::FlatRectangle(text_ul, text_lr, border_colour, GG::CLR_ZERO, 0); // title background box + GG::FlatRectangle(ul, lr, background_colour, border_colour, DATA_PANEL_BORDER); // background and border + GG::FlatRectangle(text_ul, text_lr, border_colour, GG::CLR_ZERO, 0); // title background box } void Select(bool b) { @@ -671,12 +686,12 @@ else icon = ClientUI::ShipIcon(UniverseObject::INVALID_OBJECT_ID); // default icon - m_ship_icon = new GG::StaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE, Height(), icon, DATA_PANEL_ICON_STYLE); + m_ship_icon = new GG::StaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE.x, ClientHeight(), icon, DATA_PANEL_ICON_STYLE); AttachChild(m_ship_icon); if (ship->OrderedScrapped()) { boost::shared_ptr<GG::Texture> scrap_texture = ClientUI::GetTexture(ClientUI::ArtDir() / "misc" / "scrapped.png", true); - m_scrap_indicator = new GG::StaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE, Height(), scrap_texture, DATA_PANEL_ICON_STYLE); + m_scrap_indicator = new GG::StaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE.x, ClientHeight(), scrap_texture, DATA_PANEL_ICON_STYLE); AttachChild(m_scrap_indicator); } } @@ -721,7 +736,6 @@ // update stat icon values and browse wnds - GG::Pt icon_ul(DATA_PANEL_ICON_SPACE + GG::X(PAD), LabelHeight()); for (std::vector<std::pair<std::string, StatisticIcon*> >::const_iterator it = m_stat_icons.begin(); it != m_stat_icons.end(); ++it) { //std::cout << "setting ship stat " << it->first << " to value: " << StatValue(it->first) << std::endl; it->second->SetValue(StatValue(it->first)); @@ -761,21 +775,22 @@ void DoLayout() { // resize ship and scrap indicator icons, they can fit and position themselves in the space provided + // client height should never be less than the height of the space resereved for the icon if (m_ship_icon) - m_ship_icon->Resize(GG::Pt(DATA_PANEL_ICON_SPACE, Height())); + m_ship_icon->Resize(GG::Pt(DATA_PANEL_ICON_SPACE.x, ClientHeight())); if (m_scrap_indicator) - m_scrap_indicator->Resize(GG::Pt(DATA_PANEL_ICON_SPACE, Height())); + m_scrap_indicator->Resize(GG::Pt(DATA_PANEL_ICON_SPACE.x, ClientHeight())); // position ship name text at the top to the right of icons - const GG::Pt name_ul = GG::Pt(DATA_PANEL_ICON_SPACE + DATA_PANEL_TEXT_PAD, GG::Y0); - const GG::Pt name_lr = GG::Pt(Width() - DATA_PANEL_TEXT_PAD, LabelHeight()); + const GG::Pt name_ul = GG::Pt(DATA_PANEL_ICON_SPACE.x + DATA_PANEL_TEXT_PAD, GG::Y0); + const GG::Pt name_lr = GG::Pt(ClientWidth() - DATA_PANEL_TEXT_PAD, LabelHeight()); m_ship_name_text->SizeMove(name_ul, name_lr); if (m_design_name_text) m_design_name_text->SizeMove(name_ul, name_lr); // position ship statistic icons one after another horizontally and centered vertically - GG::Pt icon_ul = GG::Pt(name_ul.x, LabelHeight() + std::max(GG::Y0, (Height() - LabelHeight() - StatIconSize().y) / 2)); + GG::Pt icon_ul = GG::Pt(name_ul.x, LabelHeight() + std::max(GG::Y0, (ClientHeight() - LabelHeight() - StatIconSize().y) / 2)); for (std::vector<std::pair<std::string, StatisticIcon*> >::const_iterator it = m_stat_icons.begin(); it != m_stat_icons.end(); ++it) { it->second->SizeMove(icon_ul, icon_ul + StatIconSize()); icon_ul.x += StatIconSize().x; @@ -841,6 +856,9 @@ int system_id = UniverseObject::INVALID_OBJECT_ID, double x = UniverseObject::INVALID_POSITION, double y = UniverseObject::INVALID_POSITION); + virtual GG::Pt ClientUpperLeft() const; ///< upper left plus border insets + virtual GG::Pt ClientLowerRight() const; ///< lower right minus border insets + virtual void DropsAcceptable(DropsAcceptableIter first, DropsAcceptableIter last, const GG::Pt& pt) const; bool Selected() const; @@ -930,6 +948,16 @@ Refresh(); } +GG::Pt FleetDataPanel::ClientUpperLeft() const +{ + return UpperLeft() + GG::Pt(GG::X(DATA_PANEL_BORDER), GG::Y(DATA_PANEL_BORDER)); +} + +GG::Pt FleetDataPanel::ClientLowerRight() const +{ + return LowerRight() - GG::Pt(GG::X(DATA_PANEL_BORDER), GG::Y(DATA_PANEL_BORDER)); +} + bool FleetDataPanel::Selected() const { return m_selected; @@ -939,7 +967,7 @@ { // main background position and colour const GG::Clr& background_colour = ClientUI::WndColor(); - const GG::Pt ul = UpperLeft(), lr = LowerRight(); + const GG::Pt ul = UpperLeft(), lr = LowerRight(), cul = ClientUpperLeft(); // title background colour and position const GG::Clr& unselected_colour = ClientUI::WndOuterBorderColor(); @@ -947,12 +975,12 @@ GG::Clr border_colour = m_selected ? selected_colour : unselected_colour; if (Disabled()) border_colour = DisabledColor(border_colour); - const GG::Pt text_ul = ul + GG::Pt(DATA_PANEL_ICON_SPACE, GG::Y0); - const GG::Pt text_lr = ul + GG::Pt(Width(), LabelHeight()); + const GG::Pt text_ul = cul + GG::Pt(DATA_PANEL_ICON_SPACE.x, GG::Y0); + const GG::Pt text_lr = cul + GG::Pt(ClientWidth(), LabelHeight()); // render - GG::FlatRectangle(ul, lr, background_colour, border_colour, 1); // background and border - GG::FlatRectangle(text_ul, text_lr, border_colour, GG::CLR_ZERO, 0); // title background box + GG::FlatRectangle(ul, lr, background_colour, border_colour, DATA_PANEL_BORDER); // background and border + GG::FlatRectangle(text_ul, text_lr, border_colour, GG::CLR_ZERO, 0); // title background box } void FleetDataPanel::DragDropEnter(const GG::Pt& pt, const std::map<GG::Wnd*, GG::Pt>& drag_drop_wnds, GG::Flags<GG::ModKey> mod_keys) @@ -1077,7 +1105,7 @@ icons.push_back(size_icon); styles.push_back(DATA_PANEL_ICON_STYLE); - m_fleet_icon = new MultiTextureStaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE, Height(), icons, styles); + m_fleet_icon = new MultiTextureStaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE.x, ClientHeight(), icons, styles); AttachChild(m_fleet_icon); // set stat icon values @@ -1120,17 +1148,17 @@ { if (m_fleet_icon) { // fleet icon will scale and position itself in the provided space - m_fleet_icon->Resize(GG::Pt(DATA_PANEL_ICON_SPACE, Height())); + m_fleet_icon->Resize(GG::Pt(DATA_PANEL_ICON_SPACE.x, ClientHeight())); } // position fleet name and destination texts - const GG::Pt name_ul = GG::Pt(DATA_PANEL_ICON_SPACE + DATA_PANEL_TEXT_PAD, GG::Y0); - const GG::Pt name_lr = GG::Pt(Width() - DATA_PANEL_TEXT_PAD, LabelHeight()); + const GG::Pt name_ul = GG::Pt(DATA_PANEL_ICON_SPACE.x + DATA_PANEL_TEXT_PAD, GG::Y0); + const GG::Pt name_lr = GG::Pt(ClientWidth() - DATA_PANEL_TEXT_PAD, LabelHeight()); m_fleet_name_text->SizeMove(name_ul, name_lr); m_fleet_destination_text->SizeMove(name_ul, name_lr); // position stat icons, centering them vertically if there's more space than required - GG::Pt icon_ul = GG::Pt(name_ul.x, LabelHeight() + std::max(GG::Y0, (Height() - LabelHeight() - StatIconSize().y) / 2)); + GG::Pt icon_ul = GG::Pt(name_ul.x, LabelHeight() + std::max(GG::Y0, (ClientHeight() - LabelHeight() - StatIconSize().y) / 2)); for (std::vector<std::pair<std::string, StatisticIcon*> >::const_iterator it = m_stat_icons.begin(); it != m_stat_icons.end(); ++it) { it->second->SizeMove(icon_ul, icon_ul + StatIconSize()); icon_ul.x += StatIconSize().x; |
From: <geo...@us...> - 2010-01-31 11:42:27
|
Revision: 3342 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3342&view=rev Author: geoffthemedio Date: 2010-01-31 11:41:57 +0000 (Sun, 31 Jan 2010) Log Message: ----------- Commented out initialization of a const GG::Flags<GG::GraphicStyle> at file scope in FleetWnd.cpp because it seems to be causing crashes on Mac OSX. Replaced with the value to which the GG::Flags was initialized in several places in file. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2010-01-31 10:32:05 UTC (rev 3341) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2010-01-31 11:41:57 UTC (rev 3342) @@ -30,9 +30,12 @@ const GG::Pt DATA_PANEL_ICON_SPACE = GG::Pt(GG::X(38), GG::Y(38)); // area reserved for ship or fleet icon in data panels // (actual height can be bigger if the row expands due to font size) - const GG::Flags<GG::GraphicStyle> - DATA_PANEL_ICON_STYLE = GG::GRAPHIC_CENTER | GG::GRAPHIC_VCENTER | GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE; + + //const GG::Flags<GG::GraphicStyle> + // DATA_PANEL_ICON_STYLE = GG::GRAPHIC_CENTER | GG::GRAPHIC_VCENTER | GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE; // how should ship and fleet icons be scaled and/or positioned in the reserved space + // commented out because this line caused crashes on Mac OSX + const GG::X DATA_PANEL_TEXT_PAD = GG::X(4); // padding on the left and right of fleet/ship description const int DATA_PANEL_BORDER = 1; // how thick should the border around ship or fleet panel be @@ -686,12 +689,12 @@ else icon = ClientUI::ShipIcon(UniverseObject::INVALID_OBJECT_ID); // default icon - m_ship_icon = new GG::StaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE.x, ClientHeight(), icon, DATA_PANEL_ICON_STYLE); + m_ship_icon = new GG::StaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE.x, ClientHeight(), icon, GG::GRAPHIC_CENTER | GG::GRAPHIC_VCENTER | GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); AttachChild(m_ship_icon); if (ship->OrderedScrapped()) { boost::shared_ptr<GG::Texture> scrap_texture = ClientUI::GetTexture(ClientUI::ArtDir() / "misc" / "scrapped.png", true); - m_scrap_indicator = new GG::StaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE.x, ClientHeight(), scrap_texture, DATA_PANEL_ICON_STYLE); + m_scrap_indicator = new GG::StaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE.x, ClientHeight(), scrap_texture, GG::GRAPHIC_CENTER | GG::GRAPHIC_VCENTER | GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); AttachChild(m_scrap_indicator); } } @@ -1099,11 +1102,11 @@ boost::shared_ptr<GG::Texture> head_icon = FleetHeadIcon(fleet, FleetButton::FLEET_BUTTON_LARGE); icons.push_back(head_icon); - styles.push_back(DATA_PANEL_ICON_STYLE); + styles.push_back(GG::GRAPHIC_CENTER | GG::GRAPHIC_VCENTER | GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); boost::shared_ptr<GG::Texture> size_icon = FleetSizeIcon(fleet, FleetButton::FLEET_BUTTON_LARGE); icons.push_back(size_icon); - styles.push_back(DATA_PANEL_ICON_STYLE); + styles.push_back(GG::GRAPHIC_CENTER | GG::GRAPHIC_VCENTER | GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); m_fleet_icon = new MultiTextureStaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE.x, ClientHeight(), icons, styles); AttachChild(m_fleet_icon); |
From: <geo...@us...> - 2010-08-30 03:33:02
|
Revision: 3778 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3778&view=rev Author: geoffthemedio Date: 2010-08-30 03:32:55 +0000 (Mon, 30 Aug 2010) Log Message: ----------- Yet another minor tweak to FleetWnd layout. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2010-08-30 01:04:02 UTC (rev 3777) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2010-08-30 03:32:55 UTC (rev 3778) @@ -2390,7 +2390,7 @@ if (show_new_fleet_drop_target) { AttachChild(m_new_fleet_drop_target); m_new_fleet_drop_target->SizeMove( GG::Pt(LEFT + GG::X(PAD), top), GG::Pt(RIGHT - ClientUI::ScrollWidth() - GG::X(PAD), top + ROW_HEIGHT)); - top += ROW_HEIGHT; + top += ROW_HEIGHT + GG::Y(PAD); } else { if (m_new_fleet_drop_target) DetachChild(m_new_fleet_drop_target); |
From: <geo...@us...> - 2010-12-22 18:17:23
|
Revision: 3906 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3906&view=rev Author: geoffthemedio Date: 2010-12-22 18:17:17 +0000 (Wed, 22 Dec 2010) Log Message: ----------- Fixed FleetWnd title text that was showing an error instead of appropriate names for the system whose fleets were being shown in some cases. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2010-12-22 18:15:12 UTC (rev 3905) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2010-12-22 18:17:17 UTC (rev 3906) @@ -2698,13 +2698,13 @@ const ObjectMap& objects = GetMainObjectMap(); + int client_empire_id = HumanClientApp::GetApp()->EmpireID(); + // at least one fleet is available, so show appropriate title this // FleetWnd's empire and system if (const Empire* empire = Empires().Lookup(m_empire_id)) { if (const System* system = objects.Object<System>(m_system_id)) { - std::string sys_name = system->Name(); - if (sys_name.empty()) - sys_name = UserString("SP_UNKNOWN_SYSTEM"); + std::string sys_name = system->PublicName(client_empire_id); return boost::io::str(FlexibleFormat(UserString("FW_EMPIRE_FLEETS_AT_SYSTEM")) % empire->Name() % sys_name); } else { @@ -2713,9 +2713,7 @@ } } else { if (const System* system = objects.Object<System>(m_system_id)) { - std::string sys_name = system->Name(); - if (sys_name.empty()) - sys_name = UserString("SP_UNKNOWN_SYSTEM"); + std::string sys_name = system->PublicName(client_empire_id); return boost::io::str(FlexibleFormat(UserString("FW_GENERIC_FLEETS_AT_SYSTEM")) % sys_name); } else { |
From: <geo...@us...> - 2010-12-26 00:49:52
|
Revision: 3922 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3922&view=rev Author: geoffthemedio Date: 2010-12-26 00:49:46 +0000 (Sun, 26 Dec 2010) Log Message: ----------- Modifications to FleetWnd, similar to previous commit, to better handle cases where objects are known to have been destroyed. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2010-12-25 23:22:17 UTC (rev 3921) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2010-12-26 00:49:46 UTC (rev 3922) @@ -1640,10 +1640,17 @@ SetColWidth(0, GG::X0); LockColWidths(); + const std::set<int>& this_client_known_destroyed_objects = GetUniverse().EmpireKnownDestroyedObjectIDs(HumanClientApp::GetApp()->EmpireID()); + std::set<int> new_selected_ship_ids; for (Fleet::const_iterator it = fleet->begin(); it != fleet->end(); ++it) { int ship_id = *it; + + // skip known destroyed objects + if (this_client_known_destroyed_objects.find(ship_id) != this_client_known_destroyed_objects.end()) + continue; + ShipRow* row = new ShipRow(GG::X1, row_size.y, ship_id); ShipsListBox::iterator row_it = Insert(row); row->Resize(row_size); @@ -2299,6 +2306,7 @@ void FleetWnd::Refresh() { const ObjectMap& objects = GetUniverse().Objects(); // objects visisble to this client's empire + const std::set<int>& this_client_known_destroyed_objects = GetUniverse().EmpireKnownDestroyedObjectIDs(HumanClientApp::GetApp()->EmpireID()); // save selected fleet(s) and ships(s) std::set<int> initially_selected_fleets = this->SelectedFleetIDs(); @@ -2307,6 +2315,14 @@ // remove existing fleet rows m_fleets_lb->Clear(); // deletes rows when removing; they don't need to be manually deleted + // skip nonexistant systems + if (m_system_id != UniverseObject::INVALID_OBJECT_ID && + this_client_known_destroyed_objects.find(m_system_id) != this_client_known_destroyed_objects.end()) + { + m_system_connection.disconnect(); + return; + } + // repopulate m_fleet_ids according to FleetWnd settings if (GetMainObjectMap().Object<System>(m_system_id)) { // get fleets to show from system, based on required ownership @@ -2314,8 +2330,14 @@ std::vector<const Fleet*> all_fleets = objects.FindObjects<Fleet>(); for (std::vector<const Fleet*>::const_iterator it = all_fleets.begin(); it != all_fleets.end(); ++it) { const Fleet* fleet = *it; - if (fleet->SystemID() != m_system_id) + if (fleet->SystemID() != m_system_id || + this_client_known_destroyed_objects.find(fleet->ID()) != this_client_known_destroyed_objects.end()) + { + // skip fleets that aren't actually in this system, or that + // don't actually exist anymore... continue; + } + if (m_empire_id == ALL_EMPIRES || fleet->OwnedBy(m_empire_id)) { m_fleet_ids.insert(fleet->ID()); AddFleet(fleet->ID()); @@ -2326,6 +2348,12 @@ std::set<int> validated_fleet_ids; for (std::set<int>::const_iterator it = m_fleet_ids.begin(); it != m_fleet_ids.end(); ++it) { int fleet_id = *it; + + if (this_client_known_destroyed_objects.find(fleet_id) != this_client_known_destroyed_objects.end()) { + // skip fleets that don't actually exist anymore... + continue; + } + if (objects.Object<Fleet>(fleet_id)) { validated_fleet_ids.insert(fleet_id); AddFleet(fleet_id); |
From: <geo...@us...> - 2011-08-18 20:40:12
|
Revision: 4168 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4168&view=rev Author: geoffthemedio Date: 2011-08-18 20:40:06 +0000 (Thu, 18 Aug 2011) Log Message: ----------- Fixed bug where actual system name was being shown instead of "Deep Space" in the FleetWnd. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2011-08-18 19:59:23 UTC (rev 4167) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2011-08-18 20:40:06 UTC (rev 4168) @@ -2751,6 +2751,16 @@ return UniverseObject::INVALID_OBJECT_ID; } +namespace { + const std::string& SysName(const System* system) { + if (!system) + return EMPTY_STRING; + if (system->GetStarType() == STAR_NONE) + return UserString("EMPTY_SPACE"); + return system->PublicName(HumanClientApp::GetApp()->EmpireID()); + } +} + std::string FleetWnd::TitleText() const { // if no fleets available, default to indicating no fleets @@ -2765,7 +2775,7 @@ // FleetWnd's empire and system if (const Empire* empire = Empires().Lookup(m_empire_id)) { if (const System* system = objects.Object<System>(m_system_id)) { - std::string sys_name = system->PublicName(client_empire_id); + std::string sys_name = SysName(system); return boost::io::str(FlexibleFormat(UserString("FW_EMPIRE_FLEETS_AT_SYSTEM")) % empire->Name() % sys_name); } else { @@ -2774,7 +2784,7 @@ } } else { if (const System* system = objects.Object<System>(m_system_id)) { - std::string sys_name = system->PublicName(client_empire_id); + std::string sys_name = SysName(system); return boost::io::str(FlexibleFormat(UserString("FW_GENERIC_FLEETS_AT_SYSTEM")) % sys_name); } else { |
From: <geo...@us...> - 2011-09-06 08:38:25
|
Revision: 4233 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4233&view=rev Author: geoffthemedio Date: 2011-09-06 08:38:19 +0000 (Tue, 06 Sep 2011) Log Message: ----------- Changed an error output to standard error to the logger error stream. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2011-09-05 22:07:45 UTC (rev 4232) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2011-09-06 08:38:19 UTC (rev 4233) @@ -1349,7 +1349,7 @@ it->second = ValidShipTransfer(ship, target_fleet); } else { // no valid drop type string - std::cerr << "row drop " << std::endl; + Logger().errorStream() << "FleetsListBox unrecognized drop type: " << it->first->DragDropDataType(); } } } |
From: <geo...@us...> - 2011-10-09 23:30:58
|
Revision: 4370 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4370&view=rev Author: geoffthemedio Date: 2011-10-09 23:30:52 +0000 (Sun, 09 Oct 2011) Log Message: ----------- Removed more now-unnecessary code. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2011-10-09 23:28:05 UTC (rev 4369) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2011-10-09 23:30:52 UTC (rev 4370) @@ -2069,18 +2069,6 @@ Refresh(); // create drop target - double X = UniverseObject::INVALID_POSITION; - double Y = UniverseObject::INVALID_POSITION; - if (const System* system = GetObject<System>(m_system_id)) { - X = system->X(); - Y = system->Y(); - } else if (!m_fleet_ids.empty()) { - if (const Fleet* fleet = GetObject<Fleet>(*(m_fleet_ids.begin()))) { - X = fleet->X(); - Y = fleet->Y(); - } - } - m_new_fleet_drop_target = new FleetDataPanel(GG::X1, ListRowHeight(), m_system_id, true); AttachChild(m_new_fleet_drop_target); GG::Connect(m_new_fleet_drop_target->NewFleetFromShipsSignal, &FleetWnd::CreateNewFleetFromDrops, this); |
From: <geo...@us...> - 2011-11-03 10:15:45
|
Revision: 4466 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4466&view=rev Author: geoffthemedio Date: 2011-11-03 10:15:34 +0000 (Thu, 03 Nov 2011) Log Message: ----------- Coloured FleetWnd fleet icons for empire / monster. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2011-11-03 07:02:29 UTC (rev 4465) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2011-11-03 10:15:34 UTC (rev 4466) @@ -1088,6 +1088,11 @@ m_fleet_icon = new MultiTextureStaticGraphic(GG::X0, GG::Y0, DATA_PANEL_ICON_SPACE.x, ClientHeight(), icons, styles); AttachChild(m_fleet_icon); + if (Empire* empire = Empires().Lookup(fleet->Owner())) + m_fleet_icon->SetColor(empire->Color()); + else if (fleet->Unowned() && fleet->HasMonsters()) + m_fleet_icon->SetColor(GG::CLR_RED); + // set stat icon values for (std::vector<std::pair<std::string, StatisticIcon*> >::const_iterator it = m_stat_icons.begin(); it != m_stat_icons.end(); ++it) |
From: <geo...@us...> - 2012-02-19 10:20:37
|
Revision: 4661 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4661&view=rev Author: geoffthemedio Date: 2012-02-19 10:20:30 +0000 (Sun, 19 Feb 2012) Log Message: ----------- Fixed bug where new fleets created by the player wouldn't appear in fleets window until the next turn. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2012-02-19 03:44:31 UTC (rev 4660) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2012-02-19 10:20:30 UTC (rev 4661) @@ -2088,7 +2088,7 @@ if (GetSystem(m_system_id)) { // get fleets to show from system, based on required ownership m_fleet_ids.clear(); - const ObjectMap& objects = Objects(); + const ObjectMap& objects = GetUniverse().Objects(); std::vector<const Fleet*> all_fleets = objects.FindObjects<Fleet>(); for (std::vector<const Fleet*>::const_iterator it = all_fleets.begin(); it != all_fleets.end(); ++it) { const Fleet* fleet = *it; |
From: <geo...@us...> - 2012-02-19 21:55:41
|
Revision: 4665 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4665&view=rev Author: geoffthemedio Date: 2012-02-19 21:55:35 +0000 (Sun, 19 Feb 2012) Log Message: ----------- -Wrapped dynamic cast in ShipsListBox::Refresh in try-catch block to stop an intermittent crash related to lacking RTTI data that I don't understand, but was able to isolate to that bit of code. -Also wrapped a dynamic cast in FleetWnd::FleetInRow which looked suspicious, and may or may not have related issues. -Tweaked FleetDetailPanel::SetSelectedShips to only emit as signal if the selected ships have actually changed. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2012-02-19 21:46:05 UTC (rev 4664) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2012-02-19 21:55:35 UTC (rev 4665) @@ -1529,10 +1529,15 @@ void Refresh() { // store selected ship rows std::set<int> old_selected_ship_ids; + try { for (ShipsListBox::SelectionSet::const_iterator it = this->Selections().begin(); it != this->Selections().end(); ++it) if (const ShipRow* row = dynamic_cast<const ShipRow*>(**it)) old_selected_ship_ids.insert(row->ShipID()); + } catch (const std::exception& e) { + Logger().errorStream() << "caught exception looping over old selections: " << e.what(); + } + //Logger().debugStream() << "ShipsListBox::Refresh initial selected ships:"; //for (std::set<int>::const_iterator it = old_selected_ship_ids.begin(); it != old_selected_ship_ids.end(); ++it) // Logger().debugStream() << " ... " << *it; @@ -1779,6 +1784,8 @@ } void FleetDetailPanel::SetSelectedShips(const std::set<int>& ship_ids) { + const GG::ListBox::SelectionSet initial_selections = m_ships_lb->Selections(); + m_ships_lb->DeselectAll(); // early exit if nothing to select, since everything has already been deselected above. @@ -1803,6 +1810,9 @@ } ShipSelectionChanged(m_ships_lb->Selections()); + + if (initial_selections != m_ships_lb->Selections()) + ShipSelectionChanged(m_ships_lb->Selections()); } int FleetDetailPanel::FleetID() const @@ -1857,8 +1867,13 @@ void FleetDetailPanel::ShipSelectionChanged(const GG::ListBox::SelectionSet& rows) { for (GG::ListBox::iterator it = m_ships_lb->begin(); it != m_ships_lb->end(); ++it) { - ShipDataPanel* ship_panel = boost::polymorphic_downcast<ShipDataPanel*>((**it)[0]); - ship_panel->Select(rows.find(it) != rows.end()); + try { + ShipDataPanel* ship_panel = boost::polymorphic_downcast<ShipDataPanel*>((**it)[0]); + ship_panel->Select(rows.find(it) != rows.end()); + } catch (const std::exception& e) { + Logger().errorStream() << "FleetDetailPanel::ShipSelectionChanged caught exception: " << e.what(); + continue; + } } SelectedShipsChangedSignal(rows); } @@ -2438,8 +2453,14 @@ if (it == m_fleets_lb->end()) return INVALID_OBJECT_ID; - if (FleetRow* fleet_row = dynamic_cast<FleetRow*>(*it)) - return fleet_row->FleetID(); + try { + //Logger().debugStream() << "FleetWnd::FleetInRow casting iterator to fleet row"; + if (FleetRow* fleet_row = dynamic_cast<FleetRow*>(*it)) { + return fleet_row->FleetID(); + } + } catch (const std::exception& e) { + Logger().errorStream() << "FleetInRow caught exception: " << e.what(); + } return INVALID_OBJECT_ID; } @@ -2502,8 +2523,6 @@ } void FleetWnd::SystemChangedSlot() { - //std::cout << "FleetWnd::SystemChangedSlot" << std::endl; - const System* system = GetSystem(m_system_id); if (!system) { Logger().errorStream() << "FleetWnd::SystemChangedSlot called but couldn't get System with id " << m_system_id; |
From: <geo...@us...> - 2012-07-03 02:54:34
|
Revision: 4968 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4968&view=rev Author: geoffthemedio Date: 2012-07-03 02:54:28 +0000 (Tue, 03 Jul 2012) Log Message: ----------- Fixed aggression indicators not appearing on fleets creating during a player's turn. The issue was that they were created, but their visibility wasn't updated in the local universe during the same turn. Now the aggression indicator is shown for client empire owned fleets or fleets that are fully visible to the client empire, instead of just the latter. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2012-07-03 02:53:04 UTC (rev 4967) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2012-07-03 02:54:28 UTC (rev 4968) @@ -892,7 +892,8 @@ m_fleet_connection = GG::Connect(fleet->StateChangedSignal, &FleetDataPanel::Refresh, this); - if (fleet->GetVisibility(HumanClientApp::GetApp()->EmpireID()) >= VIS_FULL_VISIBILITY) { + int client_empire_id = HumanClientApp::GetApp()->EmpireID(); + if (fleet->OwnedBy(client_empire_id) || fleet->GetVisibility(client_empire_id) >= VIS_FULL_VISIBILITY) { m_aggression_toggle = new GG::Button(GG::X0, GG::Y0, GG::X(16), GG::Y(16), "", ClientUI::GetFont(), GG::CLR_WHITE, GG::CLR_ZERO, GG::ONTOP | GG::INTERACTIVE); AttachChild(m_aggression_toggle); |
From: <geo...@us...> - 2012-07-03 04:22:27
|
Revision: 4969 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4969&view=rev Author: geoffthemedio Date: 2012-07-03 04:22:21 +0000 (Tue, 03 Jul 2012) Log Message: ----------- Added toggleable aggression indicator to new fleet drop target, and made new fleets created in a FleetWnd use the new fleet drop target's aggression setting. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2012-07-03 02:54:28 UTC (rev 4968) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2012-07-03 04:22:21 UTC (rev 4969) @@ -133,7 +133,7 @@ return retval; } - void CreateNewFleetFromShips(const std::vector<int>& ship_ids) { + void CreateNewFleetFromShips(const std::vector<int>& ship_ids, bool aggressive = false) { if (ship_ids.empty()) return; @@ -201,6 +201,11 @@ HumanClientApp::GetApp()->Orders().IssueOrder( OrderPtr(new NewFleetOrder(empire_id, fleet_name, new_fleet_id, system_id, ship_ids))); + // set aggression of new fleet, if not already what was requested + if (const Fleet* new_fleet = GetFleet(new_fleet_id)) + if (new_fleet->Aggressive() != aggressive) + HumanClientApp::GetApp()->Orders().IssueOrder( + OrderPtr(new AggressiveOrder(empire_id, new_fleet_id, aggressive))); // delete empty fleets from which ships may have been taken for (std::set<int>::const_iterator it = original_fleet_ids.begin(); it != original_fleet_ids.end(); ++it) { @@ -817,6 +822,7 @@ virtual void DropsAcceptable(DropsAcceptableIter first, DropsAcceptableIter last, const GG::Pt& pt) const; bool Selected() const; + bool NewFleetAggression() const; virtual void Render(); virtual void DragDropEnter(const GG::Pt& pt, const std::map<GG::Wnd*, GG::Pt>& drag_drop_wnds, GG::Flags<GG::ModKey> mod_keys); @@ -831,6 +837,7 @@ void AggressionToggleButtonPressed(); void Refresh(); + void UpdateAggressionToggle(); double StatValue(const std::string& stat_name) const; std::string StatTooltip(const std::string& stat_name) const; void DoLayout(); @@ -838,6 +845,7 @@ const int m_fleet_id; const int m_system_id; const bool m_new_fleet_drop_target; + bool m_new_fleet_aggression; boost::signals::connection m_fleet_connection; @@ -856,6 +864,7 @@ m_fleet_id(fleet_id), m_system_id(INVALID_OBJECT_ID), m_new_fleet_drop_target(false), + m_new_fleet_aggression(false), m_fleet_icon(0), m_fleet_name_text(0), m_fleet_destination_text(0), @@ -909,6 +918,7 @@ m_fleet_id(INVALID_OBJECT_ID), m_system_id(system_id), m_new_fleet_drop_target(new_fleet_drop_target), // should be true? + m_new_fleet_aggression(false), m_fleet_icon(0), m_fleet_name_text(0), m_fleet_destination_text(0), @@ -923,9 +933,10 @@ m_fleet_destination_text = new GG::TextControl(GG::X0, GG::Y0, GG::X1, LabelHeight(), "", ClientUI::GetFont(), ClientUI::TextColor(), GG::FORMAT_RIGHT | GG::FORMAT_VCENTER); AttachChild(m_fleet_destination_text); - //m_aggression_toggle = new GG::Button(GG::X0, GG::Y0, GG::X(16), GG::Y(16), "", ClientUI::GetFont(), - // GG::CLR_WHITE, GG::CLR_ZERO, GG::ONTOP | GG::INTERACTIVE); - //AttachChild(m_aggression_toggle); + m_aggression_toggle = new GG::Button(GG::X0, GG::Y0, GG::X(16), GG::Y(16), "", ClientUI::GetFont(), + GG::CLR_WHITE, GG::CLR_ZERO, GG::ONTOP | GG::INTERACTIVE); + AttachChild(m_aggression_toggle); + GG::Connect(m_aggression_toggle->ClickedSignal, &FleetDataPanel::AggressionToggleButtonPressed, this); Refresh(); } @@ -939,6 +950,9 @@ bool FleetDataPanel::Selected() const { return m_selected; } +bool FleetDataPanel::NewFleetAggression() const +{ return m_new_fleet_aggression; } + void FleetDataPanel::Render() { // main background position and colour const GG::Clr& background_colour = ClientUI::WndColor(); @@ -1071,17 +1085,21 @@ if (!m_aggression_toggle) return; const Fleet* fleet = GetFleet(m_fleet_id); - if (!fleet) - return; - int client_empire_id = HumanClientApp::GetApp()->EmpireID(); - if (client_empire_id == ALL_EMPIRES) - return; + if (fleet) { + int client_empire_id = HumanClientApp::GetApp()->EmpireID(); + if (client_empire_id == ALL_EMPIRES) + return; - bool new_aggression_State = !fleet->Aggressive(); + bool new_aggression_State = !fleet->Aggressive(); - // toggle fleet aggression status - HumanClientApp::GetApp()->Orders().IssueOrder( - OrderPtr(new AggressiveOrder(client_empire_id, m_fleet_id, new_aggression_State))); + // toggle fleet aggression status + HumanClientApp::GetApp()->Orders().IssueOrder( + OrderPtr(new AggressiveOrder(client_empire_id, m_fleet_id, new_aggression_State))); + } else if (m_new_fleet_drop_target) { + // toggle new fleet aggression + m_new_fleet_aggression = !m_new_fleet_aggression; + UpdateAggressionToggle(); + } } namespace { @@ -1131,35 +1149,47 @@ // set stat icon values for (std::vector<std::pair<std::string, StatisticIcon*> >::const_iterator it = m_stat_icons.begin(); it != m_stat_icons.end(); ++it) - { - it->second->SetValue(StatValue(it->first)); - } - - // war / peace indicator status - if (m_aggression_toggle) { - int tooltip_delay = GetOptionsDB().Get<int>("UI.tooltip-delay"); - m_aggression_toggle->SetBrowseModeTime(tooltip_delay); - if (fleet->Aggressive()) { - m_aggression_toggle->SetUnpressedGraphic(GG::SubTexture(WarIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); - m_aggression_toggle->SetPressedGraphic (GG::SubTexture(PeaceIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); - m_aggression_toggle->SetRolloverGraphic (GG::SubTexture(WarMouseoverIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); - boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd(new IconTextBrowseWnd( - WarIcon(), UserString("FW_AGGRESSIVE"), UserString("FW_AGGRESSIVE_DESC"))); - m_aggression_toggle->SetBrowseInfoWnd(browse_wnd); - } else { - m_aggression_toggle->SetUnpressedGraphic(GG::SubTexture(PeaceIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); - m_aggression_toggle->SetPressedGraphic (GG::SubTexture(WarIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); - m_aggression_toggle->SetRolloverGraphic (GG::SubTexture(PeaceMouseoverIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); - boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd(new IconTextBrowseWnd( - PeaceIcon(), UserString("FW_PASSIVE"), UserString("FW_PASSIVE_DESC"))); - m_aggression_toggle->SetBrowseInfoWnd(browse_wnd); - } - } + { it->second->SetValue(StatValue(it->first)); } } + UpdateAggressionToggle(); DoLayout(); } +void FleetDataPanel::UpdateAggressionToggle() { + if (!m_aggression_toggle) + return; + int tooltip_delay = GetOptionsDB().Get<int>("UI.tooltip-delay"); + m_aggression_toggle->SetBrowseModeTime(tooltip_delay); + + bool aggressive = false; + + if (m_new_fleet_drop_target) { + aggressive = m_new_fleet_aggression; + } else if (const Fleet* fleet = GetFleet(m_fleet_id)) { + aggressive = fleet->Aggressive(); + } else { + DetachChild(m_aggression_toggle); + return; + } + + if (aggressive) { + m_aggression_toggle->SetUnpressedGraphic(GG::SubTexture(WarIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); + m_aggression_toggle->SetPressedGraphic (GG::SubTexture(PeaceIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); + m_aggression_toggle->SetRolloverGraphic (GG::SubTexture(WarMouseoverIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); + boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd(new IconTextBrowseWnd( + WarIcon(), UserString("FW_AGGRESSIVE"), UserString("FW_AGGRESSIVE_DESC"))); + m_aggression_toggle->SetBrowseInfoWnd(browse_wnd); + } else { + m_aggression_toggle->SetUnpressedGraphic(GG::SubTexture(PeaceIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); + m_aggression_toggle->SetPressedGraphic (GG::SubTexture(WarIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); + m_aggression_toggle->SetRolloverGraphic (GG::SubTexture(PeaceMouseoverIcon(), GG::X0, GG::Y0, GG::X(64), GG::Y(64))); + boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd(new IconTextBrowseWnd( + PeaceIcon(), UserString("FW_PASSIVE"), UserString("FW_PASSIVE_DESC"))); + m_aggression_toggle->SetBrowseInfoWnd(browse_wnd); + } +} + double FleetDataPanel::StatValue(const std::string& stat_name) const { if (m_new_fleet_drop_target) return 0.0; @@ -2503,7 +2533,10 @@ for (it = ship_ids_set.begin(); it != ship_ids_set.end(); ++it) { std::vector<int> ship_ids_vec; ship_ids_vec.push_back(*it); - CreateNewFleetFromShips(ship_ids_vec); + bool aggressive = false; + if (m_new_fleet_drop_target) + aggressive = m_new_fleet_drop_target->NewFleetAggression(); + CreateNewFleetFromShips(ship_ids_vec, aggressive); } } break; @@ -2566,8 +2599,12 @@ } } -void FleetWnd::CreateNewFleetFromDrops(const std::vector<int>& ship_ids) -{ CreateNewFleetFromShips(ship_ids); } +void FleetWnd::CreateNewFleetFromDrops(const std::vector<int>& ship_ids) { + bool aggressive = false; + if (m_new_fleet_drop_target) + aggressive = m_new_fleet_drop_target->NewFleetAggression(); + CreateNewFleetFromShips(ship_ids, aggressive); +} void FleetWnd::ShipSelectionChanged(const GG::ListBox::SelectionSet& rows) { SelectedShipsChangedSignal(); } |
From: <geo...@us...> - 2012-10-21 05:55:13
|
Revision: 5319 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5319&view=rev Author: geoffthemedio Date: 2012-10-21 05:55:07 +0000 (Sun, 21 Oct 2012) Log Message: ----------- Fixed crash clicking colonize button related to recent fleetwnd optimizations. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2012-10-21 05:40:27 UTC (rev 5318) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2012-10-21 05:55:07 UTC (rev 5319) @@ -557,21 +557,22 @@ } void ShipDataPanel::Select(bool b) { - if (m_selected != b) { - m_selected = b; + if (m_selected == b) + return; + m_selected = b; - const GG::Clr& unselected_text_color = ClientUI::TextColor(); - const GG::Clr& selected_text_color = GG::CLR_BLACK; + const GG::Clr& unselected_text_color = ClientUI::TextColor(); + const GG::Clr& selected_text_color = GG::CLR_BLACK; - GG::Clr text_color_to_use = m_selected ? selected_text_color : unselected_text_color; + GG::Clr text_color_to_use = m_selected ? selected_text_color : unselected_text_color; - if (Disabled()) - text_color_to_use = DisabledColor(text_color_to_use); + if (Disabled()) + text_color_to_use = DisabledColor(text_color_to_use); + if (m_ship_name_text) m_ship_name_text->SetTextColor(text_color_to_use); - if (m_design_name_text) - m_design_name_text->SetTextColor(text_color_to_use); - } + if (m_design_name_text) + m_design_name_text->SetTextColor(text_color_to_use); } void ShipDataPanel::SizeMove(const GG::Pt& ul, const GG::Pt& lr) { |
From: <geo...@us...> - 2012-10-24 06:57:44
|
Revision: 5330 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5330&view=rev Author: geoffthemedio Date: 2012-10-24 06:57:37 +0000 (Wed, 24 Oct 2012) Log Message: ----------- Reworking of FleetDetailPanel::SelectedShipIDs to use a more-efficient method and to locally catch an occasional no RTTI exception I was getting when dragging a few ships onto the new fleet drop target for unknown reasons. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2012-10-24 06:09:55 UTC (rev 5329) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2012-10-24 06:57:37 UTC (rev 5330) @@ -1933,14 +1933,25 @@ { return m_fleet_id; } std::set<int> FleetDetailPanel::SelectedShipIDs() const { + //std::cout << "FleetDetailPanel::SelectedShipIDs()" << std::endl; std::set<int> retval; - for (GG::ListBox::iterator it = m_ships_lb->begin(); it != m_ships_lb->end(); ++it) { - if (!m_ships_lb->Selected(it)) + + const GG::ListBox::SelectionSet& selections = m_ships_lb->Selections(); + //std::cout << " selections size: " << selections.size() << std::endl; + for (GG::ListBox::SelectionSet::const_iterator sel_it = selections.begin(); + sel_it != selections.end(); ++sel_it) + { + GG::ListBox::Row* row = **sel_it; + ShipRow* ship_row = 0; + try { // casing rows here sometimes causes RTTI exceptions. not sure why, but need to avoid crash. + if (ship_row = dynamic_cast<ShipRow*>(row)) { + if (ship_row->ShipID() != INVALID_OBJECT_ID) + retval.insert(ship_row->ShipID()); + //std::cout << " ship row for ship: " << ship_row->ShipID() << " is selected" << std::endl << std::flush; + } + } catch (...) { continue; - - int selected_ship_id = ShipInRow(it); - if (selected_ship_id != INVALID_OBJECT_ID) - retval.insert(selected_ship_id); + } } return retval; } |
From: <geo...@us...> - 2012-12-01 13:26:29
|
Revision: 5491 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5491&view=rev Author: geoffthemedio Date: 2012-12-01 13:26:22 +0000 (Sat, 01 Dec 2012) Log Message: ----------- Switched order of fleet right-click popup menu options, so explore and split fleet are before rename and scrap ships. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2012-12-01 03:01:22 UTC (rev 5490) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2012-12-01 13:26:22 UTC (rev 5491) @@ -2567,9 +2567,13 @@ } GG::MenuItem menu_contents; - // Rename fleet - menu_contents.next_level.push_back(GG::MenuItem(UserString("RENAME"), 1, false, false)); + // add a fleet poput command to send the fleet exploring, and stop it from exploring + if (system && !ClientUI::GetClientUI()->GetMapWnd()->IsFleetExploring(fleet->ID()) ) + menu_contents.next_level.push_back(GG::MenuItem(UserString("ORDER_FLEET_EXPLORE"), 6, false, false)); + else if(system) + menu_contents.next_level.push_back(GG::MenuItem(UserString("ORDER_CANCEL_FLEET_EXPLORE"), 7, false, false)); + // Split damaged ships - need some, but not all, ships damaged, and need to be in a system if (system && ship_ids_set.size() > 1 && !damaged_ship_ids.empty() && damaged_ship_ids.size() != ship_ids_set.size()) menu_contents.next_level.push_back(GG::MenuItem(UserString("FW_SPLIT_DAMAGED_FLEET"), 2, false, false)); @@ -2578,6 +2582,9 @@ if (system && ship_ids_set.size() > 1) menu_contents.next_level.push_back(GG::MenuItem(UserString("FW_SPLIT_FLEET"), 3, false, false)); + // Rename fleet + menu_contents.next_level.push_back(GG::MenuItem(UserString("RENAME"), 1, false, false)); + // add a fleet popup command to order all ships in the fleet scrapped if (system && fleet->HasShipsWithoutScrapOrders()) menu_contents.next_level.push_back(GG::MenuItem(UserString("ORDER_FLEET_SCRAP"), 4, false, false)); @@ -2586,12 +2593,6 @@ if (system && fleet->HasShipsOrderedScrapped()) menu_contents.next_level.push_back(GG::MenuItem(UserString("ORDER_CANCEL_FLEET_SCRAP"), 5, false, false)); - // add a fleet poput command to send the fleet exploring, and stop it from exploring - if (system && !ClientUI::GetClientUI()->GetMapWnd()->IsFleetExploring(fleet->ID()) ) - menu_contents.next_level.push_back(GG::MenuItem(UserString("ORDER_FLEET_EXPLORE"), 6, false, false)); - else if(system) - menu_contents.next_level.push_back(GG::MenuItem(UserString("ORDER_CANCEL_FLEET_EXPLORE"), 7, false, false)); - GG::PopupMenu popup(pt.x, pt.y, ClientUI::GetFont(), menu_contents, ClientUI::TextColor()); if (popup.Run()) { |
From: <geo...@us...> - 2012-12-03 09:51:59
|
Revision: 5506 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5506&view=rev Author: geoffthemedio Date: 2012-12-03 09:51:46 +0000 (Mon, 03 Dec 2012) Log Message: ----------- Patch by Dilvish to fix / prevent crash when drag-dropping multiple fleets in FleetWnd. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2012-12-02 23:50:58 UTC (rev 5505) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2012-12-03 09:51:46 UTC (rev 5506) @@ -1676,9 +1676,22 @@ // store selected ship rows std::set<int> old_selected_ship_ids; try { - for (ShipsListBox::SelectionSet::const_iterator it = this->Selections().begin(); it != this->Selections().end(); ++it) + for (ShipsListBox::SelectionSet::const_iterator it = this->Selections().begin(); it != this->Selections().end(); ++it) { + std::list<GG::ListBox::Row*>::iterator starRow_it = *it; + bool foundStarRow=false; + for (std::list<GG::ListBox::Row*>::iterator lb_it = this->begin(); lb_it != this->end() ; lb_it++) { // checking against + if ( lb_it == starRow_it ) { + foundStarRow=true; + break; + } + } + if (!foundStarRow) { + Logger().errorStream() << "ShipsListBox::Refresh Error tried adding invalid ship row selection to old_selected_ship_ids"; + continue; + } if (const ShipRow* row = dynamic_cast<const ShipRow*>(**it)) old_selected_ship_ids.insert(row->ShipID()); + } } catch (const std::exception& e) { Logger().errorStream() << "caught exception looping over old selections: " << e.what(); } @@ -1973,6 +1986,18 @@ for (GG::ListBox::SelectionSet::const_iterator sel_it = selections.begin(); sel_it != selections.end(); ++sel_it) { + std::list<GG::ListBox::Row*>::iterator starRow_it = *sel_it; + bool hasRow=false; + for (std::list<GG::ListBox::Row*>::iterator lb_it = m_ships_lb->begin(); lb_it != m_ships_lb->end(); lb_it++) { + if (lb_it == starRow_it) { + hasRow=true; + break; + } + } + if (!hasRow) { + Logger().errorStream() << "FleetDetailPanel::SelectedShipIDs tried to set invalid ship row selection;"; + continue; + } GG::ListBox::Row* row = **sel_it; ShipRow* ship_row = 0; try { // casing rows here sometimes causes RTTI exceptions. not sure why, but need to avoid crash. |
From: <geo...@us...> - 2012-12-04 16:49:10
|
Revision: 5512 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5512&view=rev Author: geoffthemedio Date: 2012-12-04 16:49:03 +0000 (Tue, 04 Dec 2012) Log Message: ----------- Right click pedia lookup for ship designs on ship panels in FleetWnd. Actually opens the production screen, which is a bit awkward at times. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2012-12-04 14:55:40 UTC (rev 5511) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2012-12-04 16:49:03 UTC (rev 5512) @@ -2073,22 +2073,25 @@ if (!ship) return; + const ShipDesign* design = GetShipDesign(ship->DesignID()); // may be null + int client_empire_id = HumanClientApp::GetApp()->EmpireID(); - // verify that this client's player's empire owns this fleet. if not, abort. - int empire_id = HumanClientApp::GetApp()->EmpireID(); - if (!ship->OwnedBy(empire_id)) - return; - // create popup menu with a rename ship option in it. GG::MenuItem menu_contents; - menu_contents.next_level.push_back(GG::MenuItem(UserString("RENAME"), 1, false, false)); + if (design) { + std::string popup_label = boost::io::str(FlexibleFormat(UserString("ENC_LOOKUP")) % design->Name(true)); + menu_contents.next_level.push_back(GG::MenuItem(popup_label, 5, false, false)); + } - if (!ship->OrderedScrapped()) { + if (ship->OwnedBy(client_empire_id)) + menu_contents.next_level.push_back(GG::MenuItem(UserString("RENAME"), 1, false, false)); + + if (!ship->OrderedScrapped() && ship->OwnedBy(client_empire_id)) { // create popup menu with "Scrap" option menu_contents.next_level.push_back(GG::MenuItem(UserString("ORDER_SHIP_SCRAP"), 3, false, false)); - } else { + } else if (ship->OwnedBy(client_empire_id)) { // create popup menu with "Cancel Scrap" option menu_contents.next_level.push_back(GG::MenuItem(UserString("ORDER_CANCEL_SHIP_SCRAP"), 4, false, false)); } @@ -2105,14 +2108,14 @@ if (new_name != "" && new_name != ship_name) { HumanClientApp::GetApp()->Orders().IssueOrder( - OrderPtr(new RenameOrder(empire_id, ship->ID(), new_name))); + OrderPtr(new RenameOrder(client_empire_id, ship->ID(), new_name))); } break; } case 3: { // scrap ship HumanClientApp::GetApp()->Orders().IssueOrder( - OrderPtr(new ScrapOrder(empire_id, ship->ID()))); + OrderPtr(new ScrapOrder(client_empire_id, ship->ID()))); break; } @@ -2120,12 +2123,17 @@ // find order to scrap this ship, and recind it std::map<int, int> pending_scrap_orders = PendingScrapOrders(); std::map<int, int>::const_iterator it = pending_scrap_orders.find(ship->ID()); - if (it != pending_scrap_orders.end()) { + if (it != pending_scrap_orders.end()) HumanClientApp::GetApp()->Orders().RecindOrder(it->second); break; - } } + case 5: { // pedia lookup ship design + if (design) + ClientUI::GetClientUI()->ZoomToShipDesign(design->ID()); + break; + } + default: break; } |