From: <geo...@us...> - 2007-03-19 15:34:20
|
Revision: 2031 http://svn.sourceforge.net/freeorion/revision/?rev=2031&view=rev Author: geoffthemedio Date: 2007-03-19 08:11:34 -0700 (Mon, 19 Mar 2007) Log Message: ----------- Fixed some Boost signals-related FleetWnd crashes on Linux Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/FleetWnd.h Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2007-03-18 06:19:21 UTC (rev 2030) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2007-03-19 15:11:34 UTC (rev 2031) @@ -38,7 +38,8 @@ }; FleetDataPanel(int w, int h, const Fleet* fleet, int empire = -1, int system_id = -1, double x = 0.0, double y = 0.0); - + ~FleetDataPanel(); + bool Selected() const; virtual void Render(); @@ -58,6 +59,9 @@ const int m_system_id; const double m_x; const double m_y; + + boost::signals::connection m_fleet_connection; + GG::StaticGraphic* m_fleet_icon; GG::TextControl* m_fleet_name_text; StatisticIcon* m_num_ships_stat; @@ -105,11 +109,16 @@ m_ship_strength_stat = new StatisticIcon(h, SHIP_NAME_HT, STAT_ICON_WD, h - SHIP_NAME_HT - 1, (ClientUI::ArtDir() / "icons" / "combatstrength.png").native_file_string(), ClientUI::TextColor(), 0, 0, true, false); AttachChild(m_ship_strength_stat); - GG::Connect(m_ship->StateChangedSignal, &ShipDataPanel::Refresh, this); + m_ship_connection = GG::Connect(m_ship->StateChangedSignal, &ShipDataPanel::Refresh, this); Refresh(); } + ~ShipDataPanel() + { + m_ship_connection.disconnect(); + } + virtual void Render() { const GG::Clr& unselected_color = GG::CLR_GRAY; @@ -160,8 +169,7 @@ design_name = "Scout"; } m_ship_icon = new GG::StaticGraphic(ICON_OFFSET, ICON_OFFSET, SHIP_ICON_SZ, SHIP_ICON_SZ, - ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / (design_name + ".png")), - GG::GR_FITGRAPHIC); + /*ClientUI::ShipIcon(design_name)*/ ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / (design_name + ".png")), GG::GR_FITGRAPHIC); AttachChild(m_ship_icon); } @@ -207,6 +215,7 @@ StatisticIcon* m_damage_stat; GG::StaticGraphic* m_colonizer_icon; bool m_selected; + boost::signals::connection m_ship_connection; }; struct FleetRow : public GG::ListBox::Row @@ -308,11 +317,16 @@ ClientUI::TextColor(), 0, 0, true, false); AttachChild(m_num_ships_stat); AttachChild(m_fleet_strength_stat); - GG::Connect(m_fleet->StateChangedSignal, &FleetDataPanel::Refresh, this); + m_fleet_connection = GG::Connect(m_fleet->StateChangedSignal, &FleetDataPanel::Refresh, this); } Refresh(); } + +FleetDataPanel::~FleetDataPanel() +{ + m_fleet_connection.disconnect(); +} bool FleetDataPanel::Selected() const { @@ -423,7 +437,7 @@ } else { design_name = "Scout"; } - icon = ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / (design_name + ".png")); + icon = ClientUI::ShipIcon(design_name); } } else { // the "new fleet" data panel icon = ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / "newfleet.png"); @@ -495,6 +509,7 @@ { public: FleetDetailPanel(Fleet* fleet, bool read_only, Uint32 flags = 0); ///< ctor + ~FleetDetailPanel(); Fleet* GetFleet() const {return m_fleet;} ///< returns the currently-displayed fleet (may be 0) @@ -516,6 +531,8 @@ Fleet* m_fleet; const bool m_read_only; boost::signals::connection m_fleet_connection; + std::set<boost::signals::connection> + m_misc_connections; GG::TextControl* m_destination_text; ShipsListBox* m_ships_lb; @@ -735,12 +752,23 @@ m_destination_text->SetMinSize(false); m_ship_status_text->SetMinSize(false); - SetFleet(fleet); + if (fleet) SetFleet(fleet); Init(); - GG::Connect(GetUniverse().UniverseObjectDeleteSignal, &FleetDetailPanel::UniverseObjectDeleted, this); + m_misc_connections.insert(GG::Connect(GetUniverse().UniverseObjectDeleteSignal, &FleetDetailPanel::UniverseObjectDeleted, this)); } +FleetDetailPanel::~FleetDetailPanel() +{ + if (m_fleet) { + m_fleet_connection.disconnect(); + } + while (!m_misc_connections.empty()) { + m_misc_connections.begin()->disconnect(); + m_misc_connections.erase(m_misc_connections.begin()); + } +} + int FleetDetailPanel::GetShipIDOfListRow(int row_idx) const { return dynamic_cast<ShipRow&>(m_ships_lb->GetRow(row_idx)).ShipID(); @@ -749,25 +777,33 @@ void FleetDetailPanel::SetFleet(Fleet* fleet) { Fleet* old_fleet = m_fleet; - if (fleet != old_fleet) + + if (old_fleet && old_fleet != fleet) { m_fleet_connection.disconnect(); + } + *m_destination_text << ""; *m_ship_status_text << ""; m_ships_lb->Clear(); m_ships_lb->SetFleet(fleet); - if ((m_fleet = fleet)) { + + m_fleet = fleet; + + if (m_fleet) { Universe& universe = GetUniverse(); + if (m_fleet->NumShips()) { - for (Fleet::const_iterator it = m_fleet->begin(); it != m_fleet->end(); ++it) { + for (Fleet::const_iterator it = m_fleet->begin(); it != m_fleet->end(); ++it) m_ships_lb->Insert(new ShipRow(universe.Object<Ship>(*it))); - } + } else { PanelEmptySignal(m_fleet); - return; // return immediately, since the signal above may invalidate this + return; // return immediately, since PanelEmptySignal may invalidate this pointer } + *m_destination_text << DestinationText(); - if (fleet != old_fleet) { - m_fleet_connection.disconnect(); + + if (old_fleet != fleet) { m_fleet_connection = GG::Connect(m_fleet->StateChangedSignal, &FleetDetailPanel::Refresh, this); } } @@ -791,9 +827,9 @@ GetLayout()->SetRowStretch(1, 1.0); GetLayout()->SetMinimumRowHeight(2, 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); + m_misc_connections.insert(GG::Connect(m_ships_lb->SelChangedSignal, &FleetDetailPanel::ShipSelectionChanged, this)); + m_misc_connections.insert(GG::Connect(m_ships_lb->BrowsedSignal, &FleetDetailPanel::ShipBrowsed, this)); + m_misc_connections.insert(GG::Connect(m_ships_lb->RightClickedSignal, &FleetDetailPanel::ShipRightClicked, this)); } void FleetDetailPanel::Refresh() @@ -902,11 +938,12 @@ SetMaxSize(GG::Pt(Width(), MaxSize().y)); SetText(TitleText()); EnableChildClipping(false); - GG::Connect(m_fleet_panel->PanelEmptySignal, PanelEmptySignal); + m_panel_empty_connection = GG::Connect(m_fleet_panel->PanelEmptySignal, PanelEmptySignal); } FleetDetailWnd::~FleetDetailWnd() { + m_panel_empty_connection.disconnect(); ClosingSignal(m_fleet_panel->GetFleet()); } @@ -977,23 +1014,40 @@ EnableChildClipping(false); Init(fleets, selected_fleet); - GG::Connect(GetUniverse().UniverseObjectDeleteSignal, &FleetWnd::UniverseObjectDeleted, this); + m_misc_connections.insert(GG::Connect(GetUniverse().UniverseObjectDeleteSignal, &FleetWnd::UniverseObjectDeleted, this)); if (const System* system = fleets.back()->GetSystem()) - m_system_changed_connection = Connect(system->StateChangedSignal, &FleetWnd::SystemChangedSlot, this); + m_misc_connections.insert(Connect(system->StateChangedSignal, &FleetWnd::SystemChangedSlot, this)); SetMaxSize(GG::Pt(Width(), MaxSize().y)); } FleetWnd::~FleetWnd() { + // disconnect all signals connect to the FleetWnd itself + while (!m_misc_connections.empty()) { + m_misc_connections.begin()->disconnect(); + m_misc_connections.erase(m_misc_connections.begin()); + } + // disconnect all signals attached to FleetDetailWnds + while (!m_open_fleet_detail_wnd_connections.empty()) { + m_open_fleet_detail_wnd_connections.begin()->second.disconnect(); + m_open_fleet_detail_wnd_connections.erase(m_open_fleet_detail_wnd_connections.begin()); + } + //std::multimap<FleetDetailWnd*, boost::signals::connection>::iterator sig_it = m_open_fleet_detail_wnd_connections.begin(); + //while (sig_it != m_open_fleet_detail_wnd_connections.end()) { + // sig_it->second.disconnect(); + // m_open_fleet_detail_wnd_connections.erase(sig_it); + // sig_it = m_open_fleet_detail_wnd_connections.begin(); + //} + ClientUI::GetClientUI()->GetMapWnd()->SetProjectedFleetMovement(0, std::list<System*>()); } void FleetWnd::CloseClicked() { s_last_position = UpperLeft(); - m_lb_delete_connection.disconnect(); + for (std::map<Fleet*, FleetDetailWnd*>::iterator it = m_open_fleet_detail_wnds.begin(); it != m_open_fleet_detail_wnds.end(); ++it) { delete it->second; } @@ -1031,13 +1085,13 @@ } GetLayout()->SetBorderMargin(7); - GG::Connect(m_fleet_detail_panel->PanelEmptySignal, &FleetWnd::DeleteFleet, this); - GG::Connect(m_fleets_lb->SelChangedSignal, &FleetWnd::FleetSelectionChanged, this); - GG::Connect(m_fleets_lb->RightClickedSignal, &FleetWnd::FleetRightClicked, this); - GG::Connect(m_fleets_lb->DoubleClickedSignal, &FleetWnd::FleetDoubleClicked, this); - m_lb_delete_connection = GG::Connect(m_fleets_lb->ErasedSignal, &FleetWnd::FleetDeleted, this); + m_misc_connections.insert(GG::Connect(m_fleet_detail_panel->PanelEmptySignal, &FleetWnd::DeleteFleet, this)); + m_misc_connections.insert(GG::Connect(m_fleets_lb->SelChangedSignal, &FleetWnd::FleetSelectionChanged, this)); + m_misc_connections.insert(GG::Connect(m_fleets_lb->RightClickedSignal, &FleetWnd::FleetRightClicked, this)); + m_misc_connections.insert(GG::Connect(m_fleets_lb->DoubleClickedSignal, &FleetWnd::FleetDoubleClicked, this)); + m_misc_connections.insert(GG::Connect(m_fleets_lb->ErasedSignal, &FleetWnd::FleetDeleted, this)); if (!m_read_only) - GG::Connect(m_new_fleet_drop_target->NewFleetFromShipsSignal, &FleetWnd::CreateNewFleetFromDrops, this); + m_misc_connections.insert(GG::Connect(m_new_fleet_drop_target->NewFleetFromShipsSignal, &FleetWnd::CreateNewFleetFromDrops, this)); SetText(TitleText()); @@ -1155,17 +1209,20 @@ int num_open_windows = m_open_fleet_detail_wnds.size(); GG::Pt window_posn(std::max(0, 25 + LowerRight().x + num_open_windows * 25), std::max(0, UpperLeft().y + num_open_windows * 25)); if (!m_open_fleet_detail_wnds[row_fleet]) { - FleetDetailWnd* fleet_wnd = new FleetDetailWnd(window_posn.x, window_posn.y, row_fleet, m_read_only); - m_open_fleet_detail_wnds[row_fleet] = fleet_wnd; - if (GG::GUI::GetGUI()->AppWidth() < fleet_wnd->LowerRight().x) - window_posn.x = GG::GUI::GetGUI()->AppWidth() - fleet_wnd->Width(); - if (GG::GUI::GetGUI()->AppHeight() < fleet_wnd->LowerRight().y) - window_posn.y = GG::GUI::GetGUI()->AppHeight() - fleet_wnd->Height(); - fleet_wnd->MoveTo(window_posn); - m_open_fleet_detail_wnd_connections[fleet_wnd] = - GG::Connect(fleet_wnd->ClosingSignal, &FleetWnd::FleetDetailWndClosing, this); - GG::Connect(fleet_wnd->PanelEmptySignal, &FleetWnd::DeleteFleet, this); - GG::GUI::GetGUI()->Register(fleet_wnd); + FleetDetailWnd* fleet_detail_wnd = new FleetDetailWnd(window_posn.x, window_posn.y, row_fleet, m_read_only); + m_open_fleet_detail_wnds[row_fleet] = fleet_detail_wnd; + if (GG::GUI::GetGUI()->AppWidth() < fleet_detail_wnd->LowerRight().x) + window_posn.x = GG::GUI::GetGUI()->AppWidth() - fleet_detail_wnd->Width(); + if (GG::GUI::GetGUI()->AppHeight() < fleet_detail_wnd->LowerRight().y) + window_posn.y = GG::GUI::GetGUI()->AppHeight() - fleet_detail_wnd->Height(); + fleet_detail_wnd->MoveTo(window_posn); + + m_open_fleet_detail_wnd_connections.insert(std::pair<FleetDetailWnd*, boost::signals::connection>( + fleet_detail_wnd, GG::Connect(fleet_detail_wnd->ClosingSignal, &FleetWnd::FleetDetailWndClosing, this))); + m_open_fleet_detail_wnd_connections.insert(std::pair<FleetDetailWnd*, boost::signals::connection>( + fleet_detail_wnd, GG::Connect(fleet_detail_wnd->PanelEmptySignal, &FleetWnd::DeleteFleet, this))); + + GG::GUI::GetGUI()->Register(fleet_detail_wnd); } } @@ -1206,9 +1263,19 @@ std::map<Fleet*, FleetDetailWnd*>::iterator it = m_open_fleet_detail_wnds.find(fleet); if (it != m_open_fleet_detail_wnds.end()) { - m_open_fleet_detail_wnd_connections[it->second].disconnect(); + + // disconnect all signals attached to this FleetDetailWnd + // find first signal... + std::multimap<FleetDetailWnd*, boost::signals::connection>::iterator sig_it = m_open_fleet_detail_wnd_connections.find(it->second); + while (sig_it != m_open_fleet_detail_wnd_connections.end()) { + // disconnect and remove from map + sig_it->second.disconnect(); + m_open_fleet_detail_wnd_connections.erase(sig_it); + // find next signal, if present, until all signals disconnected and removed + sig_it = m_open_fleet_detail_wnd_connections.find(it->second); + } + delete it->second; - m_open_fleet_detail_wnd_connections.erase(it->second); m_open_fleet_detail_wnds.erase(it); } NotShowingFleetSignal(fleet); @@ -1253,7 +1320,7 @@ HumanClientApp::GetApp()->Orders().IssueOrder(new NewFleetOrder(empire_id, fleet_name, new_fleet_id, system->ID(), ship_ids)); System::ObjectVec fleets = system->FindObjectsInOrbit(-1, StationaryFleetVisitor(empire_id)); for (unsigned int i = 0; i < fleets.size(); ++i) { - if (fleets[i]->Name() == fleet_name) { + if (fleets[i]->ID() == new_fleet_id) { new_fleet = universe_object_cast<Fleet*>(fleets[i]); break; } @@ -1284,10 +1351,15 @@ for (std::map<Fleet*, FleetDetailWnd*>::iterator it = m_open_fleet_detail_wnds.begin(); it != m_open_fleet_detail_wnds.end(); ++it) { if (it->first == fleet) { - m_open_fleet_detail_wnd_connections[it->second].disconnect(); - delete it->second; - m_open_fleet_detail_wnd_connections.erase(it->second); + FleetDetailWnd* fleet_detail_wnd = it->second; + std::multimap<FleetDetailWnd*, boost::signals::connection>::iterator sig_it = m_open_fleet_detail_wnd_connections.find(fleet_detail_wnd); + while (sig_it != m_open_fleet_detail_wnd_connections.end()) { + sig_it->second.disconnect(); + m_open_fleet_detail_wnd_connections.erase(sig_it); + sig_it = m_open_fleet_detail_wnd_connections.find(fleet_detail_wnd); + } m_open_fleet_detail_wnds.erase(it); + delete fleet_detail_wnd; break; } } Modified: trunk/FreeOrion/UI/FleetWnd.h =================================================================== --- trunk/FreeOrion/UI/FleetWnd.h 2007-03-18 06:19:21 UTC (rev 2030) +++ trunk/FreeOrion/UI/FleetWnd.h 2007-03-19 15:11:34 UTC (rev 2031) @@ -14,11 +14,7 @@ class Ship; class System; class UniverseObject; -namespace GG { - class TextControl; -} - class FleetDetailWnd : public CUIWnd { public: @@ -45,6 +41,8 @@ private: std::string TitleText() const; + boost::signals::connection m_panel_empty_connection; + FleetDetailPanel* m_fleet_panel; }; @@ -114,16 +112,15 @@ int m_current_fleet; std::map<Fleet*, FleetDetailWnd*> m_open_fleet_detail_wnds; - std::map<FleetDetailWnd*, boost::signals::connection> m_open_fleet_detail_wnd_connections; + std::multimap<FleetDetailWnd*, boost::signals::connection> m_open_fleet_detail_wnd_connections; + std::set<boost::signals::connection> m_misc_connections; + FleetsListBox* m_fleets_lb; FleetDataPanel* m_new_fleet_drop_target; FleetDetailPanel* m_fleet_detail_panel; - boost::signals::connection m_lb_delete_connection; - boost::signals::connection m_system_changed_connection; - std::vector<boost::signals::connection> m_misc_connections; - + static GG::Pt s_last_position; ///< the latest position to which any FleetWnd has been moved. This is used to keep the place of the fleet window in single-fleetwindow mode. }; |
From: <geo...@us...> - 2007-03-23 08:55:37
|
Revision: 2034 http://svn.sourceforge.net/freeorion/revision/?rev=2034&view=rev Author: geoffthemedio Date: 2007-03-23 01:55:38 -0700 (Fri, 23 Mar 2007) Log Message: ----------- More fixes of Boost signals-related crashes on Linux. This time in ProductionWnd, BuildDesignatorWnd and various InfoPanels. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp trunk/FreeOrion/UI/BuildDesignatorWnd.h trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/InfoPanels.h trunk/FreeOrion/UI/ProductionWnd.cpp trunk/FreeOrion/UI/ProductionWnd.h Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2007-03-22 18:18:17 UTC (rev 2033) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2007-03-23 08:55:38 UTC (rev 2034) @@ -41,6 +41,7 @@ { public: BuildDetailPanel(int w, int h); + ~BuildDetailPanel(); int QueueIndexShown() const; virtual void Render(); void SelectedBuildLocation(int location); @@ -76,7 +77,7 @@ CUIMultiEdit* m_description_box; GG::StaticGraphic* m_item_graphic; - boost::signals::connection m_num_items_to_build_connect; + std::set<boost::signals::connection> m_misc_connections; }; BuildDesignatorWnd::BuildDetailPanel::BuildDetailPanel(int w, int h) : @@ -108,9 +109,9 @@ m_item_graphic = 0; - GG::Connect(m_recenter_button->ClickedSignal, &BuildDesignatorWnd::BuildDetailPanel::CenterClickedSlot, this); - GG::Connect(m_add_to_queue_button->ClickedSignal, &BuildDesignatorWnd::BuildDetailPanel::AddToQueueClickedSlot, this); - m_num_items_to_build_connect = GG::Connect(m_num_items_to_build->ValueChangedSignal, &BuildDesignatorWnd::BuildDetailPanel::ItemsToBuildChangedSlot, this); + m_misc_connections.insert(GG::Connect(m_recenter_button->ClickedSignal, &BuildDesignatorWnd::BuildDetailPanel::CenterClickedSlot, this)); + m_misc_connections.insert(GG::Connect(m_add_to_queue_button->ClickedSignal, &BuildDesignatorWnd::BuildDetailPanel::AddToQueueClickedSlot, this)); + m_misc_connections.insert(GG::Connect(m_num_items_to_build->ValueChangedSignal, &BuildDesignatorWnd::BuildDetailPanel::ItemsToBuildChangedSlot, this)); AttachChild(m_item_name_text); AttachChild(m_cost_text); @@ -122,6 +123,15 @@ AttachChild(m_description_box); } +BuildDesignatorWnd::BuildDetailPanel::~BuildDetailPanel() +{ + // disconnect all signals + while (!m_misc_connections.empty()) { + m_misc_connections.begin()->disconnect(); + m_misc_connections.erase(m_misc_connections.begin()); + } +} + int BuildDesignatorWnd::BuildDetailPanel::QueueIndexShown() const { return m_queue_idx; @@ -190,14 +200,11 @@ m_num_items_to_build_label->Show(); m_build_location_name_text->Show(); m_recenter_button->Disable(!DisplayingQueueItem()); - m_num_items_to_build_connect.disconnect(); m_num_items_to_build->SetValue(1); Empire* empire = Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); - if (!empire) { - m_num_items_to_build_connect = GG::Connect(m_num_items_to_build->ValueChangedSignal, &BuildDesignatorWnd::BuildDetailPanel::ItemsToBuildChangedSlot, this); + if (!empire) return; - } const ProductionQueue& queue = empire->GetProductionQueue(); if (static_cast<int>(queue.size()) <= m_queue_idx) { @@ -220,8 +227,6 @@ ConfigureForNewBuildView(); } - m_num_items_to_build_connect = GG::Connect(m_num_items_to_build->ValueChangedSignal, &BuildDesignatorWnd::BuildDetailPanel::ItemsToBuildChangedSlot, this); - CheckBuildability(); using boost::io::str; @@ -358,6 +363,7 @@ { public: BuildSelector(int w, int h); + ~BuildSelector(); virtual void MinimizeClicked(); @@ -385,6 +391,8 @@ std::map<GG::ListBox::Row*, BuildType> m_build_types; GG::Pt m_original_ul; + std::set<boost::signals::connection> m_misc_connections; + friend struct PopulateListFunctor; }; @@ -408,18 +416,18 @@ for (BuildType i = BuildType(BT_NOT_BUILDING + 1); i < NUM_BUILD_TYPES; i = BuildType(i + 1)) { CUIButton* button = new CUIButton(0, 0, 1, UserString("PRODUCTION_WND_CATEGORY_" + boost::lexical_cast<std::string>(i))); button_height = button->Height(); - GG::Connect(button->ClickedSignal, CategoryClickedFunctor(i, *this)); + m_misc_connections.insert(GG::Connect(button->ClickedSignal, CategoryClickedFunctor(i, *this))); m_build_category_buttons.push_back(button); layout->Add(button, 0, i - (BT_NOT_BUILDING + 1)); } CUIButton* button = new CUIButton(0, 0, 1, UserString("ALL")); button_height = button->Height(); - GG::Connect(button->ClickedSignal, CategoryClickedFunctor(NUM_BUILD_TYPES, *this)); + m_misc_connections.insert(GG::Connect(button->ClickedSignal, CategoryClickedFunctor(NUM_BUILD_TYPES, *this))); m_build_category_buttons.push_back(button); layout->Add(button, 0, NUM_BUILD_TYPES - (BT_NOT_BUILDING + 1)); m_buildable_items = new BuildableItemsListBox(0, 0, 1, 1); - GG::Connect(m_buildable_items->SelChangedSignal, &BuildDesignatorWnd::BuildSelector::BuildItemSelected, this); - GG::Connect(m_buildable_items->DoubleClickedSignal, &BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked, this); + m_misc_connections.insert(GG::Connect(m_buildable_items->SelChangedSignal, &BuildDesignatorWnd::BuildSelector::BuildItemSelected, this)); + m_misc_connections.insert(GG::Connect(m_buildable_items->DoubleClickedSignal, &BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked, this)); m_buildable_items->SetStyle(GG::LB_NOSORT | GG::LB_SINGLESEL); layout->Add(m_buildable_items, 1, 0, 1, layout->Columns()); layout->SetMinimumRowHeight(0, button_height); @@ -429,6 +437,15 @@ PopulateList(m_current_build_type, false); } +BuildDesignatorWnd::BuildSelector::~BuildSelector() +{ + // disconnect all signals + while (!m_misc_connections.empty()) { + m_misc_connections.begin()->disconnect(); + m_misc_connections.erase(m_misc_connections.begin()); + } +} + void BuildDesignatorWnd::BuildSelector::MinimizeClicked() { if (!m_minimized) { @@ -639,12 +656,12 @@ m_side_panel = new SidePanel(Width() - MapWnd::SIDE_PANEL_WIDTH, 0, MapWnd::SIDE_PANEL_WIDTH, GG::GUI::GetGUI()->AppHeight()); m_side_panel->Hide(); - GG::Connect(m_build_detail_panel->RequestBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this); - GG::Connect(m_build_detail_panel->BuildQuantityChangedSignal, BuildQuantityChangedSignal); - GG::Connect(m_build_selector->DisplayBuildItemSignal, &BuildDesignatorWnd::BuildDetailPanel::SetBuildItem, m_build_detail_panel); - GG::Connect(m_build_selector->RequestBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this); - GG::Connect(m_side_panel->PlanetSelectedSignal, &BuildDesignatorWnd::SelectPlanet, this); - GG::Connect(m_side_panel->SystemSelectedSignal, SystemSelectedSignal); + m_misc_connections.insert(GG::Connect(m_build_detail_panel->RequestBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this)); + m_misc_connections.insert(GG::Connect(m_build_detail_panel->BuildQuantityChangedSignal, BuildQuantityChangedSignal)); + m_misc_connections.insert(GG::Connect(m_build_selector->DisplayBuildItemSignal, &BuildDesignatorWnd::BuildDetailPanel::SetBuildItem, m_build_detail_panel)); + m_misc_connections.insert(GG::Connect(m_build_selector->RequestBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this)); + m_misc_connections.insert(GG::Connect(m_side_panel->PlanetSelectedSignal, &BuildDesignatorWnd::SelectPlanet, this)); + m_misc_connections.insert(GG::Connect(m_side_panel->SystemSelectedSignal, SystemSelectedSignal)); m_map_view_hole = GG::Rect(0, 0, CHILD_WIDTHS + SidePanel::MAX_PLANET_DIAMETER, h); @@ -653,6 +670,15 @@ AttachChild(m_side_panel); } +BuildDesignatorWnd::~BuildDesignatorWnd() +{ + // disconnect all signals + while (!m_misc_connections.empty()) { + m_misc_connections.begin()->disconnect(); + m_misc_connections.erase(m_misc_connections.begin()); + } +} + bool BuildDesignatorWnd::InWindow(const GG::Pt& pt) const { GG::Rect clip_rect = m_map_view_hole + UpperLeft(); Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.h =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.h 2007-03-22 18:18:17 UTC (rev 2033) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.h 2007-03-23 08:55:38 UTC (rev 2034) @@ -25,6 +25,7 @@ /** \name Structors */ //@{ BuildDesignatorWnd(int w, int h); + ~BuildDesignatorWnd(); //@} /** \name Accessors */ //@{ @@ -61,6 +62,8 @@ int m_build_location; GG::Rect m_map_view_hole; std::map<int, int> m_system_default_planets; + + std::set<boost::signals::connection> m_misc_connections; }; #endif // _BuildDesignatorWnd_h_ Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-03-22 18:18:17 UTC (rev 2033) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-03-23 08:55:38 UTC (rev 2034) @@ -42,7 +42,7 @@ m_expand_button->SetUnpressedGraphic(GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrownormal.png" ), 0, 0, 32, 32)); m_expand_button->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowclicked.png" ), 0, 0, 32, 32)); m_expand_button->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowmouseover.png"), 0, 0, 32, 32)); - GG::Connect(m_expand_button->ClickedSignal, &PopulationPanel::ExpandCollapseButtonPressed, this); + m_misc_connections.insert(GG::Connect(m_expand_button->ClickedSignal, &PopulationPanel::ExpandCollapseButtonPressed, this)); int icon_size = ClientUI::Pts()*4/3; @@ -76,6 +76,12 @@ PopulationPanel::~PopulationPanel() { + // disconnect all signals + while (!m_misc_connections.empty()) { + m_misc_connections.begin()->disconnect(); + m_misc_connections.erase(m_misc_connections.begin()); + } + // manually delete all pointed-to controls that may or may not be attached as a child window at time of deletion delete m_pop_stat; delete m_health_stat; @@ -298,7 +304,7 @@ m_expand_button->SetUnpressedGraphic(GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrownormal.png" ), 0, 0, 32, 32)); m_expand_button->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowclicked.png" ), 0, 0, 32, 32)); m_expand_button->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowmouseover.png"), 0, 0, 32, 32)); - GG::Connect(m_expand_button->ClickedSignal, &ResourcePanel::ExpandCollapseButtonPressed, this); + m_misc_connections.insert(GG::Connect(m_expand_button->ClickedSignal, &ResourcePanel::ExpandCollapseButtonPressed, this)); int icon_size = ClientUI::Pts()*4/3; @@ -389,8 +395,8 @@ AttachChild(m_secondary_focus_drop); - GG::Connect(m_primary_focus_drop->SelChangedSignal, &ResourcePanel::PrimaryFocusDropListSelectionChanged, this); - GG::Connect(m_secondary_focus_drop->SelChangedSignal, &ResourcePanel::SecondaryFocusDropListSelectionChanged, this); + m_misc_connections.insert(GG::Connect(m_primary_focus_drop->SelChangedSignal, &ResourcePanel::PrimaryFocusDropListSelectionChanged, this)); + m_misc_connections.insert(GG::Connect(m_secondary_focus_drop->SelChangedSignal, &ResourcePanel::SecondaryFocusDropListSelectionChanged, this)); // resource indicators m_farming_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "farming.png").native_file_string(), GG::CLR_WHITE, @@ -469,6 +475,12 @@ ResourcePanel::~ResourcePanel() { + // disconnect all signals + while (!m_misc_connections.empty()) { + m_misc_connections.begin()->disconnect(); + m_misc_connections.erase(m_misc_connections.begin()); + } + // manually delete all pointed-to controls that may or may not be attached as a child window at time of deletion delete m_farming_stat; delete m_mining_stat; @@ -946,7 +958,7 @@ m_expand_button->SetUnpressedGraphic(GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrownormal.png" ), 0, 0, 32, 32)); m_expand_button->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowclicked.png" ), 0, 0, 32, 32)); m_expand_button->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowmouseover.png"), 0, 0, 32, 32)); - GG::Connect(m_expand_button->ClickedSignal, &BuildingsPanel::ExpandCollapseButtonPressed, this); + m_misc_connections.insert(GG::Connect(m_expand_button->ClickedSignal, &BuildingsPanel::ExpandCollapseButtonPressed, this)); // get owners, connect their production queue changed signals to update this panel const std::set<int>& owners = plt.Owners(); @@ -954,7 +966,7 @@ const Empire* empire = Empires().Lookup(*it); if (!empire) continue; // shouldn't be a problem... maybe put check for it later const ProductionQueue& queue = empire->GetProductionQueue(); - GG::Connect(queue.ProductionQueueChangedSignal, &BuildingsPanel::Refresh, this); + m_misc_connections.insert(GG::Connect(queue.ProductionQueueChangedSignal, &BuildingsPanel::Refresh, this)); } Refresh(); @@ -962,6 +974,12 @@ BuildingsPanel::~BuildingsPanel() { + // disconnect all signals + while (!m_misc_connections.empty()) { + m_misc_connections.begin()->disconnect(); + m_misc_connections.erase(m_misc_connections.begin()); + } + // delete building indicators for (std::vector<BuildingIndicator*>::iterator it = m_building_indicators.begin(); it != m_building_indicators.end(); ++it) delete *it; m_building_indicators.clear(); Modified: trunk/FreeOrion/UI/InfoPanels.h =================================================================== --- trunk/FreeOrion/UI/InfoPanels.h 2007-03-22 18:18:17 UTC (rev 2033) +++ trunk/FreeOrion/UI/InfoPanels.h 2007-03-23 08:55:38 UTC (rev 2034) @@ -71,6 +71,8 @@ GG::Button* m_expand_button; ///< at top right of panel, toggles the panel open/closed to show details or minimal summary + std::set<boost::signals::connection> m_misc_connections; + static std::map<int, bool> s_expanded_map; ///< map indexed by popcenter ID indicating whether the PopulationPanel for each object is expanded (true) or collapsed (false) }; @@ -137,6 +139,8 @@ GG::Button* m_expand_button; ///< at top right of panel, toggles the panel open/closed to show details or minimal summary + std::set<boost::signals::connection> m_misc_connections; + static std::map<int, bool> s_expanded_map; ///< map indexed by popcenter ID indicating whether the PopulationPanel for each object is expanded (true) or collapsed (false) }; @@ -184,6 +188,8 @@ GG::Button* m_expand_button; ///< at top right of panel, toggles the panel open/closed to show details or minimal summary + std::set<boost::signals::connection> m_misc_connections; + static std::map<int, bool> s_expanded_map; ///< map indexed by planet ID indicating whether the BuildingsPanel for each object is expanded (true) or collapsed (false) }; Modified: trunk/FreeOrion/UI/ProductionWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ProductionWnd.cpp 2007-03-22 18:18:17 UTC (rev 2033) +++ trunk/FreeOrion/UI/ProductionWnd.cpp 2007-03-23 08:55:38 UTC (rev 2034) @@ -231,20 +231,27 @@ EnableChildClipping(true); - GG::Connect(m_build_designator_wnd->AddBuildToQueueSignal, &ProductionWnd::AddBuildToQueueSlot, this); - GG::Connect(m_build_designator_wnd->BuildQuantityChangedSignal, &ProductionWnd::ChangeBuildQuantitySlot, this); - GG::Connect(m_build_designator_wnd->SystemSelectedSignal, SystemSelectedSignal); - GG::Connect(m_queue_lb->ErasedSignal, &ProductionWnd::QueueItemDeletedSlot, this); - GG::Connect(m_queue_lb->LeftClickedSignal, &ProductionWnd::QueueItemClickedSlot, this); - GG::Connect(m_queue_lb->DoubleClickedSignal, &ProductionWnd::QueueItemDoubleClickedSlot, this); + m_misc_connections.insert(GG::Connect(m_build_designator_wnd->AddBuildToQueueSignal, &ProductionWnd::AddBuildToQueueSlot, this)); + m_misc_connections.insert(GG::Connect(m_build_designator_wnd->BuildQuantityChangedSignal, &ProductionWnd::ChangeBuildQuantitySlot, this)); + m_misc_connections.insert(GG::Connect(m_build_designator_wnd->SystemSelectedSignal, SystemSelectedSignal)); + m_misc_connections.insert(GG::Connect(m_queue_lb->ErasedSignal, &ProductionWnd::QueueItemDeletedSlot, this)); + m_misc_connections.insert(GG::Connect(m_queue_lb->LeftClickedSignal, &ProductionWnd::QueueItemClickedSlot, this)); + m_misc_connections.insert(GG::Connect(m_queue_lb->DoubleClickedSignal, &ProductionWnd::QueueItemDoubleClickedSlot, this)); AttachChild(m_production_info_panel); AttachChild(m_queue_lb); AttachChild(m_build_designator_wnd); } +ProductionWnd::~ProductionWnd() +{ + // disconnect all signals + while (!m_misc_connections.empty()) { + m_misc_connections.begin()->disconnect(); + m_misc_connections.erase(m_misc_connections.begin()); + } +} - bool ProductionWnd::InWindow(const GG::Pt& pt) const { GG::Rect clip_rect = m_build_designator_wnd->MapViewHole() + m_build_designator_wnd->UpperLeft(); Modified: trunk/FreeOrion/UI/ProductionWnd.h =================================================================== --- trunk/FreeOrion/UI/ProductionWnd.h 2007-03-22 18:18:17 UTC (rev 2033) +++ trunk/FreeOrion/UI/ProductionWnd.h 2007-03-23 08:55:38 UTC (rev 2034) @@ -17,6 +17,7 @@ public: /** \name Structors */ //@{ ProductionWnd(int w, int h); + ~ProductionWnd(); //@} /** \name Signal Types */ //@{ @@ -51,6 +52,8 @@ ProductionInfoPanel* m_production_info_panel; CUIListBox* m_queue_lb; BuildDesignatorWnd* m_build_designator_wnd; + + std::set<boost::signals::connection> m_misc_connections; }; #endif // _ProductionWnd_h_ |
From: <geo...@us...> - 2007-04-23 08:19:22
|
Revision: 2040 http://svn.sourceforge.net/freeorion/revision/?rev=2040&view=rev Author: geoffthemedio Date: 2007-04-23 01:19:23 -0700 (Mon, 23 Apr 2007) Log Message: ----------- -Fixed (for real) bug where zooming out on tech screen could cause crash if font size was too small. In process, made it possible to zoom out further (up to 10 ticks out now) -Added some utility functions in ClientUI for icons for buildings and ships, textures for techs, and colours for tech categories Modified Paths: -------------- trunk/FreeOrion/UI/ClientUI.cpp trunk/FreeOrion/UI/ClientUI.h trunk/FreeOrion/UI/TechTreeWnd.cpp Modified: trunk/FreeOrion/UI/ClientUI.cpp =================================================================== --- trunk/FreeOrion/UI/ClientUI.cpp 2007-04-23 02:44:35 UTC (rev 2039) +++ trunk/FreeOrion/UI/ClientUI.cpp 2007-04-23 08:19:23 UTC (rev 2040) @@ -86,9 +86,24 @@ double ClientUI::FleetButtonSize() { return GetOptionsDB().Get<double>("UI.fleet-button-size"); } double ClientUI::SystemSelectionIndicatorSize() { return GetOptionsDB().Get<double>("UI.system-selection-indicator-size"); } -// game UI windows +// misc UI windows GG::Clr ClientUI::SidePanelColor() { return GetOptionsDB().Get<StreamableColor>("UI.sidepanel-color").ToClr(); } +boost::shared_ptr<GG::Texture> ClientUI::ShipIcon(const std::string& design_name) +{ + boost::shared_ptr<GG::Texture> texture = GetTexture(ArtDir() / "icons" / (design_name + ".png")); + if (texture) return texture; + return GetTexture(ArtDir() / "icons" / "Scout.png"); +} + +boost::shared_ptr<GG::Texture> ClientUI::BuildingTexture(const BuildingType* building_type) +{ + const std::string graphic_name = building_type->Graphic(); + if (graphic_name.empty()) + return GetTexture(ArtDir() / "building_icons" / "Generic_Building.png"); + return GetTexture(ArtDir() / building_type->Graphic()); +} + // tech screen GG::Clr ClientUI::KnownTechFillColor() { return GetOptionsDB().Get<StreamableColor>("UI.known-tech").ToClr(); } GG::Clr ClientUI::KnownTechTextAndBorderColor() { return GetOptionsDB().Get<StreamableColor>("UI.known-tech-border").ToClr(); } @@ -110,6 +125,32 @@ return GG::Clr(); } +boost::shared_ptr<GG::Texture> ClientUI::CategoryIcon(const std::string& category_name) +{ + std::string icon_filename; + if (category_name == "CONSTRUCTION_CATEGORY") + icon_filename = "construction.png"; + if (category_name == "ECONOMICS_CATEGORY") + icon_filename = "economics.png"; + if (category_name == "GROWTH_CATEGORY") + icon_filename = "growth.png"; + if (category_name == "LEARNING_CATEGORY") + icon_filename = "learning.png"; + if (category_name == "PRODUCTION_CATEGORY") + icon_filename = "production.png"; + return GetTexture(ArtDir() / "tech_icons" / "categories" / icon_filename); +} + +boost::shared_ptr<GG::Texture> ClientUI::TechTexture(const std::string& tech_name) +{ + const Tech* tech = GetTechManager().GetTech(tech_name); + std::string texture_name = tech->Graphic(); + if (texture_name.empty()) { + return CategoryIcon(tech->Category()); + } + return GetTexture(ArtDir() / texture_name); +} + std::map<StarType, std::string>& ClientUI::StarTypeFilePrefixes() { static std::map<StarType, std::string> prefixes; Modified: trunk/FreeOrion/UI/ClientUI.h =================================================================== --- trunk/FreeOrion/UI/ClientUI.h 2007-04-23 02:44:35 UTC (rev 2039) +++ trunk/FreeOrion/UI/ClientUI.h 2007-04-23 08:19:23 UTC (rev 2040) @@ -28,6 +28,7 @@ class System; class Tech; class TurnProgressWnd; +class BuildingType; namespace GG { class Clr; class SubTexture; @@ -140,64 +141,74 @@ static boost::filesystem::path ArtDir(); //!< directory holding artwork static boost::filesystem::path SoundDir(); //!< directory holding sound and music - static std::string Font(); //!< The default font to use - static std::string FontBold(); //!< The default bold font to use - static std::string FontItalic(); //!< The default italic font to use - static std::string FontBoldItalic(); //!< The default bold and italic font to use - static int Pts(); //!< default point size - static std::string TitleFont(); //!< The default font to use for the window title - static int TitlePts(); //!< default point size to use for window title + static std::string Font(); //!< The default font to use + static std::string FontBold(); //!< The default bold font to use + static std::string FontItalic(); //!< The default italic font to use + static std::string FontBoldItalic(); //!< The default bold and italic font to use + static int Pts(); //!< default point size + static std::string TitleFont(); //!< The default font to use for the window title + static int TitlePts(); //!< default point size to use for window title - static GG::Clr TextColor(); //!< color of UI text + static GG::Clr TextColor(); //!< color of UI text // generic UI windows - static GG::Clr WndColor(); //!< color of a UI window - static GG::Clr WndBorderColor(); //!< color of window borders - static GG::Clr WndOuterBorderColor(); //!< color of the outermost border - static GG::Clr WndInnerBorderColor(); //!< color of the innermost border + static GG::Clr WndColor(); //!< color of a UI window + static GG::Clr WndBorderColor(); //!< color of window borders + static GG::Clr WndOuterBorderColor(); //!< color of the outermost border + static GG::Clr WndInnerBorderColor(); //!< color of the innermost border // controls - static GG::Clr CtrlColor(); //!< color of UI controls - static GG::Clr CtrlBorderColor(); + static GG::Clr CtrlColor(); //!< color of UI controls + static GG::Clr CtrlBorderColor(); - static GG::Clr ButtonColor(); + static GG::Clr ButtonColor(); - static GG::Clr StateButtonColor(); + static GG::Clr StateButtonColor(); - static GG::Clr ScrollTabColor(); - static int ScrollWidth(); + static GG::Clr ScrollTabColor(); + static int ScrollWidth(); - static GG::Clr DropDownListIntColor(); - static GG::Clr DropDownListArrowColor(); + static GG::Clr DropDownListIntColor(); + static GG::Clr DropDownListArrowColor(); - static GG::Clr EditHiliteColor(); - static GG::Clr EditIntColor(); - static GG::Clr MultieditIntColor(); + static GG::Clr EditHiliteColor(); + static GG::Clr EditIntColor(); + static GG::Clr MultieditIntColor(); - static GG::Clr StatIncrColor(); //!< used to color increasing stats text (eg "+2") - static GG::Clr StatDecrColor(); //!< used to color decreasing stats text (eg "-3") + static GG::Clr StatIncrColor(); //!< used to color increasing stats text (eg "+2") + static GG::Clr StatDecrColor(); //!< used to color decreasing stats text (eg "-3") - static int SystemIconSize(); //!< the width/height of a System/Icon at zoom = 1.0 - static double FleetButtonSize(); //!< the width/height of a FleetButton, relative to the size of a SystemIcon - static double SystemSelectionIndicatorSize(); //!< the width/height of a System Selection Indicator, relative to the size of a SystemIcon + static int SystemIconSize(); //!< the width/height of a System/Icon at zoom = 1.0 + static double FleetButtonSize(); //!< the width/height of a FleetButton, relative to the size of a SystemIcon + static double SystemSelectionIndicatorSize(); //!< the width/height of a System Selection Indicator, relative to the size of a SystemIcon - // game UI windows - static GG::Clr SidePanelColor(); + // misc UI windows + static GG::Clr SidePanelColor(); + static boost::shared_ptr<GG::Texture> + ClientUI::ShipIcon(const std::string& design_name); + static boost::shared_ptr<GG::Texture> + BuildingTexture(const BuildingType* building_type); - // tech screen - static GG::Clr KnownTechFillColor(); - static GG::Clr KnownTechTextAndBorderColor(); - static GG::Clr ResearchableTechFillColor(); - static GG::Clr ResearchableTechTextAndBorderColor(); - static GG::Clr UnresearchableTechFillColor(); - static GG::Clr UnresearchableTechTextAndBorderColor(); - static GG::Clr TechWndProgressBarBackground(); - static GG::Clr TechWndProgressBar(); - static GG::Clr CategoryColor(const std::string& category_name); + // research screen + static GG::Clr KnownTechFillColor(); + static GG::Clr KnownTechTextAndBorderColor(); + static GG::Clr ResearchableTechFillColor(); + static GG::Clr ResearchableTechTextAndBorderColor(); + static GG::Clr UnresearchableTechFillColor(); + static GG::Clr UnresearchableTechTextAndBorderColor(); + static GG::Clr TechWndProgressBarBackground(); + static GG::Clr TechWndProgressBar(); + static GG::Clr CategoryColor(const std::string& category_name); + static boost::shared_ptr<GG::Texture> + CategoryIcon(const std::string& category_name); + static boost::shared_ptr<GG::Texture> + TechTexture(const std::string& tech_name); + static std::map<StarType, std::string>& StarTypeFilePrefixes(); static std::map<StarType, std::string>& HaloStarTypeFilePrefixes(); + //!@} private: @@ -211,17 +222,17 @@ State m_state; //!< represents the screen currently being displayed - IntroScreen* m_intro_screen; //!< the intro (and main menu) screen first showed when the game starts up - MapWnd* m_map_wnd; //!< the galaxy map - PythonConsoleWnd*m_python_console; //!< the python console - TurnProgressWnd* m_turn_progress_wnd; //!< the turn progress window + IntroScreen* m_intro_screen; //!< the intro (and main menu) screen first showed when the game starts up + MapWnd* m_map_wnd; //!< the galaxy map + PythonConsoleWnd* m_python_console; //!< the python console + TurnProgressWnd* m_turn_progress_wnd; //!< the turn progress window - int m_previously_shown_system; //!< the ID of the system that was shown in the sidepanel before the last call to HideAllWindows() + int m_previously_shown_system; //!< the ID of the system that was shown in the sidepanel before the last call to HideAllWindows() - PrefixedTextures m_prefixed_textures; + PrefixedTextures m_prefixed_textures; static log4cpp::Category& s_logger; //!< log4cpp logging category - static ClientUI* s_the_UI; //!< pointer to the one and only ClientUI object + static ClientUI* s_the_UI; //!< pointer to the one and only ClientUI object }; /** temporarily disables UI sound effects, saving the old state (on or off), for later restoration upon object destruction. TempSoundDisablers Modified: trunk/FreeOrion/UI/TechTreeWnd.cpp =================================================================== --- trunk/FreeOrion/UI/TechTreeWnd.cpp 2007-04-23 02:44:35 UTC (rev 2039) +++ trunk/FreeOrion/UI/TechTreeWnd.cpp 2007-04-23 08:19:23 UTC (rev 2040) @@ -55,35 +55,9 @@ const double TECH_NAVIGATOR_ROLLOVER_BRIGHTENING_FACTOR = 1.5; - const double MIN_SCALE = 0.209715; // = 1.0/(1.25)^7 (going to scale = 0.2 crashes client) + const double MIN_SCALE = 0.1073741824; // = 1.0/(1.25)^10 const double MAX_SCALE = 1.0; - boost::shared_ptr<GG::Texture> CategoryIcon(const std::string& category_name) - { - std::string icon_filename; - if (category_name == "CONSTRUCTION_CATEGORY") - icon_filename = "construction.png"; - if (category_name == "ECONOMICS_CATEGORY") - icon_filename = "economics.png"; - if (category_name == "GROWTH_CATEGORY") - icon_filename = "growth.png"; - if (category_name == "LEARNING_CATEGORY") - icon_filename = "learning.png"; - if (category_name == "PRODUCTION_CATEGORY") - icon_filename = "production.png"; - return ClientUI::GetTexture(ClientUI::ArtDir() / "tech_icons" / "categories" / icon_filename); - } - - boost::shared_ptr<GG::Texture> TechTexture(const std::string& tech_name) - { - const Tech* tech = GetTechManager().GetTech(tech_name); - std::string texture_name = tech->Graphic(); - if (texture_name.empty()) { - return CategoryIcon(tech->Category()); - } - return ClientUI::GetTexture(ClientUI::ArtDir() / texture_name); - } - pointf Bezier(pointf* patch, double t) { pointf temp[6][6]; @@ -725,7 +699,7 @@ GG::Pt ul = m_description_box->ClientUpperLeft(), lr = m_description_box->ClientLowerRight(); int icon_size = lr.y - ul.y; int x1 = (ul.x + lr.x) / 2 - icon_size / 2; - CategoryIcon(m_tech->Category())->OrthoBlit(x1, ul.y, x1 + icon_size, lr.y, 0, false); + ClientUI::CategoryIcon(m_tech->Category())->OrthoBlit(x1, ul.y, x1 + icon_size, lr.y, 0, false); } } @@ -756,7 +730,7 @@ GG::Pt ul = TechGraphicUpperLeft(); m_tech_graphic = new GG::StaticGraphic(ul.x, ul.y, 128, 128, - TechTexture(m_tech->Name()), + ClientUI::TechTexture(m_tech->Name()), GG::GR_FITGRAPHIC | GG::GR_PROPSCALE); m_tech_graphic->Show(); m_tech_graphic->SetColor(ClientUI::CategoryColor(m_tech->Category())); @@ -851,6 +825,8 @@ GG::ListBox::Row* NewTechRow(const Tech* tech); void Reset(); + std::set<boost::signals::connection> m_row_connections; + const Tech* m_current_tech; GG::ListBox* m_lb; }; @@ -876,12 +852,18 @@ GG::ListBox::Row* retval = new GG::ListBox::Row(Width() - TECH_ROW_INDENTATION - 8 - 14, ROW_HEIGHT + 2, ""); TechControl* control = new TechControl(Width() - TECH_ROW_INDENTATION - 8 - 14, ROW_HEIGHT, tech, TECH_ROW_INDENTATION); retval->push_back(control); - GG::Connect(control->ClickedSignal, &TechTreeWnd::TechNavigator::TechClickedSlot, this); + m_row_connections.insert(GG::Connect(control->ClickedSignal, &TechTreeWnd::TechNavigator::TechClickedSlot, this)); return retval; } void TechTreeWnd::TechNavigator::Reset() { + // disconnect all signals + while (!m_row_connections.empty()) { + m_row_connections.begin()->disconnect(); + m_row_connections.erase(m_row_connections.begin()); + } + m_lb->Clear(); if (!m_current_tech) return; @@ -1105,6 +1087,8 @@ std::map<const Tech*, TechPanel*> m_techs; DependencyArcsMapsByArcType m_dependency_arcs; + std::set<boost::signals::connection> m_tech_connections; + LayoutSurface* m_layout_surface; CUIScroll* m_vscroll; CUIScroll* m_hscroll; @@ -1175,22 +1159,20 @@ m_progress_text(0), m_selected(selected) { - int name_font_pts = ClientUI::Pts() + 2; + const int FONT_PTS = std::max(static_cast<const int>(ClientUI::Pts() * m_scale + 0.5), 3); + GG::Pt UPPER_TECH_TEXT_OFFSET(4, 2); GG::Pt LOWER_TECH_TEXT_OFFSET(4, 0); GG::Pt size; if (m_tech->Type() == TT_THEORY) { size = GG::Pt(static_cast<int>(THEORY_TECH_PANEL_LAYOUT_WIDTH * m_scale + 0.5), static_cast<int>(THEORY_TECH_PANEL_LAYOUT_HEIGHT * m_scale + 0.5)); - name_font_pts += 2; - UPPER_TECH_TEXT_OFFSET += GG::Pt(2, 2); - LOWER_TECH_TEXT_OFFSET += GG::Pt(2, 4); } else if (m_tech->Type() == TT_APPLICATION) { size = GG::Pt(static_cast<int>(APPLICATION_TECH_PANEL_LAYOUT_WIDTH * m_scale + 0.5), static_cast<int>(APPLICATION_TECH_PANEL_LAYOUT_HEIGHT * m_scale + 0.5)); } else { // m_tech->Type() == TT_REFINEMENT size = GG::Pt(static_cast<int>(REFINEMENT_TECH_PANEL_LAYOUT_WIDTH * m_scale + 0.5), static_cast<int>(REFINEMENT_TECH_PANEL_LAYOUT_HEIGHT * m_scale + 0.5)); } Resize(size); - name_font_pts = static_cast<int>(name_font_pts * m_scale + 0.5); + UPPER_TECH_TEXT_OFFSET = GG::Pt(static_cast<int>(UPPER_TECH_TEXT_OFFSET.x * m_scale), static_cast<int>(UPPER_TECH_TEXT_OFFSET.y * m_scale)); LOWER_TECH_TEXT_OFFSET = GG::Pt(static_cast<int>(LOWER_TECH_TEXT_OFFSET.x * m_scale), static_cast<int>(LOWER_TECH_TEXT_OFFSET.y * m_scale)); @@ -1235,12 +1217,11 @@ } int graphic_size = size.y - static_cast<int>(PROGRESS_PANEL_BOTTOM_EXTRUSION * m_scale) - 2; - boost::shared_ptr<GG::Font> font = GG::GUI::GetGUI()->GetFont(ClientUI::Font(), name_font_pts); - m_icon = new GG::StaticGraphic(1, 1, graphic_size, graphic_size, - TechTexture(m_tech->Name()), GG::GR_FITGRAPHIC); + m_icon = new GG::StaticGraphic(1, 1, graphic_size, graphic_size, ClientUI::TechTexture(m_tech->Name()), GG::GR_FITGRAPHIC); m_icon->SetColor(ClientUI::CategoryColor(m_tech->Category())); - + boost::shared_ptr<GG::Font> font = GG::GUI::GetGUI()->GetFont(ClientUI::Font(), FONT_PTS); + int text_left = m_icon->LowerRight().x + static_cast<int>(4 * m_scale); m_tech_name_text = new GG::TextControl(text_left, UPPER_TECH_TEXT_OFFSET.y, Width() - m_icon->LowerRight().x - static_cast<int>(PROGRESS_PANEL_LEFT_EXTRUSION * m_scale), font->Lineskip(), @@ -1254,7 +1235,7 @@ cost_str = str(format(UserString("TECH_TOTAL_COST_STR")) % static_cast<int>(m_tech->ResearchCost() + 0.5) % m_tech->ResearchTurns()); m_tech_cost_text = new GG::TextControl(text_left, 0, Width() - text_left, Height() - LOWER_TECH_TEXT_OFFSET.y - static_cast<int>(PROGRESS_PANEL_BOTTOM_EXTRUSION * m_scale), - cost_str, GG::GUI::GetGUI()->GetFont(ClientUI::Font(), static_cast<int>(ClientUI::Pts() * m_scale + 0.5)), m_text_and_border_color, GG::TF_BOTTOM | GG::TF_LEFT); + cost_str, font, m_text_and_border_color, GG::TF_BOTTOM | GG::TF_LEFT); AttachChild(m_tech_cost_text); GG::Rect progress_panel = ProgressPanelRect(UpperLeft(), LowerRight()); @@ -1267,7 +1248,7 @@ progress_str = UserString("TECH_WND_TECH_INCOMPLETE"); m_progress_text = new GG::TextControl(static_cast<int>(progress_panel.ul.x - PROGRESS_PANEL_LEFT_EXTRUSION * m_scale), progress_panel.ul.y - static_cast<int>(PROGRESS_PANEL_BOTTOM_EXTRUSION * m_scale), progress_panel.Width(), progress_panel.Height(), - progress_str, GG::GUI::GetGUI()->GetFont(ClientUI::Font(), static_cast<int>(ClientUI::Pts() * m_scale + 0.5)), m_text_and_border_color); + progress_str, font, m_text_and_border_color); AttachChild(m_progress_text); EnableChildClipping(true); @@ -1549,6 +1530,11 @@ for (std::map<const Tech*, TechPanel*>::const_iterator it = m_techs.begin(); it != m_techs.end(); ++it) { delete it->second; } + // disconnect all tech signals + while (!m_tech_connections.empty()) { + m_tech_connections.begin()->disconnect(); + m_tech_connections.erase(m_tech_connections.begin()); + } m_techs.clear(); m_dependency_arcs.clear(); m_selected_tech = 0; @@ -1716,10 +1702,10 @@ m_techs[tech]->MoveTo(GG::Pt(static_cast<int>(PS2INCH(ND_coord_i(node).x) - m_techs[tech]->Width() / 2 + TECH_PANEL_MARGIN), static_cast<int>(PS2INCH(ND_coord_i(node).y) - (m_techs[tech]->Height() - PROGRESS_PANEL_BOTTOM_EXTRUSION * m_scale) / 2 + TECH_PANEL_MARGIN))); m_layout_surface->AttachChild(m_techs[tech]); - GG::Connect(m_techs[tech]->TechBrowsedSignal, &TechTreeWnd::LayoutPanel::TechBrowsedSlot, this); - GG::Connect(m_techs[tech]->TechClickedSignal, &TechTreeWnd::LayoutPanel::TechClickedSlot, this); - GG::Connect(m_techs[tech]->TechDoubleClickedSignal, &TechTreeWnd::LayoutPanel::TechDoubleClickedSlot, this); - GG::Connect(m_techs[tech]->ZoomedSignal, &TechTreeWnd::LayoutPanel::TreeZoomedSlot, this); + m_tech_connections.insert(GG::Connect(m_techs[tech]->TechBrowsedSignal, &TechTreeWnd::LayoutPanel::TechBrowsedSlot, this)); + m_tech_connections.insert(GG::Connect(m_techs[tech]->TechClickedSignal, &TechTreeWnd::LayoutPanel::TechClickedSlot, this)); + m_tech_connections.insert(GG::Connect(m_techs[tech]->TechDoubleClickedSignal, &TechTreeWnd::LayoutPanel::TechDoubleClickedSlot, this)); + m_tech_connections.insert(GG::Connect(m_techs[tech]->ZoomedSignal, &TechTreeWnd::LayoutPanel::TreeZoomedSlot, this)); for (Agedge_t* edge = agfstout(graph, node); edge; edge = agnxtout(graph, edge)) { const Tech* from = tech; |
From: <geo...@us...> - 2007-04-24 01:49:31
|
Revision: 2041 http://svn.sourceforge.net/freeorion/revision/?rev=2041&view=rev Author: geoffthemedio Date: 2007-04-23 18:48:55 -0700 (Mon, 23 Apr 2007) Log Message: ----------- -Added tech icons to tech queue panels. -Made tech queue panels resize with UI font size -Removed unnecessary ClientUI:: before declaration of ShipIcon(...) in class ClientUI definition Modified Paths: -------------- trunk/FreeOrion/UI/ClientUI.h trunk/FreeOrion/UI/ResearchWnd.cpp Modified: trunk/FreeOrion/UI/ClientUI.h =================================================================== --- trunk/FreeOrion/UI/ClientUI.h 2007-04-23 08:19:23 UTC (rev 2040) +++ trunk/FreeOrion/UI/ClientUI.h 2007-04-24 01:48:55 UTC (rev 2041) @@ -185,7 +185,7 @@ // misc UI windows static GG::Clr SidePanelColor(); static boost::shared_ptr<GG::Texture> - ClientUI::ShipIcon(const std::string& design_name); + ShipIcon(const std::string& design_name); static boost::shared_ptr<GG::Texture> BuildingTexture(const BuildingType* building_type); Modified: trunk/FreeOrion/UI/ResearchWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ResearchWnd.cpp 2007-04-23 08:19:23 UTC (rev 2040) +++ trunk/FreeOrion/UI/ResearchWnd.cpp 2007-04-24 01:48:55 UTC (rev 2041) @@ -10,6 +10,7 @@ #include "../UI/TechTreeWnd.h" #include <GG/DrawUtil.h> +#include <GG/StaticGraphic.h> #include <boost/format.hpp> #include <cmath> @@ -26,7 +27,6 @@ { QueueRow(int w, const Tech* tech_, bool in_progress, int turns_left); const Tech* const tech; - static const int HEIGHT = 64; }; ////////////////////////////////////////////////// @@ -114,22 +114,23 @@ private: void Draw(GG::Clr clr, bool fill); - const Tech* const m_tech; - GG::TextControl* m_name_text; - GG::TextControl* m_RPs_and_turns_text; - GG::TextControl* m_turns_remaining_text; - MultiTurnProgressBar* m_progress_bar; - bool m_in_progress; - int m_total_turns; - int m_turns_completed; - double m_partially_complete_turn; + const Tech* const m_tech; + GG::TextControl* m_name_text; + GG::TextControl* m_RPs_and_turns_text; + GG::TextControl* m_turns_remaining_text; + GG::StaticGraphic* m_icon; + MultiTurnProgressBar* m_progress_bar; + bool m_in_progress; + int m_total_turns; + int m_turns_completed; + double m_partially_complete_turn; }; ////////////////////////////////////////////////// // QueueRow implementation ////////////////////////////////////////////////// QueueRow::QueueRow(int w, const Tech* tech_, bool in_progress, int turns_left) : - GG::ListBox::Row(w, HEIGHT, ""), + GG::ListBox::Row(), tech(tech_) { const Empire* empire = Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); @@ -137,7 +138,11 @@ double progress = empire->ResearchStatus(tech->Name()); if (progress == -1.0) progress = 0.0; - push_back(new QueueTechPanel(w, tech_, in_progress, turns_left, static_cast<int>(progress / turn_cost), std::fmod(progress, turn_cost) / turn_cost)); + + GG::Control* panel = new QueueTechPanel(w, tech_, in_progress, turns_left, static_cast<int>(progress / turn_cost), std::fmod(progress, turn_cost) / turn_cost); + Resize(panel->Size()); + push_back(panel); + SetDragDropDataType("RESEARCH_QUEUE_ROW"); } @@ -145,35 +150,73 @@ // QueueTechPanel implementation ////////////////////////////////////////////////// QueueTechPanel::QueueTechPanel(int w, const Tech* tech, bool in_progress, int turns_left, int turns_completed, double partially_complete_turn) : - GG::Control(0, 0, w, QueueRow::HEIGHT, 0), + GG::Control(0, 0, w, 10, 0), m_tech(tech), m_in_progress(in_progress), m_total_turns(tech->ResearchTurns()), m_turns_completed(turns_completed), m_partially_complete_turn(partially_complete_turn) { - GG::Clr text_and_border = m_in_progress ? GG::LightColor(ClientUI::ResearchableTechTextAndBorderColor()) : ClientUI::ResearchableTechTextAndBorderColor(); - m_name_text = new GG::TextControl(4, 2, w - 4, QueueRow::HEIGHT - 2, UserString(tech->Name()), GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts() + 2), text_and_border, GG::TF_TOP | GG::TF_LEFT); + const int MARGIN = 2; + const int WIDTH = w - 6; // 6 pixels accounts for border + + const int FONT_PTS = ClientUI::Pts(); + const int METER_HEIGHT = FONT_PTS; + + const int HEIGHT = MARGIN + FONT_PTS + MARGIN + METER_HEIGHT + MARGIN + FONT_PTS + MARGIN + 6; + + const int GRAPHIC_SIZE = HEIGHT - 9; // 9 pixels accounts for border thickness so the sharp-cornered icon doesn't with the rounded panel corner + + const int NAME_WIDTH = w - GRAPHIC_SIZE - 2*MARGIN - 3; + const int METER_WIDTH = w - GRAPHIC_SIZE - 3*MARGIN - 3; + const int TURNS_AND_COST_WIDTH = NAME_WIDTH/2; + + Resize(GG::Pt(w, HEIGHT)); + + + GG::Clr clr = m_in_progress ? GG::LightColor(ClientUI::ResearchableTechTextAndBorderColor()) : ClientUI::ResearchableTechTextAndBorderColor(); + boost::shared_ptr<GG::Font> font = GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()); + + int top = MARGIN; + int left = MARGIN; + + + m_icon = new GG::StaticGraphic(left, top, GRAPHIC_SIZE, GRAPHIC_SIZE, ClientUI::TechTexture(m_tech->Name()), GG::GR_FITGRAPHIC); + m_icon->SetColor(ClientUI::CategoryColor(m_tech->Category())); + + left += m_icon->Width() + MARGIN; + + m_name_text = new GG::TextControl(left, top, NAME_WIDTH, FONT_PTS + 2*MARGIN, UserString(tech->Name()), font, clr, GG::TF_TOP | GG::TF_LEFT); m_name_text->ClipText(true); + + top += m_name_text->Height(); // not sure why I need two margins here... otherwise the progress bar appears over the bottom of the text + + m_progress_bar = new MultiTurnProgressBar(METER_WIDTH, METER_HEIGHT, tech->ResearchTurns(), + turns_completed, partially_complete_turn, ClientUI::TechWndProgressBar(), + ClientUI::TechWndProgressBarBackground(), clr); + m_progress_bar->MoveTo(GG::Pt(left, top)); + + top += m_progress_bar->Height() + MARGIN; + using boost::io::str; using boost::format; - const int LOWER_TEXT_Y = QueueRow::HEIGHT - (ClientUI::Pts() + 4) - 4; - m_RPs_and_turns_text = new GG::TextControl(4, LOWER_TEXT_Y, w - 8, ClientUI::Pts() + 4, - str(format(UserString("TECH_TURN_COST_STR")) % tech->ResearchCost() % tech->ResearchTurns()), - GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), text_and_border, GG::TF_LEFT); + + std::string turns_cost_text = str(format(UserString("TECH_TURN_COST_STR")) % tech->ResearchCost() % tech->ResearchTurns()); + m_RPs_and_turns_text = new GG::TextControl(left, top, TURNS_AND_COST_WIDTH, FONT_PTS + MARGIN, + turns_cost_text, font, clr, GG::TF_LEFT); + + left += TURNS_AND_COST_WIDTH; + std::string turns_left_text = turns_left < 0 ? UserString("TECH_TURNS_LEFT_NEVER") : str(format(UserString("TECH_TURNS_LEFT_STR")) % turns_left); - m_turns_remaining_text = new GG::TextControl(4, LOWER_TEXT_Y, w - 8, ClientUI::Pts() + 4, turns_left_text, GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), text_and_border, GG::TF_RIGHT); - const int PROGRESS_METER_MARGIN = 6; - const int PROGRESS_METER_WIDTH = Width() - 2 * PROGRESS_METER_MARGIN; - const int PROGRESS_METER_HEIGHT = 18; - m_progress_bar = new MultiTurnProgressBar(PROGRESS_METER_WIDTH, PROGRESS_METER_HEIGHT, tech->ResearchTurns(), - turns_completed, partially_complete_turn, ClientUI::TechWndProgressBar(), - ClientUI::TechWndProgressBarBackground(), text_and_border); - m_progress_bar->MoveTo(GG::Pt(PROGRESS_METER_MARGIN, m_RPs_and_turns_text->UpperLeft().y - 3 - PROGRESS_METER_HEIGHT)); + m_turns_remaining_text = new GG::TextControl(left, top, TURNS_AND_COST_WIDTH, FONT_PTS + MARGIN, + turns_left_text, font, clr, GG::TF_RIGHT); + m_turns_remaining_text->ClipText(true); + AttachChild(m_name_text); AttachChild(m_RPs_and_turns_text); AttachChild(m_turns_remaining_text); + AttachChild(m_icon); AttachChild(m_progress_bar); } |
From: <geo...@us...> - 2007-04-28 04:39:49
|
Revision: 2044 http://svn.sourceforge.net/freeorion/revision/?rev=2044&view=rev Author: geoffthemedio Date: 2007-04-27 21:39:47 -0700 (Fri, 27 Apr 2007) Log Message: ----------- -Made CUIWnd not render resize tabs if they aren't RESIZABLE -Made starlanes on galaxy map scale in width linearly with zoom, instead of quadratically as they were before, so that when zoomed in, lanes now look appropriately-sized, rather than huge as they did previously Modified Paths: -------------- trunk/FreeOrion/UI/CUIWnd.cpp trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/CUIWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CUIWnd.cpp 2007-04-27 10:33:53 UTC (rev 2043) +++ trunk/FreeOrion/UI/CUIWnd.cpp 2007-04-28 04:39:47 UTC (rev 2044) @@ -234,24 +234,27 @@ glColor(ClientUI::WndInnerBorderColor()); glVertex2i(cl_ul.x, cl_ul.y); glVertex2i(cl_lr.x, cl_ul.y); - glVertex2i(cl_lr.x, cl_lr.y - INNER_BORDER_ANGLE_OFFSET); - glVertex2i(cl_lr.x - INNER_BORDER_ANGLE_OFFSET, cl_lr.y); + if (m_resizable) { + glVertex2i(cl_lr.x, cl_lr.y - INNER_BORDER_ANGLE_OFFSET); + glVertex2i(cl_lr.x - INNER_BORDER_ANGLE_OFFSET, cl_lr.y); + } else { + glVertex2i(cl_lr.x, cl_lr.y); + } glVertex2i(cl_ul.x, cl_lr.y); glVertex2i(cl_ul.x, cl_ul.y); glEnd(); - glBegin(GL_LINES); - // draw the extra lines of the resize tab - if (m_resizable) { + if (m_resizable) { + glBegin(GL_LINES); + // draw the extra lines of the resize tab glColor(ClientUI::WndInnerBorderColor()); - } else { - glColor(GG::DisabledColor(ClientUI::WndInnerBorderColor())); - } - glVertex2i(cl_lr.x, cl_lr.y - RESIZE_HASHMARK1_OFFSET); - glVertex2i(cl_lr.x - RESIZE_HASHMARK1_OFFSET, cl_lr.y); - - glVertex2i(cl_lr.x, cl_lr.y - RESIZE_HASHMARK2_OFFSET); - glVertex2i(cl_lr.x - RESIZE_HASHMARK2_OFFSET, cl_lr.y); - glEnd(); + + glVertex2i(cl_lr.x, cl_lr.y - RESIZE_HASHMARK1_OFFSET); + glVertex2i(cl_lr.x - RESIZE_HASHMARK1_OFFSET, cl_lr.y); + + glVertex2i(cl_lr.x, cl_lr.y - RESIZE_HASHMARK2_OFFSET); + glVertex2i(cl_lr.x - RESIZE_HASHMARK2_OFFSET, cl_lr.y); + glEnd(); + } glEnable(GL_TEXTURE_2D); } else { GG::FlatRectangle(ul.x, ul.y, lr.x, lr.y, ClientUI::WndColor(), ClientUI::WndOuterBorderColor(), 1); Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2007-04-27 10:33:53 UTC (rev 2043) +++ trunk/FreeOrion/UI/MapWnd.cpp 2007-04-28 04:39:47 UTC (rev 2044) @@ -867,6 +867,7 @@ void MapWnd::SelectSystem(int system_id) { + Logger().errorStream() << "MapWnd::SelectSystem(" << system_id << ")"; // remove selection indicator from previously selected system int prev_system_id = m_side_panel->SystemID(); if (prev_system_id != UniverseObject::INVALID_OBJECT_ID) @@ -1108,7 +1109,7 @@ void MapWnd::RenderStarlanes() { - double LINE_SCALE = std::max(1.0, 0.666 * m_zoom_factor); + double LINE_SCALE = 3.0; //std::max(1.0, 0.666 * m_zoom_factor); double INNER_LINE_PORTION = 0.3; double INNER_LINE_WIDTH = (LINE_SCALE / 2.0) * INNER_LINE_PORTION; // these are actually half-widths in either direction double OUTER_LINE_WIDTH = (LINE_SCALE / 2.0); |
From: <geo...@us...> - 2007-04-28 10:45:28
|
Revision: 2046 http://svn.sourceforge.net/freeorion/revision/?rev=2046&view=rev Author: geoffthemedio Date: 2007-04-28 03:45:28 -0700 (Sat, 28 Apr 2007) Log Message: ----------- -Fixed up layout for TechDetailPanel -Removed some debug output from MapWnd.cpp Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/TechTreeWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2007-04-28 05:10:20 UTC (rev 2045) +++ trunk/FreeOrion/UI/MapWnd.cpp 2007-04-28 10:45:28 UTC (rev 2046) @@ -867,7 +867,6 @@ void MapWnd::SelectSystem(int system_id) { - Logger().errorStream() << "MapWnd::SelectSystem(" << system_id << ")"; // remove selection indicator from previously selected system int prev_system_id = m_side_panel->SystemID(); if (prev_system_id != UniverseObject::INVALID_OBJECT_ID) Modified: trunk/FreeOrion/UI/TechTreeWnd.cpp =================================================================== --- trunk/FreeOrion/UI/TechTreeWnd.cpp 2007-04-28 05:10:20 UTC (rev 2045) +++ trunk/FreeOrion/UI/TechTreeWnd.cpp 2007-04-28 10:45:28 UTC (rev 2046) @@ -587,11 +587,17 @@ void SizeMove(const GG::Pt& ul, const GG::Pt& lr); void Render(); void LDrag(const GG::Pt& pt, const GG::Pt& move, Uint32 keys); + + /* need to redefine this so that icons and name can be put at the top of the Wnd, rather + than being restricted to the client area of a CUIWnd */ GG::Pt ClientUpperLeft() const; void SetTech(const Tech* tech) {m_tech = tech; Reset();} private: + static const int TEXT_MARGIN_X = 3; + static const int TEXT_MARGIN_Y = 3; + GG::Pt TechGraphicUpperLeft() const; void Reset(); void DoLayout(); @@ -602,10 +608,11 @@ GG::TextControl* m_summary_text; CUIMultiEdit* m_description_box; GG::StaticGraphic* m_tech_graphic; + GG::StaticGraphic* m_category_graphic; }; TechTreeWnd::TechDetailPanel::TechDetailPanel(int w, int h) : - CUIWnd("", 0, 0, w, h, GG::CLICKABLE | GG::DRAGABLE | GG::RESIZABLE), + CUIWnd("", 1, 1, w - 1, h - 1, GG::CLICKABLE | GG::DRAGABLE | GG::RESIZABLE), m_tech(0) { const int PTS = ClientUI::Pts(); @@ -614,14 +621,15 @@ const int SUMMARY_PTS = PTS*4/3; const int DESCRIPTION_PTS = PTS; - m_tech_name_text = new GG::TextControl(0, 0, ClientWidth(), 10, "", GG::GUI::GetGUI()->GetFont(ClientUI::FontBold(), NAME_PTS), ClientUI::TextColor()); - m_cost_text = new GG::TextControl(0, 0, ClientWidth(), 10, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), COST_PTS), ClientUI::TextColor()); - m_summary_text = new GG::TextControl(0, 0, ClientWidth(), 10, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), SUMMARY_PTS), ClientUI::TextColor()); - m_description_box = new CUIMultiEdit(0, 0, ClientWidth(), 10, "", GG::TF_WORDBREAK | GG::MultiEdit::READ_ONLY); + m_tech_name_text = new GG::TextControl(0, 0, 10, 10, "", GG::GUI::GetGUI()->GetFont(ClientUI::FontBold(), NAME_PTS), ClientUI::TextColor()); + m_cost_text = new GG::TextControl(0, 0, 10, 10, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), COST_PTS), ClientUI::TextColor()); + m_summary_text = new GG::TextControl(0, 0, 10, 10, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), SUMMARY_PTS), ClientUI::TextColor()); + m_description_box = new CUIMultiEdit(0, 0, 10, 10, "", GG::TF_WORDBREAK | GG::MultiEdit::READ_ONLY); m_description_box->SetColor(GG::CLR_ZERO); m_description_box->SetInteriorColor(GG::CLR_ZERO); m_tech_graphic = 0; + m_category_graphic = 0; AttachChild(m_tech_name_text); AttachChild(m_cost_text); @@ -633,9 +641,6 @@ void TechTreeWnd::TechDetailPanel::DoLayout() { - const int USABLE_WIDTH = std::max(ClientWidth(), 1); - const int USABLE_HEIGHT = std::max(ClientHeight(), 1); - const int PTS = ClientUI::Pts(); const int NAME_PTS = PTS*3/2; const int COST_PTS = PTS; @@ -644,33 +649,37 @@ const int ICON_SIZE = 12 + NAME_PTS + COST_PTS + SUMMARY_PTS; - // name GG::Pt ul = GG::Pt(0, 0); - GG::Pt lr = ul + GG::Pt(USABLE_WIDTH, NAME_PTS + 4); + GG::Pt lr = ul + GG::Pt(Width(), NAME_PTS + 4); m_tech_name_text->SizeMove(ul, lr); // cost / turns ul += GG::Pt(0, m_tech_name_text->Height()); - lr = ul + GG::Pt(USABLE_WIDTH, COST_PTS + 4); + lr = ul + GG::Pt(Width(), COST_PTS + 4); m_cost_text->SizeMove(ul, lr); // one line summary ul += GG::Pt(0, m_cost_text->Height()); - lr = ul + GG::Pt(USABLE_WIDTH, SUMMARY_PTS + 4); + lr = ul + GG::Pt(Width(), SUMMARY_PTS + 4); m_summary_text->SizeMove(ul, lr); // main verbose description (fluff, effects, unlocks, ...) - ul = GG::Pt(0, ICON_SIZE); - lr = ul + GG::Pt(USABLE_WIDTH, USABLE_HEIGHT - ul.y); + ul = GG::Pt(1, ICON_SIZE + TEXT_MARGIN_Y + 1); + lr = ul + GG::Pt(Width() - TEXT_MARGIN_X - BORDER_RIGHT, Height() - BORDER_BOTTOM - ul.y - TEXT_MARGIN_Y); m_description_box->SizeMove(ul, lr); - // icon + // icons if (m_tech_graphic) { - ul = GG::Pt(2, 2); + ul = GG::Pt(1, 1); lr = ul + GG::Pt(ICON_SIZE, ICON_SIZE); m_tech_graphic->SizeMove(ul, lr); } + if (m_category_graphic) { + lr = GG::Pt(Width(), ICON_SIZE + 1); + ul = lr - GG::Pt(ICON_SIZE, ICON_SIZE); + m_category_graphic->SizeMove(ul, lr); + } } void TechTreeWnd::TechDetailPanel::SizeMove(const GG::Pt& ul, const GG::Pt& lr) @@ -682,17 +691,16 @@ GG::Pt TechTreeWnd::TechDetailPanel::ClientUpperLeft() const { - return UpperLeft() + GG::Pt(BORDER_LEFT, BORDER_TOP); + return GG::Wnd::UpperLeft(); } void TechTreeWnd::TechDetailPanel::Render() { - CUIWnd::Render(); - /* GG::Pt ul = UpperLeft(); GG::Pt lr = LowerRight(); - GG::Pt cl_ul = ClientUpperLeft(); - GG::Pt cl_lr = ClientLowerRight(); + const int ICON_SIZE = m_summary_text->LowerRight().y - m_tech_name_text->UpperLeft().y; + GG::Pt cl_ul = ul + GG::Pt(BORDER_LEFT, ICON_SIZE + BORDER_BOTTOM); + GG::Pt cl_lr = lr - GG::Pt(BORDER_RIGHT, BORDER_BOTTOM); // use GL to draw the lines glDisable(GL_TEXTURE_2D); @@ -738,11 +746,7 @@ glEnd(); glBegin(GL_LINES); // draw the extra lines of the resize tab - if (m_resizable) { - glColor(ClientUI::WndInnerBorderColor()); - } else { - glColor(GG::DisabledColor(ClientUI::WndInnerBorderColor())); - } + glColor(ClientUI::WndInnerBorderColor()); glVertex2i(cl_lr.x, cl_lr.y - RESIZE_HASHMARK1_OFFSET); glVertex2i(cl_lr.x - RESIZE_HASHMARK1_OFFSET, cl_lr.y); @@ -750,37 +754,6 @@ glVertex2i(cl_lr.x - RESIZE_HASHMARK2_OFFSET, cl_lr.y); glEnd(); glEnable(GL_TEXTURE_2D); - */ - GG::Pt ul = UpperLeft(); - GG::Pt lr = LowerRight(); - - // use GL to draw the lines - glDisable(GL_TEXTURE_2D); - GLint initial_modes[2]; - glGetIntegerv(GL_POLYGON_MODE, initial_modes); - // draw outer border - glPolygonMode(GL_BACK, GL_LINE); - glBegin(GL_POLYGON); - glColor(ClientUI::WndOuterBorderColor()); - glVertex2i(ul.x, ul.y); - glVertex2i(lr.x, ul.y); - glVertex2i(lr.x, lr.y); - glVertex2i(ul.x, lr.y); - glVertex2i(ul.x, ul.y); - glEnd(); - // reset this to whatever it was initially - glPolygonMode(GL_BACK, initial_modes[1]); - glEnable(GL_TEXTURE_2D); - - if (m_tech) { - GG::Clr category_color = ClientUI::CategoryColor(m_tech->Category()); - category_color.a = 127; - glColor(category_color); - GG::Pt ul = m_description_box->ClientUpperLeft(), lr = m_description_box->ClientLowerRight(); - int icon_size = lr.y - ul.y; - int x1 = (ul.x + lr.x) / 2 - icon_size / 2; - ClientUI::CategoryIcon(m_tech->Category())->OrthoBlit(x1, ul.y, x1 + icon_size, lr.y, 0, false); - } } void TechTreeWnd::TechDetailPanel::LDrag(const GG::Pt& pt, const GG::Pt& move, Uint32 keys) @@ -826,6 +799,10 @@ DeleteChild(m_tech_graphic); m_tech_graphic = 0; } + if (m_category_graphic) { + DeleteChild(m_category_graphic); + m_category_graphic = 0; + } if (!m_tech) { m_tech_name_text->SetText(""); @@ -842,6 +819,14 @@ m_tech_graphic->SetColor(ClientUI::CategoryColor(m_tech->Category())); AttachChild(m_tech_graphic); + m_category_graphic = new GG::StaticGraphic(0, 0, 10, 10, + ClientUI::CategoryIcon(m_tech->Category()), + GG::GR_FITGRAPHIC | GG::GR_PROPSCALE); + m_category_graphic->Show(); + m_category_graphic->SetColor(ClientUI::CategoryColor(m_tech->Category())); + AttachChild(m_category_graphic); + + DoLayout(); m_tech_name_text->SetText(UserString(m_tech->Name())); |
From: <geo...@us...> - 2007-06-07 06:29:05
|
Revision: 2072 http://svn.sourceforge.net/freeorion/revision/?rev=2072&view=rev Author: geoffthemedio Date: 2007-06-06 23:29:05 -0700 (Wed, 06 Jun 2007) Log Message: ----------- Made nebula scale in size with the size of their image file Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2007-06-05 19:12:01 UTC (rev 2071) +++ trunk/FreeOrion/UI/MapWnd.cpp 2007-06-07 06:29:05 UTC (rev 2072) @@ -147,7 +147,6 @@ double MapWnd::s_min_scale_factor = 0.35; double MapWnd::s_max_scale_factor = 8.0; const int MapWnd::SIDE_PANEL_WIDTH = 360; -int MapWnd::s_nebula_size = 192; MapWnd::MapWnd() : GG::Wnd(-GG::GUI::GetGUI()->AppWidth(), -GG::GUI::GetGUI()->AppHeight(), @@ -1094,13 +1093,16 @@ } for (unsigned int i = 0; i < m_nebulae.size(); ++i) { + int nebula_width = m_nebulae[i]->Width() / 3; // factor of 3 chosen to give ok-seeming nebula sizes for images in use at time of this writing + int nebula_height = m_nebulae[i]->Height() / 3; + GG::Pt ul = ClientUpperLeft() + - GG::Pt(static_cast<int>((m_nebula_centers[i].x - s_nebula_size / 2.0) * m_zoom_factor), - static_cast<int>((m_nebula_centers[i].y - s_nebula_size / 2.0) * m_zoom_factor)); + GG::Pt(static_cast<int>((m_nebula_centers[i].x - nebula_width / 2.0) * m_zoom_factor), + static_cast<int>((m_nebula_centers[i].y - nebula_height / 2.0) * m_zoom_factor)); m_nebulae[i]->OrthoBlit(ul, - ul + GG::Pt(static_cast<int>(s_nebula_size * m_zoom_factor), - static_cast<int>(s_nebula_size * m_zoom_factor)), + ul + GG::Pt(static_cast<int>(nebula_width * m_zoom_factor), + static_cast<int>(nebula_height * m_zoom_factor)), 0, false); } Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2007-06-05 19:12:01 UTC (rev 2071) +++ trunk/FreeOrion/UI/MapWnd.h 2007-06-07 06:29:05 UTC (rev 2072) @@ -229,7 +229,6 @@ static const int NUM_BACKGROUNDS; static double s_min_scale_factor; static double s_max_scale_factor; - static int s_nebula_size; // width of nebula at zoom = 1 struct FleetButtonClickedFunctor { |
From: <geo...@us...> - 2007-06-22 22:53:04
|
Revision: 2080 http://svn.sourceforge.net/freeorion/revision/?rev=2080&view=rev Author: geoffthemedio Date: 2007-06-22 15:53:05 -0700 (Fri, 22 Jun 2007) Log Message: ----------- Adjusted a few functions to hopefully reduce the number of times the buildable items list is populated needlessly Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp trunk/FreeOrion/UI/BuildDesignatorWnd.h Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2007-06-22 22:03:04 UTC (rev 2079) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2007-06-22 22:53:05 UTC (rev 2080) @@ -432,15 +432,13 @@ void Reset(bool keep_selection); - void ShowType(BuildType type); - void ShowAllTypes(); - void HideType(BuildType type); - void HideAllTypes(); + void ShowType(BuildType type, bool refresh_list = true); + void ShowAllTypes(bool refresh_list = true); + void HideType(BuildType type, bool refresh_list = true); + void HideAllTypes(bool refresh_list = true); - void ShowAvailability(bool available); - void ShowAllAvailabilities(); - void HideAvailability(bool available); - void HideAllAvailabilities(); + void ShowAvailability(bool available, bool refresh_list = true); + void HideAvailability(bool available, bool refresh_list = true); mutable boost::signal<void (BuildType, const std::string&)> DisplayNamedBuildItemSignal; mutable boost::signal<void (BuildType, const std::string&, int)> RequestNamedBuildItemSignal; @@ -616,63 +614,63 @@ DoLayout(); } -void BuildDesignatorWnd::BuildSelector::ShowType(BuildType type) +void BuildDesignatorWnd::BuildSelector::ShowType(BuildType type, bool refresh_list) { if (m_build_types_shown.find(type) == m_build_types_shown.end()) { m_build_types_shown.insert(type); - PopulateList(true); + if (refresh_list) PopulateList(true); } } -void BuildDesignatorWnd::BuildSelector::HideType(BuildType type) +void BuildDesignatorWnd::BuildSelector::HideType(BuildType type, bool refresh_list) { std::set<BuildType>::iterator it = m_build_types_shown.find(type); if (it != m_build_types_shown.end()) { m_build_types_shown.erase(it); - PopulateList(true); + if (refresh_list) PopulateList(true); } } -void BuildDesignatorWnd::BuildSelector::ShowAllTypes() +void BuildDesignatorWnd::BuildSelector::ShowAllTypes(bool refresh_list) { m_build_types_shown.insert(BT_BUILDING); m_build_types_shown.insert(BT_SHIP); m_build_types_shown.insert(BT_ORBITAL); - PopulateList(true); + if (refresh_list) PopulateList(true); } -void BuildDesignatorWnd::BuildSelector::HideAllTypes() +void BuildDesignatorWnd::BuildSelector::HideAllTypes(bool refresh_list) { m_build_types_shown.clear(); - PopulateList(false); + if (refresh_list) PopulateList(false); } -void BuildDesignatorWnd::BuildSelector::ShowAvailability(bool available) +void BuildDesignatorWnd::BuildSelector::ShowAvailability(bool available, bool refresh_list) { if (available) { if (!m_availabilities_shown.first) { m_availabilities_shown.first = true; - PopulateList(true); + if (refresh_list) PopulateList(true); } } else { if (!m_availabilities_shown.second) { m_availabilities_shown.second = true; - PopulateList(true); + if (refresh_list) PopulateList(true); } } } -void BuildDesignatorWnd::BuildSelector::HideAvailability(bool available) +void BuildDesignatorWnd::BuildSelector::HideAvailability(bool available, bool refresh_list) { if (available) { if (m_availabilities_shown.first) { m_availabilities_shown.first = false; - PopulateList(true); + if (refresh_list) PopulateList(true); } } else { if (m_availabilities_shown.second) { m_availabilities_shown.second = false; - PopulateList(true); + if (refresh_list) PopulateList(true); } } } @@ -721,6 +719,8 @@ void BuildDesignatorWnd::BuildSelector::PopulateList(bool keep_selection) { + if (!Visible()) return; + Logger().debugStream() << "PopulateList start"; Empire* empire = Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); if (!empire) return; @@ -957,6 +957,10 @@ AttachChild(m_build_detail_panel); AttachChild(m_build_selector); AttachChild(m_side_panel); + + ShowAllTypes(false); // without populating the list + ShowAvailability(false, false); // ... + ShowAvailability(true, false); // ... } BuildDesignatorWnd::~BuildDesignatorWnd() @@ -1050,9 +1054,6 @@ } SelectDefaultPlanet(m_side_panel->SystemID()); m_build_selector->Reset(true); - ShowAllTypes(); - ShowAvailability(true); - ShowAvailability(false); m_build_detail_panel->Reset(); m_side_panel->Refresh(); } @@ -1067,97 +1068,97 @@ m_system_default_planets.clear(); } -void BuildDesignatorWnd::ShowType(BuildType type) +void BuildDesignatorWnd::ShowType(BuildType type, bool refresh_list) { Logger().errorStream() << "BuildDesignatorWnd::ShowType(" << boost::lexical_cast<std::string>(type) << ")"; if (type == BT_BUILDING || type == BT_SHIP || type == BT_ORBITAL) { - m_build_selector->ShowType(type); + m_build_selector->ShowType(type, refresh_list); m_build_selector->m_build_type_buttons[type]->MarkSelectedGray(); } else { throw std::invalid_argument("BuildDesignatorWnd::ShowType was passed an invalid BuildType"); } } -void BuildDesignatorWnd::ShowAllTypes() +void BuildDesignatorWnd::ShowAllTypes(bool refresh_list) { - m_build_selector->ShowAllTypes(); + m_build_selector->ShowAllTypes(refresh_list); m_build_selector->m_build_type_buttons[BT_BUILDING]->MarkSelectedGray(); m_build_selector->m_build_type_buttons[BT_SHIP]->MarkSelectedGray(); m_build_selector->m_build_type_buttons[BT_ORBITAL]->MarkSelectedGray(); } -void BuildDesignatorWnd::HideType(BuildType type) +void BuildDesignatorWnd::HideType(BuildType type, bool refresh_list) { Logger().errorStream() << "BuildDesignatorWnd::HideType(" << boost::lexical_cast<std::string>(type) << ")"; if (type == BT_BUILDING || type == BT_SHIP || type == BT_ORBITAL) { - m_build_selector->HideType(type); + m_build_selector->HideType(type, refresh_list); m_build_selector->m_build_type_buttons[type]->MarkNotSelected(); } else { throw std::invalid_argument("BuildDesignatorWnd::HideType was passed an invalid BuildType"); } } -void BuildDesignatorWnd::HideAllTypes() +void BuildDesignatorWnd::HideAllTypes(bool refresh_list) { - m_build_selector->HideAllTypes(); + m_build_selector->HideAllTypes(refresh_list); m_build_selector->m_build_type_buttons[BT_BUILDING]->MarkNotSelected(); m_build_selector->m_build_type_buttons[BT_SHIP]->MarkNotSelected(); m_build_selector->m_build_type_buttons[BT_ORBITAL]->MarkNotSelected(); } -void BuildDesignatorWnd::ToggleType(BuildType type) +void BuildDesignatorWnd::ToggleType(BuildType type, bool refresh_list) { if (type == BT_BUILDING || type == BT_SHIP || type == BT_ORBITAL) { const std::set<BuildType>& types_shown = m_build_selector->GetBuildTypesShown(); if (types_shown.find(type) == types_shown.end()) - ShowType(type); + ShowType(type, refresh_list); else - HideType(type); + HideType(type, refresh_list); } else { throw std::invalid_argument("BuildDesignatorWnd::ShowType was passed an invalid BuildType"); } } -void BuildDesignatorWnd::ToggleAllTypes() +void BuildDesignatorWnd::ToggleAllTypes(bool refresh_list) { const std::set<BuildType>& types_shown = m_build_selector->GetBuildTypesShown(); if (types_shown.size() == 3) // will need to update this if more build types are added - HideAllTypes(); + HideAllTypes(refresh_list); else - ShowAllTypes(); + ShowAllTypes(refresh_list); } -void BuildDesignatorWnd::ShowAvailability(bool available) +void BuildDesignatorWnd::ShowAvailability(bool available, bool refresh_list) { - m_build_selector->ShowAvailability(available); + m_build_selector->ShowAvailability(available, refresh_list); if (available) m_build_selector->m_availability_buttons.at(0)->MarkSelectedGray(); else m_build_selector->m_availability_buttons.at(1)->MarkSelectedGray(); } -void BuildDesignatorWnd::HideAvailability(bool available) +void BuildDesignatorWnd::HideAvailability(bool available, bool refresh_list) { - m_build_selector->HideAvailability(available); + m_build_selector->HideAvailability(available, refresh_list); if (available) m_build_selector->m_availability_buttons.at(0)->MarkNotSelected(); else m_build_selector->m_availability_buttons.at(1)->MarkNotSelected(); } -void BuildDesignatorWnd::ToggleAvailabilitly(bool available) +void BuildDesignatorWnd::ToggleAvailabilitly(bool available, bool refresh_list) { const std::pair<bool, bool>& avail_shown = m_build_selector->GetAvailabilitiesShown(); if (available) { if (avail_shown.first) - HideAvailability(true); + HideAvailability(true, refresh_list); else - ShowAvailability(true); + ShowAvailability(true, refresh_list); } else { if (avail_shown.second) - HideAvailability(false); + HideAvailability(false, refresh_list); else - ShowAvailability(false); + ShowAvailability(false, refresh_list); } } Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.h =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.h 2007-06-22 22:03:04 UTC (rev 2079) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.h 2007-06-22 22:53:05 UTC (rev 2080) @@ -42,16 +42,16 @@ void Reset(); void Clear(); - void ShowType(BuildType type); - void ShowAllTypes(); - void HideType(BuildType type); - void HideAllTypes(); - void ToggleType(BuildType type); - void ToggleAllTypes(); + void ShowType(BuildType type, bool refresh_list = true); + void ShowAllTypes(bool refresh_list = true); + void HideType(BuildType type, bool refresh_list = true); + void HideAllTypes(bool refresh_list = true); + void ToggleType(BuildType type, bool refresh_list = true); + void ToggleAllTypes(bool refresh_list = true); - void ShowAvailability(bool available); - void HideAvailability(bool available); - void ToggleAvailabilitly(bool available); + void ShowAvailability(bool available, bool refresh_list = true); + void HideAvailability(bool available, bool refresh_list = true); + void ToggleAvailabilitly(bool available, bool refresh_list = true); //@} mutable AddNamedBuildToQueueSignalType AddNamedBuildToQueueSignal; |
From: <geo...@us...> - 2007-06-25 11:29:41
|
Revision: 2094 http://svn.sourceforge.net/freeorion/revision/?rev=2094&view=rev Author: geoffthemedio Date: 2007-06-25 04:29:43 -0700 (Mon, 25 Jun 2007) Log Message: ----------- -Made TechDetailPanel less laggy when being dragged around while it has a tech showing, by making it not redo its layout unless it is resized -Attempted, but failed, to make special icons on the SpecialsPanel on the SidePanel have tooltips. Modified Paths: -------------- trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/TechTreeWnd.cpp Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-06-25 11:03:22 UTC (rev 2093) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-06-25 11:29:43 UTC (rev 2094) @@ -12,6 +12,8 @@ #include "CUIControls.h" #include "../client/human/HumanClientApp.h" #include "../util/OptionsDB.h" +#include "../util/AppInterface.h" +#include "../util/MultiplayerCommon.h" #include <GG/DrawUtil.h> #include <GG/GUI.h> @@ -1312,7 +1314,7 @@ ///////////////////////////////////// SpecialsPanel::SpecialsPanel(int w, const UniverseObject &obj) : - Wnd(0, 0, w, ClientUI::Pts()*4/3, 0), + Wnd(0, 0, w, ClientUI::Pts()*4/3, GG::CLICKABLE), m_object_id(obj.ID()), m_icons() { @@ -1353,7 +1355,9 @@ const Special* special = GetSpecial(*it); boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / special->Graphic()); - GG::StaticGraphic* graphic = new GG::StaticGraphic(0, 0, icon_size, icon_size, texture, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE); + GG::StaticGraphic* graphic = new GG::StaticGraphic(0, 0, icon_size, icon_size, texture, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE | GG::CLICKABLE); + graphic->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); + graphic->SetBrowseText(UserString(special->Name()) + "\n\n" + UserString(special->Description())); m_icons.push_back(graphic); } Modified: trunk/FreeOrion/UI/TechTreeWnd.cpp =================================================================== --- trunk/FreeOrion/UI/TechTreeWnd.cpp 2007-06-25 11:03:22 UTC (rev 2093) +++ trunk/FreeOrion/UI/TechTreeWnd.cpp 2007-06-25 11:29:43 UTC (rev 2094) @@ -684,9 +684,13 @@ void TechTreeWnd::TechDetailPanel::SizeMove(const GG::Pt& ul, const GG::Pt& lr) { + GG::Pt old_size = GG::Wnd::LowerRight() - GG::Wnd::UpperLeft(); + // maybe later do something interesting with docking GG::Wnd::SizeMove(ul, lr); - DoLayout(); + + if (Visible() && old_size != GG::Wnd::Size()) + DoLayout(); } GG::Pt TechTreeWnd::TechDetailPanel::ClientUpperLeft() const |
From: <geo...@us...> - 2007-06-30 23:37:06
|
Revision: 2103 http://svn.sourceforge.net/freeorion/revision/?rev=2103&view=rev Author: geoffthemedio Date: 2007-06-30 16:36:47 -0700 (Sat, 30 Jun 2007) Log Message: ----------- Made BuildDetailPanel on ProductionWnd resizable and movable and redid its layout to be like the TechTreeWnd's TechDetailPanel Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp trunk/FreeOrion/UI/BuildDesignatorWnd.h trunk/FreeOrion/UI/ProductionWnd.cpp trunk/FreeOrion/UI/TechTreeWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2007-06-29 05:38:18 UTC (rev 2102) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2007-06-30 23:36:47 UTC (rev 2103) @@ -60,46 +60,39 @@ ////////////////////////////////////////////////// // BuildDesignatorWnd::BuildDetailPanel ////////////////////////////////////////////////// -class BuildDesignatorWnd::BuildDetailPanel : public GG::Wnd +class BuildDesignatorWnd::BuildDetailPanel : public CUIWnd { public: BuildDetailPanel(int w, int h); ~BuildDetailPanel(); - int QueueIndexShown() const; - virtual void Render(); - void SelectedBuildLocation(int location); + + void SizeMove(const GG::Pt& ul, const GG::Pt& lr); + void Render(); + void LDrag(const GG::Pt& pt, const GG::Pt& move, Uint32 keys); + + /* need to redefine this so that icons and name can be put at the top of the Wnd, rather + than being restricted to the client area of a CUIWnd */ + GG::Pt ClientUpperLeft() const; + void SetBuildItem(BuildType build_type, const std::string& item = ""); void SetBuildItem(BuildType build_type, int design_id); void SetBuild(int queue_idx); - void Reset(); - void Clear(); - mutable boost::signal<void (int)> CenterOnBuildSignal; - mutable boost::signal<void (BuildType, const std::string&, int)> RequestNamedBuildItemSignal; - mutable boost::signal<void (BuildType, int, int)> RequestIDedBuildItemSignal; - mutable boost::signal<void (int, int)> BuildQuantityChangedSignal; private: - GG::Pt ItemGraphicUpperLeft() const; + static const int TEXT_MARGIN_X = 3; + static const int TEXT_MARGIN_Y = 3; + + void Reset(); + void DoLayout(); + bool DisplayingQueueItem() const; - void CenterClickedSlot(); - void AddToQueueClickedSlot(); - void ItemsToBuildChangedSlot(int value); - void CheckBuildability(); ///< Enables / Disables UI widgets according to whether the currently selected build item can be built, and whether multiple copies of it can be built - void ConfigureForQueueItemView(); - void ConfigureForNewBuildView(); BuildType m_build_type; std::string m_item_name; int m_item_design_id; - int m_queue_idx; - int m_build_location; - GG::TextControl* m_build_location_name_text; GG::TextControl* m_item_name_text; GG::TextControl* m_cost_text; - CUIButton* m_recenter_button; - CUIButton* m_add_to_queue_button; - GG::TextControl* m_num_items_to_build_label; - CUISpin<int>* m_num_items_to_build; + GG::TextControl* m_summary_text; CUIMultiEdit* m_description_box; GG::StaticGraphic* m_item_graphic; @@ -107,46 +100,30 @@ }; BuildDesignatorWnd::BuildDetailPanel::BuildDetailPanel(int w, int h) : - Wnd(0, 0, w, h, GG::CLICKABLE), + CUIWnd("", 1, 1, w - 1, h - 1, GG::CLICKABLE | GG::DRAGABLE | GG::RESIZABLE | GG::ONTOP), m_build_type(INVALID_BUILD_TYPE), - m_item_name(""), - m_queue_idx(-1), - m_build_location(UniverseObject::INVALID_OBJECT_ID) + m_item_name("") { - const int NAME_PTS = ClientUI::Pts() + 8; - const int COST_PTS = ClientUI::Pts(); - const int BUTTON_WIDTH = 150; - boost::shared_ptr<GG::Font> default_font = GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()); - m_item_name_text = new GG::TextControl(1, 0, w - 1 - BUTTON_WIDTH, NAME_PTS + 4, "", GG::GUI::GetGUI()->GetFont(ClientUI::FontBold(), NAME_PTS), ClientUI::TextColor()); - m_cost_text = new GG::TextControl(1, m_item_name_text->LowerRight().y, w - 1 - BUTTON_WIDTH, COST_PTS + 4, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), COST_PTS), ClientUI::TextColor()); - m_add_to_queue_button = new CUIButton(w - 1 - BUTTON_WIDTH, 1, BUTTON_WIDTH, UserString("PRODUCTION_DETAIL_ADD_TO_QUEUE")); - m_recenter_button = new CUIButton(w - 1 - BUTTON_WIDTH, 1, BUTTON_WIDTH, UserString("PRODUCTION_DETAIL_CENTER_ON_BUILD")); - m_recenter_button->Disable(); - m_add_to_queue_button->Disable(); - m_num_items_to_build = new CUISpin<int>(0, 0, 75, 1, 1, 1, 1000, true); - m_num_items_to_build->MoveTo(GG::Pt(1, h - m_num_items_to_build->Height() - 1)); - m_num_items_to_build_label = new GG::TextControl(m_num_items_to_build->LowerRight().x + 3, m_num_items_to_build->UpperLeft().y + (m_num_items_to_build->Height() - (NAME_PTS + 4)) / 2, w - 1 - BUTTON_WIDTH - 3 - (m_num_items_to_build->LowerRight().x + 3), NAME_PTS + 4, - UserString("PRODUCTION_DETAIL_NUMBER_TO_BUILD"), default_font, ClientUI::TextColor(), GG::TF_LEFT); - m_build_location_name_text = new GG::TextControl(w - 1 - BUTTON_WIDTH, m_num_items_to_build->UpperLeft().y + (m_num_items_to_build->Height() - (NAME_PTS + 4)) / 2, BUTTON_WIDTH, ClientUI::Pts() + 4, - "", default_font, ClientUI::TextColor()); - m_description_box = new CUIMultiEdit(1, m_cost_text->LowerRight().y, w - 2 - BUTTON_WIDTH, m_num_items_to_build_label->UpperLeft().y - 2 - m_cost_text->LowerRight().y, "", GG::TF_WORDBREAK | GG::MultiEdit::READ_ONLY); + const int PTS = ClientUI::Pts(); + const int NAME_PTS = PTS*3/2; + const int COST_PTS = PTS; + const int SUMMARY_PTS = PTS*4/3; + + m_item_name_text = new GG::TextControl(0, 0, 10, 10, "", GG::GUI::GetGUI()->GetFont(ClientUI::FontBold(), NAME_PTS), ClientUI::TextColor()); + m_cost_text = new GG::TextControl(0, 0, 10, 10, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), COST_PTS), ClientUI::TextColor()); + m_summary_text = new GG::TextControl(0, 0, 10, 10, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), SUMMARY_PTS), ClientUI::TextColor()); + m_description_box = new CUIMultiEdit(0, 0, 10, 10, "", GG::TF_WORDBREAK | GG::MultiEdit::READ_ONLY); m_description_box->SetColor(GG::CLR_ZERO); m_description_box->SetInteriorColor(GG::CLR_ZERO); m_item_graphic = 0; - m_misc_connections.insert(GG::Connect(m_recenter_button->ClickedSignal, &BuildDesignatorWnd::BuildDetailPanel::CenterClickedSlot, this)); - m_misc_connections.insert(GG::Connect(m_add_to_queue_button->ClickedSignal, &BuildDesignatorWnd::BuildDetailPanel::AddToQueueClickedSlot, this)); - m_misc_connections.insert(GG::Connect(m_num_items_to_build->ValueChangedSignal, &BuildDesignatorWnd::BuildDetailPanel::ItemsToBuildChangedSlot, this)); - AttachChild(m_item_name_text); AttachChild(m_cost_text); - AttachChild(m_recenter_button); - AttachChild(m_add_to_queue_button); - AttachChild(m_num_items_to_build); - AttachChild(m_num_items_to_build_label); - AttachChild(m_build_location_name_text); + AttachChild(m_summary_text); AttachChild(m_description_box); + + DoLayout(); } BuildDesignatorWnd::BuildDetailPanel::~BuildDetailPanel() @@ -158,21 +135,153 @@ } } -int BuildDesignatorWnd::BuildDetailPanel::QueueIndexShown() const +void BuildDesignatorWnd::BuildDetailPanel::DoLayout() { - return m_queue_idx; + const int PTS = ClientUI::Pts(); + const int NAME_PTS = PTS*3/2; + const int COST_PTS = PTS; + const int SUMMARY_PTS = PTS*4/3; + + const int ICON_SIZE = 12 + NAME_PTS + COST_PTS + SUMMARY_PTS; + + // name + GG::Pt ul = GG::Pt(0, 0); + GG::Pt lr = ul + GG::Pt(Width(), NAME_PTS + 4); + m_item_name_text->SizeMove(ul, lr); + + // cost / turns + ul += GG::Pt(0, m_item_name_text->Height()); + lr = ul + GG::Pt(Width(), COST_PTS + 4); + m_cost_text->SizeMove(ul, lr); + + // one line summary + ul += GG::Pt(0, m_cost_text->Height()); + lr = ul + GG::Pt(Width(), SUMMARY_PTS + 4); + m_summary_text->SizeMove(ul, lr); + + // main verbose description (fluff, effects, unlocks, ...) + ul = GG::Pt(1, ICON_SIZE + TEXT_MARGIN_Y + 1); + lr = ul + GG::Pt(Width() - TEXT_MARGIN_X - BORDER_RIGHT, Height() - BORDER_BOTTOM - ul.y - TEXT_MARGIN_Y); + m_description_box->SizeMove(ul, lr); + + // icon + if (m_item_graphic) { + ul = GG::Pt(1, 1); + lr = ul + GG::Pt(ICON_SIZE, ICON_SIZE); + m_item_graphic->SizeMove(ul, lr); + } } +void BuildDesignatorWnd::BuildDetailPanel::SizeMove(const GG::Pt& ul, const GG::Pt& lr) +{ + GG::Pt old_size = GG::Wnd::LowerRight() - GG::Wnd::UpperLeft(); + + // maybe later do something interesting with docking + GG::Wnd::SizeMove(ul, lr); + + if (Visible() && old_size != GG::Wnd::Size()) + DoLayout(); +} + +GG::Pt BuildDesignatorWnd::BuildDetailPanel::ClientUpperLeft() const +{ + return GG::Wnd::UpperLeft(); +} + void BuildDesignatorWnd::BuildDetailPanel::Render() { - GG::Pt ul = UpperLeft(), lr = LowerRight(); - GG::FlatRectangle(ul.x, ul.y, lr.x, lr.y, ClientUI::WndColor(), GG::CLR_ZERO, 0); + GG::Pt ul = UpperLeft(); + GG::Pt lr = LowerRight(); + const int ICON_SIZE = m_summary_text->LowerRight().y - m_item_name_text->UpperLeft().y; + GG::Pt cl_ul = ul + GG::Pt(BORDER_LEFT, ICON_SIZE + BORDER_BOTTOM); + GG::Pt cl_lr = lr - GG::Pt(BORDER_RIGHT, BORDER_BOTTOM); + + // use GL to draw the lines + glDisable(GL_TEXTURE_2D); + GLint initial_modes[2]; + glGetIntegerv(GL_POLYGON_MODE, initial_modes); + + // draw background + glPolygonMode(GL_BACK, GL_FILL); + glBegin(GL_POLYGON); + glColor(ClientUI::WndColor()); + glVertex2i(ul.x, ul.y); + glVertex2i(lr.x, ul.y); + glVertex2i(lr.x, lr.y - OUTER_EDGE_ANGLE_OFFSET); + glVertex2i(lr.x - OUTER_EDGE_ANGLE_OFFSET, lr.y); + glVertex2i(ul.x, lr.y); + glVertex2i(ul.x, ul.y); + glEnd(); + + // draw outer border on pixel inside of the outer edge of the window + glPolygonMode(GL_BACK, GL_LINE); + glBegin(GL_POLYGON); + glColor(ClientUI::WndOuterBorderColor()); + glVertex2i(ul.x, ul.y); + glVertex2i(lr.x, ul.y); + glVertex2i(lr.x, lr.y - OUTER_EDGE_ANGLE_OFFSET); + glVertex2i(lr.x - OUTER_EDGE_ANGLE_OFFSET, lr.y); + glVertex2i(ul.x, lr.y); + glVertex2i(ul.x, ul.y); + glEnd(); + + // reset this to whatever it was initially + glPolygonMode(GL_BACK, initial_modes[1]); + + // draw inner border, including extra resize-tab lines + glBegin(GL_LINE_STRIP); + glColor(ClientUI::WndInnerBorderColor()); + glVertex2i(cl_ul.x, cl_ul.y); + glVertex2i(cl_lr.x, cl_ul.y); + glVertex2i(cl_lr.x, cl_lr.y - INNER_BORDER_ANGLE_OFFSET); + glVertex2i(cl_lr.x - INNER_BORDER_ANGLE_OFFSET, cl_lr.y); + glVertex2i(cl_ul.x, cl_lr.y); + glVertex2i(cl_ul.x, cl_ul.y); + glEnd(); + glBegin(GL_LINES); + // draw the extra lines of the resize tab + glColor(ClientUI::WndInnerBorderColor()); + glVertex2i(cl_lr.x, cl_lr.y - RESIZE_HASHMARK1_OFFSET); + glVertex2i(cl_lr.x - RESIZE_HASHMARK1_OFFSET, cl_lr.y); + + glVertex2i(cl_lr.x, cl_lr.y - RESIZE_HASHMARK2_OFFSET); + glVertex2i(cl_lr.x - RESIZE_HASHMARK2_OFFSET, cl_lr.y); + glEnd(); + glEnable(GL_TEXTURE_2D); } -void BuildDesignatorWnd::BuildDetailPanel::SelectedBuildLocation(int location) +void BuildDesignatorWnd::BuildDetailPanel::LDrag(const GG::Pt& pt, const GG::Pt& move, Uint32 keys) { - m_build_location = location; - CheckBuildability(); + if (m_drag_offset != GG::Pt(-1, -1)) { // resize-dragging + GG::Pt new_lr = pt - m_drag_offset; + + // constrain to within parent + if (GG::Wnd* parent = Parent()) { + GG::Pt max_lr = parent->ClientLowerRight(); + new_lr.x = std::min(new_lr.x, max_lr.x); + new_lr.y = std::min(new_lr.y, max_lr.y); + } + + Resize(new_lr - UpperLeft()); + } else { // normal-dragging + GG::Pt final_move = move; + + if (GG::Wnd* parent = Parent()) { + GG::Pt ul = UpperLeft(), lr = LowerRight(); + GG::Pt new_ul = ul + move, new_lr = lr + move; + + GG::Pt min_ul = parent->ClientUpperLeft() + GG::Pt(1, 1); + GG::Pt max_lr = parent->ClientLowerRight(); + GG::Pt max_ul = max_lr - this->Size(); + + new_ul.x = std::max(min_ul.x, std::min(max_ul.x, new_ul.x)); + new_ul.y = std::max(min_ul.y, std::min(max_ul.y, new_ul.y)); + + final_move = new_ul - ul; + } + + GG::Wnd::LDrag(pt, final_move, keys); + } } void BuildDesignatorWnd::BuildDetailPanel::SetBuildItem(BuildType build_type, const std::string& item) @@ -182,7 +291,6 @@ m_build_type = build_type; m_item_name = item; m_item_design_id = UniverseObject::INVALID_OBJECT_ID; - m_queue_idx = -1; Reset(); } @@ -193,7 +301,6 @@ m_build_type = build_type; m_item_name = ""; m_item_design_id = design_id; - m_queue_idx = -1; Reset(); } @@ -205,12 +312,10 @@ m_build_type = queue[queue_idx].item.build_type; m_item_name = queue[queue_idx].item.name; m_item_design_id = queue[queue_idx].item.design_id; - m_queue_idx = queue_idx; } else { m_build_type = INVALID_BUILD_TYPE; m_item_name = ""; m_item_design_id = UniverseObject::INVALID_OBJECT_ID; - m_queue_idx = -1; } Reset(); } @@ -219,60 +324,17 @@ { m_item_name_text->SetText(""); m_cost_text->SetText(""); - m_build_location_name_text->SetText(""); m_description_box->SetText(""); - if (m_item_graphic) { DeleteChild(m_item_graphic); m_item_graphic = 0; } - if (m_build_type == INVALID_BUILD_TYPE) { - DetachChild(m_recenter_button); - DetachChild(m_add_to_queue_button); - DetachChild(m_num_items_to_build); - DetachChild(m_build_location_name_text); - DetachChild(m_num_items_to_build_label); - return; - } + if (m_build_type == INVALID_BUILD_TYPE) return; - m_recenter_button->Show(); - m_add_to_queue_button->Show(); - m_num_items_to_build->Show(); - m_num_items_to_build_label->Show(); - m_build_location_name_text->Show(); - m_recenter_button->Disable(!DisplayingQueueItem()); - m_num_items_to_build->SetValue(1); - Empire* empire = Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); - if (!empire) - return; + if (!empire) return; - const ProductionQueue& queue = empire->GetProductionQueue(); - if (static_cast<int>(queue.size()) <= m_queue_idx) { - if (!queue.empty()) { - m_queue_idx = queue.size() - 1; - m_build_type = queue[m_queue_idx].item.build_type; - m_item_name = queue[m_queue_idx].item.name; - m_item_design_id = queue[m_queue_idx].item.design_id; - } else { - m_build_type = INVALID_BUILD_TYPE; - m_item_name = ""; - m_item_design_id = UniverseObject::INVALID_OBJECT_ID; - m_queue_idx = -1; - } - } - - if (DisplayingQueueItem()) { - ConfigureForQueueItemView(); - m_num_items_to_build->SetValue(queue[m_queue_idx].remaining); - m_build_location_name_text->SetText(GetUniverse().Object(queue[m_queue_idx].location)->Name()); - } else { - ConfigureForNewBuildView(); - } - - CheckBuildability(); - using boost::io::str; using boost::format; double cost_per_turn = 0; @@ -318,12 +380,14 @@ } if (graphic) { - GG::Pt ul = ItemGraphicUpperLeft(); - m_item_graphic = new GG::StaticGraphic(ul.x, ul.y, 128, 128, graphic, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE); + GG::Pt ul = ClientUpperLeft(); + m_item_graphic = new GG::StaticGraphic(0, 0, 10, 10, graphic, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE); m_item_graphic->Show(); AttachChild(m_item_graphic); } + DoLayout(); + m_item_name_text->SetText(item_name_str); m_cost_text->SetText(str(format(UserString("PRODUCTION_TOTAL_COST_STR")) % static_cast<int>(cost_per_turn + 0.5) @@ -331,89 +395,7 @@ m_description_box->SetText(description_str); } -void BuildDesignatorWnd::BuildDetailPanel::Clear() -{ - SetBuildItem(INVALID_BUILD_TYPE, ""); -} -GG::Pt BuildDesignatorWnd::BuildDetailPanel::ItemGraphicUpperLeft() const -{ - return GG::Pt(Width() - 2 - 150 + (150 - 128) / 2, 1 + m_recenter_button->Height() + 5); -} - -bool BuildDesignatorWnd::BuildDetailPanel::DisplayingQueueItem() const -{ - return m_queue_idx != -1; -} - -void BuildDesignatorWnd::BuildDetailPanel::CenterClickedSlot() -{ - if (m_build_type != INVALID_BUILD_TYPE && DisplayingQueueItem()) - CenterOnBuildSignal(m_queue_idx); -} - -void BuildDesignatorWnd::BuildDetailPanel::AddToQueueClickedSlot() -{ - if (m_build_type == BT_BUILDING || m_build_type == BT_ORBITAL) - RequestNamedBuildItemSignal(m_build_type, m_item_name, m_num_items_to_build->Value()); - else if (m_build_type == BT_SHIP) - RequestIDedBuildItemSignal(m_build_type, m_item_design_id, m_num_items_to_build->Value()); -} - -void BuildDesignatorWnd::BuildDetailPanel::ItemsToBuildChangedSlot(int value) -{ - if (DisplayingQueueItem()) - BuildQuantityChangedSignal(m_queue_idx, value); -} - -void BuildDesignatorWnd::BuildDetailPanel::CheckBuildability() -{ - // disable widgets by default... - m_add_to_queue_button->Disable(); - m_num_items_to_build->Disable(); - m_num_items_to_build_label->Disable(); - - - Empire* empire = Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); - if (!empire) return; - - if (m_build_type == BT_SHIP) { - if (!empire->BuildableItem(m_build_type, m_item_design_id, m_build_location)) return; - m_add_to_queue_button->Disable(false); - m_num_items_to_build->Disable(false); - m_num_items_to_build_label->Disable(false); - - } else if (m_build_type == BT_ORBITAL) { - if (!empire->BuildableItem(m_build_type, m_item_name, m_build_location)) return; - m_add_to_queue_button->Disable(false); - m_num_items_to_build->Disable(false); - m_num_items_to_build_label->Disable(false); - - } else if (m_build_type == BT_BUILDING) { - if (!empire->BuildableItem(m_build_type, m_item_name, m_build_location)) return; - m_add_to_queue_button->Disable(false); - } -} - -void BuildDesignatorWnd::BuildDetailPanel::ConfigureForQueueItemView() -{ - DetachChild(m_add_to_queue_button); - AttachChild(m_recenter_button); - AttachChild(m_num_items_to_build); - AttachChild(m_num_items_to_build_label); - AttachChild(m_build_location_name_text); -} - -void BuildDesignatorWnd::BuildDetailPanel::ConfigureForNewBuildView() -{ - AttachChild(m_add_to_queue_button); - DetachChild(m_recenter_button); - AttachChild(m_num_items_to_build); - AttachChild(m_num_items_to_build_label); - DetachChild(m_build_location_name_text); -} - - ////////////////////////////////////////////////// // BuildDesignatorWnd::BuildSelector ////////////////////////////////////////////////// @@ -913,7 +895,7 @@ // BuildDesignatorWnd ////////////////////////////////////////////////// BuildDesignatorWnd::BuildDesignatorWnd(int w, int h) : - Wnd(0, 0, w, h, GG::CLICKABLE), + Wnd(0, 0, w, h, GG::CLICKABLE | GG::ONTOP), m_build_location(UniverseObject::INVALID_OBJECT_ID) { int CHILD_WIDTHS = w - MapWnd::SIDE_PANEL_WIDTH; @@ -931,10 +913,6 @@ m_build_selector->MoveTo(GG::Pt(0, h - BUILD_SELECTOR_HEIGHT)); - m_misc_connections.insert(GG::Connect(m_build_detail_panel->RequestNamedBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this)); - m_misc_connections.insert(GG::Connect(m_build_detail_panel->RequestIDedBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this)); - m_misc_connections.insert(GG::Connect(m_build_detail_panel->BuildQuantityChangedSignal, BuildQuantityChangedSignal)); - m_misc_connections.insert(GG::Connect(m_build_selector->DisplayNamedBuildItemSignal, &BuildDesignatorWnd::BuildDetailPanel::SetBuildItem, m_build_detail_panel)); m_misc_connections.insert(GG::Connect(m_build_selector->DisplayIDedBuildItemSignal, &BuildDesignatorWnd::BuildDetailPanel::SetBuildItem, m_build_detail_panel)); m_misc_connections.insert(GG::Connect(m_build_selector->RequestNamedBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this)); @@ -957,6 +935,8 @@ AttachChild(m_build_detail_panel); AttachChild(m_build_selector); AttachChild(m_side_panel); + + MoveChildUp(m_build_detail_panel); ShowAllTypes(false); // without populating the list ShowAvailability(false, false); // ... @@ -1003,11 +983,6 @@ return m_map_view_hole; } -int BuildDesignatorWnd::QueueIndexShown() const -{ - return m_build_detail_panel->QueueIndexShown(); -} - void BuildDesignatorWnd::CenterOnBuild(int queue_idx) { m_build_detail_panel->SetBuild(queue_idx); @@ -1039,7 +1014,6 @@ void BuildDesignatorWnd::SelectPlanet(int planet) { m_build_location = planet; - m_build_detail_panel->SelectedBuildLocation(planet); m_build_selector->SetBuildLocation(planet); if (planet != UniverseObject::INVALID_OBJECT_ID) m_system_default_planets[m_side_panel->SystemID()] = planet; @@ -1054,13 +1028,13 @@ } SelectDefaultPlanet(m_side_panel->SystemID()); m_build_selector->Reset(true); - m_build_detail_panel->Reset(); + m_build_detail_panel->SetBuildItem(INVALID_BUILD_TYPE); m_side_panel->Refresh(); } void BuildDesignatorWnd::Clear() { - m_build_detail_panel->Clear(); + m_build_detail_panel->SetBuildItem(INVALID_BUILD_TYPE); m_build_selector->Reset(false); SystemSelectedSignal(UniverseObject::INVALID_OBJECT_ID); m_side_panel->Hide(); Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.h =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.h 2007-06-29 05:38:18 UTC (rev 2102) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.h 2007-06-30 23:36:47 UTC (rev 2103) @@ -32,7 +32,6 @@ virtual bool InClient(const GG::Pt& pt) const; GG::Rect MapViewHole() const; - int QueueIndexShown() const; //@} /** \name Mutators */ //@{ Modified: trunk/FreeOrion/UI/ProductionWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ProductionWnd.cpp 2007-06-29 05:38:18 UTC (rev 2102) +++ trunk/FreeOrion/UI/ProductionWnd.cpp 2007-06-30 23:36:47 UTC (rev 2103) @@ -415,11 +415,6 @@ HumanClientApp::GetApp()->Orders().IssueOrder(new ProductionQueueOrder(HumanClientApp::GetApp()->EmpireID(), row_idx)); UpdateQueue(); ///< rebuild on-screen queue ResetInfoPanel(); - if (row_idx == m_build_designator_wnd->QueueIndexShown()) { - m_build_designator_wnd->CenterOnBuild(-1); - } else if (row_idx < m_build_designator_wnd->QueueIndexShown()) { - m_build_designator_wnd->CenterOnBuild(m_build_designator_wnd->QueueIndexShown() - 1); - } } void ProductionWnd::QueueItemClickedSlot(int row_idx, GG::ListBox::Row* row, const GG::Pt& pt) Modified: trunk/FreeOrion/UI/TechTreeWnd.cpp =================================================================== --- trunk/FreeOrion/UI/TechTreeWnd.cpp 2007-06-29 05:38:18 UTC (rev 2102) +++ trunk/FreeOrion/UI/TechTreeWnd.cpp 2007-06-30 23:36:47 UTC (rev 2103) @@ -600,7 +600,6 @@ static const int TEXT_MARGIN_X = 3; static const int TEXT_MARGIN_Y = 3; - GG::Pt TechGraphicUpperLeft() const; void Reset(); void DoLayout(); @@ -794,9 +793,6 @@ } } - - - void TechTreeWnd::TechDetailPanel::Reset() { if (m_tech_graphic) { |
From: <tz...@us...> - 2007-07-04 22:33:46
|
Revision: 2116 http://svn.sourceforge.net/freeorion/revision/?rev=2116&view=rev Author: tzlaine Date: 2007-07-04 15:33:48 -0700 (Wed, 04 Jul 2007) Log Message: ----------- Mainly, this commit fixes the nonclickablility of the StaticGraphics used as Specials icons under planets in the SidePanel, and the general buggy behavior of the InWindow() functions of all the classes in the SidePanel. Everything works pretty well now -- opaque things are clickable, and transparent places (i.e. the space between the planets in the left side of the SidePanel) are not. Also did some minor grooming. Modified Paths: -------------- trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-07-04 20:17:47 UTC (rev 2115) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-07-04 22:33:48 UTC (rev 2116) @@ -36,6 +36,8 @@ m_health_meter_bar(0), m_expand_button(new GG::Button(w - 16, 0, 16, 16, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), GG::CLR_WHITE)) { + SetText("PopulationPanel"); + const PopCenter* pop = dynamic_cast<const PopCenter*>(&obj); if (!pop) throw std::invalid_argument("Attempted to construct a PopulationPanel with an UniverseObject that is not a PopCenter"); @@ -296,6 +298,8 @@ m_primary_focus_drop(0), m_secondary_focus_drop(0), m_expand_button(new GG::Button(w - 16, 0, 16, 16, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), GG::CLR_WHITE)) { + SetText("ResourcePanel"); + const ResourceCenter* res = dynamic_cast<const ResourceCenter*>(&obj); if (!res) throw std::invalid_argument("Attempted to construct a ResourcePanel with an UniverseObject that is not a ResourceCenter"); @@ -832,7 +836,9 @@ m_initial_current(m_meter.Current()), m_projected_max(m_meter.Max()), m_projected_current(m_meter.Current()) -{} +{ + SetText("MeterStatusBar2"); +} void MeterStatusBar2::SetProjectedCurrent(double current) { @@ -903,6 +909,8 @@ m_building_indicators(), m_expand_button(new GG::Button(w - 16, 0, 16, 16, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), GG::CLR_WHITE)) { + SetText("BuildingsPanel"); + if (m_columns < 1) throw std::invalid_argument("Attempted to create a BuidingsPanel with less than 1 column"); // expand / collapse button at top right @@ -1171,6 +1179,8 @@ m_graphic(0), m_progress_bar(0) { + SetText("BuildingIndicator"); + boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / type.Graphic()); m_graphic = new GG::StaticGraphic(0, 0, w, w, texture, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE); AttachChild(m_graphic); @@ -1183,6 +1193,8 @@ m_graphic(0), m_progress_bar(0) { + SetText("BuildingIndicator"); + boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / type.Graphic()); m_graphic = new GG::StaticGraphic(0, 0, w, w, texture, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE); AttachChild(m_graphic); @@ -1258,12 +1270,13 @@ ///////////////////////////////////// // SpecialsPanel // ///////////////////////////////////// - SpecialsPanel::SpecialsPanel(int w, const UniverseObject &obj) : Wnd(0, 0, w, ClientUI::Pts()*4/3, GG::CLICKABLE), m_object_id(obj.ID()), m_icons() { + SetText("SpecialsPanel"); + Update(); SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); SetBrowseText("??????????"); @@ -1280,16 +1293,16 @@ bool SpecialsPanel::InWindow(const GG::Pt& pt) const { - for (std::vector<GG::StaticGraphic*>::const_iterator it = m_icons.begin(); it != m_icons.end(); ++it) + bool retval = false; + for (std::vector<GG::StaticGraphic*>::const_iterator it = m_icons.begin(); it != m_icons.end(); ++it) { if ((*it)->InWindow(pt)) - return true; - - return false; + retval = true; + } + return retval; } void SpecialsPanel::Render() -{ -} +{} void SpecialsPanel::MouseWheel(const GG::Pt& pt, int move, Uint32 keys) { @@ -1316,9 +1329,10 @@ const Special* special = GetSpecial(*it); boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / special->Graphic()); - GG::StaticGraphic* graphic = new GG::StaticGraphic(0, 0, icon_size, icon_size, texture, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE | GG::CLICKABLE); + GG::StaticGraphic* graphic = new GG::StaticGraphic(0, 0, icon_size, icon_size, texture, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE, GG::CLICKABLE); graphic->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); graphic->SetBrowseText("!!!!!!!!!!"); + graphic->SetText(UserString(special->Name()) + " Special graphic"); m_icons.push_back(graphic); } @@ -1335,6 +1349,7 @@ icon->MoveTo(GG::Pt(x, 0)); AttachChild(icon); + GG::Pt icon_ul = icon->UpperLeft(); } } Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2007-07-04 20:17:47 UTC (rev 2115) +++ trunk/FreeOrion/UI/SidePanel.cpp 2007-07-04 22:33:48 UTC (rev 2116) @@ -352,7 +352,7 @@ case SZ_HUGE : scale = 4.0/5.0; break; case SZ_GASGIANT : scale = 5.0/5.0; break; case SZ_ASTEROIDS : scale = 5.0/5.0; break; - default : scale = 2.0/5.0; break; + default : scale = 2.0/5.0; break; } return static_cast<int>(SidePanel::MIN_PLANET_DIAMETER + (SidePanel::MAX_PLANET_DIAMETER - SidePanel::MIN_PLANET_DIAMETER) * scale); @@ -609,7 +609,7 @@ { int index; - if(-1 == (index=child_path.find_first_of('.'))) + if (-1 == (index=child_path.find_first_of('.'))) return node.ContainsChild(child_path)?node.Child(child_path):XMLElement(); else return node.ContainsChild(child_path.substr(0,index)) ? @@ -811,7 +811,7 @@ const Planet* SidePanel::PlanetPanel::GetPlanet() const { const Planet *planet = GetUniverse().Object<const Planet>(m_planet_id); - if(!planet) throw std::runtime_error("SidePanel::PlanetPanel::GetPlanet: planet not found!"); + if (!planet) throw std::runtime_error("SidePanel::PlanetPanel::GetPlanet: planet not found!"); return planet; } @@ -851,10 +851,10 @@ enum OWNERSHIP {OS_NONE, OS_FOREIGN, OS_SELF} owner = OS_NONE; - if(planet->Owners().empty() || planet->IsAboutToBeColonized()) { + if (planet->Owners().empty() || planet->IsAboutToBeColonized()) { owner = OS_NONE; } else { - if(!planet->OwnedBy(HumanClientApp::GetApp()->EmpireID())) + if (!planet->OwnedBy(HumanClientApp::GetApp()->EmpireID())) owner = OS_FOREIGN; else owner = OS_SELF; @@ -910,15 +910,18 @@ void SidePanel::PlanetPanel::MouseWheel(const GG::Pt& pt, int move, Uint32 keys) { GG::Wnd *parent; - if((parent=Parent())) + if ((parent=Parent())) parent->MouseWheel(pt,move,keys); } bool SidePanel::PlanetPanel::InWindow(const GG::Pt& pt) const { + // The mouse is in this window if it is in the rightmost Width() - MAX_PLANET_DIAMETER portion, or if it is over the + // planet graphic, or if it is over the specials panel. That is, it falls through to the MapWnd if it is over the + // empty space around the planet on the left side of the panel. GG::Pt ul = UpperLeft(), lr = LowerRight(); - ul.x += MAX_PLANET_DIAMETER / 2; - return ((ul <= pt && pt < lr) || InPlanet(pt)); + ul.x += MAX_PLANET_DIAMETER; + return (ul <= pt && pt < lr || m_specials_panel->InWindow(pt) || InPlanet(pt)); } SidePanel::PlanetPanel::HilitingType SidePanel::PlanetPanel:: Hiliting() const @@ -928,15 +931,14 @@ void SidePanel::PlanetPanel::LClick(const GG::Pt& pt, Uint32 keys) { - if(InPlanet(pt)) + if (InPlanet(pt)) { - if(GetOptionsDB().Get<bool>("UI.sound.enabled")) + if (GetOptionsDB().Get<bool>("UI.sound.enabled")) HumanClientApp::GetApp()->PlaySound(ClientUI::SoundDir() / GetOptionsDB().Get<std::string>("UI.sound.planet-button-click")); PlanetImageLClickedSignal(m_planet_id); } } - void SidePanel::PlanetPanel::Render() { const Planet *planet = GetPlanet(); @@ -973,20 +975,20 @@ int empire_id = HumanClientApp::GetApp()->EmpireID(); std::map<int, int> pending_colonization_orders = HumanClientApp::GetApp()->PendingColonizationOrders(); std::map<int, int>::const_iterator it = pending_colonization_orders.find(planet->ID()); - if(it == pending_colonization_orders.end()) // colonize + if (it == pending_colonization_orders.end()) // colonize { Ship *ship=FindColonyShip(planet->SystemID()); - if(ship==0) + if (ship==0) throw std::runtime_error("SidePanel::PlanetPanel::ClickColonize ship not found!"); - if(!ship->GetFleet()->Accept(StationaryFleetVisitor(*ship->GetFleet()->Owners().begin()))) + if (!ship->GetFleet()->Accept(StationaryFleetVisitor(*ship->GetFleet()->Owners().begin()))) { GG::ThreeButtonDlg dlg(320,200,UserString("SP_USE_DEPARTING_COLONY_SHIPS_QUESTION"), GG::GUI::GetGUI()->GetFont(ClientUI::Font(),ClientUI::Pts()),ClientUI::WndColor(),ClientUI::CtrlBorderColor(),ClientUI::CtrlColor(),ClientUI::TextColor(),2, UserString("YES"),UserString("NO")); dlg.Run(); - if(dlg.Result()!=0) + if (dlg.Result()!=0) return; } @@ -1004,11 +1006,11 @@ Ship* ship = GetUniverse().Object<Ship>(ship_id); Fleet* fleet= ship ? GetUniverse().Object<Fleet>(ship->FleetID()) : NULL; MapWnd* map_wnd = ClientUI::GetClientUI()->GetMapWnd(); - if(fleet) - for( MapWnd::FleetWndIter it = map_wnd->FleetWndBegin();it != map_wnd->FleetWndEnd();++it) + if (fleet) + for ( MapWnd::FleetWndIter it = map_wnd->FleetWndBegin();it != map_wnd->FleetWndEnd();++it) { FleetWnd *fleet_wnd = *it; - if(fleet->SystemID() == fleet_wnd->SystemID() + if (fleet->SystemID() == fleet_wnd->SystemID() && !fleet_wnd->ContainsFleet(fleet->ID())) { fleet_wnd->AddFleet(GetUniverse().Object<Fleet>(fleet->ID())); @@ -1022,7 +1024,7 @@ { const Planet *planet = GetPlanet(); - if(!planet->OwnedBy(HumanClientApp::GetApp()->EmpireID())) + if (!planet->OwnedBy(HumanClientApp::GetApp()->EmpireID())) return; @@ -1030,7 +1032,7 @@ menu_contents.next_level.push_back(GG::MenuItem(UserString("SP_RENAME_PLANET"), 1, false, false)); GG::PopupMenu popup(pt.x, pt.y, GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), menu_contents, ClientUI::TextColor()); - if(popup.Run()) + if (popup.Run()) switch (popup.MenuID()) { case 1: @@ -1038,7 +1040,7 @@ std::string plt_name = planet->Name(); CUIEditWnd edit_wnd(350, UserString("SP_ENTER_NEW_PLANET_NAME"), plt_name); edit_wnd.Run(); - if(edit_wnd.Result() != "") + if (edit_wnd.Result() != "") { HumanClientApp::GetApp()->Orders().IssueOrder(new RenameOrder(HumanClientApp::GetApp()->EmpireID(), planet->ID(), edit_wnd.Result())); m_planet_name->SetText(planet->Name()); @@ -1066,20 +1068,23 @@ bool SidePanel::PlanetPanelContainer::InWindow(const GG::Pt& pt) const { - if(pt.y < UpperLeft().y) - return false; - - bool retval = UpperLeft() <= pt && pt < LowerRight(); - for(unsigned int i = 0; i < m_planet_panels.size() && !retval; ++i) - if(m_planet_panels[i]->InWindow(pt)) - retval = true; - + // The pt is in the container if it is in the vertical extent of the container and at least one of the container's + // panels. + bool retval = false; + GG::Pt ul = UpperLeft(), lr = LowerRight(); + if (ul.y <= pt.y || pt.y < lr.y) + { + for (unsigned int i = 0; i < m_planet_panels.size() && !retval; ++i) { + if (m_planet_panels[i]->InWindow(pt)) + retval = true; + } + } return retval; } void SidePanel::PlanetPanelContainer::MouseWheel(const GG::Pt& pt, int move, Uint32 keys) { - if(m_vscroll) + if (m_vscroll) move < 0 ? m_vscroll->ScrollLineIncr() : m_vscroll->ScrollLineDecr(); } @@ -1350,7 +1355,13 @@ bool SidePanel::InWindow(const GG::Pt& pt) const { - return (UpperLeft() + GG::Pt(MAX_PLANET_DIAMETER, 0) <= pt && pt < LowerRight()) || m_planet_panel_container->InWindow(pt); + // The pt is in the panel if it is in the normal bounds of the panel and above the PlanetPanelContainer, OR if it is + // either within the rightmost Width() - MAX_PLANET_DIAMETER portion of the panel, or within the + // PlanetPanelContainer. Note that this allows clicks, etc., to fall through the spaces between the planets to the + // MapWnd. + return pt.y < m_planet_panel_container->UpperLeft().y ? + Wnd::InWindow(pt) : + UpperLeft() + GG::Pt(MAX_PLANET_DIAMETER, 0) <= pt && pt < LowerRight() || m_planet_panel_container->InWindow(pt); } void SidePanel::Render() @@ -1367,10 +1378,8 @@ void SidePanel::RefreshImpl() { UpdateSystemResourceSummary(); - // update individual PlanetPanels in PlanetPanelContainer, then redo layout of panel container m_planet_panel_container->RefreshAllPlanetPanels(); - } void SidePanel::SetSystemImpl() { @@ -1419,7 +1428,7 @@ m_system_name->Insert(row); ++system_names_in_droplist; - if(sys_vec[i] == s_system) + if (sys_vec[i] == s_system) select_row = row; } const int TEXT_ROW_HEIGHT = CUISimpleDropDownListRow::DEFAULT_ROW_HEIGHT; @@ -1429,7 +1438,7 @@ m_system_name->SetDropHeight(drop_height); for (int i = 0; i < m_system_name->NumRows(); i++) { - if(select_row == &m_system_name->GetRow(i)) + if (select_row == &m_system_name->GetRow(i)) { m_system_name->Select(i); break; @@ -1449,14 +1458,14 @@ // TODO: add fleet icons std::pair<System::const_orbit_iterator, System::const_orbit_iterator> range = s_system->non_orbit_range(); std::vector<const Fleet*> flt_vec = s_system->FindObjects<Fleet>(); - for(unsigned int i = 0; i < flt_vec.size(); i++) + for (unsigned int i = 0; i < flt_vec.size(); i++) m_fleet_connections.insert(std::pair<int, boost::signals::connection>(flt_vec[i]->ID(), GG::Connect(flt_vec[i]->StateChangedSignal, &SidePanel::FleetsChanged, this))); // add planets std::vector<const Planet*> plt_vec = s_system->FindObjects<Planet>(); m_planet_panel_container->SetPlanets(plt_vec, s_system->Star()); - for(unsigned int i = 0; i < plt_vec.size(); i++) { + for (unsigned int i = 0; i < plt_vec.size(); i++) { m_system_connections.insert(GG::Connect(plt_vec[i]->StateChangedSignal, &SidePanel::UpdateSystemResourceSummary, this)); m_system_connections.insert(GG::Connect(plt_vec[i]->ResourceCenterChangedSignal, SidePanel::ResourceCenterChangedSignal)); } @@ -1558,13 +1567,13 @@ void SidePanel::UpdateSystemResourceSummary() { - if(s_system) + if (s_system) { std::vector<const Planet*> plt_vec = s_system->FindObjects<Planet>(); int farming = 0, mining = 0, trade = 0, research = 0, industry = 0, defense = 0, num_empire_planets = 0; - for(unsigned int i = 0; i < plt_vec.size(); i++) - if(plt_vec[i]->Owners().find(HumanClientApp::GetApp()->EmpireID()) != plt_vec[i]->Owners().end()) + for (unsigned int i = 0; i < plt_vec.size(); i++) { + if (plt_vec[i]->Owners().find(HumanClientApp::GetApp()->EmpireID()) != plt_vec[i]->Owners().end()) { farming +=static_cast<int>(plt_vec[i]->FarmingPoints()); mining +=static_cast<int>(plt_vec[i]->MiningPoints()); @@ -1575,6 +1584,7 @@ num_empire_planets++; } + } m_system_resource_summary->SetFarming (farming ); m_system_resource_summary->SetMining (mining ); @@ -1583,7 +1593,7 @@ m_system_resource_summary->SetIndustry(industry); m_system_resource_summary->SetDefense (defense ); - if(num_empire_planets==0) + if (num_empire_planets==0) { m_system_resource_summary->Hide(); m_static_text_systemproduction->Hide(); |
From: <geo...@us...> - 2007-07-05 00:52:56
|
Revision: 2118 http://svn.sourceforge.net/freeorion/revision/?rev=2118&view=rev Author: geoffthemedio Date: 2007-07-04 17:52:58 -0700 (Wed, 04 Jul 2007) Log Message: ----------- Some incomplete layout changes in sidepanel and builddesignatorwnd, which I'm committing now to clear the slate before doing some signals de-tracking due to boost version change Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp trunk/FreeOrion/UI/SidePanel.h Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2007-07-04 23:37:42 UTC (rev 2117) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2007-07-05 00:52:58 UTC (rev 2118) @@ -959,7 +959,6 @@ void BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked(int row_index, GG::ListBox::Row* row) { - Logger().errorStream() << "row layout: " << row->GetLayout(); if (row->Disabled()) return; BuildType build_type = m_build_types[row]; if (build_type == BT_BUILDING || build_type == BT_ORBITAL) Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2007-07-04 23:37:42 UTC (rev 2117) +++ trunk/FreeOrion/UI/SidePanel.cpp 2007-07-05 00:52:58 UTC (rev 2118) @@ -1068,18 +1068,14 @@ bool SidePanel::PlanetPanelContainer::InWindow(const GG::Pt& pt) const { - // The pt is in the container if it is in the vertical extent of the container and at least one of the container's - // panels. - bool retval = false; - GG::Pt ul = UpperLeft(), lr = LowerRight(); - if (ul.y <= pt.y || pt.y < lr.y) - { - for (unsigned int i = 0; i < m_planet_panels.size() && !retval; ++i) { - if (m_planet_panels[i]->InWindow(pt)) - retval = true; - } - } - return retval; + if (!(pt > UpperLeft() && pt < LowerRight())) + return false; + + for (std::vector<PlanetPanel*>::const_iterator it = m_planet_panels.begin(); it != m_planet_panels.end(); ++it) + if ((*it)->InWindow(pt)) + return true; + + return false; } void SidePanel::PlanetPanelContainer::MouseWheel(const GG::Pt& pt, int move, Uint32 keys) @@ -1297,14 +1293,13 @@ SidePanel::SidePanel(int x, int y, int w, int h) : Wnd(x, y, w, h, GG::CLICKABLE), - m_system_name(new CUIDropDownList(40, 0, w-80, SystemNameFontSize(), 10*SystemNameFontSize(), GG::CLR_ZERO, GG::Clr(0.0, 0.0, 0.0, 0.5))), - m_button_prev(new GG::Button(40-SystemNameFontSize(),4,SystemNameFontSize(),SystemNameFontSize(),"",GG::GUI::GetGUI()->GetFont(ClientUI::Font(),SystemNameFontSize()),GG::CLR_WHITE)), - m_button_next(new GG::Button(40+w-80 ,4,SystemNameFontSize(),SystemNameFontSize(),"",GG::GUI::GetGUI()->GetFont(ClientUI::Font(),SystemNameFontSize()),GG::CLR_WHITE)), + m_system_name(new CUIDropDownList(MAX_PLANET_DIAMETER, 0, w-MAX_PLANET_DIAMETER, SystemNameFontSize(), 10*SystemNameFontSize(), GG::CLR_ZERO, GG::Clr(0.0, 0.0, 0.0, 0.5))), + m_button_prev(new GG::Button(MAX_PLANET_DIAMETER+4,4,SystemNameFontSize(),SystemNameFontSize(),"",GG::GUI::GetGUI()->GetFont(ClientUI::Font(),SystemNameFontSize()),GG::CLR_WHITE)), + m_button_next(new GG::Button(w-SystemNameFontSize()-4,4,SystemNameFontSize(),SystemNameFontSize(),"",GG::GUI::GetGUI()->GetFont(ClientUI::Font(),SystemNameFontSize()),GG::CLR_WHITE)), m_star_graphic(0), - m_static_text_systemproduction(new GG::TextControl(0,100-20-ClientUI::Pts()-5,UserString("SP_SYSTEM_PRODUCTION"),GG::GUI::GetGUI()->GetFont(ClientUI::Font(),ClientUI::Pts()),ClientUI::TextColor())), m_next_pltview_fade_in(0),m_next_pltview_planet_id(UniverseObject::INVALID_OBJECT_ID),m_next_pltview_fade_out(-1), - m_planet_panel_container(new PlanetPanelContainer(0,100,w,h-100-30)), - m_system_resource_summary(new SystemResourceSummary(0,100-20,w,20)) + m_planet_panel_container(new PlanetPanelContainer(0,140,w,h-100-30)), + m_system_resource_summary(new SystemResourceSummary(MAX_PLANET_DIAMETER,140-20,w-MAX_PLANET_DIAMETER,20)) { TempUISoundDisabler sound_disabler; @@ -1325,7 +1320,6 @@ AttachChild(m_system_name); AttachChild(m_button_prev); AttachChild(m_button_next); - AttachChild(m_static_text_systemproduction); AttachChild(m_system_resource_summary); AttachChild(m_planet_panel_container); @@ -1355,13 +1349,7 @@ bool SidePanel::InWindow(const GG::Pt& pt) const { - // The pt is in the panel if it is in the normal bounds of the panel and above the PlanetPanelContainer, OR if it is - // either within the rightmost Width() - MAX_PLANET_DIAMETER portion of the panel, or within the - // PlanetPanelContainer. Note that this allows clicks, etc., to fall through the spaces between the planets to the - // MapWnd. - return pt.y < m_planet_panel_container->UpperLeft().y ? - Wnd::InWindow(pt) : - UpperLeft() + GG::Pt(MAX_PLANET_DIAMETER, 0) <= pt && pt < LowerRight() || m_planet_panel_container->InWindow(pt); + return (UpperLeft() + GG::Pt(MAX_PLANET_DIAMETER, 0) <= pt && pt < LowerRight()) || m_planet_panel_container->InWindow(pt); } void SidePanel::Render() @@ -1375,6 +1363,7 @@ for (std::set<SidePanel*>::iterator it = s_side_panels.begin(); it != s_side_panels.end(); ++it) (*it)->RefreshImpl(); } + void SidePanel::RefreshImpl() { UpdateSystemResourceSummary(); @@ -1567,14 +1556,15 @@ void SidePanel::UpdateSystemResourceSummary() { - if (s_system) - { + + if (s_system) { + std::vector<const Planet*> plt_vec = s_system->FindObjects<Planet>(); int farming = 0, mining = 0, trade = 0, research = 0, industry = 0, defense = 0, num_empire_planets = 0; + for (unsigned int i = 0; i < plt_vec.size(); i++) { - if (plt_vec[i]->Owners().find(HumanClientApp::GetApp()->EmpireID()) != plt_vec[i]->Owners().end()) - { + if (plt_vec[i]->Owners().find(HumanClientApp::GetApp()->EmpireID()) != plt_vec[i]->Owners().end()) { farming +=static_cast<int>(plt_vec[i]->FarmingPoints()); mining +=static_cast<int>(plt_vec[i]->MiningPoints()); trade +=static_cast<int>(plt_vec[i]->TradePoints()); @@ -1593,15 +1583,9 @@ m_system_resource_summary->SetIndustry(industry); m_system_resource_summary->SetDefense (defense ); - if (num_empire_planets==0) - { + if (num_empire_planets == 0) m_system_resource_summary->Hide(); - m_static_text_systemproduction->Hide(); - } else - { m_system_resource_summary->Show(); - m_static_text_systemproduction->Show(); - } } } Modified: trunk/FreeOrion/UI/SidePanel.h =================================================================== --- trunk/FreeOrion/UI/SidePanel.h 2007-07-04 23:37:42 UTC (rev 2117) +++ trunk/FreeOrion/UI/SidePanel.h 2007-07-05 00:52:58 UTC (rev 2118) @@ -85,7 +85,6 @@ CUIDropDownList *m_system_name; GG::Button *m_button_prev, *m_button_next; GG::DynamicGraphic *m_star_graphic; - GG::TextControl *m_static_text_systemproduction; int m_next_pltview_fade_in; int m_next_pltview_planet_id; |
From: <geo...@us...> - 2007-07-06 03:35:54
|
Revision: 2126 http://svn.sourceforge.net/freeorion/revision/?rev=2126&view=rev Author: geoffthemedio Date: 2007-07-05 20:35:56 -0700 (Thu, 05 Jul 2007) Log Message: ----------- Removed supposedly now-redundant manual boost signals connections tracking from various UI classes, and any destructors that whose only function was to disconnect such signals. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp trunk/FreeOrion/UI/BuildDesignatorWnd.h trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/FleetWnd.h trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/ProductionWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp trunk/FreeOrion/UI/TechTreeWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2007-07-05 09:26:24 UTC (rev 2125) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2007-07-06 03:35:56 UTC (rev 2126) @@ -64,7 +64,6 @@ { public: BuildDetailPanel(int w, int h); - ~BuildDetailPanel(); void SizeMove(const GG::Pt& ul, const GG::Pt& lr); void Render(); @@ -95,8 +94,6 @@ GG::TextControl* m_summary_text; CUIMultiEdit* m_description_box; GG::StaticGraphic* m_item_graphic; - - std::set<boost::signals::connection> m_misc_connections; }; BuildDesignatorWnd::BuildDetailPanel::BuildDetailPanel(int w, int h) : @@ -126,15 +123,6 @@ DoLayout(); } -BuildDesignatorWnd::BuildDetailPanel::~BuildDetailPanel() -{ - // disconnect all signals - while (!m_misc_connections.empty()) { - m_misc_connections.begin()->disconnect(); - m_misc_connections.erase(m_misc_connections.begin()); - } -} - void BuildDesignatorWnd::BuildDetailPanel::DoLayout() { const int PTS = ClientUI::Pts(); @@ -403,7 +391,6 @@ { public: BuildSelector(int w, int h); - ~BuildSelector(); void SizeMove(const GG::Pt& ul, const GG::Pt& lr); void LDrag(const GG::Pt& pt, const GG::Pt& move, Uint32 keys); @@ -455,8 +442,6 @@ std::map<GG::ListBox::Row*, BuildType> m_build_types; GG::Pt m_original_ul; - std::set<boost::signals::connection> m_misc_connections; - int m_build_location; int row_height; @@ -487,8 +472,8 @@ // selectable list of buildable items m_buildable_items = new BuildableItemsListBox(0, 0, 1, 1); AttachChild(m_buildable_items); - m_misc_connections.insert(GG::Connect(m_buildable_items->SelChangedSignal, &BuildDesignatorWnd::BuildSelector::BuildItemSelected, this)); - m_misc_connections.insert(GG::Connect(m_buildable_items->DoubleClickedSignal, &BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked, this)); + GG::Connect(m_buildable_items->SelChangedSignal, &BuildDesignatorWnd::BuildSelector::BuildItemSelected, this); + GG::Connect(m_buildable_items->DoubleClickedSignal, &BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked, this); m_buildable_items->SetStyle(GG::LB_NOSORT | GG::LB_SINGLESEL); row_height = ClientUI::Pts()*3/2; @@ -506,15 +491,6 @@ DoLayout(); } -BuildDesignatorWnd::BuildSelector::~BuildSelector() -{ - // disconnect all signals - while (!m_misc_connections.empty()) { - m_misc_connections.begin()->disconnect(); - m_misc_connections.erase(m_misc_connections.begin()); - } -} - const std::set<BuildType>& BuildDesignatorWnd::BuildSelector::GetBuildTypesShown() const { return m_build_types_shown; @@ -990,13 +966,13 @@ m_build_selector->MoveTo(GG::Pt(0, h - BUILD_SELECTOR_HEIGHT)); - m_misc_connections.insert(GG::Connect(m_build_selector->DisplayNamedBuildItemSignal, &BuildDesignatorWnd::BuildDetailPanel::SetBuildItem, m_build_detail_panel)); - m_misc_connections.insert(GG::Connect(m_build_selector->DisplayIDedBuildItemSignal, &BuildDesignatorWnd::BuildDetailPanel::SetBuildItem, m_build_detail_panel)); - m_misc_connections.insert(GG::Connect(m_build_selector->RequestNamedBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this)); - m_misc_connections.insert(GG::Connect(m_build_selector->RequestIDedBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this)); + GG::Connect(m_build_selector->DisplayNamedBuildItemSignal, &BuildDesignatorWnd::BuildDetailPanel::SetBuildItem, m_build_detail_panel); + GG::Connect(m_build_selector->DisplayIDedBuildItemSignal, &BuildDesignatorWnd::BuildDetailPanel::SetBuildItem, m_build_detail_panel); + GG::Connect(m_build_selector->RequestNamedBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this); + GG::Connect(m_build_selector->RequestIDedBuildItemSignal, &BuildDesignatorWnd::BuildItemRequested, this); - m_misc_connections.insert(GG::Connect(m_side_panel->PlanetSelectedSignal, &BuildDesignatorWnd::SelectPlanet, this)); - m_misc_connections.insert(GG::Connect(m_side_panel->SystemSelectedSignal, SystemSelectedSignal)); + GG::Connect(m_side_panel->PlanetSelectedSignal, &BuildDesignatorWnd::SelectPlanet, this); + GG::Connect(m_side_panel->SystemSelectedSignal, SystemSelectedSignal); // connect build type button clicks to update display @@ -1021,15 +997,6 @@ ShowAvailability(true, false); // ... } -BuildDesignatorWnd::~BuildDesignatorWnd() -{ - // disconnect all signals - while (!m_misc_connections.empty()) { - m_misc_connections.begin()->disconnect(); - m_misc_connections.erase(m_misc_connections.begin()); - } -} - const std::set<BuildType>& BuildDesignatorWnd::GetBuildTypesShown() const { return m_build_selector->GetBuildTypesShown(); Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.h =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.h 2007-07-05 09:26:24 UTC (rev 2125) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.h 2007-07-06 03:35:56 UTC (rev 2126) @@ -21,7 +21,6 @@ /** \name Structors */ //@{ BuildDesignatorWnd(int w, int h); - ~BuildDesignatorWnd(); //@} /** \name Accessors */ //@{ @@ -73,8 +72,6 @@ int m_build_location; GG::Rect m_map_view_hole; std::map<int, int> m_system_default_planets; - - std::set<boost::signals::connection> m_misc_connections; }; #endif // _BuildDesignatorWnd_h_ Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2007-07-05 09:26:24 UTC (rev 2125) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2007-07-06 03:35:56 UTC (rev 2126) @@ -38,7 +38,6 @@ }; FleetDataPanel(int w, int h, const Fleet* fleet, int empire = -1, int system_id = -1, double x = 0.0, double y = 0.0); - ~FleetDataPanel(); bool Selected() const; @@ -323,11 +322,6 @@ Refresh(); } -FleetDataPanel::~FleetDataPanel() -{ - m_fleet_connection.disconnect(); -} - bool FleetDataPanel::Selected() const { return m_selected; @@ -509,7 +503,6 @@ { public: FleetDetailPanel(Fleet* fleet, bool read_only, Uint32 flags = 0); ///< ctor - ~FleetDetailPanel(); Fleet* GetFleet() const {return m_fleet;} ///< returns the currently-displayed fleet (may be 0) @@ -531,8 +524,6 @@ Fleet* m_fleet; const bool m_read_only; boost::signals::connection m_fleet_connection; - std::set<boost::signals::connection> - m_misc_connections; GG::TextControl* m_destination_text; ShipsListBox* m_ships_lb; @@ -755,20 +746,9 @@ if (fleet) SetFleet(fleet); Init(); - m_misc_connections.insert(GG::Connect(GetUniverse().UniverseObjectDeleteSignal, &FleetDetailPanel::UniverseObjectDeleted, this)); + GG::Connect(GetUniverse().UniverseObjectDeleteSignal, &FleetDetailPanel::UniverseObjectDeleted, this); } -FleetDetailPanel::~FleetDetailPanel() -{ - if (m_fleet) { - m_fleet_connection.disconnect(); - } - while (!m_misc_connections.empty()) { - m_misc_connections.begin()->disconnect(); - m_misc_connections.erase(m_misc_connections.begin()); - } -} - int FleetDetailPanel::GetShipIDOfListRow(int row_idx) const { return dynamic_cast<ShipRow&>(m_ships_lb->GetRow(row_idx)).ShipID(); @@ -778,9 +758,8 @@ { Fleet* old_fleet = m_fleet; - if (old_fleet && old_fleet != fleet) { + if (old_fleet && old_fleet != fleet) m_fleet_connection.disconnect(); - } *m_destination_text << ""; *m_ship_status_text << ""; @@ -803,9 +782,8 @@ *m_destination_text << DestinationText(); - if (old_fleet != fleet) { + if (old_fleet != fleet) m_fleet_connection = GG::Connect(m_fleet->StateChangedSignal, &FleetDetailPanel::Refresh, this); - } } } @@ -827,9 +805,9 @@ GetLayout()->SetRowStretch(1, 1.0); GetLayout()->SetMinimumRowHeight(2, ClientUI::Pts() + 4); - m_misc_connections.insert(GG::Connect(m_ships_lb->SelChangedSignal, &FleetDetailPanel::ShipSelectionChanged, this)); - m_misc_connections.insert(GG::Connect(m_ships_lb->BrowsedSignal, &FleetDetailPanel::ShipBrowsed, this)); - m_misc_connections.insert(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() @@ -938,12 +916,11 @@ SetMaxSize(GG::Pt(Width(), MaxSize().y)); SetText(TitleText()); EnableChildClipping(false); - m_panel_empty_connection = GG::Connect(m_fleet_panel->PanelEmptySignal, PanelEmptySignal); + GG::Connect(m_fleet_panel->PanelEmptySignal, PanelEmptySignal); } FleetDetailWnd::~FleetDetailWnd() { - m_panel_empty_connection.disconnect(); ClosingSignal(m_fleet_panel->GetFleet()); } @@ -1014,33 +991,16 @@ EnableChildClipping(false); Init(fleets, selected_fleet); - m_misc_connections.insert(GG::Connect(GetUniverse().UniverseObjectDeleteSignal, &FleetWnd::UniverseObjectDeleted, this)); + GG::Connect(GetUniverse().UniverseObjectDeleteSignal, &FleetWnd::UniverseObjectDeleted, this); if (const System* system = fleets.back()->GetSystem()) - m_misc_connections.insert(Connect(system->StateChangedSignal, &FleetWnd::SystemChangedSlot, this)); + Connect(system->StateChangedSignal, &FleetWnd::SystemChangedSlot, this); SetMaxSize(GG::Pt(Width(), MaxSize().y)); } FleetWnd::~FleetWnd() { - // disconnect all signals connect to the FleetWnd itself - while (!m_misc_connections.empty()) { - m_misc_connections.begin()->disconnect(); - m_misc_connections.erase(m_misc_connections.begin()); - } - // disconnect all signals attached to FleetDetailWnds - while (!m_open_fleet_detail_wnd_connections.empty()) { - m_open_fleet_detail_wnd_connections.begin()->second.disconnect(); - m_open_fleet_detail_wnd_connections.erase(m_open_fleet_detail_wnd_connections.begin()); - } - //std::multimap<FleetDetailWnd*, boost::signals::connection>::iterator sig_it = m_open_fleet_detail_wnd_connections.begin(); - //while (sig_it != m_open_fleet_detail_wnd_connections.end()) { - // sig_it->second.disconnect(); - // m_open_fleet_detail_wnd_connections.erase(sig_it); - // sig_it = m_open_fleet_detail_wnd_connections.begin(); - //} - ClientUI::GetClientUI()->GetMapWnd()->SetProjectedFleetMovement(0, std::list<System*>()); } @@ -1085,13 +1045,13 @@ } GetLayout()->SetBorderMargin(7); - m_misc_connections.insert(GG::Connect(m_fleet_detail_panel->PanelEmptySignal, &FleetWnd::DeleteFleet, this)); - m_misc_connections.insert(GG::Connect(m_fleets_lb->SelChangedSignal, &FleetWnd::FleetSelectionChanged, this)); - m_misc_connections.insert(GG::Connect(m_fleets_lb->RightClickedSignal, &FleetWnd::FleetRightClicked, this)); - m_misc_connections.insert(GG::Connect(m_fleets_lb->DoubleClickedSignal, &FleetWnd::FleetDoubleClicked, this)); - m_misc_connections.insert(GG::Connect(m_fleets_lb->ErasedSignal, &FleetWnd::FleetDeleted, this)); + GG::Connect(m_fleet_detail_panel->PanelEmptySignal, &FleetWnd::DeleteFleet, this); + GG::Connect(m_fleets_lb->SelChangedSignal, &FleetWnd::FleetSelectionChanged, 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); if (!m_read_only) - m_misc_connections.insert(GG::Connect(m_new_fleet_drop_target->NewFleetFromShipsSignal, &FleetWnd::CreateNewFleetFromDrops, this)); + GG::Connect(m_new_fleet_drop_target->NewFleetFromShipsSignal, &FleetWnd::CreateNewFleetFromDrops, this); SetText(TitleText()); @@ -1217,11 +1177,6 @@ window_posn.y = GG::GUI::GetGUI()->AppHeight() - fleet_detail_wnd->Height(); fleet_detail_wnd->MoveTo(window_posn); - m_open_fleet_detail_wnd_connections.insert(std::pair<FleetDetailWnd*, boost::signals::connection>( - fleet_detail_wnd, GG::Connect(fleet_detail_wnd->ClosingSignal, &FleetWnd::FleetDetailWndClosing, this))); - m_open_fleet_detail_wnd_connections.insert(std::pair<FleetDetailWnd*, boost::signals::connection>( - fleet_detail_wnd, GG::Connect(fleet_detail_wnd->PanelEmptySignal, &FleetWnd::DeleteFleet, this))); - GG::GUI::GetGUI()->Register(fleet_detail_wnd); } } @@ -1263,18 +1218,6 @@ std::map<Fleet*, FleetDetailWnd*>::iterator it = m_open_fleet_detail_wnds.find(fleet); if (it != m_open_fleet_detail_wnds.end()) { - - // disconnect all signals attached to this FleetDetailWnd - // find first signal... - std::multimap<FleetDetailWnd*, boost::signals::connection>::iterator sig_it = m_open_fleet_detail_wnd_connections.find(it->second); - while (sig_it != m_open_fleet_detail_wnd_connections.end()) { - // disconnect and remove from map - sig_it->second.disconnect(); - m_open_fleet_detail_wnd_connections.erase(sig_it); - // find next signal, if present, until all signals disconnected and removed - sig_it = m_open_fleet_detail_wnd_connections.find(it->second); - } - delete it->second; m_open_fleet_detail_wnds.erase(it); } @@ -1352,12 +1295,6 @@ for (std::map<Fleet*, FleetDetailWnd*>::iterator it = m_open_fleet_detail_wnds.begin(); it != m_open_fleet_detail_wnds.end(); ++it) { if (it->first == fleet) { FleetDetailWnd* fleet_detail_wnd = it->second; - std::multimap<FleetDetailWnd*, boost::signals::connection>::iterator sig_it = m_open_fleet_detail_wnd_connections.find(fleet_detail_wnd); - while (sig_it != m_open_fleet_detail_wnd_connections.end()) { - sig_it->second.disconnect(); - m_open_fleet_detail_wnd_connections.erase(sig_it); - sig_it = m_open_fleet_detail_wnd_connections.find(fleet_detail_wnd); - } m_open_fleet_detail_wnds.erase(it); delete fleet_detail_wnd; break; Modified: trunk/FreeOrion/UI/FleetWnd.h =================================================================== --- trunk/FreeOrion/UI/FleetWnd.h 2007-07-05 09:26:24 UTC (rev 2125) +++ trunk/FreeOrion/UI/FleetWnd.h 2007-07-06 03:35:56 UTC (rev 2126) @@ -41,8 +41,6 @@ private: std::string TitleText() const; - boost::signals::connection m_panel_empty_connection; - FleetDetailPanel* m_fleet_panel; }; @@ -113,7 +111,6 @@ std::map<Fleet*, FleetDetailWnd*> m_open_fleet_detail_wnds; - std::multimap<FleetDetailWnd*, boost::signals::connection> m_open_fleet_detail_wnd_connections; std::set<boost::signals::connection> m_misc_connections; FleetsListBox* m_fleets_lb; Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-07-05 09:26:24 UTC (rev 2125) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-07-06 03:35:56 UTC (rev 2126) @@ -46,7 +46,7 @@ m_expand_button->SetUnpressedGraphic(GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrownormal.png" ), 0, 0, 32, 32)); m_expand_button->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowclicked.png" ), 0, 0, 32, 32)); m_expand_button->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowmouseover.png"), 0, 0, 32, 32)); - m_misc_connections.insert(GG::Connect(m_expand_button->ClickedSignal, &PopulationPanel::ExpandCollapseButtonPressed, this)); + GG::Connect(m_expand_button->ClickedSignal, &PopulationPanel::ExpandCollapseButtonPressed, this); int icon_size = ClientUI::Pts()*4/3; @@ -308,7 +308,7 @@ m_expand_button->SetUnpressedGraphic(GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrownormal.png" ), 0, 0, 32, 32)); m_expand_button->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowclicked.png" ), 0, 0, 32, 32)); m_expand_button->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowmouseover.png"), 0, 0, 32, 32)); - m_misc_connections.insert(GG::Connect(m_expand_button->ClickedSignal, &ResourcePanel::ExpandCollapseButtonPressed, this)); + GG::Connect(m_expand_button->ClickedSignal, &ResourcePanel::ExpandCollapseButtonPressed, this); int icon_size = ClientUI::Pts()*4/3; @@ -345,8 +345,8 @@ } AttachChild(m_secondary_focus_drop); - m_misc_connections.insert(GG::Connect(m_primary_focus_drop->SelChangedSignal, &ResourcePanel::PrimaryFocusDropListSelectionChanged, this)); - m_misc_connections.insert(GG::Connect(m_secondary_focus_drop->SelChangedSignal, &ResourcePanel::SecondaryFocusDropListSelectionChanged, this)); + GG::Connect(m_primary_focus_drop->SelChangedSignal, &ResourcePanel::PrimaryFocusDropListSelectionChanged, this); + GG::Connect(m_secondary_focus_drop->SelChangedSignal, &ResourcePanel::SecondaryFocusDropListSelectionChanged, this); // resource indicators m_farming_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "farming.png").native_file_string(), GG::CLR_WHITE, @@ -959,7 +959,7 @@ m_expand_button->SetUnpressedGraphic(GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrownormal.png" ), 0, 0, 32, 32)); m_expand_button->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowclicked.png" ), 0, 0, 32, 32)); m_expand_button->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowmouseover.png"), 0, 0, 32, 32)); - m_misc_connections.insert(GG::Connect(m_expand_button->ClickedSignal, &BuildingsPanel::ExpandCollapseButtonPressed, this)); + GG::Connect(m_expand_button->ClickedSignal, &BuildingsPanel::ExpandCollapseButtonPressed, this); // get owners, connect their production queue changed signals to update this panel const std::set<int>& owners = plt.Owners(); @@ -967,7 +967,7 @@ const Empire* empire = Empires().Lookup(*it); if (!empire) continue; // shouldn't be a problem... maybe put check for it later const ProductionQueue& queue = empire->GetProductionQueue(); - m_misc_connections.insert(GG::Connect(queue.ProductionQueueChangedSignal, &BuildingsPanel::Refresh, this)); + GG::Connect(queue.ProductionQueueChangedSignal, &BuildingsPanel::Refresh, this); } Refresh(); Modified: trunk/FreeOrion/UI/ProductionWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ProductionWnd.cpp 2007-07-05 09:26:24 UTC (rev 2125) +++ trunk/FreeOrion/UI/ProductionWnd.cpp 2007-07-06 03:35:56 UTC (rev 2126) @@ -291,13 +291,13 @@ EnableChildClipping(true); - m_misc_connections.insert(GG::Connect(m_build_designator_wnd->AddNamedBuildToQueueSignal, &ProductionWnd::AddBuildToQueueSlot, this)); - m_misc_connections.insert(GG::Connect(m_build_designator_wnd->AddIDedBuildToQueueSignal, &ProductionWnd::AddBuildToQueueSlot, this)); - m_misc_connections.insert(GG::Connect(m_build_designator_wnd->BuildQuantityChangedSignal, &ProductionWnd::ChangeBuildQuantitySlot, this)); - m_misc_connections.insert(GG::Connect(m_build_designator_wnd->SystemSelectedSignal, SystemSelectedSignal)); - m_misc_connections.insert(GG::Connect(m_queue_lb->ErasedSignal, &ProductionWnd::QueueItemDeletedSlot, this)); - m_misc_connections.insert(GG::Connect(m_queue_lb->LeftClickedSignal, &ProductionWnd::QueueItemClickedSlot, this)); - m_misc_connections.insert(GG::Connect(m_queue_lb->DoubleClickedSignal, &ProductionWnd::QueueItemDoubleClickedSlot, this)); + GG::Connect(m_build_designator_wnd->AddNamedBuildToQueueSignal, &ProductionWnd::AddBuildToQueueSlot, this); + GG::Connect(m_build_designator_wnd->AddIDedBuildToQueueSignal, &ProductionWnd::AddBuildToQueueSlot, this); + GG::Connect(m_build_designator_wnd->BuildQuantityChangedSignal, &ProductionWnd::ChangeBuildQuantitySlot, this); + GG::Connect(m_build_designator_wnd->SystemSelectedSignal, SystemSelectedSignal); + GG::Connect(m_queue_lb->ErasedSignal, &ProductionWnd::QueueItemDeletedSlot, this); + GG::Connect(m_queue_lb->LeftClickedSignal, &ProductionWnd::QueueItemClickedSlot, this); + GG::Connect(m_queue_lb->DoubleClickedSignal, &ProductionWnd::QueueItemDoubleClickedSlot, this); AttachChild(m_production_info_panel); AttachChild(m_queue_lb); Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2007-07-05 09:26:24 UTC (rev 2125) +++ trunk/FreeOrion/UI/SidePanel.cpp 2007-07-06 03:35:56 UTC (rev 2126) @@ -432,8 +432,6 @@ ResourcePanel* m_resource_panel; ///< contains info about resources production and focus selection UI BuildingsPanel* m_buildings_panel; ///< contains icons representing buildings SpecialsPanel* m_specials_panel; ///< contains icons representing specials - - std::set<boost::signals::connection> m_misc_connections; }; class SidePanel::PlanetPanelContainer : public GG::Wnd @@ -751,22 +749,22 @@ GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), ClientUI::ButtonColor(), ClientUI::CtrlBorderColor(), 1, ClientUI::TextColor(), GG::CLICKABLE); - m_misc_connections.insert(GG::Connect(m_button_colonize->ClickedSignal, &SidePanel::PlanetPanel::ClickColonize, this)); + GG::Connect(m_button_colonize->ClickedSignal, &SidePanel::PlanetPanel::ClickColonize, this); AttachChild(m_button_colonize); m_population_panel = new PopulationPanel(w - MAX_PLANET_DIAMETER, planet); AttachChild(m_population_panel); - m_misc_connections.insert(GG::Connect(m_population_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this)); + GG::Connect(m_population_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this); m_resource_panel = new ResourcePanel(w - MAX_PLANET_DIAMETER, planet); AttachChild(m_resource_panel); - m_misc_connections.insert(GG::Connect(m_resource_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this)); - m_misc_connections.insert(GG::Connect(m_resource_panel->PrimaryFocusChangedSignal, &SidePanel::PlanetPanel::SetPrimaryFocus, this)); - m_misc_connections.insert(GG::Connect(m_resource_panel->SecondaryFocusChangedSignal, &SidePanel::PlanetPanel::SetSecondaryFocus, this)); + GG::Connect(m_resource_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this); + GG::Connect(m_resource_panel->PrimaryFocusChangedSignal, &SidePanel::PlanetPanel::SetPrimaryFocus, this); + GG::Connect(m_resource_panel->SecondaryFocusChangedSignal, &SidePanel::PlanetPanel::SetSecondaryFocus, this); m_buildings_panel = new BuildingsPanel(w - MAX_PLANET_DIAMETER, 4, planet); AttachChild(m_buildings_panel); - m_misc_connections.insert(GG::Connect(m_buildings_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this)); + GG::Connect(m_buildings_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this); m_specials_panel = new SpecialsPanel(MAX_PLANET_DIAMETER, planet); AttachChild(m_specials_panel); @@ -778,20 +776,14 @@ const Planet *plt = GetUniverse().Object<const Planet>(m_planet_id); if (System* system = plt->GetSystem()) - m_misc_connections.insert(GG::Connect(system->StateChangedSignal, &SidePanel::PlanetPanel::Refresh, this)); - m_misc_connections.insert(GG::Connect(plt->StateChangedSignal, &SidePanel::PlanetPanel::Refresh, this)); + GG::Connect(system->StateChangedSignal, &SidePanel::PlanetPanel::Refresh, this); + GG::Connect(plt->StateChangedSignal, &SidePanel::PlanetPanel::Refresh, this); Refresh(); } SidePanel::PlanetPanel::~PlanetPanel() { - // disconnect all signals - while (!m_misc_connections.empty()) { - m_misc_connections.begin()->disconnect(); - m_misc_connections.erase(m_misc_connections.begin()); - } - delete m_button_colonize; delete m_env_size; Modified: trunk/FreeOrion/UI/TechTreeWnd.cpp =================================================================== --- trunk/FreeOrion/UI/TechTreeWnd.cpp 2007-07-05 09:26:24 UTC (rev 2125) +++ trunk/FreeOrion/UI/TechTreeWnd.cpp 2007-07-06 03:35:56 UTC (rev 2126) @@ -931,8 +931,6 @@ void DoLayout(); - std::set<boost::signals::connection> m_row_connections; - const Tech* m_current_tech; GG::ListBox* m_lb; }; @@ -956,7 +954,7 @@ GG::ListBox::Row* TechTreeWnd::TechNavigator::NewTechRow(const Tech* tech) { TechControl* control = new TechControl(tech); - m_row_connections.insert(GG::Connect(control->ClickedSignal, &TechTreeWnd::TechNavigator::TechClickedSlot, this)); + GG::Connect(control->ClickedSignal, &TechTreeWnd::TechNavigator::TechClickedSlot, this); GG::ListBox::Row* retval = new GG::ListBox::Row(m_lb->Width(), 3*ClientUI::Pts()/2 + 4, ""); retval->push_back(control); return retval; @@ -964,12 +962,6 @@ void TechTreeWnd::TechNavigator::Reset() { - // disconnect all signals - while (!m_row_connections.empty()) { - m_row_connections.begin()->disconnect(); - m_row_connections.erase(m_row_connections.begin()); - } - m_lb->Clear(); if (!m_current_tech) return; @@ -1268,8 +1260,6 @@ std::map<const Tech*, TechPanel*> m_techs; DependencyArcsMapsByArcType m_dependency_arcs; - std::set<boost::signals::connection> m_tech_connections; - LayoutSurface* m_layout_surface; CUIScroll* m_vscroll; CUIScroll* m_hscroll; @@ -1714,11 +1704,6 @@ for (std::map<const Tech*, TechPanel*>::const_iterator it = m_techs.begin(); it != m_techs.end(); ++it) { delete it->second; } - // disconnect all tech signals - while (!m_tech_connections.empty()) { - m_tech_connections.begin()->disconnect(); - m_tech_connections.erase(m_tech_connections.begin()); - } m_techs.clear(); m_dependency_arcs.clear(); m_selected_tech = 0; @@ -1887,10 +1872,10 @@ m_techs[tech]->MoveTo(GG::Pt(static_cast<int>(PS2INCH(ND_coord_i(node).x) - m_techs[tech]->Width() / 2 + TECH_PANEL_MARGIN_X), static_cast<int>(PS2INCH(ND_coord_i(node).y) - (m_techs[tech]->Height() - PROGRESS_PANEL_BOTTOM_EXTRUSION * m_scale) / 2 + TECH_PANEL_MARGIN_Y))); m_layout_surface->AttachChild(m_techs[tech]); - m_tech_connections.insert(GG::Connect(m_techs[tech]->TechBrowsedSignal, &TechTreeWnd::LayoutPanel::TechBrowsedSlot, this)); - m_tech_connections.insert(GG::Connect(m_techs[tech]->TechClickedSignal, &TechTreeWnd::LayoutPanel::TechClickedSlot, this)); - m_tech_connections.insert(GG::Connect(m_techs[tech]->TechDoubleClickedSignal, &TechTreeWnd::LayoutPanel::TechDoubleClickedSlot, this)); - m_tech_connections.insert(GG::Connect(m_techs[tech]->ZoomedSignal, &TechTreeWnd::LayoutPanel::TreeZoomedSlot, this)); + GG::Connect(m_techs[tech]->TechBrowsedSignal, &TechTreeWnd::LayoutPanel::TechBrowsedSlot, this); + GG::Connect(m_techs[tech]->TechClickedSignal, &TechTreeWnd::LayoutPanel::TechClickedSlot, this); + GG::Connect(m_techs[tech]->TechDoubleClickedSignal, &TechTreeWnd::LayoutPanel::TechDoubleClickedSlot, this); + GG::Connect(m_techs[tech]->ZoomedSignal, &TechTreeWnd::LayoutPanel::TreeZoomedSlot, this); for (Agedge_t* edge = agfstout(graph, node); edge; edge = agnxtout(graph, edge)) { const Tech* from = tech; |
From: <geo...@us...> - 2007-07-08 23:07:36
|
Revision: 2134 http://svn.sourceforge.net/freeorion/revision/?rev=2134&view=rev Author: geoffthemedio Date: 2007-07-08 16:07:38 -0700 (Sun, 08 Jul 2007) Log Message: ----------- In manner described in Boost documentation, made a FlexibleFormat function that wraps boost::format so that it doesn't throw an exception when formatting a string that has different numbers of expected and provided parameters. Put this function to work in a few recently-added stringtable cases which I suspect were causing [ 1750004 ] Opening Sidepanel crashes game when using non-english stringtables that weren't updated with recently-added strings. Modified Paths: -------------- trunk/FreeOrion/UI/CUIControls.cpp trunk/FreeOrion/UI/ClientUI.cpp trunk/FreeOrion/UI/ClientUI.h trunk/FreeOrion/UI/InfoPanels.cpp Modified: trunk/FreeOrion/UI/CUIControls.cpp =================================================================== --- trunk/FreeOrion/UI/CUIControls.cpp 2007-07-08 21:43:05 UTC (rev 2133) +++ trunk/FreeOrion/UI/CUIControls.cpp 2007-07-08 23:07:38 UTC (rev 2134) @@ -1527,7 +1527,7 @@ void FPSIndicator::Render() { if (m_enabled) { - SetText(boost::io::str(boost::format(UserString("MAP_INDICATOR_FPS")) % static_cast<int>(GG::GUI::GetGUI()->FPS()))); + SetText(boost::io::str(FlexibleFormat(UserString("MAP_INDICATOR_FPS")) % static_cast<int>(GG::GUI::GetGUI()->FPS()))); TextControl::Render(); } } Modified: trunk/FreeOrion/UI/ClientUI.cpp =================================================================== --- trunk/FreeOrion/UI/ClientUI.cpp 2007-07-08 21:43:05 UTC (rev 2133) +++ trunk/FreeOrion/UI/ClientUI.cpp 2007-07-08 23:07:38 UTC (rev 2134) @@ -752,3 +752,8 @@ return is; } +boost::format FlexibleFormat(const std::string &string_to_format) { + boost::format retval(string_to_format); + retval.exceptions(boost::io::all_error_bits ^ (boost::io::too_many_args_bit | boost::io::too_few_args_bit)); + return retval; +} \ No newline at end of file Modified: trunk/FreeOrion/UI/ClientUI.h =================================================================== --- trunk/FreeOrion/UI/ClientUI.h 2007-07-08 21:43:05 UTC (rev 2133) +++ trunk/FreeOrion/UI/ClientUI.h 2007-07-08 23:07:38 UTC (rev 2134) @@ -15,8 +15,8 @@ #endif #include <boost/filesystem/path.hpp> +#include <boost/format.hpp> - class ClientNetworkCore; class Combat; class Fleet; @@ -260,5 +260,7 @@ std::ostream& operator<<(std::ostream& os, const StreamableColor& clr); std::istream& operator>>(std::istream& is, StreamableColor& clr); +/** Wraps boost::format such that it won't crash if passed the wrong number of arguments */ +boost::format FlexibleFormat(const std::string &string_to_format); #endif // _ClientUI_h_ Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-07-08 21:43:05 UTC (rev 2133) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-07-08 23:07:38 UTC (rev 2134) @@ -243,7 +243,7 @@ change = pop->FuturePopGrowth(); next = current + change; max = pop->MaxPop(); - text = boost::io::str(boost::format(UserString("PP_POPULATION_TOOLTIP")) % current % next % change % max); + text = boost::io::str(FlexibleFormat(UserString("PP_POPULATION_TOOLTIP")) % current % next % change % max); m_pop_stat->SetBrowseText(text); m_health_stat->SetValue(pop->Health()); @@ -252,7 +252,7 @@ change = pop->FutureHealthGrowth(); next = current + change; max = pop->MaxHealth(); - text = boost::io::str(boost::format(UserString("PP_HEALTH_TOOLTIP")) % current % next % change % max); + text = boost::io::str(FlexibleFormat(UserString("PP_HEALTH_TOOLTIP")) % current % next % change % max); m_health_stat->SetBrowseText(text); // meter bar display @@ -683,7 +683,7 @@ current = res->FarmingPoints(); next = res->ProjectedFarmingPoints(); change = next - current; - text = boost::io::str(boost::format(UserString("RP_FOOD_TOOLTIP")) % current % next % change); + text = boost::io::str(FlexibleFormat(UserString("RP_FOOD_TOOLTIP")) % current % next % change); m_farming_stat->SetBrowseText(text); m_mining_stat->SetValue(res->MiningPoints()); @@ -691,7 +691,7 @@ current = res->MiningPoints(); next = res->ProjectedMiningPoints(); change = next - current; - text = boost::io::str(boost::format(UserString("RP_MINERALS_TOOLTIP")) % current % next % change); + text = boost::io::str(FlexibleFormat(UserString("RP_MINERALS_TOOLTIP")) % current % next % change); m_mining_stat->SetBrowseText(text); m_industry_stat->SetValue(res->IndustryPoints()); @@ -699,7 +699,7 @@ current = res->IndustryPoints(); next = res->ProjectedIndustryPoints(); change = next - current; - text = boost::io::str(boost::format(UserString("RP_INDUSTRY_TOOLTIP")) % current % next % change); + text = boost::io::str(FlexibleFormat(UserString("RP_INDUSTRY_TOOLTIP")) % current % next % change); m_industry_stat->SetBrowseText(text); m_research_stat->SetValue(res->ResearchPoints()); @@ -707,7 +707,7 @@ current = res->ResearchPoints(); next = res->ProjectedResearchPoints(); change = next - current; - text = boost::io::str(boost::format(UserString("RP_RESEARCH_TOOLTIP")) % current % next % change); + text = boost::io::str(FlexibleFormat(UserString("RP_RESEARCH_TOOLTIP")) % current % next % change); m_research_stat->SetBrowseText(text); m_trade_stat->SetValue(res->TradePoints()); @@ -715,7 +715,7 @@ current = res->TradePoints(); next = res->ProjectedTradePoints(); change = next - current; - text = boost::io::str(boost::format(UserString("RP_TRADE_TOOLTIP")) % current % next % change); + text = boost::io::str(FlexibleFormat(UserString("RP_TRADE_TOOLTIP")) % current % next % change); m_trade_stat->SetBrowseText(text); m_construction_stat->SetValue(res->ConstructionMeter().Current()); @@ -724,7 +724,7 @@ next = res->ProjectedCurrent(METER_CONSTRUCTION); change = next - current; max = res->ConstructionMeter().Max(); - text = boost::io::str(boost::format(UserString("RP_CONSTRUCTION_TOOLTIP")) % current % next % change % max); + text = boost::io::str(FlexibleFormat(UserString("RP_CONSTRUCTION_TOOLTIP")) % current % next % change % max); m_construction_stat->SetBrowseText(text); // meter bar display @@ -750,31 +750,31 @@ { case FOCUS_BALANCED: m_primary_focus_drop->Select(0); - text = boost::io::str(boost::format(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_BALANCED")); + text = boost::io::str(FlexibleFormat(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_BALANCED")); break; case FOCUS_FARMING: m_primary_focus_drop->Select(1); - text = boost::io::str(boost::format(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_FARMING")); + text = boost::io::str(FlexibleFormat(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_FARMING")); break; case FOCUS_MINING: m_primary_focus_drop->Select(2); - text = boost::io::str(boost::format(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_MINING")); + text = boost::io::str(FlexibleFormat(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_MINING")); break; case FOCUS_INDUSTRY: m_primary_focus_drop->Select(3); - text = boost::io::str(boost::format(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_INDUSTRY")); + text = boost::io::str(FlexibleFormat(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_INDUSTRY")); break; case FOCUS_RESEARCH: m_primary_focus_drop->Select(4); - text = boost::io::str(boost::format(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_RESEARCH")); + text = boost::io::str(FlexibleFormat(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_RESEARCH")); break; case FOCUS_TRADE: m_primary_focus_drop->Select(5); - text = boost::io::str(boost::format(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_TRADE")); + text = boost::io::str(FlexibleFormat(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_TRADE")); break; default: m_primary_focus_drop->Select(-1); - text = boost::io::str(boost::format(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_UNKNOWN")); + text = boost::io::str(FlexibleFormat(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_UNKNOWN")); break; } m_primary_focus_drop->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); @@ -784,31 +784,31 @@ { case FOCUS_BALANCED: m_secondary_focus_drop->Select(0); - text = boost::io::str(boost::format(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_BALANCED")); + text = boost::io::str(FlexibleFormat(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_BALANCED")); break; case FOCUS_FARMING: m_secondary_focus_drop->Select(1); - text = boost::io::str(boost::format(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_FARMING")); + text = boost::io::str(FlexibleFormat(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_FARMING")); break; case FOCUS_MINING: m_secondary_focus_drop->Select(2); - text = boost::io::str(boost::format(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_MINING")); + text = boost::io::str(FlexibleFormat(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_MINING")); break; case FOCUS_INDUSTRY: m_secondary_focus_drop->Select(3); - text = boost::io::str(boost::format(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_INDUSTRY")); + text = boost::io::str(FlexibleFormat(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_INDUSTRY")); break; case FOCUS_RESEARCH: m_secondary_focus_drop->Select(4); - text = boost::io::str(boost::format(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_RESEARCH")); + text = boost::io::str(FlexibleFormat(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_RESEARCH")); break; case FOCUS_TRADE: m_secondary_focus_drop->Select(5); - text = boost::io::str(boost::format(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_TRADE")); + text = boost::io::str(FlexibleFormat(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_TRADE")); break; default: m_secondary_focus_drop->Select(-1); - text = boost::io::str(boost::format(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_UNKNOWN")); + text = boost::io::str(FlexibleFormat(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_UNKNOWN")); break; } m_secondary_focus_drop->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); @@ -1253,7 +1253,7 @@ SetText(UserString(type.Name()) + " BuildingIndicator"); SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); - SetBrowseText(boost::io::str(boost::format(UserString("BP_COMPLETE_BUILDING_TOOLTIP")) % + SetBrowseText(boost::io::str(FlexibleFormat(UserString("BP_COMPLETE_BUILDING_TOOLTIP")) % UserString(type.Name()) % UserString(type.Description()))); boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / type.Graphic()); @@ -1271,7 +1271,7 @@ SetText(UserString(type.Name()) + " BuildingIndicator"); SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); - SetBrowseText(boost::io::str(boost::format(UserString("BP_INCOMPLETE_BUILDING_TOOLTIP")) % + SetBrowseText(boost::io::str(FlexibleFormat(UserString("BP_INCOMPLETE_BUILDING_TOOLTIP")) % UserString(type.Name()) % UserString(type.Description()))); boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / type.Graphic()); |
From: <tz...@us...> - 2007-07-21 03:53:22
|
Revision: 2187 http://svn.sourceforge.net/freeorion/revision/?rev=2187&view=rev Author: tzlaine Date: 2007-07-20 20:53:01 -0700 (Fri, 20 Jul 2007) Log Message: ----------- Changed the splash graphics so that clicks do not fall through them. This fixes the problem of being able to grab the MapWnd through the splash screen. Modified Paths: -------------- trunk/FreeOrion/UI/IntroScreen.cpp trunk/FreeOrion/UI/TurnProgressWnd.cpp Modified: trunk/FreeOrion/UI/IntroScreen.cpp =================================================================== --- trunk/FreeOrion/UI/IntroScreen.cpp 2007-07-21 02:52:07 UTC (rev 2186) +++ trunk/FreeOrion/UI/IntroScreen.cpp 2007-07-21 03:53:01 UTC (rev 2187) @@ -141,13 +141,13 @@ m_credits_wnd(0), m_splash(new GG::StaticGraphic(0, 0, GG::GUI::GetGUI()->AppWidth(), GG::GUI::GetGUI()->AppHeight(), ClientUI::GetTexture(ClientUI::ArtDir() / "splash.png"), - GG::GR_FITGRAPHIC)), + GG::GR_FITGRAPHIC, GG::CLICKABLE)), m_logo(new GG::StaticGraphic(0, 0, GG::GUI::GetGUI()->AppWidth(), GG::GUI::GetGUI()->AppHeight() / 10, ClientUI::GetTexture(ClientUI::ArtDir() / "logo.png"), GG::GR_FITGRAPHIC | GG::GR_PROPSCALE)) { + m_splash->AttachChild(m_logo); GG::GUI::GetGUI()->Register(m_splash); - GG::GUI::GetGUI()->Register(m_logo); //create buttons m_single_player = new CUIButton(15, 12, 160, UserString("INTRO_BTN_SINGLE_PLAYER")); Modified: trunk/FreeOrion/UI/TurnProgressWnd.cpp =================================================================== --- trunk/FreeOrion/UI/TurnProgressWnd.cpp 2007-07-21 02:52:07 UTC (rev 2186) +++ trunk/FreeOrion/UI/TurnProgressWnd.cpp 2007-07-21 03:53:01 UTC (rev 2187) @@ -23,15 +23,15 @@ GG::GUI::GetGUI()->AppWidth(), PROGRESS_WND_HEIGHT, GG::ONTOP | GG::CLICKABLE), m_splash(new GG::StaticGraphic(0, 0, GG::GUI::GetGUI()->AppWidth(), GG::GUI::GetGUI()->AppHeight(), ClientUI::GetTexture(ClientUI::ArtDir() / "splash.png"), - GG::GR_FITGRAPHIC)), + GG::GR_FITGRAPHIC, GG::CLICKABLE)), m_logo(new GG::StaticGraphic(0, 0, GG::GUI::GetGUI()->AppWidth(), GG::GUI::GetGUI()->AppHeight() / 10, ClientUI::GetTexture(ClientUI::ArtDir() / "logo.png"), GG::GR_FITGRAPHIC | GG::GR_PROPSCALE)) { SetText(UserString("TURN_PROGRESS_WND")); + m_splash->AttachChild(m_logo); GG::GUI::GetGUI()->Register(m_splash); - GG::GUI::GetGUI()->Register(m_logo); m_phase_text = new GG::TextControl(0, 20, Width(), ClientUI::Pts() * 2 + 4, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts() * 2), ClientUI::TextColor(), GG::TF_CENTER | GG::TF_VCENTER); m_empire_text = new GG::TextControl(0, 50, Width(), ClientUI::Pts() * 2 + 4, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts() * 2), ClientUI::TextColor(), GG::TF_CENTER | GG::TF_VCENTER); |
From: <geo...@us...> - 2007-07-23 10:33:49
|
Revision: 2195 http://svn.sourceforge.net/freeorion/revision/?rev=2195&view=rev Author: geoffthemedio Date: 2007-07-23 03:33:48 -0700 (Mon, 23 Jul 2007) Log Message: ----------- Gave SitRep top right click X to close button Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/SitRepPanel.cpp trunk/FreeOrion/UI/SitRepPanel.h Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2007-07-21 21:40:36 UTC (rev 2194) +++ trunk/FreeOrion/UI/MapWnd.cpp 2007-07-23 10:33:48 UTC (rev 2195) @@ -180,6 +180,7 @@ GG::Connect(m_side_panel->ResourceCenterChangedSignal, &MapWnd::UpdateMetersAndResourcePools, this); // something in sidepanel changed resource pool(s), so need to recalculate and update meteres and resource pools and refresh their indicators m_sitrep_panel = new SitRepPanel( (GG::GUI::GetGUI()->AppWidth()-SITREP_PANEL_WIDTH)/2, (GG::GUI::GetGUI()->AppHeight()-SITREP_PANEL_HEIGHT)/2, SITREP_PANEL_WIDTH, SITREP_PANEL_HEIGHT ); + GG::Connect(m_sitrep_panel->ClosingSignal, BoolToVoidAdapter(boost::bind(&MapWnd::ToggleSitRep, this))); // sitrep panel is manually closed by user m_research_wnd = new ResearchWnd(GG::GUI::GetGUI()->AppWidth(), GG::GUI::GetGUI()->AppHeight() - m_toolbar->Height()); m_research_wnd->MoveTo(GG::Pt(0, m_toolbar->Height())); Modified: trunk/FreeOrion/UI/SitRepPanel.cpp =================================================================== --- trunk/FreeOrion/UI/SitRepPanel.cpp 2007-07-21 21:40:36 UTC (rev 2194) +++ trunk/FreeOrion/UI/SitRepPanel.cpp 2007-07-23 10:33:48 UTC (rev 2195) @@ -17,7 +17,7 @@ SitRepPanel::SitRepPanel(int x, int y, int w, int h) : - CUIWnd(UserString("SITREP_PANEL_TITLE"), x, y, w, h, GG::ONTOP | GG::CLICKABLE | GG::DRAGABLE | GG::RESIZABLE) + CUIWnd(UserString("SITREP_PANEL_TITLE"), x, y, w, h, GG::ONTOP | GG::CLICKABLE | GG::DRAGABLE | GG::RESIZABLE | CLOSABLE) { TempUISoundDisabler sound_disabler; m_sitreps_lb = new CUIListBox(SITREP_LB_MARGIN_X, SITREP_LB_MARGIN_Y, @@ -25,6 +25,7 @@ m_sitreps_lb->SetStyle(GG::LB_NOSORT); AttachChild(m_sitreps_lb); + EnableChildClipping(false); Hide(); } @@ -60,6 +61,11 @@ Hide(); } +void SitRepPanel::CloseClicked() +{ + ClosingSignal(); +} + void SitRepPanel::Update() { Empire *empire = HumanClientApp::GetApp()->Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); Modified: trunk/FreeOrion/UI/SitRepPanel.h =================================================================== --- trunk/FreeOrion/UI/SitRepPanel.h 2007-07-21 21:40:36 UTC (rev 2194) +++ trunk/FreeOrion/UI/SitRepPanel.h 2007-07-23 10:33:48 UTC (rev 2195) @@ -15,6 +15,10 @@ class SitRepPanel : public CUIWnd { public: + /** \name Signal Types */ //@{ + typedef boost::signal<void ()> ClosingSignalType; ///< emitted when the window is manually closed by user by clicking on the sitrep panel itself + //@} + /** \name Structors */ //@{ SitRepPanel(int x, int y, int w, int h); ///< basic ctor //@} @@ -26,8 +30,13 @@ void Update(); ///< loads all the relevant SitReps into the window virtual void OnClose(); + + mutable ClosingSignalType ClosingSignal; //@} +protected: + virtual void CloseClicked(); + private: CUIListBox* m_sitreps_lb; }; |
From: <tz...@us...> - 2007-08-04 03:35:19
|
Revision: 2206 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2206&view=rev Author: tzlaine Date: 2007-08-03 20:35:21 -0700 (Fri, 03 Aug 2007) Log Message: ----------- Updated to reflect recent GG::Texture API changes. Modified Paths: -------------- trunk/FreeOrion/UI/ClientUI.h trunk/FreeOrion/UI/CombatWnd.cpp trunk/FreeOrion/UI/FocusSelector.cpp trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/ClientUI.h =================================================================== --- trunk/FreeOrion/UI/ClientUI.h 2007-08-04 03:13:27 UTC (rev 2205) +++ trunk/FreeOrion/UI/ClientUI.h 2007-08-04 03:35:21 UTC (rev 2206) @@ -79,7 +79,7 @@ static void GenerateSitRepText(SitRepEntry *sit_rep); ///< generates a SitRep string from \a sit_rep. - /** Loads the requested texture from file \a name; mipmap textures are generated if \a mipmap is true load default + /** Loads the requested texture from file \a name; mipmap textures are generated if \a mipmap is true; loads default missing.png if name isn't found. */ static boost::shared_ptr<GG::Texture> GetTexture(const boost::filesystem::path& path, bool mipmap = false); Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2007-08-04 03:13:27 UTC (rev 2205) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2007-08-04 03:35:21 UTC (rev 2206) @@ -117,8 +117,8 @@ GG::FlatRectangle(col.Left(), col.Top()+38, col.Right()+2, col.Bottom(), GG::CLR_ZERO,border_color, 2); glColor(ClientUI::TextColor()); - img_topic[c] .OrthoBlit(col.UpperLeft()+item_img_topic .UpperLeft(),col.UpperLeft()+item_img_topic .LowerRight(), false); - img_arrow_split .OrthoBlit(col.UpperLeft()+item_img_arrow_split.UpperLeft(),col.UpperLeft()+item_img_arrow_split.LowerRight(), false); + img_topic[c] .OrthoBlit(col.UpperLeft()+item_img_topic .UpperLeft(),col.UpperLeft()+item_img_topic .LowerRight()); + img_arrow_split .OrthoBlit(col.UpperLeft()+item_img_arrow_split.UpperLeft(),col.UpperLeft()+item_img_arrow_split.LowerRight()); font = HumanClientApp::GetApp()->GetFont(ClientUI::Font(), static_cast<int>(ClientUI::Pts()*1.0)); for(unsigned int j=0;j<4;j++) Modified: trunk/FreeOrion/UI/FocusSelector.cpp =================================================================== --- trunk/FreeOrion/UI/FocusSelector.cpp 2007-08-04 03:13:27 UTC (rev 2205) +++ trunk/FreeOrion/UI/FocusSelector.cpp 2007-08-04 03:35:21 UTC (rev 2206) @@ -58,7 +58,7 @@ GG::FlatRectangle(ul.x, ul.y, lr.x, lr.y, GG::CLR_SHADOW, GG::CLR_ZERO, 0); if (m_texture) { glColor(GG::CLR_WHITE); - m_texture->OrthoBlit(ul, lr, 0, false); + m_texture->OrthoBlit(ul, lr, 0); } } Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2007-08-04 03:13:27 UTC (rev 2205) +++ trunk/FreeOrion/UI/MapWnd.cpp 2007-08-04 03:35:21 UTC (rev 2206) @@ -1138,7 +1138,7 @@ while (x < app_width + bg_width) { y = std::fmod(m_bg_position_Y[i], bg_height); while (y < app_height + bg_height) { - m_backgrounds[i]->OrthoBlit(static_cast<int>(x - bg_width), static_cast<int>(y - bg_height), false); + m_backgrounds[i]->OrthoBlit(GG::Pt(static_cast<int>(x - bg_width), static_cast<int>(y - bg_height))); y += m_backgrounds[i]->Height(); } x += m_backgrounds[i]->Width(); @@ -1155,9 +1155,7 @@ static_cast<int>((m_nebula_centers[i].y - nebula_height / 2.0) * m_zoom_factor)); m_nebulae[i]->OrthoBlit(ul, ul + GG::Pt(static_cast<int>(nebula_width * m_zoom_factor), - static_cast<int>(nebula_height * m_zoom_factor)), - 0, - false); + static_cast<int>(nebula_height * m_zoom_factor))); } } Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2007-08-04 03:13:27 UTC (rev 2205) +++ trunk/FreeOrion/UI/SidePanel.cpp 2007-08-04 03:35:21 UTC (rev 2206) @@ -540,11 +540,10 @@ double x_scale = PlanetDiameter(m_size) / static_cast<double>(texture_w); double y_scale = PlanetDiameter(m_size) / static_cast<double>(texture_h); glColor4ub(255, 255, 255, m_atmosphere_alpha); - m_atmosphere_texture->OrthoBlit(static_cast<int>(ul.x - m_atmosphere_planet_rect.ul.x * x_scale), - static_cast<int>(ul.y - m_atmosphere_planet_rect.ul.y * y_scale), - static_cast<int>(lr.x + (texture_w - m_atmosphere_planet_rect.lr.x) * x_scale), - static_cast<int>(lr.y + (texture_h - m_atmosphere_planet_rect.lr.y) * y_scale), - 0, false); + m_atmosphere_texture->OrthoBlit(GG::Pt(static_cast<int>(ul.x - m_atmosphere_planet_rect.ul.x * x_scale), + static_cast<int>(ul.y - m_atmosphere_planet_rect.ul.y * y_scale)), + GG::Pt(static_cast<int>(lr.x + (texture_w - m_atmosphere_planet_rect.lr.x) * x_scale), + static_cast<int>(lr.y + (texture_h - m_atmosphere_planet_rect.lr.y) * y_scale))); } } @@ -1223,7 +1222,7 @@ //farming glColor(ClientUI::TextColor()); - icon=IconFarming(); icon->OrthoBlit(x,y,x+font->Height(),y+font->Height(), 0, false); + icon=IconFarming(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); //x+=font->Height(); text = (farming<0?"-":"+") + lexical_cast<std::string>(farming); font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); @@ -1232,7 +1231,7 @@ //mining glColor(ClientUI::TextColor()); - icon=IconMining(); icon->OrthoBlit(x,y,x+font->Height(),y+font->Height(), 0, false); + icon=IconMining(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); //x+=font->Height(); text = (mining<0?"-":"+") + lexical_cast<std::string>(mining); font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); @@ -1241,7 +1240,7 @@ //trade glColor(ClientUI::TextColor()); - icon=IconTrade(); icon->OrthoBlit(x,y,x+font->Height(),y+font->Height(), 0, false); + icon=IconTrade(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); //x+=font->Height(); text = (trade<0?"-":"+") + lexical_cast<std::string>(trade); font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); @@ -1250,7 +1249,7 @@ //research glColor(ClientUI::TextColor()); - icon=IconResearch(); icon->OrthoBlit(x,y,x+font->Height(),y+font->Height(), 0, false); + icon=IconResearch(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); //x+=font->Height(); text = (research<0?"-":"+") + lexical_cast<std::string>(research); font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); @@ -1259,7 +1258,7 @@ //industy glColor(ClientUI::TextColor()); - icon=IconIndustry(); icon->OrthoBlit(x,y,x+font->Height(),y+font->Height(), 0, false); + icon=IconIndustry(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); //x+=font->Height(); text = (industry<0?"-":"+") + lexical_cast<std::string>(industry); font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); @@ -1268,7 +1267,7 @@ //defense glColor(ClientUI::TextColor()); - icon=IconDefense(); icon->OrthoBlit(x,y,x+font->Height(),y+font->Height(), 0, false); + icon=IconDefense(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); //x+=font->Height(); text = lexical_cast<std::string>(defense)+"/"+lexical_cast<std::string>(defense*3); font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); |
From: <tz...@us...> - 2007-08-05 02:18:23
|
Revision: 2213 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2213&view=rev Author: tzlaine Date: 2007-08-04 19:18:17 -0700 (Sat, 04 Aug 2007) Log Message: ----------- Small changes to accomodate recent GG API changes. Modified Paths: -------------- trunk/FreeOrion/UI/CUIControls.cpp trunk/FreeOrion/UI/CUIControls.h trunk/FreeOrion/UI/CUIStyle.cpp trunk/FreeOrion/UI/CUIStyle.h trunk/FreeOrion/UI/CUIWnd.cpp trunk/FreeOrion/UI/CUIWnd.h trunk/FreeOrion/UI/CombatWnd.cpp trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/FleetWnd.h trunk/FreeOrion/UI/FocusSelector.cpp trunk/FreeOrion/UI/GalaxySetupWnd.cpp trunk/FreeOrion/UI/LinkText.cpp trunk/FreeOrion/UI/LinkText.h trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h trunk/FreeOrion/UI/OptionsWnd.cpp trunk/FreeOrion/UI/ProductionWnd.cpp trunk/FreeOrion/UI/ResearchWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp trunk/FreeOrion/UI/SystemIcon.cpp trunk/FreeOrion/UI/SystemIcon.h Modified: trunk/FreeOrion/UI/CUIControls.cpp =================================================================== --- trunk/FreeOrion/UI/CUIControls.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/CUIControls.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -109,7 +109,7 @@ struct ColorSquare : GG::Control { ColorSquare(const GG::Clr& color, int h) : - GG::Control(0, 0, COLOR_SELECTOR_WIDTH - 40, h, 0) + GG::Control(0, 0, COLOR_SELECTOR_WIDTH - 40, h, GG::Flags<GG::WndFlag>()) { SetColor(color); } @@ -131,7 +131,7 @@ CUIButton::CUIButton(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font/* = boost::shared_ptr<GG::Font>()*/, GG::Clr color/* = ClientUI::ButtonColor()*/, GG::Clr border/* = ClientUI::CtrlBorderColor()*/, int thick/* = 2*/, - GG::Clr text_color/* = ClientUI::TextColor()*/, Uint32 flags/* = GG::CLICKABLE*/) : + GG::Clr text_color/* = ClientUI::TextColor()*/, GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) : Button(x, y, w, FontOrDefaultFont(font)->Lineskip() + 6, str, FontOrDefaultFont(font), color, text_color, flags), m_border_color(border), m_border_thick(thick) @@ -233,7 +233,7 @@ CUITurnButton::CUITurnButton(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font/* = boost::shared_ptr<GG::Font>()*/, GG::Clr color/* = ClientUI::ButtonColor()*/, GG::Clr border/* = ClientUI::CtrlBorderColor()*/, int thick/* = 2*/, - GG::Clr text_color/* = ClientUI::TextColor()*/, Uint32 flags/* = GG::CLICKABLE*/) : + GG::Clr text_color/* = ClientUI::TextColor()*/, GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) : CUIButton(x, y, w, str, FontOrDefaultFont(font), color, border, thick, text_color, flags) { GG::Connect(ClickedSignal, &PlayTurnButtonClickSound, -1); @@ -243,7 +243,7 @@ /////////////////////////////////////// // class CUIArrowButton /////////////////////////////////////// -CUIArrowButton::CUIArrowButton(int x, int y, int w, int h, ShapeOrientation orientation, GG::Clr color, Uint32 flags/* = GG::CLICKABLE*/) : +CUIArrowButton::CUIArrowButton(int x, int y, int w, int h, ShapeOrientation orientation, GG::Clr color, GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) : Button(x, y, w, h, "", boost::shared_ptr<GG::Font>(), color, GG::CLR_ZERO, flags), m_orientation(orientation), m_fill_background_with_wnd_color (false) @@ -315,7 +315,7 @@ CUIStateButton::CUIStateButton(int x, int y, int w, int h, const std::string& str, Uint32 text_fmt, GG::StateButtonStyle style/* = GG::SBSTYLE_3D_CHECKBOX*/, GG::Clr color/* = ClientUI::StateButtonColor()*/, const boost::shared_ptr<GG::Font>& font/* = boost::shared_ptr<GG::Font>()*/, GG::Clr text_color/* = ClientUI::TextColor()*/, GG::Clr interior/* = GG::CLR_ZERO*/, - GG::Clr border/* = ClientUI::CtrlBorderColor()*/, Uint32 flags/* = GG::CLICKABLE*/) : + GG::Clr border/* = ClientUI::CtrlBorderColor()*/, GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) : StateButton(x, y, w, h, str, FontOrDefaultFont(font), text_fmt, color, text_color, interior, style, flags), m_border_color(border), m_mouse_here(false) @@ -584,7 +584,7 @@ /////////////////////////////////////// CUIScroll::CUIScroll(int x, int y, int w, int h, GG::Orientation orientation, GG::Clr color/* = GG::CLR_ZERO*/, GG::Clr border/* = ClientUI::CtrlBorderColor()*/, GG::Clr interior/* = GG::CLR_ZERO*/, - Uint32 flags/* = CLICKABLE | REPEAT_BUTTON_DOWN*/) : + GG::Flags<GG::WndFlag> flags/* = CLICKABLE | REPEAT_BUTTON_DOWN*/) : Scroll(x, y, w, h, orientation, color, interior, flags), m_border_color(border) {} @@ -613,7 +613,7 @@ // class CUIListBox /////////////////////////////////////// CUIListBox::CUIListBox(int x, int y, int w, int h, GG::Clr color/* = ClientUI::CtrlBorderColor()*/, - GG::Clr interior/* = GG::CLR_ZERO*/, Uint32 flags/* = CLICKABLE*/) : + GG::Clr interior/* = GG::CLR_ZERO*/, GG::Flags<GG::WndFlag> flags/* = CLICKABLE*/) : ListBox(x, y, w, h, color, interior, flags) { RecreateScrolls(); @@ -641,7 +641,7 @@ } CUIDropDownList::CUIDropDownList(int x, int y, int w, int h, int drop_ht, GG::Clr color/* = ClientUI::CtrlBorderColor()*/, - GG::Clr interior/* = ClientUI::DropDownListIntColor()*/, Uint32 flags/* = CLICKABLE*/) : + GG::Clr interior/* = ClientUI::DropDownListIntColor()*/, GG::Flags<GG::WndFlag> flags/* = CLICKABLE*/) : DropDownList(x, y, w, h, drop_ht, color), m_render_drop_arrow(true), m_mouse_here(false) @@ -716,7 +716,7 @@ CUIEdit::CUIEdit(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font/* = boost::shared_ptr<GG::Font>()*/, GG::Clr color/* = ClientUI::CtrlBorderColor()*/, GG::Clr text_color/* = ClientUI::TextColor()*/, GG::Clr interior/* = ClientUI::EditIntColor()*/, - Uint32 flags/* = CLICKABLE*/) : + GG::Flags<GG::WndFlag> flags/* = CLICKABLE*/) : Edit(x, y, w, str, FontOrDefaultFont(font), color, text_color, interior, flags) { GG::Connect(EditedSignal, &PlayTextTypingSound, -1); @@ -745,7 +745,7 @@ CUIMultiEdit::CUIMultiEdit(int x, int y, int w, int h, const std::string& str, Uint32 style/* = TF_LINEWRAP*/, const boost::shared_ptr<GG::Font>& font/* = boost::shared_ptr<GG::Font>()*/, GG::Clr color/* = ClientUI::CtrlBorderColor()*/, GG::Clr text_color/* = ClientUI::TextColor()*/, - GG::Clr interior/* = ClientUI::MultieditIntColor()*/, Uint32 flags/* = CLICKABLE*/) : + GG::Clr interior/* = ClientUI::MultieditIntColor()*/, GG::Flags<GG::WndFlag> flags/* = CLICKABLE*/) : MultiEdit(x, y, w, h, str, FontOrDefaultFont(font), color, style, text_color, interior, flags) { RecreateScrolls(); @@ -771,7 +771,7 @@ /////////////////////////////////////// // class CUISlider /////////////////////////////////////// -CUISlider::CUISlider(int x, int y, int w, int h, int min, int max, GG::Orientation orientation, Uint32 flags/* = CLICKABLE*/) : +CUISlider::CUISlider(int x, int y, int w, int h, int min, int max, GG::Orientation orientation, GG::Flags<GG::WndFlag> flags/* = CLICKABLE*/) : Slider(x, y, w, h, min, max, orientation, GG::FLAT, ClientUI::CtrlColor(), orientation == GG::VERTICAL ? w : h, 5, flags) {} @@ -860,7 +860,7 @@ StatisticIcon::StatisticIcon(int x, int y, int w, int h, const std::string& icon_filename, GG::Clr text_color, double value0, double value1, int digits0, int digits1, bool integerize0, bool integerize1, bool showsign0, bool showsign1) : - GG::Control(x, y, w, h, 0), + GG::Control(x, y, w, h, GG::Flags<GG::WndFlag>()), m_num_values(2), m_values(std::vector<double>(2, 0.0)), m_digits(std::vector<int>(2, 2)), @@ -1274,7 +1274,7 @@ ProductionInfoPanel::ProductionInfoPanel(int w, int h, const std::string& title, const std::string& points_str, double border_thickness, const GG::Clr& color, const GG::Clr& text_and_border_color) : - GG::Wnd(0, 0, w, h, 0), + GG::Wnd(0, 0, w, h, GG::Flags<GG::WndFlag>()), m_border_thickness(border_thickness), m_color(color), m_text_and_border_color(text_and_border_color) @@ -1369,7 +1369,7 @@ ////////////////////////////////////////////////// MultiTurnProgressBar::MultiTurnProgressBar(int w, int h, int total_turns, int turns_completed, double partially_complete_turn, const GG::Clr& bar_color, const GG::Clr& background, const GG::Clr& outline_color) : - Control(0, 0, w, h, 0), + Control(0, 0, w, h, GG::Flags<GG::WndFlag>()), m_total_turns(total_turns), m_turns_completed(turns_completed), m_partially_complete_turn(partially_complete_turn), Modified: trunk/FreeOrion/UI/CUIControls.h =================================================================== --- trunk/FreeOrion/UI/CUIControls.h 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/CUIControls.h 2007-08-05 02:18:17 UTC (rev 2213) @@ -32,7 +32,7 @@ /** \name Structors */ //@{ CUIButton(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font = boost::shared_ptr<GG::Font>(), GG::Clr color = ClientUI::ButtonColor(), GG::Clr border = ClientUI::CtrlBorderColor(), int thick = 1, - GG::Clr text_color = ClientUI::TextColor(), Uint32 flags = GG::CLICKABLE); ///< basic ctor + GG::Clr text_color = ClientUI::TextColor(), GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); ///< basic ctor //@} /** \name Accessors */ //@{ @@ -72,7 +72,7 @@ /** \name Structors */ //@{ CUITurnButton(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font = boost::shared_ptr<GG::Font>(), GG::Clr color = ClientUI::ButtonColor(), GG::Clr border = ClientUI::CtrlBorderColor(), int thick = 1, - GG::Clr text_color = ClientUI::TextColor(), Uint32 flags = GG::CLICKABLE); ///< basic ctor + GG::Clr text_color = ClientUI::TextColor(), GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); ///< basic ctor //@} }; @@ -82,7 +82,7 @@ { public: /** \name Structors */ //@{ - CUIArrowButton(int x, int y, int w, int h, ShapeOrientation orientation, GG::Clr color, Uint32 flags = GG::CLICKABLE); ///< basic ctor + CUIArrowButton(int x, int y, int w, int h, ShapeOrientation orientation, GG::Clr color, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); ///< basic ctor //@} /** \name Accessors */ //@{ @@ -118,7 +118,7 @@ CUIStateButton(int x, int y, int w, int h, const std::string& str, Uint32 text_fmt, GG::StateButtonStyle style = GG::SBSTYLE_3D_CHECKBOX, GG::Clr color = ClientUI::StateButtonColor(), const boost::shared_ptr<GG::Font>& font = boost::shared_ptr<GG::Font>(), GG::Clr text_color = ClientUI::TextColor(), GG::Clr interior = GG::CLR_ZERO, - GG::Clr border = ClientUI::CtrlBorderColor(), Uint32 flags = GG::CLICKABLE); ///< ctor + GG::Clr border = ClientUI::CtrlBorderColor(), GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); ///< ctor //@} /** \name Accessors */ //@{ @@ -165,7 +165,7 @@ /** \name Structors */ //@{ CUIScroll(int x, int y, int w, int h, GG::Orientation orientation, GG::Clr color = GG::CLR_ZERO, GG::Clr border = ClientUI::CtrlBorderColor(), GG::Clr interior = GG::CLR_ZERO, - Uint32 flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN); ///< basic ctor + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN); ///< basic ctor //@} /** \name Accessors */ //@{ @@ -188,7 +188,7 @@ public: /** \name Structors */ //@{ CUIListBox(int x, int y, int w, int h, GG::Clr color = ClientUI::CtrlBorderColor(), GG::Clr interior = GG::CLR_ZERO, - Uint32 flags = GG::CLICKABLE); ///< basic ctor + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); ///< basic ctor //@} /** \name Mutators */ //@{ @@ -202,7 +202,7 @@ public: /** \name Structors */ //@{ CUISortListBox(int x, int y, int w, int h, GG::Clr color = ClientUI::CtrlBorderColor(), GG::Clr interior = GG::CLR_ZERO, - Uint32 flags = GG::CLICKABLE); + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); //@} /** \name Mutators */ //@{ @@ -224,7 +224,7 @@ public: /** \name Structors */ //@{ CUIDropDownList(int x, int y, int w, int h, int drop_ht, GG::Clr color = ClientUI::CtrlBorderColor(), - GG::Clr interior = ClientUI::DropDownListIntColor(), Uint32 flags = GG::CLICKABLE); ///< basic ctor + GG::Clr interior = ClientUI::DropDownListIntColor(), GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); ///< basic ctor //@} /** \name Mutators */ //@{ @@ -250,7 +250,7 @@ /** \name Structors */ //@{ CUIEdit(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font = boost::shared_ptr<GG::Font>(), GG::Clr color = ClientUI::CtrlBorderColor(), GG::Clr text_color = ClientUI::TextColor(), - GG::Clr interior = ClientUI::EditIntColor(), Uint32 flags = GG::CLICKABLE); ///< basic ctor + GG::Clr interior = ClientUI::EditIntColor(), GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); ///< basic ctor //@} /** \name Mutators */ //@{ @@ -267,7 +267,7 @@ CUIMultiEdit(int x, int y, int w, int h, const std::string& str, Uint32 style = GG::TF_LINEWRAP, const boost::shared_ptr<GG::Font>& font = boost::shared_ptr<GG::Font>(), GG::Clr color = ClientUI::CtrlBorderColor(), GG::Clr text_color = ClientUI::TextColor(), - GG::Clr interior = ClientUI::MultieditIntColor(), Uint32 flags = GG::CLICKABLE); ///< basic ctor + GG::Clr interior = ClientUI::MultieditIntColor(), GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); ///< basic ctor //@} /** \name Mutators */ //@{ @@ -281,7 +281,7 @@ { public: /** \name Structors */ //@{ - CUISlider(int x, int y, int w, int h, int min, int max, GG::Orientation orientation, Uint32 flags = GG::CLICKABLE); + CUISlider(int x, int y, int w, int h, int min, int max, GG::Orientation orientation, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); //@} /** \name Mutators */ //@{ Modified: trunk/FreeOrion/UI/CUIStyle.cpp =================================================================== --- trunk/FreeOrion/UI/CUIStyle.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/CUIStyle.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -6,7 +6,7 @@ GG::Button* CUIStyle::NewButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUIButton(x, y, w, str); } @@ -14,26 +14,26 @@ GG::StateButton* CUIStyle::NewStateButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, Uint32 text_fmt, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, GG::Clr interior/* = GG::CLR_ZERO*/, - GG::StateButtonStyle style/* = GG::SBSTYLE_3D_XBOX*/, Uint32 flags/* = GG::CLICKABLE*/) const + GG::StateButtonStyle style/* = GG::SBSTYLE_3D_XBOX*/, GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUIStateButton(x, y, w, h, str, text_fmt, style); } GG::DropDownList* CUIStyle::NewDropDownList(int x, int y, int w, int h, int drop_ht, GG::Clr color, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUIDropDownList(x, y, w, h, drop_ht); } GG::Edit* CUIStyle::NewEdit(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, GG::Clr interior/* = GG::CLR_ZERO*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUIEdit(x, y, w, str); } GG::ListBox* CUIStyle::NewListBox(int x, int y, int w, int h, GG::Clr color, GG::Clr interior/* = GG::CLR_ZERO*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUIListBox(x, y, w, h); } @@ -41,104 +41,104 @@ GG::MultiEdit* CUIStyle::NewMultiEdit(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, Uint32 style/* = GG::TF_LINEWRAP*/, GG::Clr text_color/* = GG::CLR_BLACK*/, GG::Clr interior/* = GG::CLR_ZERO*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUIMultiEdit(x, y, w, h, str); } GG::Scroll* CUIStyle::NewScroll(int x, int y, int w, int h, GG::Orientation orientation, GG::Clr color, GG::Clr interior, - Uint32 flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const { return new CUIScroll(x, y, w, h, orientation); } GG::Slider* CUIStyle::NewSlider(int x, int y, int w, int h, int min, int max, GG::Orientation orientation, GG::SliderLineStyle style, GG::Clr color, int tab_width, int line_width/* = 5*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUISlider(x, y, w, h, min, max, orientation); } GG::Spin<int>* CUIStyle::NewIntSpin(int x, int y, int w, int value, int step, int min, int max, bool edits, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - GG::Clr interior/* = GG::CLR_ZERO*/, Uint32 flags/* = GG::CLICKABLE*/) const + GG::Clr interior/* = GG::CLR_ZERO*/, GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUISpin<int>(x, y, w, value, step, min, max, edits); } GG::Spin<double>* CUIStyle::NewDoubleSpin(int x, int y, int w, double value, double step, double min, double max, bool edits, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - GG::Clr interior/* = GG::CLR_ZERO*/, Uint32 flags/* = GG::CLICKABLE*/) const + GG::Clr interior/* = GG::CLR_ZERO*/, GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUISpin<double>(x, y, w, value, step, min, max, edits); } GG::Button* CUIStyle::NewScrollUpButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const { - return new GG::Button(-1, -1, 1, 1, "", boost::shared_ptr<GG::Font>(), GG::CLR_ZERO, GG::CLR_ZERO, 0); + return new GG::Button(-1, -1, 1, 1, "", boost::shared_ptr<GG::Font>(), GG::CLR_ZERO, GG::CLR_ZERO, GG::Flags<GG::WndFlag>()); } GG::Button* CUIStyle::NewScrollDownButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const { return NewScrollUpButton(x, y, w, h, str, font, color, text_color, flags); } GG::Button* CUIStyle::NewVScrollTabButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUIScroll::ScrollTab(GG::VERTICAL, w, (color == GG::CLR_ZERO) ? ClientUI::ScrollTabColor() : color, ClientUI::CtrlBorderColor()); } GG::Button* CUIStyle::NewScrollLeftButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const { return NewScrollUpButton(x, y, w, h, str, font, color, text_color, flags); } GG::Button* CUIStyle::NewScrollRightButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const { return NewScrollUpButton(x, y, w, h, str, font, color, text_color, flags); } GG::Button* CUIStyle::NewHScrollTabButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUIScroll::ScrollTab(GG::HORIZONTAL, h, (color == GG::CLR_ZERO) ? ClientUI::ScrollTabColor() : color, ClientUI::CtrlBorderColor()); } GG::Button* CUIStyle::NewVSliderTabButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUIScroll::ScrollTab(GG::VERTICAL, w, ClientUI::ScrollTabColor(), ClientUI::CtrlBorderColor()); } GG::Button* CUIStyle::NewHSliderTabButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { return new CUIScroll::ScrollTab(GG::HORIZONTAL, h, ClientUI::ScrollTabColor(), ClientUI::CtrlBorderColor()); } GG::Button* CUIStyle::NewSpinIncrButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const { return new CUIArrowButton(0, 0, 1, 1, SHAPE_UP, ClientUI::DropDownListArrowColor(), flags); } GG::Button* CUIStyle::NewSpinDecrButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN*/) const { return new CUIArrowButton(0, 0, 1, 1, SHAPE_DOWN, ClientUI::DropDownListArrowColor(), flags); } @@ -146,7 +146,7 @@ GG::StateButton* CUIStyle::NewTabBarTab(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, Uint32 text_fmt, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, GG::Clr interior/* = GG::CLR_ZERO*/, - GG::StateButtonStyle style/* = GG::SBSTYLE_3D_TOP_ATTACHED_TAB*/, Uint32 flags/* = GG::CLICKABLE*/) const + GG::StateButtonStyle style/* = GG::SBSTYLE_3D_TOP_ATTACHED_TAB*/, GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { GG::StateButton* retval = new CUIStateButton(x, y, w, h, str, text_fmt, GG::SBSTYLE_3D_TOP_DETACHED_TAB); retval->Resize(retval->MinUsableSize() + GG::Pt(12, 0)); @@ -155,7 +155,7 @@ GG::Button* CUIStyle::NewTabBarLeftButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { CUIArrowButton* retval = new CUIArrowButton(x, y, w, h, SHAPE_LEFT, ClientUI::DropDownListArrowColor(), flags); retval->FillBackgroundWithWndColor(true); @@ -164,7 +164,7 @@ GG::Button* CUIStyle::NewTabBarRightButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color/* = GG::CLR_BLACK*/, - Uint32 flags/* = GG::CLICKABLE*/) const + GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) const { CUIArrowButton* retval = new CUIArrowButton(x, y, w, h, SHAPE_RIGHT, ClientUI::DropDownListArrowColor(), flags); retval->FillBackgroundWithWndColor(true); Modified: trunk/FreeOrion/UI/CUIStyle.h =================================================================== --- trunk/FreeOrion/UI/CUIStyle.h 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/CUIStyle.h 2007-08-05 02:18:17 UTC (rev 2213) @@ -9,95 +9,95 @@ public: virtual GG::Button* NewButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::StateButton* NewStateButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, Uint32 text_fmt, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, GG::Clr interior = GG::CLR_ZERO, - GG::StateButtonStyle style = GG::SBSTYLE_3D_XBOX, Uint32 flags = GG::CLICKABLE) const; + GG::StateButtonStyle style = GG::SBSTYLE_3D_XBOX, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::DropDownList* NewDropDownList(int x, int y, int w, int h, int drop_ht, GG::Clr color, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Edit* NewEdit(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, GG::Clr interior = GG::CLR_ZERO, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::ListBox* NewListBox(int x, int y, int w, int h, GG::Clr color, GG::Clr interior = GG::CLR_ZERO, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::MultiEdit* NewMultiEdit(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, Uint32 style = GG::TF_LINEWRAP, GG::Clr text_color = GG::CLR_BLACK, GG::Clr interior = GG::CLR_ZERO, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Scroll* NewScroll(int x, int y, int w, int h, GG::Orientation orientation, GG::Clr color, GG::Clr interior, - Uint32 flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; virtual GG::Slider* NewSlider(int x, int y, int w, int h, int min, int max, GG::Orientation orientation, GG::SliderLineStyle style, GG::Clr color, int tab_width, int line_width = 5, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Spin<int>* NewIntSpin(int x, int y, int w, int value, int step, int min, int max, bool edits, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - GG::Clr interior = GG::CLR_ZERO, Uint32 flags = GG::CLICKABLE) const; + GG::Clr interior = GG::CLR_ZERO, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Spin<double>* NewDoubleSpin(int x, int y, int w, double value, double step, double min, double max, bool edits, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - GG::Clr interior = GG::CLR_ZERO, Uint32 flags = GG::CLICKABLE) const; + GG::Clr interior = GG::CLR_ZERO, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Button* NewScrollUpButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; virtual GG::Button* NewScrollDownButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; virtual GG::Button* NewVScrollTabButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Button* NewScrollLeftButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; virtual GG::Button* NewScrollRightButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; virtual GG::Button* NewHScrollTabButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Button* NewVSliderTabButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Button* NewHSliderTabButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Button* NewSpinIncrButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; virtual GG::Button* NewSpinDecrButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::REPEAT_BUTTON_DOWN) const; virtual GG::StateButton* NewTabBarTab(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, Uint32 text_fmt, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, GG::Clr interior = GG::CLR_ZERO, - GG::StateButtonStyle style = GG::SBSTYLE_3D_TOP_ATTACHED_TAB, Uint32 flags = GG::CLICKABLE) const; + GG::StateButtonStyle style = GG::SBSTYLE_3D_TOP_ATTACHED_TAB, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Button* NewTabBarLeftButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual GG::Button* NewTabBarRightButton(int x, int y, int w, int h, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color, GG::Clr text_color = GG::CLR_BLACK, - Uint32 flags = GG::CLICKABLE) const; + GG::Flags<GG::WndFlag> flags = GG::CLICKABLE) const; virtual void DeleteWnd(GG::Wnd* wnd) const; }; Modified: trunk/FreeOrion/UI/CUIWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CUIWnd.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/CUIWnd.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -12,32 +12,7 @@ #include <GG/GUI.h> #include <GG/DrawUtil.h> -/** \mainpage FreeOrion User Interface - \section s_overview Overview - The User Interface module contains all classes pertaining to - user interactivity. It consists of the ClientUI class which acts - as the driver for all of the others. This module operates as an - extension to the GG Graphical User Interface Library written by Zach Laine. - - \section s_interface_classes Interface Classes - <ul> - <li>ClientUI - the main driver class of the module. - <li>CUIWnd - parent class of all non-modal interface windows. - <li>IntroScreen - a combination main menu/splash screen. The first thing the user sees. - <li>ServerConnectWnd - a modal window that allows the user to find and choose a game server. - <li>GalaxySetupWnd - a modal window that allows the user to setup the galaxy size and shape. - </ul> - - \section s_utility_classes Utility Classes - <ul> - <li>StringTable - a construct allowing language-independent string storage and retrieval. - <li>ToolWnd - a GG::Control-derived class that provides balloon-style help - <li>ToolContainer - a manager construct that drives the functionality of all ToolWnd objects. - </ul> - -*/ - namespace { bool PlaySounds() { return GetOptionsDB().Get<bool>("UI.sound.enabled"); } @@ -143,7 +118,20 @@ //////////////////////////////////////////////// // CUIWnd //////////////////////////////////////////////// -CUIWnd::CUIWnd(const std::string& t, int x, int y, int w, int h, Uint32 flags) : +GG::WndFlag MINIMIZABLE(1 << 10); +GG::WndFlag CLOSABLE(1 << 11); + +namespace { + bool RegisterWndFlags() + { + GG::FlagSpec<GG::WndFlag>::instance().insert(MINIMIZABLE, "MINIMIZABLE"); + GG::FlagSpec<GG::WndFlag>::instance().insert(CLOSABLE, "CLOSABLE"); + return true; + } + bool dummy = RegisterWndFlags(); +} + +CUIWnd::CUIWnd(const std::string& t, int x, int y, int w, int h, GG::Flags<GG::WndFlag> flags) : GG::Wnd(x, y, w, h, flags & ~GG::RESIZABLE), m_resizable(flags & GG::RESIZABLE), m_closable(flags & CLOSABLE), @@ -388,7 +376,7 @@ // class CUIEditWnd /////////////////////////////////////// -CUIEditWnd::CUIEditWnd(int w, const std::string& prompt_text, const std::string& edit_text, Uint32 flags/* = Wnd::MODAL*/) : +CUIEditWnd::CUIEditWnd(int w, const std::string& prompt_text, const std::string& edit_text, GG::Flags<GG::WndFlag> flags/* = Wnd::MODAL*/) : CUIWnd(prompt_text, 0, 0, w, 1, flags) { m_edit = new CUIEdit(LeftBorder() + 3, TopBorder() + 3, ClientWidth() - 2 * BUTTON_WIDTH - 2 * CONTROL_MARGIN - 6 - LeftBorder() - RightBorder(), edit_text); Modified: trunk/FreeOrion/UI/CUIWnd.h =================================================================== --- trunk/FreeOrion/UI/CUIWnd.h 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/CUIWnd.h 2007-08-05 02:18:17 UTC (rev 2213) @@ -46,6 +46,12 @@ void Render(); }; + +// Aditional window creation flags +extern GG::WndFlag MINIMIZABLE; ///< allows the window to be minimized +extern GG::WndFlag CLOSABLE; ///< allows the window to be closed + + //! This class is a superclass of all interface windows in GG. It takes care of /** the drawing and handling of common window interfaces like the close button, minimize button, and resize handle, if applicable.<br> @@ -82,14 +88,8 @@ class CUIWnd : public GG::Wnd { public: - //! additional window creation flags - enum { - MINIMIZABLE = 1 << 10, //!< allows the window to be minimized - CLOSABLE = 1 << 11 //!< allows the window to be closed - }; - //! \name Structors //@{ - CUIWnd(const std::string& t, int x, int y, int w, int h, Uint32 flags = GG::CLICKABLE); //!< Constructs the window to be a CUI window + CUIWnd(const std::string& t, int x, int y, int w, int h, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); //!< Constructs the window to be a CUI window ~CUIWnd(); //!< Destructor //@} @@ -160,7 +160,7 @@ class CUIEditWnd : public CUIWnd { public: - CUIEditWnd(int w, const std::string& prompt_text, const std::string& edit_text, Uint32 flags = GG::MODAL); + CUIEditWnd(int w, const std::string& prompt_text, const std::string& edit_text, GG::Flags<GG::WndFlag> flags = GG::MODAL); virtual void ModalInit(); virtual void KeyPress(GG::Key key, Uint32 key_mods); Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -22,8 +22,9 @@ class CombatInfoControl : public GG::Control { public: - CombatInfoControl(int w, int h,const CombatUpdateMessage &combat_info) - : Control(0, 0, w, h, 0),m_combat_info(combat_info) + CombatInfoControl(int w, int h,const CombatUpdateMessage &combat_info) : + Control(0, 0, w, h, GG::Flags<GG::WndFlag>()), + m_combat_info(combat_info) {} void Update(const CombatUpdateMessage &combat_info) {m_combat_info=combat_info;} @@ -155,7 +156,7 @@ // CombatWnd //////////////////////////////////////////////// CombatWnd::CombatWnd(int x,int y) - : CUIWnd(UserString("COMBAT_WINDOW_TITLE"),x,y, WIDTH, HEIGHT, GG::ONTOP | GG::CLICKABLE | GG::DRAGABLE | GG::RESIZABLE | CUIWnd::MINIMIZABLE) + : CUIWnd(UserString("COMBAT_WINDOW_TITLE"),x,y, WIDTH, HEIGHT, GG::ONTOP | GG::CLICKABLE | GG::DRAGABLE | GG::RESIZABLE | MINIMIZABLE) { m_combats_lb = new CUIListBox(0,0,ClientWidth(),ClientHeight(),GG::CLR_ZERO,GG::CLR_ZERO); AttachChild(m_combats_lb); Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -88,7 +88,7 @@ }; ShipDataPanel(int w, int h, const Ship* ship) : - Control(0, 0, w, h, 0), + Control(0, 0, w, h, GG::Flags<GG::WndFlag>()), m_ship(ship), m_ship_icon(0), m_ship_name_text(new GG::TextControl(h, 0, w - h - 5, SHIP_NAME_HT, m_ship->Name(), GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), @@ -289,7 +289,7 @@ //////////////////////////////////////////////// FleetDataPanel::FleetDataPanel(int w, int h, const Fleet* fleet, int empire/* = -1*/, int system_id/* = -1*/, double x/* = 0.0*/, double y/* = 0.0*/) : - Control(0, 0, w, h, fleet ? 0 : GG::CLICKABLE), + Control(0, 0, w, h, fleet ? GG::Flags<GG::WndFlag>() : GG::CLICKABLE), m_fleet(fleet), m_empire(empire), m_system_id(system_id), @@ -507,7 +507,7 @@ class FleetDetailPanel : public GG::Wnd { public: - FleetDetailPanel(Fleet* fleet, bool read_only, Uint32 flags = 0); ///< ctor + FleetDetailPanel(Fleet* fleet, bool read_only, GG::Flags<GG::WndFlag> flags = GG::Flags<GG::WndFlag>()); ///< ctor Fleet* GetFleet() const {return m_fleet;} ///< returns the currently-displayed fleet (may be 0) @@ -722,7 +722,7 @@ //////////////////////////////////////////////// // FleetDetailPanel implementation //////////////////////////////////////////////// -FleetDetailPanel::FleetDetailPanel(Fleet* fleet, bool read_only, Uint32 flags/* = 0*/) : +FleetDetailPanel::FleetDetailPanel(Fleet* fleet, bool read_only, GG::Flags<GG::WndFlag> flags/* = GG::Flags<GG::WndFlag>()*/) : Wnd(0, 0, 1, 1, flags), m_fleet(0), m_read_only(read_only), @@ -908,7 +908,7 @@ //////////////////////////////////////////////// // FleetDetailWnd //////////////////////////////////////////////// -FleetDetailWnd::FleetDetailWnd(int x, int y, Fleet* fleet, bool read_only, Uint32 flags/* = CLICKABLE | DRAGABLE | RESIZABLE | ONTOP | CLOSABLE*/) : +FleetDetailWnd::FleetDetailWnd(int x, int y, Fleet* fleet, bool read_only, GG::Flags<GG::WndFlag> flags/* = CLICKABLE | DRAGABLE | RESIZABLE | ONTOP | CLOSABLE*/) : CUIWnd("", x, y, 1, 1, flags), m_fleet_panel(0) { @@ -951,7 +951,7 @@ GG::Pt FleetWnd::s_last_position; FleetWnd::FleetWnd(int x, int y, std::vector<Fleet*> fleets, int selected_fleet, bool read_only, - Uint32 flags/* = CLICKABLE | DRAGABLE | ONTOP | CLOSABLE*/) : + GG::Flags<GG::WndFlag> flags/* = CLICKABLE | DRAGABLE | ONTOP | CLOSABLE*/) : MapWndPopup("", x, y, 1, 1, flags | GG::RESIZABLE), m_empire_id(*fleets[0]->Owners().begin()), m_system_id(UniverseObject::INVALID_OBJECT_ID), Modified: trunk/FreeOrion/UI/FleetWnd.h =================================================================== --- trunk/FreeOrion/UI/FleetWnd.h 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/FleetWnd.h 2007-08-05 02:18:17 UTC (rev 2213) @@ -29,7 +29,7 @@ //@} /** \name Structors */ //@{ - FleetDetailWnd(int x, int y, Fleet* fleet, bool read_only, Uint32 flags = GG::CLICKABLE | GG::DRAGABLE | GG::RESIZABLE | GG::ONTOP | CLOSABLE); ///< basic ctor + FleetDetailWnd(int x, int y, Fleet* fleet, bool read_only, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::DRAGABLE | GG::RESIZABLE | GG::ONTOP | CLOSABLE); ///< basic ctor ~FleetDetailWnd(); ///< virtual dtor //@} @@ -61,7 +61,7 @@ /** \name Structors */ //@{ /** constructs a fleet window for fleets in transit between systems */ - FleetWnd(int x, int y, std::vector<Fleet*> fleets, int selected_fleet, bool read_only, Uint32 flags = GG::CLICKABLE | GG::DRAGABLE | GG::ONTOP | CLOSABLE); + FleetWnd(int x, int y, std::vector<Fleet*> fleets, int selected_fleet, bool read_only, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::DRAGABLE | GG::ONTOP | CLOSABLE); ~FleetWnd(); ///< dtor //@} Modified: trunk/FreeOrion/UI/FocusSelector.cpp =================================================================== --- trunk/FreeOrion/UI/FocusSelector.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/FocusSelector.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -84,7 +84,7 @@ MeterStatusBar::MeterStatusBar(int w, int h, double initial_max, double initial_current, double max, double current) : - GG::Wnd(0, 0, w, h, 0), + GG::Wnd(0, 0, w, h, GG::Flags<GG::WndFlag>()), m_initial_max(initial_max), m_initial_current(initial_current), m_projected_max(max), Modified: trunk/FreeOrion/UI/GalaxySetupWnd.cpp =================================================================== --- trunk/FreeOrion/UI/GalaxySetupWnd.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/GalaxySetupWnd.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -40,7 +40,7 @@ // GalaxySetupPanel //////////////////////////////////////////////// GalaxySetupPanel::GalaxySetupPanel(int x, int y, int w/* = DEFAULT_WIDTH*/) : - GG::Control(x, y, w, GAL_SETUP_PANEL_HT, 0), + GG::Control(x, y, w, GAL_SETUP_PANEL_HT, GG::Flags<GG::WndFlag>()), m_stars_spin(0), m_galaxy_shapes_list(0), m_galaxy_ages_list(0), Modified: trunk/FreeOrion/UI/LinkText.cpp =================================================================== --- trunk/FreeOrion/UI/LinkText.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/LinkText.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -15,7 +15,7 @@ LinkText::LinkText(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font, - Uint32 text_fmt/* = 0*/, GG::Clr color/* = GG::CLR_BLACK*/, Uint32 flags/* = GG::CLICKABLE*/) : + Uint32 text_fmt/* = 0*/, GG::Clr color/* = GG::CLR_BLACK*/, GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) : GG::TextControl(x, y, w, 1, str, font, color, text_fmt, flags), m_old_sel_link(-1), m_old_rollover_link(-1) @@ -25,7 +25,7 @@ } LinkText::LinkText(int x, int y, const std::string& str, const boost::shared_ptr<GG::Font>& font, - GG::Clr color/* = GG::CLR_BLACK*/, Uint32 flags/* = GG::CLICKABLE*/) : + GG::Clr color/* = GG::CLR_BLACK*/, GG::Flags<GG::WndFlag> flags/* = GG::CLICKABLE*/) : GG::TextControl(x, y, str, font, color, 0, flags), m_old_sel_link(-1), m_old_rollover_link(-1) Modified: trunk/FreeOrion/UI/LinkText.h =================================================================== --- trunk/FreeOrion/UI/LinkText.h 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/LinkText.h 2007-08-05 02:18:17 UTC (rev 2213) @@ -44,12 +44,12 @@ //@} /** \name Structors */ //@{ - LinkText(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font, Uint32 text_fmt = 0, GG::Clr color = GG::CLR_BLACK, Uint32 flags = GG::CLICKABLE); ///< ctor taking a font directly + LinkText(int x, int y, int w, const std::string& str, const boost::shared_ptr<GG::Font>& font, Uint32 text_fmt = 0, GG::Clr color = GG::CLR_BLACK, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); ///< ctor taking a font directly /** ctor that does not require window size. Window size is determined from the string and font; the window will be large enough to fit the text as rendered, and no larger. \see DynamicText::DynamicText() */ - LinkText(int x, int y, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color = GG::CLR_BLACK, Uint32 flags = GG::CLICKABLE); + LinkText(int x, int y, const std::string& str, const boost::shared_ptr<GG::Font>& font, GG::Clr color = GG::CLR_BLACK, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE); //@} /** \name Mutators */ //@{ Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/MapWnd.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -121,8 +121,8 @@ //////////////////////////////////////////////////////////// // MapWndPopup //////////////////////////////////////////////////////////// -MapWndPopup::MapWndPopup( const std::string& t, int x, int y, int h, int w, Uint32 flags ): - CUIWnd( t, x, y, h, w, flags ) +MapWndPopup::MapWndPopup(const std::string& t, int x, int y, int h, int w, GG::Flags<GG::WndFlag> flags) : + CUIWnd( t, x, y, h, w, flags) { ClientUI::GetClientUI()->GetMapWnd()->RegisterPopup(this); } MapWndPopup::~MapWndPopup() @@ -266,7 +266,7 @@ // chat display and chat input box m_chat_display = new GG::MultiEdit(LAYOUT_MARGIN, m_turn_update->LowerRight().y + LAYOUT_MARGIN, CHAT_WIDTH, CHAT_HEIGHT, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), GG::CLR_ZERO, GG::TF_WORDBREAK | GG::MultiEdit::READ_ONLY | GG::MultiEdit::TERMINAL_STYLE | GG::MultiEdit::INTEGRAL_HEIGHT | GG::MultiEdit::NO_VSCROLL, - ClientUI::TextColor(), GG::CLR_ZERO, 0); + ClientUI::TextColor(), GG::CLR_ZERO, GG::Flags<GG::WndFlag>()); AttachChild(m_chat_display); m_chat_display->SetMaxLinesOfHistory(100); m_chat_display->Hide(); Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/MapWnd.h 2007-08-05 02:18:17 UTC (rev 2213) @@ -259,7 +259,7 @@ class MapWndPopup : public CUIWnd { public: - MapWndPopup(const std::string& t, int x, int y, int h, int w, Uint32 flags); + MapWndPopup(const std::string& t, int x, int y, int h, int w, GG::Flags<GG::WndFlag> flags); virtual ~MapWndPopup(); void CloseClicked(); void Close(); Modified: trunk/FreeOrion/UI/OptionsWnd.cpp =================================================================== --- trunk/FreeOrion/UI/OptionsWnd.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/OptionsWnd.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -41,7 +41,7 @@ class PlaceholderWnd : public GG::Wnd { public: - PlaceholderWnd(int w, int h) : Wnd(0, 0, w, h, 0) {} + PlaceholderWnd(int w, int h) : Wnd(0, 0, w, h, GG::Flags<GG::WndFlag>()) {} virtual void Render() {} }; Modified: trunk/FreeOrion/UI/ProductionWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ProductionWnd.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/ProductionWnd.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -153,7 +153,7 @@ // QueueBuildPanel implementation ////////////////////////////////////////////////// QueueBuildPanel::QueueBuildPanel(int w, const ProductionQueue::Element& build, double turn_cost, int turns, int number, int turns_completed, double partially_complete_turn) : - GG::Control(0, 0, w, 10, 0), + GG::Control(0, 0, w, 10, GG::Flags<GG::WndFlag>()), m_build(build), m_in_progress(build.spending), m_total_turns(turns), Modified: trunk/FreeOrion/UI/ResearchWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ResearchWnd.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/ResearchWnd.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -150,7 +150,7 @@ // QueueTechPanel implementation ////////////////////////////////////////////////// QueueTechPanel::QueueTechPanel(int w, const Tech* tech, bool in_progress, int turns_left, int turns_completed, double partially_complete_turn) : - GG::Control(0, 0, w, 10, 0), + GG::Control(0, 0, w, 10, GG::Flags<GG::WndFlag>()), m_tech(tech), m_in_progress(in_progress), m_total_turns(tech->ResearchTurns()), Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/SidePanel.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -509,7 +509,7 @@ { public: RotatingPlanetControl(int x, int y, PlanetSize size, StarType star_type, const RotatingPlanetData& planet_data) : - GG::Control(x, y, PlanetDiameter(size), PlanetDiameter(size), 0), + GG::Control(x, y, PlanetDiameter(size), PlanetDiameter(size), GG::Flags<GG::WndFlag>()), m_planet_data(planet_data), m_size(size), m_surface_texture(ClientUI::GetTexture(ClientUI::ArtDir() / m_planet_data.filename, true)), Modified: trunk/FreeOrion/UI/SystemIcon.cpp =================================================================== --- trunk/FreeOrion/UI/SystemIcon.cpp 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/SystemIcon.cpp 2007-08-05 02:18:17 UTC (rev 2213) @@ -22,7 +22,7 @@ //////////////////////////////////////////////// // OwnerColoredSystemName //////////////////////////////////////////////// -OwnerColoredSystemName::OwnerColoredSystemName(const System* system, const boost::shared_ptr<GG::Font>& font, const std::string& format_text/* = ""*/, Uint32 flags/* = 0*/) : +OwnerColoredSystemName::OwnerColoredSystemName(const System* system, const boost::shared_ptr<GG::Font>& font, const std::string& format_text/* = ""*/, GG::Flags<GG::WndFlag> flags/* = GG::Flags<GG::WndFlag>()*/) : Control(0, 0, 1, 1, flags) { std::string str = format_text == "" ? system->Name() : boost::io::str(boost::format(format_text) % system->Name()); Modified: trunk/FreeOrion/UI/SystemIcon.h =================================================================== --- trunk/FreeOrion/UI/SystemIcon.h 2007-08-05 00:56:12 UTC (rev 2212) +++ trunk/FreeOrion/UI/SystemIcon.h 2007-08-05 02:18:17 UTC (rev 2213) @@ -18,7 +18,7 @@ class OwnerColoredSystemName : public GG::Control { public: - OwnerColoredSystemName(const System* system, const boost::shared_ptr<GG::Font>& font, const std::string& format_text = "", Uint32 flags = 0); + OwnerColoredSystemName(const System* system, const boost::shared_ptr<GG::Font>& font, const std::string& format_text = "", GG::Flags<GG::WndFlag> flags = GG::Flags<GG::WndFlag>()); virtual void Render(); private: |
From: <geo...@us...> - 2007-08-07 06:25:59
|
Revision: 2218 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2218&view=rev Author: geoffthemedio Date: 2007-08-06 23:25:59 -0700 (Mon, 06 Aug 2007) Log Message: ----------- -Standardized interface of content texture getters -Removed some now-redundant texture SetFilters calls -Tweaked IconTextBrowseWnd constructor to take a texture instead of a string of that texture's name Modified Paths: -------------- trunk/FreeOrion/UI/ClientUI.cpp trunk/FreeOrion/UI/ClientUI.h trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/ProductionWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/ClientUI.cpp =================================================================== --- trunk/FreeOrion/UI/ClientUI.cpp 2007-08-06 07:52:33 UTC (rev 2217) +++ trunk/FreeOrion/UI/ClientUI.cpp 2007-08-07 06:25:59 UTC (rev 2218) @@ -13,6 +13,7 @@ #include "../universe/System.h" #include "../universe/Ship.h" #include "../universe/Tech.h" +#include "../universe/Special.h" #include "../client/human/HumanClientApp.h" #include "../util/Directories.h" #include "../util/MultiplayerCommon.h" @@ -86,45 +87,27 @@ double ClientUI::FleetButtonSize() { return GetOptionsDB().Get<double>("UI.fleet-button-size"); } double ClientUI::SystemSelectionIndicatorSize() { return GetOptionsDB().Get<double>("UI.system-selection-indicator-size"); } -// misc UI windows +// SidePanel GG::Clr ClientUI::SidePanelColor() { return GetOptionsDB().Get<StreamableColor>("UI.sidepanel-color").ToClr(); } -boost::shared_ptr<GG::Texture> ClientUI::ShipIcon(const std::string& design_name) +// content texture getters +boost::shared_ptr<GG::Texture> ClientUI::ShipIcon(int design_id) { - boost::shared_ptr<GG::Texture> texture = GetTexture(ArtDir() / "icons" / (design_name + ".png")); + const ShipDesign* design = GetShipDesign(design_id); + boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ArtDir() / "icons" / (design->name + ".png"), true); if (texture) return texture; - return GetTexture(ArtDir() / "icons" / "Scout.png"); + return ClientUI::GetTexture(ArtDir() / "icons" / "Scout.png", true); } -boost::shared_ptr<GG::Texture> ClientUI::BuildingTexture(const BuildingType* building_type) +boost::shared_ptr<GG::Texture> ClientUI::BuildingTexture(const std::string& building_type_name) { + const BuildingType* building_type = GetBuildingType(building_type_name); const std::string graphic_name = building_type->Graphic(); if (graphic_name.empty()) - return GetTexture(ArtDir() / "building_icons" / "Generic_Building.png"); - return GetTexture(ArtDir() / building_type->Graphic()); + return ClientUI::GetTexture(ArtDir() / "building_icons" / "Generic_Building.png", true); + return ClientUI::GetTexture(ArtDir() / graphic_name, true); } -// tech screen -GG::Clr ClientUI::KnownTechFillColor() { return GetOptionsDB().Get<StreamableColor>("UI.known-tech").ToClr(); } -GG::Clr ClientUI::KnownTechTextAndBorderColor() { return GetOptionsDB().Get<StreamableColor>("UI.known-tech-border").ToClr(); } -GG::Clr ClientUI::ResearchableTechFillColor() { return GetOptionsDB().Get<StreamableColor>("UI.researchable-tech").ToClr(); } -GG::Clr ClientUI::ResearchableTechTextAndBorderColor() { return GetOptionsDB().Get<StreamableColor>("UI.researchable-tech-border").ToClr(); } -GG::Clr ClientUI::UnresearchableTechFillColor() { return GetOptionsDB().Get<StreamableColor>("UI.unresearchable-tech").ToClr(); } -GG::Clr ClientUI::UnresearchableTechTextAndBorderColor() { return GetOptionsDB().Get<StreamableColor>("UI.unresearchable-tech-border").ToClr(); } -GG::Clr ClientUI::TechWndProgressBarBackground() { return GetOptionsDB().Get<StreamableColor>("UI.tech-progress-background").ToClr(); } -GG::Clr ClientUI::TechWndProgressBar() { return GetOptionsDB().Get<StreamableColor>("UI.tech-progress").ToClr(); } - -GG::Clr ClientUI::CategoryColor(const std::string& category_name) -{ - const std::vector<std::string>& tech_categories = GetTechManager().CategoryNames(); - std::vector<std::string>::const_iterator it = std::find(tech_categories.begin(), tech_categories.end(), category_name); - if (it != tech_categories.end()) { - int category_index = std::distance(tech_categories.begin(), it) + 1; - return GetOptionsDB().Get<StreamableColor>("UI.tech-category-" + boost::lexical_cast<std::string>(category_index)).ToClr(); - } - return GG::Clr(); -} - boost::shared_ptr<GG::Texture> ClientUI::CategoryIcon(const std::string& category_name) { std::string icon_filename; @@ -138,7 +121,7 @@ icon_filename = "learning.png"; if (category_name == "PRODUCTION_CATEGORY") icon_filename = "production.png"; - return GetTexture(ArtDir() / "tech_icons" / "categories" / icon_filename); + return ClientUI::GetTexture(ArtDir() / "tech_icons" / "categories" / icon_filename, true); } boost::shared_ptr<GG::Texture> ClientUI::TechTexture(const std::string& tech_name) @@ -148,9 +131,39 @@ if (texture_name.empty()) { return CategoryIcon(tech->Category()); } - return GetTexture(ArtDir() / texture_name); + return ClientUI::GetTexture(ArtDir() / texture_name, true); } +boost::shared_ptr<GG::Texture> ClientUI::SpecialTexture(const std::string& special_name) +{ + const Special* special = GetSpecial(special_name); + std::string texture_name = special->Graphic(); + if (texture_name.empty()) + return ClientUI::GetTexture(ArtDir() / "special_icons" / "Generic_Special.png", true); + return ClientUI::GetTexture(ArtDir() / texture_name); +} + +// tech screen +GG::Clr ClientUI::KnownTechFillColor() { return GetOptionsDB().Get<StreamableColor>("UI.known-tech").ToClr(); } +GG::Clr ClientUI::KnownTechTextAndBorderColor() { return GetOptionsDB().Get<StreamableColor>("UI.known-tech-border").ToClr(); } +GG::Clr ClientUI::ResearchableTechFillColor() { return GetOptionsDB().Get<StreamableColor>("UI.researchable-tech").ToClr(); } +GG::Clr ClientUI::ResearchableTechTextAndBorderColor() { return GetOptionsDB().Get<StreamableColor>("UI.researchable-tech-border").ToClr(); } +GG::Clr ClientUI::UnresearchableTechFillColor() { return GetOptionsDB().Get<StreamableColor>("UI.unresearchable-tech").ToClr(); } +GG::Clr ClientUI::UnresearchableTechTextAndBorderColor() { return GetOptionsDB().Get<StreamableColor>("UI.unresearchable-tech-border").ToClr(); } +GG::Clr ClientUI::TechWndProgressBarBackground() { return GetOptionsDB().Get<StreamableColor>("UI.tech-progress-background").ToClr(); } +GG::Clr ClientUI::TechWndProgressBar() { return GetOptionsDB().Get<StreamableColor>("UI.tech-progress").ToClr(); } + +GG::Clr ClientUI::CategoryColor(const std::string& category_name) +{ + const std::vector<std::string>& tech_categories = GetTechManager().CategoryNames(); + std::vector<std::string>::const_iterator it = std::find(tech_categories.begin(), tech_categories.end(), category_name); + if (it != tech_categories.end()) { + int category_index = std::distance(tech_categories.begin(), it) + 1; + return GetOptionsDB().Get<StreamableColor>("UI.tech-category-" + boost::lexical_cast<std::string>(category_index)).ToClr(); + } + return GG::Clr(); +} + std::map<StarType, std::string>& ClientUI::StarTypeFilePrefixes() { static std::map<StarType, std::string> prefixes; @@ -305,7 +318,6 @@ db.Add("UI.window-quickclose", "OPTIONS_DB_UI_WINDOW_QUICKCLOSE", true); } bool temp_bool = RegisterOptions(&AddOptions); - } Modified: trunk/FreeOrion/UI/ClientUI.h =================================================================== --- trunk/FreeOrion/UI/ClientUI.h 2007-08-06 07:52:33 UTC (rev 2217) +++ trunk/FreeOrion/UI/ClientUI.h 2007-08-07 06:25:59 UTC (rev 2218) @@ -128,12 +128,20 @@ static double FleetButtonSize(); //!< the width/height of a FleetButton, relative to the size of a SystemIcon static double SystemSelectionIndicatorSize(); //!< the width/height of a System Selection Indicator, relative to the size of a SystemIcon - // misc UI windows + // SidePanel static GG::Clr SidePanelColor(); + + // Content Texture Getters static boost::shared_ptr<GG::Texture> - ShipIcon(const std::string& design_name); + ShipIcon(int design_id); static boost::shared_ptr<GG::Texture> - BuildingTexture(const BuildingType* building_type); + BuildingTexture(const std::string& building_type_name); + static boost::shared_ptr<GG::Texture> + CategoryIcon(const std::string& category_name); + static boost::shared_ptr<GG::Texture> + TechTexture(const std::string& tech_name); + static boost::shared_ptr<GG::Texture> + SpecialTexture(const std::string& special_name); // research screen @@ -147,10 +155,6 @@ static GG::Clr TechWndProgressBar(); static GG::Clr CategoryColor(const std::string& category_name); - static boost::shared_ptr<GG::Texture> - CategoryIcon(const std::string& category_name); - static boost::shared_ptr<GG::Texture> - TechTexture(const std::string& tech_name); static std::map<StarType, std::string>& StarTypeFilePrefixes(); static std::map<StarType, std::string>& HaloStarTypeFilePrefixes(); Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-06 07:52:33 UTC (rev 2217) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-07 06:25:59 UTC (rev 2218) @@ -308,11 +308,10 @@ class IconTextBrowseWnd : public GG::BrowseInfoWnd { public: - IconTextBrowseWnd(const std::string& icon_graphic, const std::string& title_text, const std::string& main_text) : + IconTextBrowseWnd(const boost::shared_ptr<GG::Texture> texture, const std::string& title_text, const std::string& main_text) : GG::BrowseInfoWnd(0, 0, TEXT_WIDTH + ICON_WIDTH, 1), ROW_HEIGHT(ClientUI::Pts()*3/2) { - boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / icon_graphic); m_icon = new GG::StaticGraphic(0, 0, ICON_WIDTH, ICON_WIDTH, texture, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE, GG::CLICKABLE); AttachChild(m_icon); @@ -1441,7 +1440,7 @@ // get existing / finished buildings and use them to create building indicators for (std::set<int>::const_iterator it = buildings.begin(); it != buildings.end(); ++it) { - const BuildingType* building_type = universe.Object<Building>(*it)->GetBuildingType(); + const BuildingType* building_type = universe.Object<Building>(*it)->GetBuildingType(); BuildingIndicator* ind = new BuildingIndicator(indicator_size, *building_type); m_building_indicators.push_back(ind); } @@ -1600,10 +1599,11 @@ m_graphic(0), m_progress_bar(0) { + boost::shared_ptr<GG::Texture> texture = ClientUI::BuildingTexture(type.Name()); + SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); - SetBrowseInfoWnd(boost::shared_ptr<GG::BrowseInfoWnd>(new IconTextBrowseWnd(type.Graphic(), type.Name(), type.Description()))); + SetBrowseInfoWnd(boost::shared_ptr<GG::BrowseInfoWnd>(new IconTextBrowseWnd(texture, type.Name(), type.Description()))); - boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / type.Graphic()); m_graphic = new GG::StaticGraphic(0, 0, w, w, texture, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE); AttachChild(m_graphic); } @@ -1615,10 +1615,11 @@ m_graphic(0), m_progress_bar(0) { + boost::shared_ptr<GG::Texture> texture = ClientUI::BuildingTexture(type.Name()); + SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); - SetBrowseInfoWnd(boost::shared_ptr<GG::BrowseInfoWnd>(new IconTextBrowseWnd(type.Graphic(), type.Name(), type.Description()))); + SetBrowseInfoWnd(boost::shared_ptr<GG::BrowseInfoWnd>(new IconTextBrowseWnd(texture, type.Name(), type.Description()))); - boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / type.Graphic()); m_graphic = new GG::StaticGraphic(0, 0, w, w, texture, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE); AttachChild(m_graphic); @@ -1748,11 +1749,9 @@ // get specials and use them to create specials icons for (std::set<std::string>::const_iterator it = specials.begin(); it != specials.end(); ++it) { const Special* special = GetSpecial(*it); - - boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / special->Graphic()); - GG::StaticGraphic* graphic = new GG::StaticGraphic(0, 0, icon_size, icon_size, texture, GG::GR_FITGRAPHIC | GG::GR_PROPSCALE, GG::CLICKABLE); + GG::StaticGraphic* graphic = new GG::StaticGraphic(0, 0, icon_size, icon_size, ClientUI::SpecialTexture(special->Name()), GG::GR_FITGRAPHIC | GG::GR_PROPSCALE, GG::CLICKABLE); graphic->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); - graphic->SetBrowseInfoWnd(boost::shared_ptr<GG::BrowseInfoWnd>(new IconTextBrowseWnd(special->Graphic(), special->Name(), special->Description()))); + graphic->SetBrowseInfoWnd(boost::shared_ptr<GG::BrowseInfoWnd>(new IconTextBrowseWnd(ClientUI::SpecialTexture(special->Name()), special->Name(), special->Description()))); m_icons.push_back(graphic); } Modified: trunk/FreeOrion/UI/ProductionWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ProductionWnd.cpp 2007-08-06 07:52:33 UTC (rev 2217) +++ trunk/FreeOrion/UI/ProductionWnd.cpp 2007-08-07 06:25:59 UTC (rev 2218) @@ -182,10 +182,10 @@ boost::shared_ptr<GG::Texture> graphic; std::string name_text; if (build.item.build_type == BT_BUILDING) { - graphic = ClientUI::BuildingTexture(GetBuildingType(build.item.name)); + graphic = ClientUI::BuildingTexture(build.item.name); name_text = UserString(build.item.name); } else if (build.item.build_type == BT_SHIP) { - graphic = ClientUI::GetTexture(ClientUI::ArtDir() / GetShipDesign(build.item.design_id)->graphic); + graphic = ClientUI::ShipIcon(build.item.design_id); name_text = GetShipDesign(build.item.design_id)->name; } else if (build.item.build_type == BT_ORBITAL) { graphic = ClientUI::GetTexture(ClientUI::ArtDir() / "misc" / "base1.png"); // this is a kludge for v0.3 only Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2007-08-06 07:52:33 UTC (rev 2217) +++ trunk/FreeOrion/UI/SidePanel.cpp 2007-08-07 06:25:59 UTC (rev 2218) @@ -328,6 +328,7 @@ GG::Clr ambient(intensity, intensity, intensity, 1.0); intensity = GetRotatingPlanetDiffuseIntensity(); GG::Clr diffuse(intensity, intensity, intensity, 1.0); + RenderSphere(diameter / 2, ambient, diffuse, GG::CLR_WHITE, shininess, texture); glPopAttrib(); @@ -517,13 +518,11 @@ m_initial_rotation(RandZeroToOne()), m_star_type(star_type) { - m_surface_texture->SetFilters(GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR); const std::map<std::string, PlanetAtmosphereData>& atmosphere_data = GetPlanetAtmosphereData(); std::map<std::string, PlanetAtmosphereData>::const_iterator it = atmosphere_data.find(m_planet_data.filename); if (it != atmosphere_data.end()) { const PlanetAtmosphereData::Atmosphere& atmosphere = it->second.atmospheres[RandSmallInt(0, it->second.atmospheres.size() - 1)]; m_atmosphere_texture = ClientUI::GetTexture(ClientUI::ArtDir() / atmosphere.filename, true); - m_atmosphere_texture->SetFilters(GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR); m_atmosphere_alpha = atmosphere.alpha; m_atmosphere_planet_rect = GG::Rect(1, 1, m_atmosphere_texture->DefaultWidth() - 4, m_atmosphere_texture->DefaultHeight() - 4); } |
From: <tz...@us...> - 2007-08-12 01:16:33
|
Revision: 2223 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2223&view=rev Author: tzlaine Date: 2007-08-11 18:16:17 -0700 (Sat, 11 Aug 2007) Log Message: ----------- Dumped the LinkText signals in favor of directly calling the relevant ZoomTo*() functions from directly within LinkText. Modified Paths: -------------- trunk/FreeOrion/UI/LinkText.cpp trunk/FreeOrion/UI/LinkText.h trunk/FreeOrion/UI/SitRepPanel.cpp Modified: trunk/FreeOrion/UI/LinkText.cpp =================================================================== --- trunk/FreeOrion/UI/LinkText.cpp 2007-08-12 01:02:02 UTC (rev 2222) +++ trunk/FreeOrion/UI/LinkText.cpp 2007-08-12 01:16:17 UTC (rev 2223) @@ -1,5 +1,6 @@ #include "LinkText.h" +#include "ClientUI.h" #include "../util/MultiplayerCommon.h" #include <GG/DrawUtil.h> @@ -66,19 +67,19 @@ int sel_link = GetLinkUnderPt(pt); if (sel_link == m_old_sel_link && sel_link != -1) { if (m_links[sel_link].type == "planet") { - PlanetLinkSignal(lexical_cast<int>(m_links[sel_link].data)); + ClientUI::GetClientUI()->ZoomToPlanet(lexical_cast<int>(m_links[sel_link].data)); } else if (m_links[sel_link].type == "system") { - SystemLinkSignal(lexical_cast<int>(m_links[sel_link].data)); + ClientUI::GetClientUI()->ZoomToSystem(lexical_cast<int>(m_links[sel_link].data)); } else if (m_links[sel_link].type == "fleet") { - FleetLinkSignal(lexical_cast<int>(m_links[sel_link].data)); + ClientUI::GetClientUI()->ZoomToFleet(lexical_cast<int>(m_links[sel_link].data)); } else if (m_links[sel_link].type == "ship") { - ShipLinkSignal(lexical_cast<int>(m_links[sel_link].data)); + ClientUI::GetClientUI()->ZoomToShip(lexical_cast<int>(m_links[sel_link].data)); } else if (m_links[sel_link].type == "tech") { - TechLinkSignal(m_links[sel_link].data); + ClientUI::GetClientUI()->ZoomToTech(m_links[sel_link].data); } else if (m_links[sel_link].type == "building") { - BuildingLinkSignal(m_links[sel_link].data); + ClientUI::GetClientUI()->ZoomToBuildingType(m_links[sel_link].data); } else if (m_links[sel_link].type == "encyclopedia") { - EncyclopediaLinkSignal(m_links[sel_link].data); + ClientUI::GetClientUI()->ZoomToEncyclopediaEntry(m_links[sel_link].data); } } m_old_sel_link = -1; Modified: trunk/FreeOrion/UI/LinkText.h =================================================================== --- trunk/FreeOrion/UI/LinkText.h 2007-08-12 01:02:02 UTC (rev 2222) +++ trunk/FreeOrion/UI/LinkText.h 2007-08-12 01:16:17 UTC (rev 2223) @@ -64,14 +64,6 @@ (i.e. if the second ctor type was used), calls to this function cause the window to be resized to whatever space the newly rendered text occupies. */ virtual void SetText(const std::string& str); - - mutable IDSignalType PlanetLinkSignal; ///< returns the planet link signal object for this LinkText - mutable IDSignalType SystemLinkSignal; ///< returns the system link signal object for this LinkText - mutable IDSignalType FleetLinkSignal; ///< returns the fleet link signal object for this LinkText - mutable IDSignalType ShipLinkSignal; ///< returns the ship link signal object for this LinkText - mutable StringSignalType TechLinkSignal; ///< returns the tech link signal object for this LinkText - mutable StringSignalType BuildingLinkSignal; ///< returns the building link signal object for this LinkText - mutable StringSignalType EncyclopediaLinkSignal; ///< returns the encyclopedia link signal object for this LinkText //@} private: Modified: trunk/FreeOrion/UI/SitRepPanel.cpp =================================================================== --- trunk/FreeOrion/UI/SitRepPanel.cpp 2007-08-12 01:02:02 UTC (rev 2222) +++ trunk/FreeOrion/UI/SitRepPanel.cpp 2007-08-12 01:16:17 UTC (rev 2223) @@ -84,13 +84,6 @@ for (Empire::SitRepItr sitrep_it = empire->SitRepBegin(); sitrep_it != empire->SitRepEnd(); ++sitrep_it) { LinkText* link_text = new LinkText(0, 0, width, (*sitrep_it)->GetText(), font, format, ClientUI::TextColor()); GG::ListBox::Row *row = new GG::ListBox::Row(link_text->Width(), link_text->Height(), ""); - GG::Connect(link_text->PlanetLinkSignal, &ClientUI::ZoomToPlanet, ClientUI::GetClientUI()); - GG::Connect(link_text->SystemLinkSignal, &ClientUI::ZoomToSystem, ClientUI::GetClientUI()); - GG::Connect(link_text->FleetLinkSignal, &ClientUI::ZoomToFleet, ClientUI::GetClientUI()); - GG::Connect(link_text->ShipLinkSignal, &ClientUI::ZoomToShip, ClientUI::GetClientUI()); - GG::Connect(link_text->TechLinkSignal, &ClientUI::ZoomToTech, ClientUI::GetClientUI()); - GG::Connect(link_text->BuildingLinkSignal, &ClientUI::ZoomToBuildingType, ClientUI::GetClientUI()); - GG::Connect(link_text->EncyclopediaLinkSignal, &ClientUI::ZoomToEncyclopediaEntry, ClientUI::GetClientUI()); row->push_back(link_text); m_sitreps_lb->Insert(row); } |
From: <geo...@us...> - 2007-08-15 09:25:42
|
Revision: 2227 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2227&view=rev Author: geoffthemedio Date: 2007-08-15 02:25:44 -0700 (Wed, 15 Aug 2007) Log Message: ----------- More work on latest revision of SidePanel planet panels Modified Paths: -------------- trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/InfoPanels.h Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-13 20:49:29 UTC (rev 2226) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-15 09:25:44 UTC (rev 2227) @@ -324,7 +324,7 @@ font_bold, ClientUI::TextColor(), GG::FORMAT_LEFT | GG::FORMAT_VCENTER); AttachChild(m_title_text); - m_main_text = new GG::TextControl(m_icon->Width() + TEXT_PAD, ROW_HEIGHT, TEXT_WIDTH, ICON_WIDTH, UserString(main_text), + m_main_text = new GG::TextControl(m_icon->Width() + TEXT_PAD, ROW_HEIGHT, TEXT_WIDTH, ICON_WIDTH, UserString(main_text), font, ClientUI::TextColor(), GG::FORMAT_LEFT | GG::FORMAT_TOP | GG::FORMAT_WORDBREAK); AttachChild(m_main_text); @@ -443,10 +443,8 @@ PopulationPanel::PopulationPanel(int w, const UniverseObject &obj) : Wnd(0, 0, w, ClientUI::Pts()*4/3, GG::CLICKABLE), m_popcenter_id(obj.ID()), - m_pop_stat(0), - m_health_stat(0), - m_pop_meter_bar(0), - m_health_meter_bar(0), + m_pop_stat(0), m_health_stat(0), + m_multi_icon_value_indicator(0), m_multi_meter_status_bar(0), m_expand_button(new GG::Button(w - 16, 0, 16, 16, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), GG::CLR_WHITE)) { SetText("PopulationPanel"); @@ -471,14 +469,7 @@ 0, 3, false, false); AttachChild(m_health_stat); - m_pop_meter_bar = new MeterStatusBar(w - m_pop_stat->Width() - icon_size*5/2 - m_expand_button->Width(), m_pop_stat->Height(), pop->PopulationMeter()); - m_pop_meter_bar->MoveTo(GG::Pt(m_pop_stat->Width() + icon_size*5/2, 0)); - m_pop_meter_bar->Hide(); - m_health_meter_bar = new MeterStatusBar(w - m_health_stat->Width() - icon_size*5/2 - m_expand_button->Width(), m_health_stat->Height(), pop->HealthMeter()); - m_health_meter_bar->MoveTo(GG::Pt(m_health_stat->Width() + icon_size*5/2, m_pop_stat->LowerRight().y)); - m_health_meter_bar->Hide(); - // determine if this panel has been created yet. std::map<int, bool>::iterator it = s_expanded_map.find(m_popcenter_id); if (it == s_expanded_map.end()) @@ -492,8 +483,8 @@ // manually delete all pointed-to controls that may or may not be attached as a child window at time of deletion delete m_pop_stat; delete m_health_stat; - delete m_pop_meter_bar; - delete m_health_meter_bar; + delete m_multi_icon_value_indicator; + delete m_multi_meter_status_bar; // don't need to manually delete m_expand_button, as it is attached as a child so will be deleted by ~Wnd } @@ -520,18 +511,12 @@ m_pop_stat->MoveTo(GG::Pt(0, 0)); m_health_stat->MoveTo(GG::Pt(Width()/2, 0)); - DetachChild(m_pop_meter_bar); - DetachChild(m_health_meter_bar); Resize(GG::Pt(Width(), icon_size)); } else { m_pop_stat->MoveTo(GG::Pt(0, 0)); m_health_stat->MoveTo(GG::Pt(0, icon_size)); - AttachChild(m_pop_meter_bar); - AttachChild(m_health_meter_bar); - m_pop_meter_bar->Show(); - m_health_meter_bar->Show(); Resize(GG::Pt(Width(), icon_size*2)); } @@ -655,27 +640,27 @@ int tooltip_delay = GetOptionsDB().Get<int>("UI.tooltip-delay"); // meter bar displays and production stats - m_pop_meter_bar->SetProjectedCurrent(pop->PopPoints() + pop->FuturePopGrowth()); - m_pop_meter_bar->SetProjectedMax(pop->MaxPop()); - m_pop_stat->SetValue(pop->PopPoints()); - if (meter_map) { - m_pop_stat->SetBrowseModeTime(tooltip_delay); - m_pop_meter_bar->SetBrowseModeTime(tooltip_delay); - boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_POPULATION, obj, *meter_map)); - m_pop_meter_bar->SetBrowseInfoWnd(browse_wnd); - m_pop_stat->SetBrowseInfoWnd(browse_wnd); - } + //m_pop_meter_bar->SetProjectedCurrent(pop->PopPoints() + pop->FuturePopGrowth()); + //m_pop_meter_bar->SetProjectedMax(pop->MaxPop()); + //m_pop_stat->SetValue(pop->PopPoints()); + //if (meter_map) { + // m_pop_stat->SetBrowseModeTime(tooltip_delay); + // m_pop_meter_bar->SetBrowseModeTime(tooltip_delay); + // boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_POPULATION, obj, *meter_map)); + // m_pop_meter_bar->SetBrowseInfoWnd(browse_wnd); + // m_pop_stat->SetBrowseInfoWnd(browse_wnd); + //} - m_health_meter_bar->SetProjectedCurrent(pop->Health() + pop->FutureHealthGrowth()); - m_health_meter_bar->SetProjectedMax(pop->MaxHealth()); - m_health_stat->SetValue(pop->Health()); - if (meter_map) { - m_health_stat->SetBrowseModeTime(tooltip_delay); - m_health_meter_bar->SetBrowseModeTime(tooltip_delay); - boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_HEALTH, obj, *meter_map)); - m_health_meter_bar->SetBrowseInfoWnd(browse_wnd); - m_health_stat->SetBrowseInfoWnd(browse_wnd); - } + //m_health_meter_bar->SetProjectedCurrent(pop->Health() + pop->FutureHealthGrowth()); + //m_health_meter_bar->SetProjectedMax(pop->MaxHealth()); + //m_health_stat->SetValue(pop->Health()); + //if (meter_map) { + // m_health_stat->SetBrowseModeTime(tooltip_delay); + // m_health_meter_bar->SetBrowseModeTime(tooltip_delay); + // boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_HEALTH, obj, *meter_map)); + // m_health_meter_bar->SetBrowseInfoWnd(browse_wnd); + // m_health_stat->SetBrowseInfoWnd(browse_wnd); + //} } void PopulationPanel::Refresh() @@ -767,35 +752,35 @@ GG::Connect(m_primary_focus_drop->SelChangedSignal, &ResourcePanel::PrimaryFocusDropListSelectionChanged, this); GG::Connect(m_secondary_focus_drop->SelChangedSignal, &ResourcePanel::SecondaryFocusDropListSelectionChanged, this); - // small resource indicators - for use when panel is collapsed - m_farming_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "farming.png").native_file_string(), GG::CLR_WHITE, - 0, 3, false, false); - AttachChild(m_farming_stat); - m_mining_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "mining.png").native_file_string(), GG::CLR_WHITE, - 0, 3, false, false); - AttachChild(m_mining_stat); - - m_industry_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "industry.png").native_file_string(), GG::CLR_WHITE, - 0, 3, false, false); - AttachChild(m_industry_stat); - - m_research_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "research.png").native_file_string(), GG::CLR_WHITE, - 0, 3, false, false); - AttachChild(m_research_stat); - - m_trade_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "trade.png").native_file_string(), GG::CLR_WHITE, - 0, 3, false, false); - AttachChild(m_trade_stat); + // small resource indicators - for use when panel is collapsed + m_farming_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "farming.png").native_file_string(), GG::CLR_WHITE, + 0, 3, false, false); + AttachChild(m_farming_stat); + m_mining_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "mining.png").native_file_string(), GG::CLR_WHITE, + 0, 3, false, false); + AttachChild(m_mining_stat); + m_industry_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "industry.png").native_file_string(), GG::CLR_WHITE, + 0, 3, false, false); + AttachChild(m_industry_stat); + m_research_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "research.png").native_file_string(), GG::CLR_WHITE, + 0, 3, false, false); + AttachChild(m_research_stat); + + m_trade_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "trade.png").native_file_string(), GG::CLR_WHITE, + 0, 3, false, false); + AttachChild(m_trade_stat); + + // meter and production indicators std::vector<MeterType> meters; meters.push_back(METER_FARMING); meters.push_back(METER_MINING); meters.push_back(METER_INDUSTRY); meters.push_back(METER_RESEARCH); meters.push_back(METER_TRADE); meters.push_back(METER_CONSTRUCTION); - const int MMSB_HEIGHT = 6*7 + 5*1 + 2*2; // 6 bars + 5 inter-bar gaps + 2 top/bottom pads - m_multi_meter_status_bar = new MultiMeterStatusBar(Width() - 2*EDGE_PAD, MMSB_HEIGHT, obj, meters); - AttachChild(m_multi_meter_status_bar); + m_multi_meter_status_bar = new MultiMeterStatusBar(Width() - 2*EDGE_PAD, obj, meters); + m_multi_icon_value_indicator = new MultiIconValueIndicator(Width() - 2*EDGE_PAD, obj, meters); + // determine if this panel has been created yet. std::map<int, bool>::iterator it = s_expanded_map.find(m_rescenter_id); if (it == s_expanded_map.end()) @@ -810,11 +795,11 @@ delete m_multi_icon_value_indicator; delete m_multi_meter_status_bar; - delete m_farming_stat; - delete m_mining_stat; - delete m_industry_stat; - delete m_research_stat; - delete m_trade_stat; + delete m_farming_stat; + delete m_mining_stat; + delete m_industry_stat; + delete m_research_stat; + delete m_trade_stat; delete m_primary_focus_drop; delete m_secondary_focus_drop; @@ -846,6 +831,7 @@ // detach / hide meter bars and large resource indicators DetachChild(m_multi_meter_status_bar); + DetachChild(m_multi_icon_value_indicator); // determine which two resource icons to display while collapsed: the two with the highest production @@ -853,11 +839,11 @@ // sort by insereting into multimap keyed by production amount, then taking the first two icons therein std::multimap<double, StatisticIcon*> res_prod_icon_map; - res_prod_icon_map.insert(std::pair<double, StatisticIcon*>(res->FarmingPoints(), m_farming_stat)); - res_prod_icon_map.insert(std::pair<double, StatisticIcon*>(res->MiningPoints(), m_mining_stat)); - res_prod_icon_map.insert(std::pair<double, StatisticIcon*>(res->IndustryPoints(), m_industry_stat)); - res_prod_icon_map.insert(std::pair<double, StatisticIcon*>(res->ResearchPoints(), m_research_stat)); - res_prod_icon_map.insert(std::pair<double, StatisticIcon*>(res->TradePoints(), m_trade_stat)); + res_prod_icon_map.insert(std::pair<double, StatisticIcon*>(res->ProjectedFarmingPoints(), m_farming_stat)); + res_prod_icon_map.insert(std::pair<double, StatisticIcon*>(res->ProjectedMiningPoints(), m_mining_stat)); + res_prod_icon_map.insert(std::pair<double, StatisticIcon*>(res->ProjectedIndustryPoints(), m_industry_stat)); + res_prod_icon_map.insert(std::pair<double, StatisticIcon*>(res->ProjectedResearchPoints(), m_research_stat)); + res_prod_icon_map.insert(std::pair<double, StatisticIcon*>(res->ProjectedTradePoints(), m_trade_stat)); // initially detach all... for (std::multimap<double, StatisticIcon*>::iterator it = res_prod_icon_map.begin(); it != res_prod_icon_map.end(); ++it) @@ -896,8 +882,13 @@ // attach and show meter bars and large resource indicators int top = UpperLeft().y; + + AttachChild(m_multi_icon_value_indicator); + m_multi_icon_value_indicator->MoveTo(GG::Pt(EDGE_PAD, m_primary_focus_drop->LowerRight().y + EDGE_PAD - top)); + m_multi_icon_value_indicator->Resize(GG::Pt(Width() - 2*EDGE_PAD, m_multi_icon_value_indicator->Height())); + AttachChild(m_multi_meter_status_bar); - m_multi_meter_status_bar->MoveTo(GG::Pt(EDGE_PAD, m_primary_focus_drop->LowerRight().y + EDGE_PAD - top)); + m_multi_meter_status_bar->MoveTo(GG::Pt(EDGE_PAD, m_multi_icon_value_indicator->LowerRight().y + EDGE_PAD - top)); m_multi_meter_status_bar->Resize(GG::Pt(Width() - 2*EDGE_PAD, m_multi_meter_status_bar->Height())); Resize(GG::Pt(Width(), m_multi_meter_status_bar->LowerRight().y + EDGE_PAD - top)); @@ -1206,94 +1197,58 @@ SecondaryFocusChangedSignal(focus); } + ///////////////////////////////////// -// MeterStatusBar // +// MultiIconValueIndicator // ///////////////////////////////////// -MeterStatusBar::MeterStatusBar(int w, int h, const Meter& meter) : - GG::Wnd(0, 0, w, h, GG::CLICKABLE), - m_meter(meter), - m_initial_max(m_meter.Max()), - m_initial_current(m_meter.Current()), - m_projected_max(m_meter.Max()), - m_projected_current(m_meter.Current()) +MultiIconValueIndicator::MultiIconValueIndicator(int w, const UniverseObject& obj, std::vector<MeterType>& meter_types) : + GG::Wnd(0, 0, w, 1, GG::CLICKABLE), + m_meter_types(meter_types), m_obj(obj) { - SetText("MeterStatusBar"); + SetText("MultiIconValueIndicator"); + Update(); } -void MeterStatusBar::SetProjectedCurrent(double current) +void MultiIconValueIndicator::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) { - assert(Meter::METER_MIN <= current && current <= Meter::METER_MAX); - m_projected_current = current; + GG::Wnd *parent; + if((parent = Parent())) + parent->MouseWheel(pt, move, mod_keys); } -void MeterStatusBar::SetProjectedMax(double max) -{ - assert(Meter::METER_MIN <= max && max <= Meter::METER_MAX); - m_projected_max = max; -} -void MeterStatusBar::Render() +void MultiIconValueIndicator::Update() { - // colours from eleazar's forum post - GG::Clr light_grey_bar(193, 193, 193, 255); // lighter than A6A6A6 100% - GG::Clr red_bar(144, 38, 21, 255); // 902615 100% - GG::Clr max_grey_bar(90, 90, 90, 255); // 5A5A5A 60% - GG::Clr green_change(164, 244, 84, 255); // A4F454 60% - GG::Clr red_change(207, 67, 41, 255); // CF4329 60% - GG::Clr line_20(147, 147, 147, 255); // 939393 45% - GG::Clr bar_box(120, 120, 120, 255); // 787878 100% + std::vector<const Meter*> meters; + for (std::vector<MeterType>::const_iterator it = m_meter_types.begin(); it != m_meter_types.end(); ++it) { + const Meter* meter = m_obj.GetMeter(*it); + if (!meter) + throw std::runtime_error("MultiMeterStatusBar::Update() tried to get a meter from and object that didn't have a meter of the specified type"); + meters.push_back(meter); + } + const int NUM_BARS = meters.size(); - const GG::Pt MARGIN = GG::Pt(1, 2); - GG::Pt working_space = Size() - GG::Pt(2 * MARGIN.x, 2 * MARGIN.y); - GG::Pt main_ul = UpperLeft() + MARGIN; // upper-left of full thickness max / current meter bars - GG::Pt main_lr = main_ul + working_space; // bottom-right - GG::Pt delta_ul = GG::Pt(main_ul.x, main_ul.y + working_space.y / 4); - GG::Pt delta_lr = GG::Pt(delta_ul.x, delta_ul.y + working_space.y / 2); - - int w = working_space.x; + const int HEIGHT = 30; - // outline of whole length of meter bar - GG::FlatRectangle(main_ul.x, main_ul.y, main_lr.x, main_lr.y, GG::CLR_ZERO, bar_box, 1); - - // max value - GG::FlatRectangle(main_ul.x + 1, main_ul.y + 1, main_ul.x + static_cast<int>(w * m_projected_max / (Meter::METER_MAX - Meter::METER_MIN) + 0.5), - main_lr.y - 1, max_grey_bar, max_grey_bar, 0); - - // current (initial) value - GG::FlatRectangle(main_ul.x + 1, main_ul.y + 1, main_ul.x + static_cast<int>(w * m_initial_current / (Meter::METER_MAX - Meter::METER_MIN) + 0.5), - main_lr.y - 1, light_grey_bar, light_grey_bar, 0); - - // projected value - GG::Clr clr = green_change; - if (m_projected_current < m_initial_current) clr = red_change; - GG::FlatRectangle(delta_ul.x + static_cast<int>(w * m_initial_current / (Meter::METER_MAX - Meter::METER_MIN) + 0.5), delta_ul.y, - delta_ul.x + static_cast<int>(w * m_projected_current / (Meter::METER_MAX - Meter::METER_MIN) + 0.5), delta_lr.y, - clr, clr, 0); + Resize(GG::Pt(Width(), HEIGHT)); } -void MeterStatusBar::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ - GG::Wnd *parent; - if((parent = Parent())) - parent->MouseWheel(pt, move, mod_keys); -} ///////////////////////////////////// -// MultiMeterStatusBar // +// MultiMeterStatusBar // ///////////////////////////////////// -MultiMeterStatusBar::MultiMeterStatusBar(int w, int h, const UniverseObject& obj, const std::vector<MeterType>& meter_types) : - GG::Wnd(0, 0, w, h, GG::CLICKABLE), - m_meter_types(meter_types), m_obj(obj), - m_bar_height(1), m_bar_colours(), +MultiMeterStatusBar::MultiMeterStatusBar(int w, const UniverseObject& obj, const std::vector<MeterType>& meter_types) : + GG::Wnd(0, 0, w, 1, GG::CLICKABLE), + m_meter_types(meter_types), m_obj(obj), m_bar_colours(), m_initial_maxes(), m_initial_currents(), m_projected_maxes(), m_projected_currents() { SetText("MultiMeterStatusBar"); - Update(); } void MultiMeterStatusBar::Render() { GG::Clr DARY_GREY = GG::Clr(44, 44, 44, 255); + GG::Clr HALF_GREY = GG::Clr(128, 128, 128, 128); GG::Pt ul = UpperLeft(); GG::Pt lr = LowerRight(); @@ -1304,21 +1259,45 @@ const int BAR_LEFT = ClientUpperLeft().x + EDGE_PAD; const int BAR_RIGHT = ClientLowerRight().x - EDGE_PAD; const int BAR_MAX_LENGTH = BAR_RIGHT - BAR_LEFT; - int y = ClientUpperLeft().y + EDGE_PAD; + const int TOP = ClientUpperLeft().y + EDGE_PAD; + int y = TOP; for (unsigned int i = 0; i < m_initial_maxes.size(); ++i) { // bar grey backgrounds - GG::FlatRectangle(BAR_LEFT, y, BAR_RIGHT, y + m_bar_height, DARY_GREY, DARY_GREY, 0); + GG::FlatRectangle(BAR_LEFT, y, BAR_RIGHT, y + BAR_HEIGHT, DARY_GREY, DARY_GREY, 0); + y += BAR_HEIGHT + BAR_PAD; + } + + + // check lines for 25, 50, 75 + double verts[][2] = {{BAR_LEFT + BAR_MAX_LENGTH/4, TOP}, {BAR_LEFT + BAR_MAX_LENGTH/4, y - BAR_PAD}, + {BAR_LEFT + BAR_MAX_LENGTH/2, TOP}, {BAR_LEFT + BAR_MAX_LENGTH/2, y - BAR_PAD}, + {BAR_LEFT + 3*BAR_MAX_LENGTH/4, TOP}, {BAR_LEFT + 3*BAR_MAX_LENGTH/4, y - BAR_PAD}}; + glDisable(GL_TEXTURE_2D); + glColor(HALF_GREY); + glBegin(GL_LINES); + glVertex2dv(verts[0]); + glVertex2dv(verts[1]); + glVertex2dv(verts[2]); + glVertex2dv(verts[3]); + glVertex2dv(verts[4]); + glVertex2dv(verts[5]); + glEnd(); + glEnable(GL_TEXTURE_2D); + + + y = TOP; + for (unsigned int i = 0; i < m_initial_maxes.size(); ++i) { // max value const int MAX_RIGHT = BAR_LEFT + static_cast<int>(BAR_MAX_LENGTH * m_projected_maxes[i] / (Meter::METER_MAX - Meter::METER_MIN) + 0.5); const int BORDER = 1; if (MAX_RIGHT > BAR_LEFT) - GG::FlatRectangle(BAR_LEFT - BORDER, y - BORDER, MAX_RIGHT + BORDER, y + m_bar_height + BORDER, GG::DarkColor(m_bar_colours[i]), GG::CLR_BLACK, 1); + GG::FlatRectangle(BAR_LEFT - BORDER, y - BORDER, MAX_RIGHT + BORDER, y + BAR_HEIGHT + BORDER, GG::DarkColor(m_bar_colours[i]), GG::CLR_BLACK, 1); // current value const int CUR_RIGHT = BAR_LEFT + static_cast<int>(BAR_MAX_LENGTH * m_initial_currents[i] / (Meter::METER_MAX - Meter::METER_MIN) + 0.5); - GG::FlatRectangle(BAR_LEFT, y, CUR_RIGHT, y + m_bar_height, m_bar_colours[i], GG::CLR_ZERO, 0); + GG::FlatRectangle(BAR_LEFT, y, CUR_RIGHT, y + BAR_HEIGHT, m_bar_colours[i], GG::CLR_ZERO, 0); // projected value const int PROJECTED_RIGHT = BAR_LEFT + static_cast<int>(BAR_MAX_LENGTH * m_projected_currents[i] / (Meter::METER_MAX - Meter::METER_MIN) + 0.5); @@ -1328,19 +1307,12 @@ int change_right = std::max(CUR_RIGHT, PROJECTED_RIGHT); int change_left = std::min(PROJECTED_RIGHT, CUR_RIGHT); - GG::FlatRectangle(change_left, y + EDGE_PAD, change_right, y + m_bar_height, projected_clr, projected_clr, 0); + GG::FlatRectangle(change_left, y + EDGE_PAD, change_right, y + BAR_HEIGHT, projected_clr, projected_clr, 0); - Logger().debugStream() << "diff: " << m_projected_currents[i] - m_initial_currents[i]; - - y += m_bar_height + BAR_PAD; + y += BAR_HEIGHT + BAR_PAD; } + - //// projected value - //GG::Clr clr = green_change; - //if (m_projected_current < m_initial_current) clr = red_change; - //GG::FlatRectangle(delta_ul.x + static_cast<int>(w * m_initial_current / (Meter::METER_MAX - Meter::METER_MIN) + 0.5), delta_ul.y, - // delta_ul.x + static_cast<int>(w * m_projected_current / (Meter::METER_MAX - Meter::METER_MIN) + 0.5), delta_lr.y, - // clr, clr, 0); } void MultiMeterStatusBar::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) @@ -1359,9 +1331,10 @@ throw std::runtime_error("MultiMeterStatusBar::Update() tried to get a meter from and object that didn't have a meter of the specified type"); meters.push_back(meter); } - const int NUM_BARS = meters.size(); + const int HEIGHT = NUM_BARS*BAR_HEIGHT + (NUM_BARS - 1)*BAR_PAD + 2*EDGE_PAD; + m_initial_maxes.clear(); m_initial_currents.clear(); m_projected_maxes.clear(); @@ -1375,11 +1348,7 @@ m_bar_colours.push_back(MeterColor(m_meter_types[i])); } - m_bar_height = std::max((Height() - 2*EDGE_PAD) / NUM_BARS, 1); - - const int NEW_HEIGHT = 2*EDGE_PAD + NUM_BARS*m_bar_height + (NUM_BARS - 1)*BAR_PAD; - - Resize(GG::Pt(Width(), NEW_HEIGHT)); + Resize(GG::Pt(Width(), HEIGHT)); } Modified: trunk/FreeOrion/UI/InfoPanels.h =================================================================== --- trunk/FreeOrion/UI/InfoPanels.h 2007-08-13 20:49:29 UTC (rev 2226) +++ trunk/FreeOrion/UI/InfoPanels.h 2007-08-15 09:25:44 UTC (rev 2227) @@ -69,8 +69,8 @@ StatisticIcon* m_pop_stat; ///< icon and number of population StatisticIcon* m_health_stat; ///< icon and number of health - MeterStatusBar* m_pop_meter_bar; ///< graphically indicates status of population - MeterStatusBar* m_health_meter_bar; ///< graphically indicates health + MultiIconValueIndicator* m_multi_icon_value_indicator; ///< textually / numerically indicates population and health + MultiMeterStatusBar* m_multi_meter_status_bar; ///< graphically indicates meter values GG::Button* m_expand_button; ///< at top right of panel, toggles the panel open/closed to show details or minimal summary @@ -121,11 +121,11 @@ int m_rescenter_id; ///< object id for the UniverseObject that is also a PopCenter which is being displayed in this panel - StatisticIcon* m_farming_stat; ///< icon and number of food production - StatisticIcon* m_mining_stat; ///< icon and number of minerals production - StatisticIcon* m_industry_stat; ///< icon and number of industry production - StatisticIcon* m_research_stat; ///< icon and number of research production - StatisticIcon* m_trade_stat; ///< icon and number of trade production + StatisticIcon* m_farming_stat; ///< icon and number of food production + StatisticIcon* m_mining_stat; ///< icon and number of minerals production + StatisticIcon* m_industry_stat; ///< icon and number of industry production + StatisticIcon* m_research_stat; ///< icon and number of research production + StatisticIcon* m_trade_stat; ///< icon and number of trade production MultiIconValueIndicator* m_multi_icon_value_indicator; ///< textually / numerically indicates resource production and construction meter MultiMeterStatusBar* m_multi_meter_status_bar; ///< graphically indicates meter values @@ -237,27 +237,6 @@ std::vector<GG::StaticGraphic*> m_icons; }; -/** Graphically represents the current, max and (in future: projected) changes to values of a Meter as a - horizontal bar */ -class MeterStatusBar : public GG::Wnd -{ -public: - MeterStatusBar(int w, int h, const Meter& meter); - - virtual void Render(); - virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); - - void SetProjectedCurrent(double current); - void SetProjectedMax(double max); - -private: - const Meter& m_meter; - double m_initial_max; - double m_initial_current; - double m_projected_max; - double m_projected_current; -}; - /** Display icon and number for various meter-related quantities associated with objects. Typical use would be to display the resource production values for a planet (not the meter values) and the construction (a meter value), or the population (not a meter value) and health (a meter value). @@ -266,16 +245,17 @@ class MultiIconValueIndicator : public GG::Wnd { public: - MultiIconValueIndicator(int w, int h, const UniverseObject& obj, std::vector<MeterType>& value_types); + MultiIconValueIndicator(int w, const UniverseObject& obj, std::vector<MeterType>& meter_types); - virtual void Render(); virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); void Update(); private: + + std::vector<MeterType> m_meter_types; - const UniverseObject& obj; + const UniverseObject& m_obj; }; /** Graphically represets the current max and projected changes to values of multiple Meters, using a @@ -283,7 +263,7 @@ class MultiMeterStatusBar : public GG::Wnd { public: - MultiMeterStatusBar(int w, int h, const UniverseObject& obj, const std::vector<MeterType>& meter_types); + MultiMeterStatusBar(int w, const UniverseObject& obj, const std::vector<MeterType>& meter_types); virtual void Render(); virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); @@ -302,7 +282,7 @@ static const int EDGE_PAD = 2; static const int BAR_PAD = 1; - int m_bar_height; + static const int BAR_HEIGHT = 7; std::vector<GG::Clr> m_bar_colours; }; |
From: <geo...@us...> - 2007-08-19 05:16:03
|
Revision: 2228 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2228&view=rev Author: geoffthemedio Date: 2007-08-18 22:16:03 -0700 (Sat, 18 Aug 2007) Log Message: ----------- -Greatly simplified StatisticIcon interface -Made StatisticIcon place the text below the icon if it is constructed with a larger height than width -Moved DoubleToString function from StatisticIcon into ClientUI for general use -Added StatisticIcons to MultiIconValueIndicator -Fixed bug where single-value StatisticIcons would have unintended space between icon and text -Added MeterIcon texture getter to ClientUI Modified Paths: -------------- trunk/FreeOrion/UI/CUIControls.cpp trunk/FreeOrion/UI/CUIControls.h trunk/FreeOrion/UI/ClientUI.cpp trunk/FreeOrion/UI/ClientUI.h trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/InfoPanels.h trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/CUIControls.cpp =================================================================== --- trunk/FreeOrion/UI/CUIControls.cpp 2007-08-15 09:25:44 UTC (rev 2227) +++ trunk/FreeOrion/UI/CUIControls.cpp 2007-08-19 05:16:03 UTC (rev 2228) @@ -830,50 +830,49 @@ /////////////////////////////////////// // class StatisticIcon /////////////////////////////////////// -// static(s) -const double StatisticIcon::UNKNOWN_VALUE = std::numeric_limits<double>::infinity(); -const double StatisticIcon::SMALL_VALUE = 1.0e-6; -const double StatisticIcon::LARGE_VALUE = 9.9999e+9; - -StatisticIcon::StatisticIcon(int x, int y, int w, int h, const std::string& icon_filename, GG::Clr text_color, +StatisticIcon::StatisticIcon(int x, int y, int w, int h, const boost::shared_ptr<GG::Texture> texture, double value, int digits, bool integerize, bool showsign) : GG::Control(x, y, w, h), m_num_values(1), - m_values(std::vector<double>(1, value)), - m_digits(std::vector<int>(1, digits)), - m_integerize(std::vector<bool>(1, integerize)), - m_show_signs(std::vector<bool>(1, showsign)), - m_positive_color(text_color), - m_zero_color(text_color), - m_negative_color(text_color), - m_icon(0), - m_text(new GG::TextControl(h, 0, w - h, h, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), text_color, GG::FORMAT_LEFT | GG::FORMAT_VCENTER)) + m_values(std::vector<double>(1, value)), m_digits(std::vector<int>(1, digits)), + m_integerize(std::vector<bool>(1, integerize)), m_show_signs(std::vector<bool>(1, showsign)), + m_icon(0), m_text(0) { - boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(icon_filename); - m_icon = new GG::StaticGraphic(0, 0, h, h, texture, GG::GRAPHIC_FITGRAPHIC); + int font_space = ClientUI::Pts()*3/2; + // arrange child controls horizontally if icon is wider than it is high, or vertically otherwise + if (w >= h) { + m_icon = new GG::StaticGraphic(0, 0, h, h, texture, GG::GRAPHIC_FITGRAPHIC); + m_text = new GG::TextControl(h, 0, w - h, std::max(font_space, h), "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), ClientUI::TextColor(), GG::FORMAT_LEFT | GG::FORMAT_VCENTER); + } else { + // need vertical space for text, but don't want icon to be larger than available horizintal space + int icon_height = std::min(w, std::max(h - font_space, 1)); + int icon_left = (w - icon_height)/2; + m_icon = new GG::StaticGraphic(icon_left, 0, icon_height, icon_height, texture, GG::GRAPHIC_FITGRAPHIC); + m_text = new GG::TextControl(0, icon_height, w, font_space, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), ClientUI::TextColor(), GG::FORMAT_CENTER | GG::FORMAT_TOP); + } AttachChild(m_icon); AttachChild(m_text); Refresh(); } -StatisticIcon::StatisticIcon(int x, int y, int w, int h, const std::string& icon_filename, GG::Clr text_color, - double value0, double value1, int digits0, int digits1, - bool integerize0, bool integerize1, bool showsign0, bool showsign1) : +StatisticIcon::StatisticIcon(int x, int y, int w, int h, const boost::shared_ptr<GG::Texture> texture, + double value0, double value1, int digits0, int digits1, + bool integerize0, bool integerize1, bool showsign0, bool showsign1) : GG::Control(x, y, w, h, GG::Flags<GG::WndFlag>()), m_num_values(2), - m_values(std::vector<double>(2, 0.0)), - m_digits(std::vector<int>(2, 2)), - m_integerize(std::vector<bool>(2, false)), - m_show_signs(std::vector<bool>(2, false)), - m_positive_color(text_color), - m_zero_color(text_color), - m_negative_color(text_color), - m_icon(0), - m_text(new GG::TextControl(h, 0, w - h, h, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), text_color, GG::FORMAT_LEFT | GG::FORMAT_VCENTER)) + m_values(std::vector<double>(2, 0.0)), m_digits(std::vector<int>(2, 2)), + m_integerize(std::vector<bool>(2, false)), m_show_signs(std::vector<bool>(2, false)), + m_icon(0), m_text(0) { - boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(icon_filename); - m_icon = new GG::StaticGraphic(0, 0, h, h, texture, GG::GRAPHIC_FITGRAPHIC); + // arrange child controls horizontally if icon is wider than it is high, or vertically otherwise + if (w >= h) { + m_icon = new GG::StaticGraphic(0, 0, h, h, texture, GG::GRAPHIC_FITGRAPHIC); + m_text = new GG::TextControl(h, 0, w - h, std::max(ClientUI::Pts()*3/2, h), "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), ClientUI::TextColor(), GG::FORMAT_LEFT | GG::FORMAT_VCENTER); + } else { + m_icon = new GG::StaticGraphic(0, 0, w, w, texture, GG::GRAPHIC_FITGRAPHIC); + m_text = new GG::TextControl(0, w, w, ClientUI::Pts()*3/2, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), ClientUI::TextColor(), GG::FORMAT_CENTER | GG::FORMAT_BOTTOM); + } m_values[0] = value0; m_values[1] = value1; @@ -888,72 +887,11 @@ Refresh(); } -double StatisticIcon::Value(int index) const -{ - if (index < 0 || index + 1 > m_num_values) throw std::invalid_argument("out of range index passed to StatisticIcon::SetValue"); - return m_values[index]; -} - -int StatisticIcon::SigFigs(int index) const -{ - if (index < 0 || index + 1 > m_num_values) throw std::invalid_argument("out of range index passed to StatisticIcon::SigFigs"); - return m_digits[index]; -} - -bool StatisticIcon::Integerize(int index) const -{ - if (index < 0 || index + 1 > m_num_values) throw std::invalid_argument("out of range index passed to StatisticIcon::Integerize"); - return m_integerize[index]; -} - -bool StatisticIcon::ShowSigns(int index) const -{ - if (index < 0 || index + 1 > m_num_values) throw std::invalid_argument("out of range index passed to StatisticIcon::ShowSigns"); - return m_show_signs[index]; -} - -void StatisticIcon::SetNumValues(int num) -{ - if (num < 1) throw std::invalid_argument("negative num passed to StatisticIcon::SetNumValues"); - if (num > 2) throw std::invalid_argument("num greater than 2 passed to StatisticIcon::SetNumValues. Only 1 or 2 supported."); - m_num_values = num; - m_values.resize(m_num_values, 0.0); - m_digits.resize(m_num_values, m_digits[0]); - m_integerize.resize(m_num_values, m_integerize[0]); - m_show_signs.resize(m_num_values, m_show_signs[0]); - Refresh(); -} - -void StatisticIcon::SetSigFigs(int digits, int index) -{ - if (index < 0) throw std::invalid_argument("negative index passed to StatisticIcon::SetSigFigs"); - if (index > m_num_values) throw std::invalid_argument("index larger than current range of values passed to StatisticIcon::SetSigFigs"); - m_digits[index] = digits; - Refresh(); -} - -void StatisticIcon::SetIntegerize(bool integerize, int index) -{ - if (index < 0) throw std::invalid_argument("negative index passed to StatisticIcon::SetIntegerize"); - if (index > m_num_values) throw std::invalid_argument("index larger than current range of values passed to StatisticIcon::SetIntegerize"); - m_integerize[index] = integerize; - Refresh(); -} - -void StatisticIcon::SetShowSigns(bool sign, int index) -{ - if (index < 0) throw std::invalid_argument("negative index passed to StatisticIcon::SetShowSigns"); - if (index > m_num_values) throw std::invalid_argument("index larger than current range of values passed to StatisticIcon::SetShowSigns"); - m_show_signs[index] = sign; - Refresh(); -} - void StatisticIcon::SetValue(double value, int index) { if (index < 0) throw std::invalid_argument("negative index passed to StatisticIcon::SetValue"); if (index > 1) throw std::invalid_argument("index greater than 1 passed to StatisticIcon::SetValue. Only 1 or 2 values, with indices 0 or 1, supported."); - if (index + 1 > m_num_values) - { + if (index + 1 > m_num_values) { m_num_values = index + 1; m_values.resize(m_num_values, 0.0); m_show_signs.resize(m_num_values, m_show_signs[0]); @@ -964,173 +902,6 @@ Refresh(); } -std::string StatisticIcon::DoubleToString(double val, int digits, bool integerize, bool showsign) -{ - std::string text = ""; - - // default result for sentinel value - if (val == UNKNOWN_VALUE) - return UserString("UNKNOWN_VALUE_SYMBOL"); - - double mag = std::abs(val); - - // integerize? - if (integerize) - mag = floor(mag); - - // prepend signs if neccessary - int effectiveSign = EffectiveSign(val, integerize); - if (effectiveSign == -1) text += "-"; - else if (showsign) text += "+"; - - if (mag > LARGE_VALUE) mag = LARGE_VALUE; - - // if digits 0 or negative, return full precision value - if (digits < 1) - { - text += boost::lexical_cast<std::string>(mag); - return text; - } - // minimum digits is 2. Less can't always be displayed with powers of 1000 base - digits = std::max(digits, 2); - - // if value is effectively 0, avoid unnecessary later processing - if (effectiveSign == 0) - { - if (integerize) - text += "0"; - else - { - text += "0.0"; - for (int n = 2; n < digits; ++n) text += "0"; // fill in 0's to required number of digits - } - return text; - } - - // power of 10 of highest valued digit in number - int pow10 = static_cast<int>(floor(log10(mag))); // = 2 for 234.4 (100's), = 4 for 45324 (10000's) - - // power of 10 of lowest digit to be included in number (limited by digits) - int LDPow10 = pow10 - digits + 1; // = 1 for 234.4 and digits = 2 (10's) - - // Lowest Digit's (number of) Digits Above Next Lowest Power of 1000 - int LDDANLP1000; - if (LDPow10 >= 0) - LDDANLP1000 = (LDPow10 % 3); // = 1 for 234.4 with 2 digits (23#.4); - else - LDDANLP1000 = (LDPow10 % 3) + 3;// = 2 for 3.25 with 2 digits (3.2##); - - // Lowest Digit's Next Lower Power of 1000 - int LDNLP1000 = LDPow10 - LDDANLP1000; - - // Lowest Digit's Next Higher Power of 1000 - int LDNHP1000 = LDNLP1000 + 3; - - /* Pick what power of 10 to use as base unit. If lowest digit lines up with a power of 1000, use it. - Otherwise, have to use next higher power of 1000 to avoid having too many digits. - Also may set adjusting factor to remove a digit below the units digit if using the next - higher power of 1000, as highest digit may be less than this, in which case extra 0. at - start of number needs to be counted in digits */ - int unitPow10, digitCor = 0; - if (LDDANLP1000 == 0) - unitPow10 = LDNLP1000; - else - { - unitPow10 = LDNHP1000; - } - - if (integerize && unitPow10 < 0) unitPow10 = 0; - if (pow10 < unitPow10) digitCor = -1; // if value is less than the base unit, there will be a leading 0 using up one digit - - /* round number down at lowest digit to be displayed, to prevent lexical_cast from rounding up - in cases like 0.998k with 2 digits -> 1.00k */ - double roundingFactor = pow(10.0, static_cast<double>(pow10 - digits + 1)); - mag /= roundingFactor; - mag = floor(mag); - mag *= roundingFactor; - - // scale number by unit power of 10 - mag /= pow(10.0, static_cast<double>(unitPow10)); // if mag = 45324 and unitPow = 3, get mag = 45.324 - - // total digits - int totalDigits = digits + digitCor; - // fraction digits: - int fractionDigits = 0; - if (!integerize) fractionDigits = unitPow10 - LDPow10; - - std::string format; - format += "%" + boost::lexical_cast<std::string>(totalDigits) + "." + - boost::lexical_cast<std::string>(fractionDigits) + "f"; - text += (boost::format(format) % mag).str(); - - // append base scale SI prefix (as postfix) - switch (unitPow10) - { - case -15: - text += "f"; // femto - break; - case -12: - text += "p"; // pico - break; - case -9: - text += "n"; // nano - break; - case -6: - text += "\xB5"; // micro - break; - case -3: - text += "m"; // milli - break; - case 3: - text += "k"; // kilo - break; - case 6: - text += "M"; // Mega - break; - case 9: - text += "G"; // Giga - break; - case 12: - text += "T"; // Terra - break; - } - - return text; -} - -int StatisticIcon::EffectiveSign(double val, bool integerize) -{ - if (val == UNKNOWN_VALUE) - return 0; - - if (integerize) - val = floor(val); - - if (std::abs(val) >= SMALL_VALUE) - { - if (val >= 0) - return 1; - else - return -1; - } - else - return 0; -} - -GG::Clr StatisticIcon::ValueColor(int index) const -{ - if (index < 0) throw std::invalid_argument("negative index passed to StatisticIcon::ValueColor"); - if (index > m_num_values) throw std::invalid_argument("index larger than current range of values passed to StatisticIcon::ValueColor"); - int effectiveSign = EffectiveSign(m_values[index], m_integerize[index]); - - // in multi-value icons, first value always has the zero colour - if (m_num_values > 1 && index == 0) return m_zero_color; - - if (effectiveSign == -1) return m_negative_color; - if (effectiveSign == 1) return m_positive_color; - return m_zero_color; -} - void StatisticIcon::Refresh() { std::string text = ""; @@ -1149,6 +920,18 @@ m_text->SetText(text); } +GG::Clr StatisticIcon::ValueColor(int index) const +{ + int effectiveSign = EffectiveSign(m_values.at(index), m_integerize.at(index)); + + if (index == 0) return ClientUI::TextColor(); + + if (effectiveSign == -1) return ClientUI::StatDecrColor(); + if (effectiveSign == 1) return ClientUI::StatIncrColor(); + + return ClientUI::TextColor(); +} + /////////////////////////////////////// // class CUIToolBar /////////////////////////////////////// Modified: trunk/FreeOrion/UI/CUIControls.h =================================================================== --- trunk/FreeOrion/UI/CUIControls.h 2007-08-15 09:25:44 UTC (rev 2227) +++ trunk/FreeOrion/UI/CUIControls.h 2007-08-19 05:16:03 UTC (rev 2228) @@ -301,76 +301,27 @@ "[population icon] 66 (+5)", where [... icon] is an icon image, not text. The icon may have one or two numerical values. If one, just that number is displayed. If two, the first number is displayed followed by the second in brackets "()" - - The number of significant figures to display may be specified for each value. In order to represent - numbers which would normally require more digits than the allowed sig figs, SI unit prefixes indicate - powers of 1000. Possible prefixes include k = 10^3, M = 10^6, G = 10^9, T = 10^12, m = 10^-3, - \xB5 = 10^-6, n = 10^-9, p = 10^-12. The smallest prefix possible for the number and sig figs limit is used. - - Each value may optionally be displayed rounded to the nearest integer, and/or with signs always indicated - (including + for positive numbers or zero) or only for negative numbers (-) - - Note: PositiveColor(), NegativeColor() and ZeroColor() are all the same color by default, specifically the one - \a text_color parameter specified in the ctor. */ class StatisticIcon : public GG::Control { public: /** \name Structors */ //@{ - StatisticIcon(int x, int y, int w, int h, const std::string& icon_filename, GG::Clr text_color, + StatisticIcon(int x, int y, int w, int h, const boost::shared_ptr<GG::Texture> texture, double value, int digits, bool integerize, bool showsign); ///< initializes with one value - StatisticIcon(int x, int y, int w, int h, const std::string& icon_filename, GG::Clr text_color, + StatisticIcon(int x, int y, int w, int h, const boost::shared_ptr<GG::Texture> texture, double value0, double value1, int digits0, int digits1, bool integerize0, bool integerize1, bool showsign0, bool showsign1); ///< initializes with two values //@} - /** \name Accessors */ //@{ - int NumValues() const {return m_num_values;} ///< returns the number of values displayed - std::vector<double> Values() const {return m_values;} ///< returns a vector containing the values displayed - double Value(int index) const; ///< returns the value with \a index - std::vector<int> SigFigs() const {return m_digits;} ///< returns a vector of int containing the number of digits to display for each value - int SigFigs(int index) const; ///< returns the number of digits for value with \a index - std::vector<bool> Integerize() const {return m_integerize;} ///< returns a vector of bool containing whether each value should be rounded to an integer - bool Integerize(int index) const; ///< returns whether the the value with \a index should be rounded to an integer - std::vector<bool> ShowsSigns() const {return m_show_signs;} ///< returns a vector of bool containing whether the sign of each value should be shown - bool ShowSigns(int index) const; ///< returns whether the sign of the value with \a index should always be shown - GG::Clr PositiveColor() const {return m_positive_color;} ///< returns the color that will be used to display positive values - GG::Clr ZeroColor() const {return m_zero_color;} ///< returns the color that will be used to display values of 0 - GG::Clr NegativeColor() const {return m_negative_color;} ///< returns the color that will be used to display negative values - //@} - - GG::Clr ValueColor(int index) const; ///< returns colour in which to draw value - /** \name Mutators */ //@{ void Render() {} - - void SetValue(double value, int index = 0); ///< sets displayed \a value with \a index - - /** sets the number of values displayed to \a num. If \a num is greater than the current number of values, extra values are - * initilaized to 0. If \a num is less than the current number of values, the extra values are discarded, and the first - * \a num values are kept unchanged - */ - void SetNumValues(int num); - - void SetSigFigs(int digits, int index = 0); ///< sets the significant figures of value with \a index. Negative or zero digits are displayed to full precision. - void SetIntegerize(bool integerize, int index = 0); ///< sets whether value with \a index should be rounded to the nearest integer when displayed - void SetShowSigns(bool sign, int index = 0); ///< sets whether the sign of value with \a index should always be shown, even for positive or zero values - - void SetPositiveColor(GG::Clr c) {m_positive_color = c; Refresh();} ///< sets the color that will be used to display positive values - void SetZeroColor(GG::Clr c) {m_zero_color = c; Refresh();} ///< sets the color that will be used to display values of zero - void SetNegativeColor(GG::Clr c) {m_negative_color = c; Refresh();} ///< sets the color that will be used to display negative values + void SetValue(double value, int index = 0); ///< sets displayed \a value with \a index //@} - static const double UNKNOWN_VALUE; - static const double SMALL_VALUE; ///< smallest (absolute value) number displayed as nonzero, with nonzero colour - static const double LARGE_VALUE; ///< largest (absolute value) number displayed. larger values rounded down to this - - static std::string DoubleToString(double val, int digits, bool integerize, bool showsign); ///< converts double to string with \a digits significant figures. Represents large numbers with SI prefixes. - private: - void Refresh(); - static int EffectiveSign(double val, bool integerize); // returns sign of value, accounting for SMALL_VALUE: +1 for positive values and -1 for negative values if their absolute value is larger than SMALL VALUE, and returns 0 for zero values or values with absolute value less than SMALL_VALUE + void Refresh(); + GG::Clr ValueColor(int index) const; ///< returns colour in which to draw value int m_num_values; @@ -379,9 +330,6 @@ std::vector<bool> m_integerize; std::vector<bool> m_show_signs; - GG::Clr m_positive_color; - GG::Clr m_zero_color; - GG::Clr m_negative_color; GG::StaticGraphic* m_icon; GG::TextControl* m_text; }; Modified: trunk/FreeOrion/UI/ClientUI.cpp =================================================================== --- trunk/FreeOrion/UI/ClientUI.cpp 2007-08-15 09:25:44 UTC (rev 2227) +++ trunk/FreeOrion/UI/ClientUI.cpp 2007-08-19 05:16:03 UTC (rev 2228) @@ -143,6 +143,41 @@ return ClientUI::GetTexture(ArtDir() / texture_name); } +boost::shared_ptr<GG::Texture> ClientUI::MeterIcon(MeterType meter_type) +{ + std::string icon_filename; + switch (meter_type) { + case METER_POPULATION: + icon_filename = "pop.png"; + break; + case METER_FARMING: + icon_filename = "farming.png"; + break; + case METER_INDUSTRY: + icon_filename = "industry.png"; + break; + case METER_RESEARCH: + icon_filename = "research.png"; + break; + case METER_TRADE: + icon_filename = "trade.png"; + break; + case METER_MINING: + icon_filename = "mining.png"; + break; + case METER_CONSTRUCTION: + icon_filename = "construction.png"; + break; + case METER_HEALTH: + icon_filename = "health.png"; + break; + default: + break; + } + return ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / icon_filename, true); +} + + // tech screen GG::Clr ClientUI::KnownTechFillColor() { return GetOptionsDB().Get<StreamableColor>("UI.known-tech").ToClr(); } GG::Clr ClientUI::KnownTechTextAndBorderColor() { return GetOptionsDB().Get<StreamableColor>("UI.known-tech-border").ToClr(); } @@ -574,3 +609,155 @@ retval.exceptions(boost::io::all_error_bits ^ (boost::io::too_many_args_bit | boost::io::too_few_args_bit)); return retval; } + +const double SMALL_UI_DISPLAY_VALUE = 1.0e-6; +const double LARGE_UI_DISPLAY_VALUE = 9.99999999e+9; +const double UNKNOWN_UI_DISPLAY_VALUE = std::numeric_limits<double>::infinity(); + +int EffectiveSign(double val, bool integerize) +{ + if (val == UNKNOWN_UI_DISPLAY_VALUE) + return 0; + + if (integerize) + val = floor(val); + + if (std::abs(val) >= SMALL_UI_DISPLAY_VALUE) { + if (val >= 0) + return 1; + else + return -1; + } + else + return 0; +} + +std::string DoubleToString(double val, int digits, bool integerize, bool showsign) +{ + std::string text = ""; + + // default result for sentinel value + if (val == UNKNOWN_UI_DISPLAY_VALUE) + return UserString("UNKNOWN_VALUE_SYMBOL"); + + double mag = std::abs(val); + + // integerize? + if (integerize) + mag = floor(mag); + + // prepend signs if neccessary + int effectiveSign = EffectiveSign(val, integerize); + if (effectiveSign == -1) text += "-"; + else if (showsign) text += "+"; + + if (mag > LARGE_UI_DISPLAY_VALUE) mag = LARGE_UI_DISPLAY_VALUE; + + // if digits 0 or negative, return full precision value + if (digits < 1) { + text += boost::lexical_cast<std::string>(mag); + return text; + } + // minimum digits is 2. Less can't always be displayed with powers of 1000 base + digits = std::max(digits, 2); + + // if value is effectively 0, avoid unnecessary later processing + if (effectiveSign == 0) { + if (integerize) { + text += "0"; + } else { + text += "0.0"; + for (int n = 2; n < digits; ++n) text += "0"; // fill in 0's to required number of digits + } + return text; + } + + // power of 10 of highest valued digit in number + int pow10 = static_cast<int>(floor(log10(mag))); // = 2 for 234.4 (100's), = 4 for 45324 (10000's) + + // power of 10 of lowest digit to be included in number (limited by digits) + int LDPow10 = pow10 - digits + 1; // = 1 for 234.4 and digits = 2 (10's) + + // Lowest Digit's (number of) Digits Above Next Lowest Power of 1000 + int LDDANLP1000; + if (LDPow10 >= 0) + LDDANLP1000 = (LDPow10 % 3); // = 1 for 234.4 with 2 digits (23#.4); + else + LDDANLP1000 = (LDPow10 % 3) + 3;// = 2 for 3.25 with 2 digits (3.2##); + + // Lowest Digit's Next Lower Power of 1000 + int LDNLP1000 = LDPow10 - LDDANLP1000; + + // Lowest Digit's Next Higher Power of 1000 + int LDNHP1000 = LDNLP1000 + 3; + + /* Pick what power of 10 to use as base unit. If lowest digit lines up with a power of 1000, use it. + Otherwise, have to use next higher power of 1000 to avoid having too many digits. + Also may set adjusting factor to remove a digit below the units digit if using the next + higher power of 1000, as highest digit may be less than this, in which case extra 0. at + start of number needs to be counted in digits */ + int unitPow10, digitCor = 0; + if (LDDANLP1000 == 0) + unitPow10 = LDNLP1000; + else + unitPow10 = LDNHP1000; + + if (integerize && unitPow10 < 0) unitPow10 = 0; + if (pow10 < unitPow10) digitCor = -1; // if value is less than the base unit, there will be a leading 0 using up one digit + + /* round number down at lowest digit to be displayed, to prevent lexical_cast from rounding up + in cases like 0.998k with 2 digits -> 1.00k */ + double roundingFactor = pow(10.0, static_cast<double>(pow10 - digits + 1)); + mag /= roundingFactor; + mag = floor(mag); + mag *= roundingFactor; + + // scale number by unit power of 10 + mag /= pow(10.0, static_cast<double>(unitPow10)); // if mag = 45324 and unitPow = 3, get mag = 45.324 + + // total digits + int totalDigits = digits + digitCor; + // fraction digits: + int fractionDigits = 0; + if (!integerize) fractionDigits = unitPow10 - LDPow10; + + std::string format; + format += "%" + boost::lexical_cast<std::string>(totalDigits) + "." + + boost::lexical_cast<std::string>(fractionDigits) + "f"; + text += (boost::format(format) % mag).str(); + + // append base scale SI prefix (as postfix) + switch (unitPow10) { + case -15: + text += "f"; // femto + break; + case -12: + text += "p"; // pico + break; + case -9: + text += "n"; // nano + break; + case -6: + text += "\xB5"; // micro + break; + case -3: + text += "m"; // milli + break; + case 3: + text += "k"; // kilo + break; + case 6: + text += "M"; // Mega + break; + case 9: + text += "G"; // Giga + break; + case 12: + text += "T"; // Terra + break; + default: + break; + } + return text; +} + Modified: trunk/FreeOrion/UI/ClientUI.h =================================================================== --- trunk/FreeOrion/UI/ClientUI.h 2007-08-15 09:25:44 UTC (rev 2227) +++ trunk/FreeOrion/UI/ClientUI.h 2007-08-19 05:16:03 UTC (rev 2228) @@ -14,7 +14,6 @@ class Fleet; class IntroScreen; class MapWnd; -class PythonConsoleWnd; class SitRepEntry; struct SaveGameUIData; class System; @@ -142,8 +141,9 @@ TechTexture(const std::string& tech_name); static boost::shared_ptr<GG::Texture> SpecialTexture(const std::string& special_name); + static boost::shared_ptr<GG::Texture> + MeterIcon(MeterType meter_type); - // research screen static GG::Clr KnownTechFillColor(); static GG::Clr KnownTechTextAndBorderColor(); @@ -158,7 +158,6 @@ static std::map<StarType, std::string>& StarTypeFilePrefixes(); static std::map<StarType, std::string>& HaloStarTypeFilePrefixes(); - //!@} private: @@ -167,7 +166,6 @@ TexturesAndDist PrefixedTexturesAndDist(const boost::filesystem::path& dir, const std::string& prefix); MapWnd* m_map_wnd; //!< the galaxy map - PythonConsoleWnd* m_python_console; //!< the python console PrefixedTextures m_prefixed_textures; @@ -202,4 +200,11 @@ /** Wraps boost::format such that it won't crash if passed the wrong number of arguments */ boost::format FlexibleFormat(const std::string &string_to_format); +extern const double SMALL_UI_DISPLAY_VALUE; +extern const double LARGE_UI_DISPLAY_VALUE; +extern const double UNKNOWN_UI_DISPLAY_VALUE; + +int EffectiveSign(double val, bool integerize); ///< returns sign of value, accounting for SMALL_UI_DISPLAY_VALUE: +1 for positive values and -1 for negative values if their absolute value is larger than SMALL VALUE, and returns 0 for zero values or values with absolute value less than SMALL_UI_DISPLAY_VALUE +std::string DoubleToString(double val, int digits, bool integerize, bool showsign); ///< converts double to string with \a digits significant figures. Represents large or small numbers with SI prefixes. + #endif // _ClientUI_h_ Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2007-08-15 09:25:44 UTC (rev 2227) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2007-08-19 05:16:03 UTC (rev 2228) @@ -105,8 +105,8 @@ AttachChild(m_ship_name_text); - m_ship_strength_stat = new StatisticIcon(h, SHIP_NAME_HT, STAT_ICON_WD, h - SHIP_NAME_HT - 1, (ClientUI::ArtDir() / "icons" / "combatstrength.png").native_file_string(), - ClientUI::TextColor(), 0, 0, true, false); + m_ship_strength_stat = new StatisticIcon(h, SHIP_NAME_HT, STAT_ICON_WD, h - SHIP_NAME_HT - 1, ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / "combatstrength.png"), + 0, 0, true, false); AttachChild(m_ship_strength_stat); m_ship_connection = GG::Connect(m_ship->StateChangedSignal, &ShipDataPanel::Refresh, this); @@ -178,7 +178,7 @@ SetShipIcon(); m_ship_name_text->SetText(m_ship->Name()); - m_ship_strength_stat->SetValue(design ? design->attack : StatisticIcon::UNKNOWN_VALUE); + m_ship_strength_stat->SetValue(design ? design->attack : UNKNOWN_UI_DISPLAY_VALUE); const int ICON_SPACING = 5; const int ICON_SZ = Height() - SHIP_NAME_HT - 1; @@ -186,8 +186,8 @@ int damage_pts = 0; // TODO: acount for damaged ships once damage system is in place if (damage_pts) { if (!m_damage_stat) { - m_damage_stat = new StatisticIcon(x_position, SHIP_NAME_HT, STAT_ICON_WD, ICON_SZ, (ClientUI::ArtDir() / "icons" / "damagemarker.png").native_file_string(), - ClientUI::TextColor(), damage_pts, 0, true, false); + m_damage_stat = new StatisticIcon(x_position, SHIP_NAME_HT, STAT_ICON_WD, ICON_SZ, ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / "damagemarker.png"), + damage_pts, 0, true, false); AttachChild(m_damage_stat); } x_position += m_damage_stat->Width(); // no icon spacing is needed after stat icons @@ -311,11 +311,11 @@ if (m_fleet) { m_num_ships_stat = new StatisticIcon(h, FLEET_NAME_HT, STAT_ICON_WD, h - FLEET_NAME_HT - 1, - (ClientUI::ArtDir() / "icons" / "3shipfleet.png").native_file_string(), - ClientUI::TextColor(), 0, 0, true, false); + ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / "3shipfleet.png"), + 0, 0, true, false); m_fleet_strength_stat = new StatisticIcon(h + STAT_ICON_WD, FLEET_NAME_HT, STAT_ICON_WD, h - FLEET_NAME_HT - 1, - (ClientUI::ArtDir() / "icons" / "combatstrength.png").native_file_string(), - ClientUI::TextColor(), 0, 0, true, false); + ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / "combatstrength.png"), + 0, 0, true, false); AttachChild(m_num_ships_stat); AttachChild(m_fleet_strength_stat); m_fleet_connection = GG::Connect(m_fleet->StateChangedSignal, &FleetDataPanel::Refresh, this); @@ -467,7 +467,7 @@ } // TODO: account for damaged ships once damage system is in place } - m_fleet_strength_stat->SetValue(attack_factor_unknown ? StatisticIcon::UNKNOWN_VALUE : attack_strength); + m_fleet_strength_stat->SetValue(attack_factor_unknown ? UNKNOWN_UI_DISPLAY_VALUE : attack_strength); const int ICON_SPACING = 5; const int ICON_SZ = Height() - FLEET_NAME_HT - 1; Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-15 09:25:44 UTC (rev 2227) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-19 05:16:03 UTC (rev 2228) @@ -193,15 +193,15 @@ m_summary_title->SetText(""); } - m_current_value->SetText(StatisticIcon::DoubleToString(current, 2, false, false)); - m_next_turn_value->SetText(StatisticIcon::DoubleToString(next, 2, false, false)); + m_current_value->SetText(DoubleToString(current, 2, false, false)); + m_next_turn_value->SetText(DoubleToString(next, 2, false, false)); GG::Clr clr = ClientUI::TextColor(); if (change > 0.0) clr = ClientUI::StatIncrColor(); else if (change < 0.0) clr = ClientUI::StatDecrColor(); - m_change_value->SetText(GG::RgbaTag(clr) + StatisticIcon::DoubleToString(change, 2, false, true) + "</rgba>"); - m_meter_title->SetText(boost::io::str(FlexibleFormat(UserString("TT_MAX_METER")) % StatisticIcon::DoubleToString(meter_max, 2, false, false))); + m_change_value->SetText(GG::RgbaTag(clr) + DoubleToString(change, 2, false, true) + "</rgba>"); + m_meter_title->SetText(boost::io::str(FlexibleFormat(UserString("TT_MAX_METER")) % DoubleToString(meter_max, 2, false, false))); } // meter effect entries @@ -275,7 +275,7 @@ else if (info_it->meter_change < 0.0) clr = ClientUI::StatDecrColor(); GG::TextControl* value = new GG::TextControl(VALUE_WIDTH, 0, VALUE_WIDTH, row_height, - GG::RgbaTag(clr) + StatisticIcon::DoubleToString(info_it->meter_change, 2, false, true) + "</rgba>", + GG::RgbaTag(clr) + DoubleToString(info_it->meter_change, 2, false, true) + "</rgba>", font, ClientUI::TextColor(), GG::FORMAT_CENTER | GG::FORMAT_VCENTER); AttachChild(value); m_effect_labels_and_values.push_back(std::pair<GG::TextControl*, GG::TextControl*>(label, value)); @@ -461,11 +461,11 @@ int icon_size = ClientUI::Pts()*4/3; - m_pop_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "pop.png").native_file_string(), GG::CLR_WHITE, + m_pop_stat = new StatisticIcon(0, 0, icon_size, icon_size, ClientUI::MeterIcon(METER_POPULATION), 0, 3, false, false); AttachChild(m_pop_stat); - m_health_stat = new StatisticIcon(w/2, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "health.png").native_file_string() , GG::CLR_WHITE, + m_health_stat = new StatisticIcon(w/2, 0, icon_size, icon_size, ClientUI::MeterIcon(METER_HEALTH), 0, 3, false, false); AttachChild(m_health_stat); @@ -753,22 +753,22 @@ GG::Connect(m_secondary_focus_drop->SelChangedSignal, &ResourcePanel::SecondaryFocusDropListSelectionChanged, this); // small resource indicators - for use when panel is collapsed - m_farming_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "farming.png").native_file_string(), GG::CLR_WHITE, + m_farming_stat = new StatisticIcon(0, 0, icon_size, icon_size, ClientUI::MeterIcon(METER_FARMING), 0, 3, false, false); AttachChild(m_farming_stat); - m_mining_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "mining.png").native_file_string(), GG::CLR_WHITE, + m_mining_stat = new StatisticIcon(0, 0, icon_size, icon_size, ClientUI::MeterIcon(METER_MINING), 0, 3, false, false); AttachChild(m_mining_stat); - m_industry_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "industry.png").native_file_string(), GG::CLR_WHITE, + m_industry_stat = new StatisticIcon(0, 0, icon_size, icon_size, ClientUI::MeterIcon(METER_INDUSTRY), 0, 3, false, false); AttachChild(m_industry_stat); - m_research_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "research.png").native_file_string(), GG::CLR_WHITE, + m_research_stat = new StatisticIcon(0, 0, icon_size, icon_size, ClientUI::MeterIcon(METER_RESEARCH), 0, 3, false, false); AttachChild(m_research_stat); - m_trade_stat = new StatisticIcon(0, 0, icon_size, icon_size, (ClientUI::ArtDir() / "icons" / "trade.png").native_file_string(), GG::CLR_WHITE, + m_trade_stat = new StatisticIcon(0, 0, icon_size, icon_size, ClientUI::MeterIcon(METER_TRADE), 0, 3, false, false); AttachChild(m_trade_stat); @@ -1203,12 +1203,32 @@ ///////////////////////////////////// MultiIconValueIndicator::MultiIconValueIndicator(int w, const UniverseObject& obj, std::vector<MeterType>& meter_types) : GG::Wnd(0, 0, w, 1, GG::CLICKABLE), - m_meter_types(meter_types), m_obj(obj) + m_meter_types(meter_types), m_obj(obj), m_icons() { SetText("MultiIconValueIndicator"); + + int x = EDGE_PAD; + for (std::vector<MeterType>::const_iterator it = m_meter_types.begin(); it != m_meter_types.end(); ++it) { + boost::shared_ptr<GG::Texture> texture = ClientUI::MeterIcon(*it); + m_icons.push_back(new StatisticIcon(x, EDGE_PAD, ICON_WIDTH, ICON_WIDTH + ClientUI::Pts()*3/2, texture, + ProjectedCurrentMeter(&m_obj, *it), 3, false, false)); + AttachChild(m_icons.back()); + x += ICON_WIDTH; + } + if (!m_icons.empty()) + Resize(GG::Pt(w, EDGE_PAD + ICON_WIDTH + ClientUI::Pts()*3/2 + EDGE_PAD)); Update(); } +void MultiIconValueIndicator::Render() +{ + GG::Pt ul = UpperLeft(); + GG::Pt lr = LowerRight(); + + // outline of whole control + GG::FlatRectangle(ul.x, ul.y, lr.x, lr.y, ClientUI::WndColor(), ClientUI::WndOuterBorderColor(), 1); +} + void MultiIconValueIndicator::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) { GG::Wnd *parent; @@ -1218,18 +1238,8 @@ void MultiIconValueIndicator::Update() { - std::vector<const Meter*> meters; - for (std::vector<MeterType>::const_iterator it = m_meter_types.begin(); it != m_meter_types.end(); ++it) { - const Meter* meter = m_obj.GetMeter(*it); - if (!meter) - throw std::runtime_error("MultiMeterStatusBar::Update() tried to get a meter from and object that didn't have a meter of the specified type"); - meters.push_back(meter); - } - const int NUM_BARS = meters.size(); - - const int HEIGHT = 30; - - Resize(GG::Pt(Width(), HEIGHT)); + for (unsigned int i = 0; i < m_icons.size(); ++i) + m_icons.at(i)->SetValue(ProjectedCurrentMeter(&m_obj, m_meter_types.at(i))); } Modified: trunk/FreeOrion/UI/InfoPanels.h =================================================================== --- trunk/FreeOrion/UI/InfoPanels.h 2007-08-15 09:25:44 UTC (rev 2227) +++ trunk/FreeOrion/UI/InfoPanels.h 2007-08-19 05:16:03 UTC (rev 2228) @@ -247,15 +247,19 @@ public: MultiIconValueIndicator(int w, const UniverseObject& obj, std::vector<MeterType>& meter_types); + virtual void Render(); virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); void Update(); private: + std::vector<StatisticIcon*> m_icons; - std::vector<MeterType> m_meter_types; const UniverseObject& m_obj; + + static const int EDGE_PAD = 2; + static const int ICON_WIDTH = 32; }; /** Graphically represets the current max and projected changes to values of multiple Meters, using a Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2007-08-15 09:25:44 UTC (rev 2227) +++ trunk/FreeOrion/UI/MapWnd.cpp 2007-08-19 05:16:03 UTC (rev 2228) @@ -230,37 +230,33 @@ const int ICON_DUAL_WIDTH = 100; const int ICON_WIDTH = ICON_DUAL_WIDTH - 30; m_population = new StatisticIcon(m_btn_siterep->UpperLeft().x-LAYOUT_MARGIN-ICON_DUAL_WIDTH,LAYOUT_MARGIN,ICON_DUAL_WIDTH,m_turn_update->Height(), - (ClientUI::ArtDir() / "icons" / "pop.png").native_file_string(), - GG::CLR_WHITE,0,0,3,2,false,false,false,true); - m_population->SetPositiveColor(ClientUI::StatIncrColor()); m_population->SetNegativeColor(ClientUI::StatDecrColor()); + ClientUI::MeterIcon(METER_POPULATION), + 0,0,3,3,true,true,false,true); m_toolbar->AttachChild(m_population); m_industry = new StatisticIcon(m_population->UpperLeft().x-LAYOUT_MARGIN-ICON_WIDTH,LAYOUT_MARGIN,ICON_WIDTH,m_turn_update->Height(), - (ClientUI::ArtDir() / "icons" / "industry.png").native_file_string(), - GG::CLR_WHITE,0,2,false,false); + ClientUI::MeterIcon(METER_INDUSTRY), + 0,3,true,false); m_toolbar->AttachChild(m_industry); m_research = new StatisticIcon(m_industry->UpperLeft().x-LAYOUT_MARGIN-ICON_WIDTH,LAYOUT_MARGIN,ICON_WIDTH,m_turn_update->Height(), - (ClientUI::ArtDir() / "icons" / "research.png").native_file_string(), - GG::CLR_WHITE,0,5,true,false); + ClientUI::MeterIcon(METER_RESEARCH), + 0,3,true,false); m_toolbar->AttachChild(m_research); m_trade = new StatisticIcon(m_research->UpperLeft().x-LAYOUT_MARGIN-ICON_DUAL_WIDTH,LAYOUT_MARGIN,ICON_DUAL_WIDTH,m_turn_update->Height(), - (ClientUI::ArtDir() / "icons" / "trade.png").native_file_string(), - GG::CLR_WHITE,0,0,3,2,false,false,false,true); - m_trade->SetPositiveColor(ClientUI::StatIncrColor()); m_trade->SetNegativeColor(ClientUI::StatDecrColor()); + ClientUI::MeterIcon(METER_TRADE), + 0,0,3,3,true,true,false,true); m_toolbar->AttachChild(m_trade); m_mineral = new StatisticIcon(m_trade->UpperLeft().x-LAYOUT_MARGIN-ICON_DUAL_WIDTH,LAYOUT_MARGIN,ICON_DUAL_WIDTH,m_turn_update->Height(), - (ClientUI::ArtDir() / "icons" / "mining.png").native_file_string(), - GG::CLR_WHITE,0,0,2,2,false,false,false,true); - m_mineral->SetPositiveColor(ClientUI::StatIncrColor()); m_mineral->SetNegativeColor(ClientUI::StatDecrColor()); + ClientUI::MeterIcon(METER_MINING), + 0,0,3,3,true,true,false,true); m_toolbar->AttachChild(m_mineral); m_food = new StatisticIcon(m_mineral->UpperLeft().x-LAYOUT_MARGIN-ICON_DUAL_WIDTH,LAYOUT_MARGIN,ICON_DUAL_WIDTH,m_turn_update->Height(), - (ClientUI::ArtDir() / "icons" / "farming.png").native_file_string(), - GG::CLR_WHITE,0,0,3,2,false,false,false,true); - m_food->SetPositiveColor(ClientUI::StatIncrColor()); m_food->SetNegativeColor(ClientUI::StatDecrColor()); + ClientUI::MeterIcon(METER_FARMING), + 0,0,3,3,true,true,false,true); m_toolbar->AttachChild(m_food); // chat display and chat input box |
From: <geo...@us...> - 2007-08-19 06:42:45
|
Revision: 2229 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2229&view=rev Author: geoffthemedio Date: 2007-08-18 23:42:48 -0700 (Sat, 18 Aug 2007) Log Message: ----------- -Added new meter bars and indicators to population panel -Added tooltips to large indicators Modified Paths: -------------- trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/InfoPanels.h Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-19 05:16:03 UTC (rev 2228) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-19 06:42:48 UTC (rev 2229) @@ -445,7 +445,7 @@ m_popcenter_id(obj.ID()), m_pop_stat(0), m_health_stat(0), m_multi_icon_value_indicator(0), m_multi_meter_status_bar(0), - m_expand_button(new GG::Button(w - 16, 0, 16, 16, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), GG::CLR_WHITE)) + m_expand_button(new GG::Button(w - 16, 0, 16, 16, "", GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), GG::CLR_WHITE, GG::CLR_ZERO, GG::ONTOP | GG::CLICKABLE)) { SetText("PopulationPanel"); @@ -470,6 +470,27 @@ AttachChild(m_health_stat); + int tooltip_delay = GetOptionsDB().Get<int>("UI.tooltip-delay"); + m_pop_stat->SetBrowseModeTime(tooltip_delay); + m_health_stat->SetBrowseModeTime(tooltip_delay); + + + // meter and production indicators + std::vector<MeterType> meters; + meters.push_back(METER_POPULATION); meters.push_back(METER_HEALTH); + + // attach and show meter bars and large resource indicators + int top = UpperLeft().y; + + m_multi_icon_value_indicator = new MultiIconValueIndicator(Width() - 2*EDGE_PAD, obj, meters); + m_multi_icon_value_indicator->MoveTo(GG::Pt(EDGE_PAD, EDGE_PAD - top)); + m_multi_icon_value_indicator->Resize(GG::Pt(Width() - 2*EDGE_PAD, m_multi_icon_value_indicator->Height())); + + m_multi_meter_status_bar = new MultiMeterStatusBar(Width() - 2*EDGE_PAD, obj, meters); + m_multi_meter_status_bar->MoveTo(GG::Pt(EDGE_PAD, m_multi_icon_value_indicator->LowerRight().y + EDGE_PAD - top)); + m_multi_meter_status_bar->Resize(GG::Pt(Width() - 2*EDGE_PAD, m_multi_meter_status_bar->Height())); + + // determine if this panel has been created yet. std::map<int, bool>::iterator it = s_expanded_map.find(m_popcenter_id); if (it == s_expanded_map.end()) @@ -508,28 +529,32 @@ // update size of panel and position and visibility of widgets if (!s_expanded_map[m_popcenter_id]) { - m_pop_stat->MoveTo(GG::Pt(0, 0)); - m_health_stat->MoveTo(GG::Pt(Width()/2, 0)); + // detach / hide meter bars and large resource indicators + DetachChild(m_multi_meter_status_bar); + DetachChild(m_multi_icon_value_indicator); + + AttachChild(m_pop_stat); + AttachChild(m_health_stat); - Resize(GG::Pt(Width(), icon_size)); } else { - m_pop_stat->MoveTo(GG::Pt(0, 0)); - m_health_stat->MoveTo(GG::Pt(0, icon_size)); + // detach statistic icons + DetachChild(m_health_stat); DetachChild(m_pop_stat); + AttachChild(m_multi_icon_value_indicator); + AttachChild(m_multi_meter_status_bar); + MoveChildUp(m_expand_button); - Resize(GG::Pt(Width(), icon_size*2)); + int top = UpperLeft().y; + Resize(GG::Pt(Width(), m_multi_meter_status_bar->LowerRight().y + EDGE_PAD - top)); } // update appearance of expand/collapse button - if (s_expanded_map[m_popcenter_id]) - { + if (s_expanded_map[m_popcenter_id]) { m_expand_button->SetUnpressedGraphic(GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "uparrownormal.png" ), 0, 0, 32, 32)); m_expand_button->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "uparrowclicked.png" ), 0, 0, 32, 32)); m_expand_button->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "uparrowmouseover.png"), 0, 0, 32, 32)); - } - else - { + } else { m_expand_button->SetUnpressedGraphic(GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrownormal.png" ), 0, 0, 32, 32)); m_expand_button->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowclicked.png" ), 0, 0, 32, 32)); m_expand_button->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowmouseover.png"), 0, 0, 32, 32)); @@ -620,17 +645,10 @@ else owner = OS_SELF; // inhabited by this empire (and possibly other empires) } - - // mousover text - actual population and health is just the corresponding meter values - std::string text; - + m_pop_stat->SetValue(pop->PopPoints()); - m_pop_stat->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); - m_health_stat->SetValue(pop->Health()); - m_health_stat->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); - const Universe::EffectAccountingMap& effect_accounting_map = universe.GetEffectAccountingMap(); const std::map<MeterType, std::vector<Universe::EffectAccountingInfo> >* meter_map = 0; Universe::EffectAccountingMap::const_iterator map_it = effect_accounting_map.find(m_popcenter_id); @@ -640,27 +658,23 @@ int tooltip_delay = GetOptionsDB().Get<int>("UI.tooltip-delay"); // meter bar displays and production stats - //m_pop_meter_bar->SetProjectedCurrent(pop->PopPoints() + pop->FuturePopGrowth()); - //m_pop_meter_bar->SetProjectedMax(pop->MaxPop()); - //m_pop_stat->SetValue(pop->PopPoints()); - //if (meter_map) { - // m_pop_stat->SetBrowseModeTime(tooltip_delay); - // m_pop_meter_bar->SetBrowseModeTime(tooltip_delay); - // boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_POPULATION, obj, *meter_map)); - // m_pop_meter_bar->SetBrowseInfoWnd(browse_wnd); - // m_pop_stat->SetBrowseInfoWnd(browse_wnd); - //} + m_multi_meter_status_bar->Update(); + m_multi_icon_value_indicator->Update(); - //m_health_meter_bar->SetProjectedCurrent(pop->Health() + pop->FutureHealthGrowth()); - //m_health_meter_bar->SetProjectedMax(pop->MaxHealth()); - //m_health_stat->SetValue(pop->Health()); - //if (meter_map) { - // m_health_stat->SetBrowseModeTime(tooltip_delay); - // m_health_meter_bar->SetBrowseModeTime(tooltip_delay); - // boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_HEALTH, obj, *meter_map)); - // m_health_meter_bar->SetBrowseInfoWnd(browse_wnd); - // m_health_stat->SetBrowseInfoWnd(browse_wnd); - //} + m_pop_stat->SetValue(pop->PopPoints() + pop->FuturePopGrowth()); + m_health_stat->SetValue(pop->Health() + pop->FutureHealthGrowth()); + + + // tooltips + if (meter_map) { + boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_POPULATION, obj, *meter_map)); + m_pop_stat->SetBrowseInfoWnd(browse_wnd); + m_multi_icon_value_indicator->SetToolTip(METER_POPULATION, browse_wnd); + + browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_HEALTH, obj, *meter_map)); + m_health_stat->SetBrowseInfoWnd(browse_wnd); + m_multi_icon_value_indicator->SetToolTip(METER_HEALTH, browse_wnd); + } } void PopulationPanel::Refresh() @@ -749,6 +763,10 @@ } AttachChild(m_secondary_focus_drop); + int tooltip_delay = GetOptionsDB().Get<int>("UI.tooltip-delay"); + m_primary_focus_drop->SetBrowseModeTime(tooltip_delay); + m_secondary_focus_drop->SetBrowseModeTime(tooltip_delay); + GG::Connect(m_primary_focus_drop->SelChangedSignal, &ResourcePanel::PrimaryFocusDropListSelectionChanged, this); GG::Connect(m_secondary_focus_drop->SelChangedSignal, &ResourcePanel::SecondaryFocusDropListSelectionChanged, this); @@ -773,6 +791,13 @@ AttachChild(m_trade_stat); + m_farming_stat->SetBrowseModeTime(tooltip_delay); + m_mining_stat->SetBrowseModeTime(tooltip_delay); + m_industry_stat->SetBrowseModeTime(tooltip_delay); + m_research_stat->SetBrowseModeTime(tooltip_delay); + m_trade_stat->SetBrowseModeTime(tooltip_delay); + + // meter and production indicators std::vector<MeterType> meters; meters.push_back(METER_FARMING); meters.push_back(METER_MINING); meters.push_back(METER_INDUSTRY); @@ -865,7 +890,6 @@ n++; } - Resize(GG::Pt(Width(), icon_size)); } else { @@ -1010,10 +1034,9 @@ if (map_it != effect_accounting_map.end()) meter_map = &(map_it->second); - int tooltip_delay = GetOptionsDB().Get<int>("UI.tooltip-delay"); - // meter bar displays and production stats m_multi_meter_status_bar->Update(); + m_multi_icon_value_indicator->Update(); m_farming_stat->SetValue(res->ProjectedFarmingPoints()); m_mining_stat->SetValue(res->ProjectedMiningPoints()); @@ -1023,26 +1046,28 @@ // tooltips if (meter_map) { - m_farming_stat->SetBrowseModeTime(tooltip_delay); - m_mining_stat->SetBrowseModeTime(tooltip_delay); - m_industry_stat->SetBrowseModeTime(tooltip_delay); - m_research_stat->SetBrowseModeTime(tooltip_delay); - m_trade_stat->SetBrowseModeTime(tooltip_delay); - boost::shared_ptr<GG::BrowseInfoWnd> browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_FARMING, obj, *meter_map)); m_farming_stat->SetBrowseInfoWnd(browse_wnd); + m_multi_icon_value_indicator->SetToolTip(METER_FARMING, browse_wnd); browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_MINING, obj, *meter_map)); m_mining_stat->SetBrowseInfoWnd(browse_wnd); + m_multi_icon_value_indicator->SetToolTip(METER_MINING, browse_wnd); browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_INDUSTRY, obj, *meter_map)); m_industry_stat->SetBrowseInfoWnd(browse_wnd); + m_multi_icon_value_indicator->SetToolTip(METER_INDUSTRY, browse_wnd); browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_RESEARCH, obj, *meter_map)); m_research_stat->SetBrowseInfoWnd(browse_wnd); + m_multi_icon_value_indicator->SetToolTip(METER_RESEARCH, browse_wnd); browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_TRADE, obj, *meter_map)); m_trade_stat->SetBrowseInfoWnd(browse_wnd); + m_multi_icon_value_indicator->SetToolTip(METER_TRADE, browse_wnd); + + browse_wnd = boost::shared_ptr<GG::BrowseInfoWnd>(new MeterBrowseWnd(METER_CONSTRUCTION, obj, *meter_map)); + m_multi_icon_value_indicator->SetToolTip(METER_CONSTRUCTION, browse_wnd); } // focus droplists @@ -1078,7 +1103,6 @@ text = boost::io::str(FlexibleFormat(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_UNKNOWN")); break; } - m_primary_focus_drop->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); m_primary_focus_drop->SetBrowseText(text); switch (res->SecondaryFocus()) @@ -1112,7 +1136,6 @@ text = boost::io::str(FlexibleFormat(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_UNKNOWN")); break; } - m_secondary_focus_drop->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); m_secondary_focus_drop->SetBrowseText(text); } @@ -1242,7 +1265,16 @@ m_icons.at(i)->SetValue(ProjectedCurrentMeter(&m_obj, m_meter_types.at(i))); } +void MultiIconValueIndicator::SetToolTip(MeterType meter_type, const boost::shared_ptr<GG::BrowseInfoWnd>& browse_wnd) +{ + for (unsigned int i = 0; i < m_icons.size(); ++i) + if (m_meter_types.at(i) == meter_type) { + m_icons.at(i)->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); + m_icons.at(i)->SetBrowseInfoWnd(browse_wnd); + } +} + ///////////////////////////////////// // MultiMeterStatusBar // ///////////////////////////////////// Modified: trunk/FreeOrion/UI/InfoPanels.h =================================================================== --- trunk/FreeOrion/UI/InfoPanels.h 2007-08-19 05:16:03 UTC (rev 2228) +++ trunk/FreeOrion/UI/InfoPanels.h 2007-08-19 06:42:48 UTC (rev 2229) @@ -75,6 +75,8 @@ GG::Button* m_expand_button; ///< at top right of panel, toggles the panel open/closed to show details or minimal summary static std::map<int, bool> s_expanded_map; ///< map indexed by popcenter ID indicating whether the PopulationPanel for each object is expanded (true) or collapsed (false) + + static const int EDGE_PAD = 3; ///< distance between edges of panel and placement of child controls }; class ResourcePanel : public GG::Wnd @@ -252,6 +254,8 @@ void Update(); + void SetToolTip(MeterType meter_type, const boost::shared_ptr<GG::BrowseInfoWnd>& browse_wnd); + private: std::vector<StatisticIcon*> m_icons; |
From: <geo...@us...> - 2007-08-19 08:39:09
|
Revision: 2230 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2230&view=rev Author: geoffthemedio Date: 2007-08-19 01:39:07 -0700 (Sun, 19 Aug 2007) Log Message: ----------- -Moved SpecialsPanel to main SidePanel, below planet name -Put dark grey background behind planet name -Moved around colonize button and environment / size TextControl Modified Paths: -------------- trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/InfoPanels.h trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-19 06:42:48 UTC (rev 2229) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-19 08:39:07 UTC (rev 2230) @@ -1807,30 +1807,41 @@ const int icon_size = 24; + int tooltip_time = GetOptionsDB().Get<int>("UI.tooltip-delay"); + // get specials and use them to create specials icons for (std::set<std::string>::const_iterator it = specials.begin(); it != specials.end(); ++it) { const Special* special = GetSpecial(*it); GG::StaticGraphic* graphic = new GG::StaticGraphic(0, 0, icon_size, icon_size, ClientUI::SpecialTexture(special->Name()), GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE, GG::CLICKABLE); - graphic->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); + graphic->SetBrowseModeTime(tooltip_time); graphic->SetBrowseInfoWnd(boost::shared_ptr<GG::BrowseInfoWnd>(new IconTextBrowseWnd(ClientUI::SpecialTexture(special->Name()), special->Name(), special->Description()))); m_icons.push_back(graphic); } - int num_specials = specials.size(); - int max_icons = Width() / (icon_size + 1); // most icons that can be fit into available space - int centre = Width() / 2; - int left = centre - (icon_size * num_specials) / 2; // left side of row of specials + const int NUM_SPECIALS = specials.size(); + const int AVAILABLE_WIDTH = Width() - EDGE_PAD; + const int ROW_ICONS = AVAILABLE_WIDTH / (icon_size + EDGE_PAD); // number of icons that will fit into one row + int x = EDGE_PAD; + int y = EDGE_PAD; - int n = 0; - for (std::vector<GG::StaticGraphic*>::iterator it = m_icons.begin(); it != m_icons.end() && n <= max_icons; ++it, ++n) { + for (std::vector<GG::StaticGraphic*>::iterator it = m_icons.begin(); it != m_icons.end(); ++it) { GG::StaticGraphic* icon = *it; - - int x = left + icon_size * n; + icon->MoveTo(GG::Pt(x, y)); + AttachChild(icon); - icon->MoveTo(GG::Pt(x, 0)); - AttachChild(icon); - GG::Pt icon_ul = icon->UpperLeft(); + x += icon_size + EDGE_PAD; + + if (x + icon_size + EDGE_PAD > AVAILABLE_WIDTH) { + x = EDGE_PAD; + y += icon_size + EDGE_PAD; + } } + + if (m_icons.empty()) { + Resize(GG::Pt(Width(), 0)); + } else { + Resize(GG::Pt(Width(), y + icon_size + EDGE_PAD*2)); + } } UniverseObject* SpecialsPanel::GetObject() Modified: trunk/FreeOrion/UI/InfoPanels.h =================================================================== --- trunk/FreeOrion/UI/InfoPanels.h 2007-08-19 06:42:48 UTC (rev 2229) +++ trunk/FreeOrion/UI/InfoPanels.h 2007-08-19 08:39:07 UTC (rev 2230) @@ -237,6 +237,8 @@ int m_object_id; ///< id for the Object whose specials this panel displays std::vector<GG::StaticGraphic*> m_icons; + + static const int EDGE_PAD = 2; }; /** Display icon and number for various meter-related quantities associated with objects. Typical use Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2007-08-19 06:42:48 UTC (rev 2229) +++ trunk/FreeOrion/UI/SidePanel.cpp 2007-08-19 08:39:07 UTC (rev 2230) @@ -735,22 +735,11 @@ } } - m_planet_name = new GG::TextControl(MAX_PLANET_DIAMETER, 5, planet.Name(), GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()*4/3), ClientUI::TextColor()); + m_planet_name = new GG::TextControl(MAX_PLANET_DIAMETER + 3, 5, planet.Name(), GG::GUI::GetGUI()->GetFont(ClientUI::FontBold(), ClientUI::Pts()*4/3), ClientUI::TextColor()); AttachChild(m_planet_name); std::string env_size_text = GetPlanetSizeName(planet) + " " + GetPlanetTypeName(planet) + " (" + GetPlanetEnvironmentName(planet) + ")"; - m_env_size = new GG::TextControl(MAX_PLANET_DIAMETER, m_planet_name->LowerRight().y - UpperLeft().y, env_size_text, GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), ClientUI::TextColor()); - AttachChild(m_env_size); - - int col_but_wid = 80; - m_button_colonize = new CUIButton(Width() - col_but_wid, 10, col_but_wid, UserString("PL_COLONIZE"), - GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), - ClientUI::ButtonColor(), ClientUI::CtrlBorderColor(), 1, - ClientUI::TextColor(), GG::CLICKABLE); - GG::Connect(m_button_colonize->ClickedSignal, &SidePanel::PlanetPanel::ClickColonize, this); - AttachChild(m_button_colonize); - m_population_panel = new PopulationPanel(w - MAX_PLANET_DIAMETER, planet); AttachChild(m_population_panel); GG::Connect(m_population_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this); @@ -765,10 +754,23 @@ AttachChild(m_buildings_panel); GG::Connect(m_buildings_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this); - m_specials_panel = new SpecialsPanel(MAX_PLANET_DIAMETER, planet); + m_specials_panel = new SpecialsPanel(w - MAX_PLANET_DIAMETER, planet); AttachChild(m_specials_panel); - m_specials_panel->MoveTo(GG::Pt(0, MAX_PLANET_DIAMETER - m_specials_panel->Height())); + m_specials_panel->MoveTo(GG::Pt(GG::Pt(Width() - m_population_panel->Width(), m_planet_name->LowerRight().y - UpperLeft().y))); + m_env_size = new GG::TextControl(MAX_PLANET_DIAMETER, m_specials_panel->LowerRight().y - UpperLeft().y, env_size_text, GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), ClientUI::TextColor()); + AttachChild(m_env_size); + + + m_button_colonize = new CUIButton(MAX_PLANET_DIAMETER, m_env_size->LowerRight().y - UpperLeft().y + 1, 80, UserString("PL_COLONIZE"), + GG::GUI::GetGUI()->GetFont(ClientUI::Font(), ClientUI::Pts()), + ClientUI::ButtonColor(), ClientUI::CtrlBorderColor(), 1, + ClientUI::TextColor(), GG::CLICKABLE); + + GG::Connect(m_button_colonize->ClickedSignal, &SidePanel::PlanetPanel::ClickColonize, this); + AttachChild(m_button_colonize); + + if (planet.Type() == PT_ASTEROIDS) MoveChildDown(m_planet_graphic); @@ -814,25 +816,25 @@ void SidePanel::PlanetPanel::DoLayout() { const int INTERPANEL_SPACE = 3; - int next_panel_top = m_planet_name->LowerRight().y - UpperLeft().y; - int panel_width = Width() - m_population_panel->Width(); + int y = m_specials_panel->LowerRight().y - UpperLeft().y; + int x = Width() - m_population_panel->Width(); if (m_population_panel->Parent() == this) { - m_population_panel->MoveTo(GG::Pt(panel_width, next_panel_top)); - next_panel_top += m_population_panel->Height() + INTERPANEL_SPACE; + m_population_panel->MoveTo(GG::Pt(x, y)); + y += m_population_panel->Height() + INTERPANEL_SPACE; } if (m_resource_panel->Parent() == this) { - m_resource_panel->MoveTo(GG::Pt(panel_width, next_panel_top)); - next_panel_top += m_resource_panel->Height() + INTERPANEL_SPACE; + m_resource_panel->MoveTo(GG::Pt(x, y)); + y += m_resource_panel->Height() + INTERPANEL_SPACE; } if (m_buildings_panel->Parent() == this) { - m_buildings_panel->MoveTo(GG::Pt(panel_width, next_panel_top)); - next_panel_top += m_buildings_panel->Height(); + m_buildings_panel->MoveTo(GG::Pt(x, y)); + y += m_buildings_panel->Height(); } - Resize(GG::Pt(Width(), std::max(next_panel_top, MAX_PLANET_DIAMETER))); + Resize(GG::Pt(Width(), std::max(y, MAX_PLANET_DIAMETER))); ResizedSignal(); } @@ -932,6 +934,11 @@ void SidePanel::PlanetPanel::Render() { + GG::Clr DARK_GREY = GG::Clr(26, 26, 26, 255); + GG::Pt ul = UpperLeft(); + GG::Pt lr = LowerRight(); + GG::FlatRectangle(ul.x + SidePanel::MAX_PLANET_DIAMETER, m_planet_name->UpperLeft().y, lr.x, m_planet_name->LowerRight().y, DARK_GREY, DARK_GREY, 0); // top title filled background + const Planet *planet = GetPlanet(); if (m_hiliting == HILITING_CANDIDATE && planet->Type() != PT_ASTEROIDS) { |
From: <geo...@us...> - 2007-08-20 04:06:37
|
Revision: 2232 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2232&view=rev Author: geoffthemedio Date: 2007-08-19 21:06:40 -0700 (Sun, 19 Aug 2007) Log Message: ----------- Fixed up system resource summary on sidepanel. Modified Paths: -------------- trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/InfoPanels.h trunk/FreeOrion/UI/SidePanel.cpp trunk/FreeOrion/UI/SidePanel.h Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-19 10:08:21 UTC (rev 2231) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2007-08-20 04:06:40 UTC (rev 2232) @@ -434,6 +434,109 @@ throw std::invalid_argument("InfoPanels ProjectedCurrentMeter passed an object without the requested meter type"); } } + + double ProjectedResourceAmount(const UniverseObject* obj, MeterType meter_type) + { + const ResourceCenter* res; + const PopCenter* pop; + const Meter* meter; + + switch (meter_type) { + case METER_FARMING: + res = dynamic_cast<const ResourceCenter*>(obj); + if (res) { + return res->ProjectedFarmingPoints(); + } else { + meter = obj->GetMeter(meter_type); + if (meter) + return meter->Current(); + throw std::invalid_argument("InfoPanels ProjectedCurrentMeter passed an object without the requested meter type"); + } + break; + case METER_MINING: + res = dynamic_cast<const ResourceCenter*>(obj); + if (res) { + return res->ProjectedMiningPoints(); + } else { + meter = obj->GetMeter(meter_type); + if (meter) + return meter->Current(); + throw std::invalid_argument("InfoPanels ProjectedCurrentMeter passed an object without the requested meter type"); + } + break; + case METER_INDUSTRY: + res = dynamic_cast<const ResourceCenter*>(obj); + if (res) { + return res->ProjectedIndustryPoints(); + } else { + meter = obj->GetMeter(meter_type); + if (meter) + return meter->Current(); + throw std::invalid_argument("InfoPanels ProjectedCurrentMeter passed an object without the requested meter type"); + } + break; + case METER_RESEARCH: + res = dynamic_cast<const ResourceCenter*>(obj); + if (res) { + return res->ProjectedResearchPoints(); + } else { + meter = obj->GetMeter(meter_type); + if (meter) + return meter->Current(); + throw std::invalid_argument("InfoPanels ProjectedCurrentMeter passed an object without the requested meter type"); + } + break; + case METER_TRADE: + res = dynamic_cast<const ResourceCenter*>(obj); + if (res) { + return res->ProjectedTradePoints(); + } else { + meter = obj->GetMeter(meter_type); + if (meter) + return meter->Current(); + throw std::invalid_argument("InfoPanels ProjectedCurrentMeter passed an object without the requested meter type"); + } + break; + case METER_CONSTRUCTION: + res = dynamic_cast<const ResourceCenter*>(obj); + if (res) { + return res->ProjectedCurrent(meter_type); + } else { + meter = obj->GetMeter(meter_type); + if (meter) + return meter->Current(); + throw std::invalid_argument("InfoPanels ProjectedCurrentMeter passed an object without the requested meter type"); + } + break; + case METER_POPULATION: + pop = dynamic_cast<const PopCenter*>(obj); + if (pop) { + return pop->PopPoints() + pop->FuturePopGrowth(); + } else { + meter = obj->GetMeter(meter_type); + if (meter) + return meter->Current(); + throw std::invalid_argument("InfoPanels ProjectedCurrentMeter passed an object without the requested meter type"); + } + break; + case METER_HEALTH: + pop = dynamic_cast<const PopCenter*>(obj); + if (pop) { + return pop->Health() + pop->FutureHealthGrowth(); + } else { + meter = obj->GetMeter(meter_type); + if (meter) + return meter->Current(); + throw std::invalid_argument("InfoPanels ProjectedCurrentMeter passed an object without the requested meter type"); + } + break; + default: + meter = obj->GetMeter(meter_type); + if (meter) + return meter->Current(); + throw std::invalid_argument("InfoPanels ProjectedCurrentMeter passed an object without the requested meter type"); + } + } } ///////////////////////////////////// @@ -1226,16 +1329,19 @@ ///////////////////////////////////// MultiIconValueIndicator::MultiIconValueIndicator(int w, const UniverseObject& obj, std::vector<MeterType>& meter_types) : GG::Wnd(0, 0, w, 1, GG::CLICKABLE), - m_meter_types(meter_types), m_obj(obj), m_icons() + m_meter_types(meter_types), m_obj_vec(), m_icons() { + m_obj_vec.push_back(&obj); + SetText("MultiIconValueIndicator"); int x = EDGE_PAD; for (std::vector<MeterType>::const_iterator it = m_meter_types.begin(); it != m_meter_types.end(); ++it) { boost::shared_ptr<GG::Texture> texture = ClientUI::MeterIcon(*it); m_icons.push_back(new StatisticIcon(x, EDGE_PAD, ICON_WIDTH, ICON_WIDTH + ClientUI::Pts()*3/2, texture, - ProjectedCurrentMeter(&m_obj, *it), 3, false, false)); + 0.0, 3, false, false)); AttachChild(m_icons.back()); + m_icons.back()->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); x += ICON_WIDTH + EDGE_PAD; } if (!m_icons.empty()) @@ -1243,6 +1349,26 @@ Update(); } +MultiIconValueIndicator::MultiIconValueIndicator(int w, const std::vector<const UniverseObject*>& obj_vec, std::vector<MeterType>& meter_types) : + GG::Wnd(0, 0, w, 1, GG::CLICKABLE), + m_meter_types(meter_types), m_obj_vec(obj_vec), m_icons() +{ + SetText("MultiIconValueIndicator"); + + int x = EDGE_PAD; + for (std::vector<MeterType>::const_iterator it = m_meter_types.begin(); it != m_meter_types.end(); ++it) { + boost::shared_ptr<GG::Texture> texture = ClientUI::MeterIcon(*it); + m_icons.push_back(new StatisticIcon(x, EDGE_PAD, ICON_WIDTH, ICON_WIDTH + ClientUI::Pts()*3/2, texture, + 0.0, 3, false, false)); + AttachChild(m_icons.back()); + m_icons.back()->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); + x += ICON_WIDTH + EDGE_PAD; + } + if (!m_icons.empty()) + Resize(GG::Pt(w, EDGE_PAD + ICON_WIDTH + ClientUI::Pts()*3/2 + EDGE_PAD)); + Update(); +} + void MultiIconValueIndicator::Render() { GG::Pt ul = UpperLeft(); @@ -1261,17 +1387,21 @@ void MultiIconValueIndicator::Update() { - for (unsigned int i = 0; i < m_icons.size(); ++i) - m_icons.at(i)->SetValue(ProjectedCurrentMeter(&m_obj, m_meter_types.at(i))); + for (unsigned int i = 0; i < m_icons.size(); ++i) { + double sum = 0; + for (unsigned int j = 0; j < m_obj_vec.size(); ++j) { + const UniverseObject* obj = m_obj_vec.at(j); + sum += ProjectedResourceAmount(obj, m_meter_types.at(i)); + } + m_icons.at(i)->SetValue(sum); + } } void MultiIconValueIndicator::SetToolTip(MeterType meter_type, const boost::shared_ptr<GG::BrowseInfoWnd>& browse_wnd) { for (unsigned int i = 0; i < m_icons.size(); ++i) - if (m_meter_types.at(i) == meter_type) { - m_icons.at(i)->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); + if (m_meter_types.at(i) == meter_type) m_icons.at(i)->SetBrowseInfoWnd(browse_wnd); - } } @@ -1316,16 +1446,16 @@ double verts[][2] = {{BAR_LEFT + BAR_MAX_LENGTH/4, TOP}, {BAR_LEFT + BAR_MAX_LENGTH/4, y - BAR_PAD}, {BAR_LEFT + BAR_MAX_LENGTH/2, TOP}, {BAR_LEFT + BAR_MAX_LENGTH/2, y - BAR_PAD}, {BAR_LEFT + 3*BAR_MAX_LENGTH/4, TOP}, {BAR_LEFT + 3*BAR_MAX_LENGTH/4, y - BAR_PAD}}; - glDisable(GL_TEXTURE_2D); - glColor(HALF_GREY); - glBegin(GL_LINES); - glVertex2dv(verts[0]); - glVertex2dv(verts[1]); - glVertex2dv(verts[2]); - glVertex2dv(verts[3]); - glVertex2dv(verts[4]); - glVertex2dv(verts[5]); - glEnd(); + glDisable(GL_TEXTURE_2D); + glColor(HALF_GREY); + glBegin(GL_LINES); + glVertex2dv(verts[0]); + glVertex2dv(verts[1]); + glVertex2dv(verts[2]); + glVertex2dv(verts[3]); + glVertex2dv(verts[4]); + glVertex2dv(verts[5]); + glEnd(); glEnable(GL_TEXTURE_2D); Modified: trunk/FreeOrion/UI/InfoPanels.h =================================================================== --- trunk/FreeOrion/UI/InfoPanels.h 2007-08-19 10:08:21 UTC (rev 2231) +++ trunk/FreeOrion/UI/InfoPanels.h 2007-08-20 04:06:40 UTC (rev 2232) @@ -250,6 +250,7 @@ { public: MultiIconValueIndicator(int w, const UniverseObject& obj, std::vector<MeterType>& meter_types); + MultiIconValueIndicator(int w, const std::vector<const UniverseObject*>& obj_vec, std::vector<MeterType>& meter_types); virtual void Render(); virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); @@ -262,7 +263,7 @@ std::vector<StatisticIcon*> m_icons; std::vector<MeterType> m_meter_types; - const UniverseObject& m_obj; + std::vector<const UniverseObject*> m_obj_vec; static const int EDGE_PAD = 2; static const int ICON_WIDTH = 32; Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2007-08-19 10:08:21 UTC (rev 2231) +++ trunk/FreeOrion/UI/SidePanel.cpp 2007-08-20 04:06:40 UTC (rev 2232) @@ -484,28 +484,6 @@ CUIScroll* m_vscroll; ///< the vertical scroll (for viewing all the planet panes) }; -class SidePanel::SystemResourceSummary : public GG::Wnd -{ -public: - /** \name Structors */ //@{ - SystemResourceSummary(int x, int y, int w, int h); - //@} - - /** \name Mutators */ //@{ - virtual void Render(); - - void SetFarming (int farming ) {m_farming = farming;} - void SetMining (int mining ) {m_mining = mining;} - void SetTrade (int trade ) {m_trade = trade;} - void SetResearch(int research) {m_research= research;} - void SetIndustry(int industry) {m_industry= industry;} - void SetDefense (int defense ) {m_defense = defense;} - //@} - -private: - int m_farming,m_mining,m_trade,m_research,m_industry,m_defense; -}; - class RotatingPlanetControl : public GG::Control { public: @@ -1204,85 +1182,6 @@ } //////////////////////////////////////////////// -// SidePanel::SystemResourceSummary -//////////////////////////////////////////////// -SidePanel::SystemResourceSummary::SystemResourceSummary(int x, int y, int w, int h) -: Wnd(x, y, w, h, GG::CLICKABLE), - m_farming(0),m_mining(0),m_trade(0),m_research(0),m_industry(0),m_defense(0) -{ -} - -void SidePanel::SystemResourceSummary::Render() -{ - GG::FlatRectangle(UpperLeft().x,UpperLeft().y,LowerRight().x,LowerRight().y,GG::FloatClr(0.0,0.0,0.0,0.5),GG::CLR_ZERO,1); - - int farming=m_farming,mining=m_mining,trade=m_trade,research=m_research,industry=m_industry,defense=m_defense; - - std::string text; int x,y; boost::shared_ptr<GG::Texture> icon; - boost::shared_ptr<GG::Font> font = HumanClientApp::GetApp()->GetFont(ClientUI::Font(), static_cast<int>(ClientUI::Pts())); - GG::Flags<GG::TextFormat> format = GG::FORMAT_LEFT | GG::FORMAT_VCENTER; - const int ICON_MARGIN = 5; - - x=UpperLeft().x;y=UpperLeft().y; - - int info_elem_width = (Width()-(6+1)*ICON_MARGIN)/6; - - //farming - glColor(ClientUI::TextColor()); - icon=IconFarming(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); - //x+=font->Height(); - text = (farming<0?"-":"+") + lexical_cast<std::string>(farming); - font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); - //x+=font->TextExtent(text, format).x+ICON_MARGIN; - x+=info_elem_width+ICON_MARGIN; - - //mining - glColor(ClientUI::TextColor()); - icon=IconMining(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); - //x+=font->Height(); - text = (mining<0?"-":"+") + lexical_cast<std::string>(mining); - font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); - //x+=font->TextExtent(text, format).x+ICON_MARGIN; - x+=info_elem_width+ICON_MARGIN; - - //trade - glColor(ClientUI::TextColor()); - icon=IconTrade(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); - //x+=font->Height(); - text = (trade<0?"-":"+") + lexical_cast<std::string>(trade); - font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); - //x+=font->TextExtent(text, format).x+ICON_MARGIN; - x+=info_elem_width+ICON_MARGIN; - - //research - glColor(ClientUI::TextColor()); - icon=IconResearch(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); - //x+=font->Height(); - text = (research<0?"-":"+") + lexical_cast<std::string>(research); - font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); - //x+=font->TextExtent(text, format).x+ICON_MARGIN; - x+=info_elem_width+ICON_MARGIN; - - //industy - glColor(ClientUI::TextColor()); - icon=IconIndustry(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); - //x+=font->Height(); - text = (industry<0?"-":"+") + lexical_cast<std::string>(industry); - font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); - //x+=font->TextExtent(text, format).x+ICON_MARGIN; - x+=info_elem_width+ICON_MARGIN; - - //defense - glColor(ClientUI::TextColor()); - icon=IconDefense(); icon->OrthoBlit(GG::Pt(x, y), GG::Pt(x+font->Height(), y+font->Height())); - //x+=font->Height(); - text = lexical_cast<std::string>(defense)+"/"+lexical_cast<std::string>(defense*3); - font->RenderText(x+font->Height(),y,x + 500, y+Height(), text, format, 0); - //x+=font->TextExtent(text, format).x+ICON_MARGIN; - x+=info_elem_width+ICON_MARGIN; -} - -//////////////////////////////////////////////// // SidePanel //////////////////////////////////////////////// // static(s) @@ -1300,7 +1199,7 @@ m_star_graphic(0), m_next_pltview_fade_in(0),m_next_pltview_planet_id(UniverseObject::INVALID_OBJECT_ID),m_next_pltview_fade_out(-1), m_planet_panel_container(new PlanetPanelContainer(0,140,w,h-170)), - m_system_resource_summary(new SystemResourceSummary(MAX_PLANET_DIAMETER,140-20,w-MAX_PLANET_DIAMETER,20)) + m_system_resource_summary(0) { TempUISoundDisabler sound_disabler; @@ -1318,6 +1217,11 @@ m_button_next->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "rightarrowclicked.png" ), 0, 0, 32, 32)); m_button_next->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "rightarrowmouseover.png"), 0, 0, 32, 32)); + + m_system_resource_summary = new MultiIconValueIndicator(w - MAX_PLANET_DIAMETER - 8, std::vector<const UniverseObject*>(), std::vector<MeterType>()); + m_system_resource_summary->MoveTo(GG::Pt(MAX_PLANET_DIAMETER + 4, 140 - m_system_resource_summary->Height())); + + AttachChild(m_system_name); AttachChild(m_button_prev); AttachChild(m_button_next); @@ -1367,7 +1271,7 @@ void SidePanel::RefreshImpl() { - UpdateSystemResourceSummary(); + m_system_resource_summary->Update(); // update individual PlanetPanels in PlanetPanelContainer, then redo layout of panel container m_planet_panel_container->RefreshAllPlanetPanels(); } @@ -1454,13 +1358,27 @@ // add planets std::vector<const Planet*> plt_vec = s_system->FindObjects<Planet>(); + std::vector<const UniverseObject*> owned_planets; + for (std::vector<const Planet*>::const_iterator it = plt_vec.begin(); it != plt_vec.end(); ++it) + if ((*it)->WhollyOwnedBy(HumanClientApp::GetApp()->EmpireID())) + owned_planets.push_back(dynamic_cast<const UniverseObject*>(*it)); + + std::vector<MeterType> meter_types; + meter_types.push_back(METER_FARMING); meter_types.push_back(METER_MINING); meter_types.push_back(METER_INDUSTRY); + meter_types.push_back(METER_RESEARCH); meter_types.push_back(METER_TRADE); + + delete m_system_resource_summary; + m_system_resource_summary = new MultiIconValueIndicator(Width() - MAX_PLANET_DIAMETER - 8, owned_planets, meter_types); + m_system_resource_summary->MoveTo(GG::Pt(MAX_PLANET_DIAMETER + 4, 140 - m_system_resource_summary->Height())); + AttachChild(m_system_resource_summary); + m_planet_panel_container->SetPlanets(plt_vec, s_system->Star()); for (unsigned int i = 0; i < plt_vec.size(); i++) { - m_system_connections.insert(GG::Connect(plt_vec[i]->StateChangedSignal, &SidePanel::UpdateSystemResourceSummary, this)); + m_system_connections.insert(GG::Connect(plt_vec[i]->StateChangedSignal, &MultiIconValueIndicator::Update, m_system_resource_summary)); m_system_connections.insert(GG::Connect(plt_vec[i]->ResourceCenterChangedSignal, SidePanel::ResourceCenterChangedSignal)); } - UpdateSystemResourceSummary(); + m_system_resource_summary->Update(); } } @@ -1554,39 +1472,3 @@ // TODO: if there are fleet status indicators on the SidePanel, update them } - -void SidePanel::UpdateSystemResourceSummary() -{ - - if (s_system) { - - std::vector<const Planet*> plt_vec = s_system->FindObjects<Planet>(); - int farming = 0, mining = 0, trade = 0, research = 0, industry = 0, defense = 0, num_empire_planets = 0; - - - for (unsigned int i = 0; i < plt_vec.size(); i++) { - if (plt_vec[i]->Owners().find(HumanClientApp::GetApp()->EmpireID()) != plt_vec[i]->Owners().end()) { - farming +=static_cast<int>(plt_vec[i]->FarmingPoints()); - mining +=static_cast<int>(plt_vec[i]->MiningPoints()); - trade +=static_cast<int>(plt_vec[i]->TradePoints()); - industry +=static_cast<int>(plt_vec[i]->IndustryPoints()); - research +=static_cast<int>(plt_vec[i]->ResearchPoints()); - defense +=plt_vec[i]->DefBases(); - - num_empire_planets++; - } - } - - m_system_resource_summary->SetFarming (farming ); - m_system_resource_summary->SetMining (mining ); - m_system_resource_summary->SetTrade (trade ); - m_system_resource_summary->SetResearch(research); - m_system_resource_summary->SetIndustry(industry); - m_system_resource_summary->SetDefense (defense ); - - if (num_empire_planets == 0) - m_system_resource_summary->Hide(); - else - m_system_resource_summary->Show(); - } -} Modified: trunk/FreeOrion/UI/SidePanel.h =================================================================== --- trunk/FreeOrion/UI/SidePanel.h 2007-08-19 10:08:21 UTC (rev 2231) +++ trunk/FreeOrion/UI/SidePanel.h 2007-08-20 04:06:40 UTC (rev 2232) @@ -19,6 +19,8 @@ class CUITextureButton; class RotatingPlanetControl; class UniverseObjectVisitor; +class MultiIconValueIndicator; + namespace GG { class TextControl; } @@ -70,7 +72,6 @@ private: class PlanetPanelContainer; - class SystemResourceSummary; void RefreshImpl(); void SetSystemImpl(); @@ -78,7 +79,6 @@ void SystemFleetAdded(const Fleet& flt); void SystemFleetRemoved(const Fleet& flt); void FleetsChanged(); - void UpdateSystemResourceSummary(); void PrevButtonClicked(); void NextButtonClicked(); void PlanetSelected(int planet_id); @@ -93,8 +93,8 @@ std::vector<GG::SubTexture> m_fleet_icons; - PlanetPanelContainer *m_planet_panel_container; - SystemResourceSummary *m_system_resource_summary; + PlanetPanelContainer* m_planet_panel_container; + MultiIconValueIndicator* m_system_resource_summary; static const System* s_system; static std::set<SidePanel*> s_side_panels; |