From: <geo...@us...> - 2009-04-12 14:03:00
|
Revision: 2979 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2979&view=rev Author: geoffthemedio Date: 2009-04-12 14:02:59 +0000 (Sun, 12 Apr 2009) Log Message: ----------- Made Buildable Items list repopulate itself even when not visible, so that it is properly refreshed at the start of each turn, so that newly unlocked buildings will appear without the users having to manually refresh the list. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-04-12 13:20:08 UTC (rev 2978) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-04-12 14:02:59 UTC (rev 2979) @@ -407,9 +407,7 @@ void BuildDesignatorWnd::BuildSelector::PopulateList() { - if (!Visible()) return; - - Logger().debugStream() << "PopulateList start"; + Logger().debugStream() << "BuildDesignatorWnd::BuildSelector::PopulateList start"; Empire* empire = Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); if (!empire) return; |
From: <geo...@us...> - 2009-04-25 19:04:16
|
Revision: 3004 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3004&view=rev Author: geoffthemedio Date: 2009-04-25 19:04:11 +0000 (Sat, 25 Apr 2009) Log Message: ----------- Switched build selector list to use DoubleToStrong so that excessively long text representations of fractional numbers of PP cost per turn aren't shown, which was making the list nigh unreadable. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-04-25 18:43:39 UTC (rev 3003) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-04-25 19:04:11 UTC (rev 3004) @@ -456,7 +456,7 @@ // cost / turn, and minimum production turns const std::pair<double, int> cost_time = empire->ProductionCostAndTime(BT_BUILDING, name); - std::string cost_text = boost::lexical_cast<std::string>(cost_time.first); + std::string cost_text = DoubleToString(cost_time.first, 3, false, false); row->push_back(cost_text, default_font, ClientUI::TextColor()); std::string time_text = boost::lexical_cast<std::string>(cost_time.second); row->push_back(time_text, default_font, ClientUI::TextColor()); @@ -511,7 +511,7 @@ // cost / turn, and minimum production turns const std::pair<double, int> cost_time = empire->ProductionCostAndTime(BT_SHIP, ship_design_id); - std::string cost_text = boost::lexical_cast<std::string>(cost_time.first); + std::string cost_text = DoubleToString(cost_time.first, 3, false, false); row->push_back(cost_text, default_font, ClientUI::TextColor()); std::string time_text = boost::lexical_cast<std::string>(cost_time.second); row->push_back(time_text, default_font, ClientUI::TextColor()); |
From: <geo...@us...> - 2009-09-05 07:39:04
|
Revision: 3139 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3139&view=rev Author: geoffthemedio Date: 2009-09-05 07:38:56 +0000 (Sat, 05 Sep 2009) Log Message: ----------- Fixed bug 2797674 "Ships Sometimes Can't Be Added to Production Queue" Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-09-05 05:45:14 UTC (rev 3138) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-09-05 07:38:56 UTC (rev 3139) @@ -938,7 +938,7 @@ if (it != m_system_default_planets.end()) { int planet_id = it->second; if (m_side_panel->PlanetSelectable(planet_id)) { - SidePanel::SelectPlanet(it->second); + this->SelectPlanet(it->second); return; } } |
From: <geo...@us...> - 2011-09-29 01:22:25
|
Revision: 4302 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4302&view=rev Author: geoffthemedio Date: 2011-09-29 01:22:18 +0000 (Thu, 29 Sep 2011) Log Message: ----------- Compile error fix by cami Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2011-09-28 05:48:03 UTC (rev 4301) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2011-09-29 01:22:18 UTC (rev 4302) @@ -636,8 +636,8 @@ if (m_build_types_shown.find(build_type) == m_build_types_shown.end()) return false; - const BuildingType* build_type = GetBuildingType(name); - if (!build_type || !build_type->Producible()) + const BuildingType* building_type = GetBuildingType(name); + if (!building_type || !building_type->Producible()) return false; const Empire* empire = Empires().Lookup(m_empire_id); |
From: <geo...@us...> - 2012-01-06 16:23:04
|
Revision: 4575 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4575&view=rev Author: geoffthemedio Date: 2012-01-06 16:22:57 +0000 (Fri, 06 Jan 2012) Log Message: ----------- -Moved test to into the ProductionItemRow constructor to disable production item rows that represent unproducible buildings types or ship designs in the producible items list, and added a location id parameter to the constructor to enable this test to be made. If an item is not producible, the row and its contained panel are disabled. This results in rows for not-producible items at the selected location to appear greyed out to players, and (still) to sound slightly different when selected. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-01-06 07:48:10 UTC (rev 4574) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-01-06 16:22:57 UTC (rev 4575) @@ -98,7 +98,8 @@ /** Renders panel background and border. */ virtual void Render() { - GG::FlatRectangle(UpperLeft(), LowerRight(), ClientUI::WndColor(), ClientUI::WndOuterBorderColor(), 1u); + GG::Clr background_clr = this->Disabled() ? ClientUI::WndColor() : ClientUI::CtrlColor(); + GG::FlatRectangle(UpperLeft(), LowerRight(), background_clr, ClientUI::WndOuterBorderColor(), 1u); } virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr) { @@ -153,7 +154,8 @@ //////////////////////////////////////////////// class ProductionItemRow : public GG::ListBox::Row { public: - ProductionItemRow(GG::X w, GG::Y h, const std::string& building_name, int empire_id) : + ProductionItemRow(GG::X w, GG::Y h, const std::string& building_name, int empire_id, + int production_location = UniverseObject::INVALID_OBJECT_ID) : GG::ListBox::Row(w, h, "", GG::ALIGN_NONE, 0), m_item(BT_BUILDING, building_name), m_empire_id(empire_id), @@ -164,9 +166,16 @@ SetDragDropDataType(building_name); m_panel = new ProductionItemPanel(w, h, m_item, m_empire_id); push_back(m_panel); + if (const Empire* empire = Empires().Lookup(m_empire_id)) { + if (!empire->BuildableItem(BT_BUILDING, building_name, production_location)) { + this->Disable(true); + m_panel->Disable(true); + } + } } - ProductionItemRow(GG::X w, GG::Y h, int design_id, int empire_id) : + ProductionItemRow(GG::X w, GG::Y h, int design_id, int empire_id, + int production_location = UniverseObject::INVALID_OBJECT_ID) : GG::ListBox::Row(w, h, "", GG::ALIGN_NONE, 0), m_item(BT_SHIP, design_id), m_empire_id(empire_id), @@ -177,6 +186,12 @@ SetDragDropDataType(boost::lexical_cast<std::string>(design_id)); m_panel = new ProductionItemPanel(w, h, m_item, m_empire_id); push_back(m_panel); + if (const Empire* empire = Empires().Lookup(m_empire_id)) { + if (!empire->BuildableItem(BT_SHIP, design_id, production_location)) { + this->Disable(true); + m_panel->Disable(true); + } + } } const ProductionQueue::ProductionItem& Item() const { @@ -714,15 +729,9 @@ if (!BuildableItemVisible(BT_BUILDING, name)) continue; - ProductionItemRow* item_row = new ProductionItemRow(row_size.x, row_size.y, name, m_empire_id); + ProductionItemRow* item_row = new ProductionItemRow(row_size.x, row_size.y, name, + m_empire_id, m_build_location); - // is item buildable? If not, disable row - if (!empire || !empire->BuildableItem(BT_BUILDING, name, m_build_location)) { - item_row->Disable(true); - } else { - item_row->Disable(false); - } - GG::ListBox::iterator row_it = m_buildable_items->Insert(item_row); m_build_types[row_it] = BT_BUILDING; if (item_row->DragDropDataType() == selected_row) @@ -753,15 +762,9 @@ // add build item panel - ProductionItemRow* item_row = new ProductionItemRow(row_size.x, row_size.y, ship_design_id, m_empire_id); + ProductionItemRow* item_row = new ProductionItemRow(row_size.x, row_size.y, ship_design_id, + m_empire_id, m_build_location); - // is item buildable? If not, disable row - if (!empire || !empire->BuildableItem(BT_SHIP, ship_design_id, m_build_location)) { - item_row->Disable(true); - } else { - item_row->Disable(false); - } - GG::ListBox::iterator row_it = m_buildable_items->Insert(item_row); m_build_types[row_it] = BT_SHIP; if (item_row->DragDropDataType() == selected_row) |
From: <geo...@us...> - 2012-01-26 05:18:17
|
Revision: 4616 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4616&view=rev Author: geoffthemedio Date: 2012-01-26 05:18:11 +0000 (Thu, 26 Jan 2012) Log Message: ----------- Grooming Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-01-25 10:48:07 UTC (rev 4615) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-01-26 05:18:11 UTC (rev 4616) @@ -507,17 +507,12 @@ } const std::set<BuildType>& BuildDesignatorWnd::BuildSelector::GetBuildTypesShown() const -{ - return m_build_types_shown; -} +{return m_build_types_shown; } const std::pair<bool, bool>& BuildDesignatorWnd::BuildSelector::GetAvailabilitiesShown() const -{ - return m_availabilities_shown; -} +{ return m_availabilities_shown; } -void BuildDesignatorWnd::BuildSelector::DoLayout() -{ +void BuildDesignatorWnd::BuildSelector::DoLayout() { int num_buttons = std::max(1, static_cast<int>(m_build_type_buttons.size() + m_availability_buttons.size())); GG::X x(0); GG::X button_width = ClientWidth() / num_buttons; @@ -535,8 +530,7 @@ ClientSize() - GG::Pt(GG::X0, GG::Y(INNER_BORDER_ANGLE_OFFSET))); } -void BuildDesignatorWnd::BuildSelector::SizeMove(const GG::Pt& ul, const GG::Pt& lr) -{ +void BuildDesignatorWnd::BuildSelector::SizeMove(const GG::Pt& ul, const GG::Pt& lr) { GG::Pt old_size = GG::Wnd::Size(); // maybe later do something interesting with docking @@ -546,8 +540,7 @@ DoLayout(); } -void BuildDesignatorWnd::BuildSelector::LDrag(const GG::Pt& pt, const GG::Pt& move, GG::Flags<GG::ModKey> mod_keys) -{ +void BuildDesignatorWnd::BuildSelector::LDrag(const GG::Pt& pt, const GG::Pt& move, GG::Flags<GG::ModKey> mod_keys) { if (m_drag_offset != GG::Pt(-GG::X1, -GG::Y1)) { // resize-dragging GG::Pt new_lr = pt - m_drag_offset; @@ -580,8 +573,7 @@ } } -void BuildDesignatorWnd::BuildSelector::MinimizeClicked() -{ +void BuildDesignatorWnd::BuildSelector::MinimizeClicked() { if (!m_minimized) { m_minimized = true; m_original_size = Size(); @@ -614,8 +606,7 @@ } } -void BuildDesignatorWnd::BuildSelector::SetBuildLocation(int location_id, bool refresh_list) -{ +void BuildDesignatorWnd::BuildSelector::SetBuildLocation(int location_id, bool refresh_list) { //std::cout << "BuildDesignatorWnd::BuildSelector::SetBuildLocation(" << location_id << ")" << std::endl; if (m_build_location != location_id) { m_build_location = location_id; @@ -624,8 +615,7 @@ } } -void BuildDesignatorWnd::BuildSelector::SetEmpireID(int empire_id/* = ALL_EMPIRES*/, bool refresh_list/* = true*/) -{ +void BuildDesignatorWnd::BuildSelector::SetEmpireID(int empire_id/* = ALL_EMPIRES*/, bool refresh_list/* = true*/) { if (empire_id == m_empire_id) return; @@ -644,8 +634,7 @@ } } -void BuildDesignatorWnd::BuildSelector::Refresh() -{ +void BuildDesignatorWnd::BuildSelector::Refresh() { Logger().debugStream() << "BuildDesignatorWnd::BuildSelector::Refresh()"; m_empire_ship_designs_changed_signal.disconnect(); if (const Empire* empire = Empires().Lookup(m_empire_id)) @@ -656,8 +645,7 @@ PopulateList(); } -void BuildDesignatorWnd::BuildSelector::ShowType(BuildType type, bool refresh_list) -{ +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); if (refresh_list) @@ -665,8 +653,7 @@ } } -void BuildDesignatorWnd::BuildSelector::HideType(BuildType type, bool refresh_list) -{ +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); @@ -675,23 +662,20 @@ } } -void BuildDesignatorWnd::BuildSelector::ShowAllTypes(bool refresh_list) -{ +void BuildDesignatorWnd::BuildSelector::ShowAllTypes(bool refresh_list) { m_build_types_shown.insert(BT_BUILDING); m_build_types_shown.insert(BT_SHIP); if (refresh_list) Refresh(); } -void BuildDesignatorWnd::BuildSelector::HideAllTypes(bool refresh_list) -{ +void BuildDesignatorWnd::BuildSelector::HideAllTypes(bool refresh_list) { m_build_types_shown.clear(); if (refresh_list) Refresh(); } -void BuildDesignatorWnd::BuildSelector::ShowAvailability(bool available, bool refresh_list) -{ +void BuildDesignatorWnd::BuildSelector::ShowAvailability(bool available, bool refresh_list) { if (available) { if (!m_availabilities_shown.first) { m_availabilities_shown.first = true; @@ -707,8 +691,7 @@ } } -void BuildDesignatorWnd::BuildSelector::HideAvailability(bool available, bool refresh_list) -{ +void BuildDesignatorWnd::BuildSelector::HideAvailability(bool available, bool refresh_list) { if (available) { if (m_availabilities_shown.first) { m_availabilities_shown.first = false; @@ -724,8 +707,7 @@ } } -bool BuildDesignatorWnd::BuildSelector::BuildableItemVisible(BuildType build_type, const std::string& name) -{ +bool BuildDesignatorWnd::BuildSelector::BuildableItemVisible(BuildType build_type, const std::string& name) { if (build_type != BT_BUILDING) throw std::invalid_argument("BuildableItemVisible was passed an invalid build type with a name"); @@ -750,8 +732,7 @@ return m_availabilities_shown.second; } -bool BuildDesignatorWnd::BuildSelector::BuildableItemVisible(BuildType build_type, int design_id) -{ +bool BuildDesignatorWnd::BuildSelector::BuildableItemVisible(BuildType build_type, int design_id) { if (build_type != BT_SHIP) throw std::invalid_argument("BuildableItemVisible was passed an invalid build type with an id"); @@ -776,8 +757,7 @@ return m_availabilities_shown.second; } -void BuildDesignatorWnd::BuildSelector::PopulateList() -{ +void BuildDesignatorWnd::BuildSelector::PopulateList() { //std::cout << "BuildDesignatorWnd::BuildSelector::PopulateList start" << std::endl; Empire* empire = Empires().Lookup(m_empire_id); if (!empire) @@ -863,8 +843,7 @@ Logger().debugStream() << "Done"; } -void BuildDesignatorWnd::BuildSelector::BuildItemSelected(const GG::ListBox::SelectionSet& selections) -{ +void BuildDesignatorWnd::BuildSelector::BuildItemSelected(const GG::ListBox::SelectionSet& selections) { if (selections.size() != 1) return; GG::ListBox::iterator row = *selections.begin(); @@ -896,8 +875,7 @@ } } -void BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked(GG::ListBox::iterator it) -{ +void BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked(GG::ListBox::iterator it) { //std::cout << "BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked" << std::endl; if ((*it)->Disabled()) return; @@ -958,27 +936,18 @@ } const std::set<BuildType>& BuildDesignatorWnd::GetBuildTypesShown() const -{ - return m_build_selector->GetBuildTypesShown(); -} +{ return m_build_selector->GetBuildTypesShown(); } const std::pair<bool, bool>& BuildDesignatorWnd::GetAvailabilitiesShown() const -{ - return m_build_selector->GetAvailabilitiesShown(); -} +{ return m_build_selector->GetAvailabilitiesShown(); } bool BuildDesignatorWnd::InWindow(const GG::Pt& pt) const -{ - return m_enc_detail_panel->InWindow(pt) || m_build_selector->InWindow(pt) || m_side_panel->InWindow(pt); -} +{ return m_enc_detail_panel->InWindow(pt) || m_build_selector->InWindow(pt) || m_side_panel->InWindow(pt); } bool BuildDesignatorWnd::InClient(const GG::Pt& pt) const -{ - return m_enc_detail_panel->InClient(pt) || m_build_selector->InClient(pt) || m_side_panel->InClient(pt); -} +{ return m_enc_detail_panel->InClient(pt) || m_build_selector->InClient(pt) || m_side_panel->InClient(pt); } -void BuildDesignatorWnd::CenterOnBuild(int queue_idx) -{ +void BuildDesignatorWnd::CenterOnBuild(int queue_idx) { SetBuild(queue_idx); const ObjectMap& objects = GetUniverse().Objects(); @@ -1002,8 +971,7 @@ } } -void BuildDesignatorWnd::SetBuild(int queue_idx) -{ +void BuildDesignatorWnd::SetBuild(int queue_idx) { int empire_id = HumanClientApp::GetApp()->EmpireID(); const Empire* empire = Empires().Lookup(empire_id); if (!empire) { @@ -1028,8 +996,7 @@ m_enc_detail_panel->Refresh(); } -void BuildDesignatorWnd::SelectSystem(int system_id) -{ +void BuildDesignatorWnd::SelectSystem(int system_id) { //std::cout << "BuildDesignatorWnd::SelectSystem(" << system_id << ")" << std::endl; if (system_id == SidePanel::SystemID()) { @@ -1044,8 +1011,7 @@ } } -void BuildDesignatorWnd::SelectPlanet(int planet_id) -{ +void BuildDesignatorWnd::SelectPlanet(int planet_id) { //std::cout << "BuildDesignatorWnd::SelectPlanet(" << planet_id << ")" << std::endl; SidePanel::SelectPlanet(planet_id); if (planet_id != UniverseObject::INVALID_OBJECT_ID) @@ -1053,22 +1019,19 @@ m_build_selector->SetBuildLocation(this->BuildLocation()); } -void BuildDesignatorWnd::Refresh() -{ +void BuildDesignatorWnd::Refresh() { m_build_selector->SetEmpireID(HumanClientApp::GetApp()->EmpireID(), false); Update(); } -void BuildDesignatorWnd::Update() -{ +void BuildDesignatorWnd::Update() { //std::cout << "BuildDesignatorWnd::Update()" << std::endl; SidePanel::Update(); m_build_selector->Refresh(); m_enc_detail_panel->Refresh(); } -void BuildDesignatorWnd::Reset() -{ +void BuildDesignatorWnd::Reset() { //std::cout << "BuildDesignatorWnd::Reset()" << std::endl; SelectSystem(UniverseObject::INVALID_OBJECT_ID); ShowAllTypes(false); // show all types without populating the list @@ -1078,16 +1041,14 @@ m_enc_detail_panel->OnUp(); } -void BuildDesignatorWnd::Clear() -{ +void BuildDesignatorWnd::Clear() { //std::cout << "BuildDesignatorWnd::Clear()" << std::endl; SidePanel::SetSystem(UniverseObject::INVALID_OBJECT_ID); Reset(); m_system_default_planets.clear(); } -void BuildDesignatorWnd::ShowType(BuildType type, bool refresh_list) -{ +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) { m_build_selector->ShowType(type, refresh_list); @@ -1097,16 +1058,14 @@ } } -void BuildDesignatorWnd::ShowAllTypes(bool refresh_list) -{ +void BuildDesignatorWnd::ShowAllTypes(bool refresh_list) { 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(); } -void BuildDesignatorWnd::HideType(BuildType type, bool refresh_list) -{ - Logger().errorStream() << "BuildDesignatorWnd::HideType(" << boost::lexical_cast<std::string>(type) << ")"; +void BuildDesignatorWnd::HideType(BuildType type, bool refresh_list) { + Logger().debugStream() << "BuildDesignatorWnd::HideType(" << boost::lexical_cast<std::string>(type) << ")"; if (type == BT_BUILDING || type == BT_SHIP) { m_build_selector->HideType(type, refresh_list); m_build_selector->m_build_type_buttons[type]->MarkNotSelected(); @@ -1115,8 +1074,7 @@ } } -void BuildDesignatorWnd::HideAllTypes(bool refresh_list) -{ +void BuildDesignatorWnd::HideAllTypes(bool refresh_list) { 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(); |
From: <geo...@us...> - 2012-06-23 20:34:32
|
Revision: 4926 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4926&view=rev Author: geoffthemedio Date: 2012-06-23 20:34:26 +0000 (Sat, 23 Jun 2012) Log Message: ----------- -Removed unclear "All" production item type button from build selector. -Hid unproducible production items in build selector when "Unavailable" not selected. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-06-23 19:27:47 UTC (rev 4925) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-06-23 20:34:26 UTC (rev 4926) @@ -341,12 +341,6 @@ const BuildType m_build_type; }; - struct ToggleAllBuildTypesFunctor { - ToggleAllBuildTypesFunctor(BuildDesignatorWnd* designator_wnd) : m_designator_wnd(designator_wnd) {} - void operator()() {m_designator_wnd->ToggleAllTypes();} - BuildDesignatorWnd* const m_designator_wnd; - }; - struct ToggleAvailabilityFunctor { ToggleAvailabilityFunctor(BuildDesignatorWnd* designator_wnd, bool available) : m_designator_wnd(designator_wnd), m_available(available) {} void operator()() {m_designator_wnd->ToggleAvailabilitly(m_available);} @@ -358,8 +352,7 @@ ////////////////////////////////////////////////// // BuildDesignatorWnd::BuildSelector ////////////////////////////////////////////////// -class BuildDesignatorWnd::BuildSelector : public CUIWnd -{ +class BuildDesignatorWnd::BuildSelector : public CUIWnd { public: /** \name Structors */ //@{ BuildSelector(GG::X w, GG::Y h); @@ -443,7 +436,7 @@ RowToBuildTypeMap m_build_types; GG::Pt m_original_ul; - int m_build_location; + int m_production_location; int m_empire_id; mutable boost::signals::connection m_empire_ship_designs_changed_signal; @@ -458,7 +451,7 @@ GG::INTERACTIVE | GG::DRAGABLE | GG::RESIZABLE | GG::ONTOP), m_buildable_items(new BuildableItemsListBox(GG::X0, GG::Y0, GG::X1, GG::Y1)), m_build_types(GG::ListBox::RowPtrIteratorLess<GG::ListBox>(m_buildable_items)), - m_build_location(INVALID_OBJECT_ID), + m_production_location(INVALID_OBJECT_ID), m_empire_id(ALL_EMPIRES) { // create build type toggle buttons (ship, building, all) @@ -466,8 +459,6 @@ AttachChild(m_build_type_buttons[BT_BUILDING]); m_build_type_buttons[BT_SHIP] = new CUIButton(GG::X0, GG::Y0, GG::X1, UserString("PRODUCTION_WND_CATEGORY_BT_SHIP")); AttachChild(m_build_type_buttons[BT_SHIP]); - m_build_type_buttons[NUM_BUILD_TYPES] = new CUIButton(GG::X0, GG::Y0, GG::X1, UserString("ALL")); - AttachChild(m_build_type_buttons[NUM_BUILD_TYPES]); // create availability toggle buttons (available, not available) m_availability_buttons.push_back(new CUIButton(GG::X0, GG::Y0, GG::X1, UserString("PRODUCTION_WND_AVAILABILITY_AVAILABLE"))); @@ -513,19 +504,23 @@ { return m_availabilities_shown; } void BuildDesignatorWnd::BuildSelector::DoLayout() { - int num_buttons = std::max(1, static_cast<int>(m_build_type_buttons.size() + m_availability_buttons.size())); + int num_buttons = 4; GG::X x(0); GG::X button_width = ClientWidth() / num_buttons; - GG::Y button_height(20); - for (unsigned int i = 0; i < m_build_type_buttons.size() - 1; ++i) { - m_build_type_buttons[BuildType(BT_BUILDING + i)]->SizeMove(GG::Pt(x, GG::Y0), GG::Pt(x + button_width, button_height)); - x += button_width; - } - m_build_type_buttons[NUM_BUILD_TYPES]->SizeMove(GG::Pt(x, GG::Y0), GG::Pt(x + button_width, button_height)); x += button_width; + GG::Y button_height(ClientUI::Pts()*4/3); - m_availability_buttons[0]->SizeMove(GG::Pt(x, GG::Y0), GG::Pt(x + button_width, button_height)); x += button_width; - m_availability_buttons[1]->SizeMove(GG::Pt(x, GG::Y0), GG::Pt(x + button_width, button_height)); + m_build_type_buttons[BT_BUILDING]->SizeMove(GG::Pt(x, GG::Y0), GG::Pt(x + button_width, button_height)); + x += button_width; + m_build_type_buttons[BT_SHIP]->SizeMove( GG::Pt(x, GG::Y0), GG::Pt(x + button_width, button_height)); + x += button_width; + + m_availability_buttons[0]->SizeMove( GG::Pt(x, GG::Y0), GG::Pt(x + button_width, button_height)); + x += button_width; + + m_availability_buttons[1]->SizeMove( GG::Pt(x, GG::Y0), GG::Pt(x + button_width, button_height)); + x += button_width; + m_buildable_items->SizeMove(GG::Pt(GG::X0, button_height), ClientSize() - GG::Pt(GG::X0, GG::Y(INNER_BORDER_ANGLE_OFFSET))); } @@ -608,8 +603,8 @@ void BuildDesignatorWnd::BuildSelector::SetBuildLocation(int location_id, bool refresh_list) { //std::cout << "BuildDesignatorWnd::BuildSelector::SetBuildLocation(" << location_id << ")" << std::endl; - if (m_build_location != location_id) { - m_build_location = location_id; + if (m_production_location != location_id) { + m_production_location = location_id; if (refresh_list) Refresh(); } @@ -722,11 +717,9 @@ if (!empire) return true; - bool available = false; - if (build_type == BT_BUILDING) - available = empire->BuildingTypeAvailable(name); + bool producible_here = empire->BuildableItem(BT_BUILDING, name, m_production_location); - if (available) + if (producible_here) return m_availabilities_shown.first; else return m_availabilities_shown.second; @@ -747,11 +740,9 @@ if (!empire) return true; - bool available = false; - if (build_type == BT_SHIP) - available = empire->ShipDesignAvailable(design_id); + bool producible_here = empire->BuildableItem(BT_SHIP, design_id, m_production_location); - if (available) + if (producible_here) return m_availabilities_shown.first; else return m_availabilities_shown.second; @@ -781,7 +772,7 @@ // populate list with building types - Logger().debugStream() << "BuildDesignatorWnd::BuildSelector::PopulateList() : Adding Buildings "; + //Logger().debugStream() << "BuildDesignatorWnd::BuildSelector::PopulateList() : Adding Buildings "; if (m_build_types_shown.find(BT_BUILDING) != m_build_types_shown.end()) { BuildingTypeManager& manager = GetBuildingTypeManager(); @@ -791,7 +782,7 @@ if (!BuildableItemVisible(BT_BUILDING, name)) continue; ProductionItemRow* item_row = new ProductionItemRow(row_size.x, row_size.y, name, - m_empire_id, m_build_location); + m_empire_id, m_production_location); GG::ListBox::iterator row_it = m_buildable_items->Insert(item_row); m_build_types[row_it] = BT_BUILDING; @@ -802,7 +793,7 @@ } } // populate with ship designs - Logger().debugStream() << "BuildDesignatorWnd::BuildSelector::PopulateList() : Adding ship designs"; + //Logger().debugStream() << "BuildDesignatorWnd::BuildSelector::PopulateList() : Adding ship designs"; if (m_build_types_shown.find(BT_SHIP) != m_build_types_shown.end()) { // get ids of designs to show... for specific empire, or for all empires std::vector<int> design_ids; @@ -824,7 +815,7 @@ // add build item panel ProductionItemRow* item_row = new ProductionItemRow(row_size.x, row_size.y, ship_design_id, - m_empire_id, m_build_location); + m_empire_id, m_production_location); GG::ListBox::iterator row_it = m_buildable_items->Insert(item_row); m_build_types[row_it] = BT_SHIP; @@ -835,12 +826,12 @@ } } - Logger().debugStream() << "Selecting Row"; + //Logger().debugStream() << "Selecting Row"; if (row_to_select != m_buildable_items->end()) { m_buildable_items->SelectRow(row_to_select); BuildItemSelected(m_buildable_items->Selections()); } - Logger().debugStream() << "Done"; + //Logger().debugStream() << "Done"; } void BuildDesignatorWnd::BuildSelector::BuildItemSelected(const GG::ListBox::SelectionSet& selections) { @@ -919,7 +910,6 @@ // connect build type button clicks to update display GG::Connect(m_build_selector->m_build_type_buttons[BT_BUILDING]->ClickedSignal, ToggleBuildTypeFunctor(this, BT_BUILDING)); GG::Connect(m_build_selector->m_build_type_buttons[BT_SHIP]->ClickedSignal, ToggleBuildTypeFunctor(this, BT_SHIP)); - GG::Connect(m_build_selector->m_build_type_buttons[NUM_BUILD_TYPES]->ClickedSignal, ToggleAllBuildTypesFunctor( this)); // last button should be "All" button // connect availability button clicks to update display GG::Connect(m_build_selector->m_availability_buttons.at(0)->ClickedSignal, ToggleAvailabilityFunctor(this, true)); // available items |
From: <geo...@us...> - 2012-08-25 19:59:28
|
Revision: 5168 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5168&view=rev Author: geoffthemedio Date: 2012-08-25 19:59:21 +0000 (Sat, 25 Aug 2012) Log Message: ----------- Tweak by zhur so selecting a system with planets, but no selectable planets, selects no planet, rather than leaving the producible items list showing the producible items from the previously selected system's selected planet. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-08-25 19:21:37 UTC (rev 5167) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-08-25 19:59:21 UTC (rev 5168) @@ -1188,7 +1188,6 @@ } } - // select top pop planet - if (found_planet) - this->SelectPlanet(best_planet_id); + // select top pop planet or invalid planet if no suitable planet found + this->SelectPlanet(best_planet_id); } |
From: <geo...@us...> - 2012-08-25 23:58:25
|
Revision: 5169 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5169&view=rev Author: geoffthemedio Date: 2012-08-25 23:58:19 +0000 (Sat, 25 Aug 2012) Log Message: ----------- Fiddled with producible items list scroll positions after list refreshes. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-08-25 19:59:21 UTC (rev 5168) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-08-25 23:58:19 UTC (rev 5169) @@ -720,12 +720,22 @@ if (!empire) return; - // keep track of initially selected row, so that new rows added may be compared to it to see if they should be selected after repopulating - std::string selected_row; + // keep track of initially selected row, so that new rows added may be + // compared to it to see if they should be selected after repopulating + std::string initially_selected_row_name; if (m_buildable_items->Selections().size() == 1) - selected_row = (**m_buildable_items->Selections().begin())->DragDropDataType(); + initially_selected_row_name = (**m_buildable_items->Selections().begin())->DragDropDataType(); + // keep track of first shown row and the scroll position, in order to + // restore the first shown row, or the scroll position if the first row + // shown isn't in the repopulated list. + GG::ListBox::iterator initial_first_row_shown_it = m_buildable_items->FirstRowShown(); + std::string initial_first_row_name; + if (initial_first_row_shown_it != m_buildable_items->end()) + initial_first_row_name = (*initial_first_row_shown_it)->DragDropDataType(); + std::size_t initial_scroll_pos = std::distance(m_buildable_items->begin(), initial_first_row_shown_it); + m_buildable_items->Clear(); // the list of items to be populated m_build_types.clear(); // map from row to BuildType @@ -733,8 +743,13 @@ boost::shared_ptr<GG::Font> default_font = ClientUI::GetFont(); const GG::Pt row_size = m_buildable_items->ListRowSize(); - GG::ListBox::iterator row_to_select = m_buildable_items->end(); // may be set while populating - used to reselect previously selected row after populating - int i = 0; // counter that keeps track of how many rows have been added so far + // may be set while populating - used to reselect previously selected row + // after populating + GG::ListBox::iterator row_to_select_it = m_buildable_items->end(); + // may be set while populating - used to rescroll the list after populating + GG::ListBox::iterator new_first_row_it = m_buildable_items->end(); + // counter that keeps track of how many rows have been added so far + int i = 0; // populate list with building types @@ -752,8 +767,10 @@ GG::ListBox::iterator row_it = m_buildable_items->Insert(item_row); m_build_types[row_it] = BT_BUILDING; - if (item_row->DragDropDataType() == selected_row) - row_to_select = row_it; + if (item_row->DragDropDataType() == initially_selected_row_name) + row_to_select_it = row_it; + if (item_row->DragDropDataType() == initial_first_row_name) + new_first_row_it = row_it; item_row->Resize(row_size); } @@ -785,18 +802,30 @@ GG::ListBox::iterator row_it = m_buildable_items->Insert(item_row); m_build_types[row_it] = BT_SHIP; - if (item_row->DragDropDataType() == selected_row) - row_to_select = row_it; + if (item_row->DragDropDataType() == initially_selected_row_name) + row_to_select_it = row_it; + if (item_row->DragDropDataType() == initial_first_row_name) + new_first_row_it = row_it; item_row->Resize(row_size); } } + + //Logger().debugStream() << "Selecting Row"; - if (row_to_select != m_buildable_items->end()) { - m_buildable_items->SelectRow(row_to_select); + if (row_to_select_it != m_buildable_items->end()) { + m_buildable_items->SelectRow(row_to_select_it); BuildItemSelected(m_buildable_items->Selections()); } + if (new_first_row_it != m_buildable_items->end()) { + m_buildable_items->SetFirstRowShown(new_first_row_it); + } else { + if (!m_buildable_items->Empty()) + m_buildable_items->BringRowIntoView(--m_buildable_items->end()); + if (initial_scroll_pos < m_buildable_items->NumRows()) + m_buildable_items->BringRowIntoView(boost::next(m_buildable_items->begin(), initial_scroll_pos)); + } //Logger().debugStream() << "Done"; } |
From: <geo...@us...> - 2012-12-15 20:15:51
|
Revision: 5544 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5544&view=rev Author: geoffthemedio Date: 2012-12-15 20:15:45 +0000 (Sat, 15 Dec 2012) Log Message: ----------- Added CanProduceShips and (when applicable) CanColonize conditions to UI for ships in producible items list. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-12-15 20:13:53 UTC (rev 5543) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-12-15 20:15:45 UTC (rev 5544) @@ -198,9 +198,15 @@ int empire_id) { std::vector<const Condition::ConditionBase*> location_conditions; + Condition::CanProduceShips can_prod_ship_cond; + location_conditions.push_back(&can_prod_ship_cond); Condition::OwnerHasShipDesignAvailable ship_avail_cond(ship_design_id); location_conditions.push_back(&ship_avail_cond); if (const ShipDesign* ship_design = GetShipDesign(ship_design_id)) { + if (ship_design->CanColonize()) { + Condition::CanColonize can_colonize_cond; + location_conditions.push_back(&can_colonize_cond); + } if (const HullType* hull_type = ship_design->GetHull()) location_conditions.push_back(hull_type->Location()); std::vector<std::string> parts = ship_design->Parts(); @@ -280,7 +286,7 @@ int Location() const { return m_location_id; } - void SizeMove(const GG::Pt& ul, const GG::Pt& lr) { + void SizeMove(const GG::Pt& ul, const GG::Pt& lr) { const GG::Pt old_size = Size(); GG::ListBox::Row::SizeMove(ul, lr); //std::cout << "ProductionItemRow::SizeMove size: (" << Value(Width()) << ", " << Value(Height()) << ")" << std::endl; |
From: <geo...@us...> - 2012-12-17 07:24:24
|
Revision: 5553 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5553&view=rev Author: geoffthemedio Date: 2012-12-17 07:24:18 +0000 (Mon, 17 Dec 2012) Log Message: ----------- Commented out use of new CanProduceShips and CanColonize conditions in production item sitreps as they were causing crashes for me. Apparently they're broken. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-12-17 07:22:45 UTC (rev 5552) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-12-17 07:24:18 UTC (rev 5553) @@ -198,14 +198,14 @@ int empire_id) { std::vector<const Condition::ConditionBase*> location_conditions; - Condition::CanProduceShips can_prod_ship_cond; - location_conditions.push_back(&can_prod_ship_cond); + //Condition::CanProduceShips can_prod_ship_cond; + //location_conditions.push_back(&can_prod_ship_cond); Condition::OwnerHasShipDesignAvailable ship_avail_cond(ship_design_id); location_conditions.push_back(&ship_avail_cond); if (const ShipDesign* ship_design = GetShipDesign(ship_design_id)) { if (ship_design->CanColonize()) { - Condition::CanColonize can_colonize_cond; - location_conditions.push_back(&can_colonize_cond); + //Condition::CanColonize can_colonize_cond; + //location_conditions.push_back(&can_colonize_cond); } if (const HullType* hull_type = ship_design->GetHull()) location_conditions.push_back(hull_type->Location()); |
From: <geo...@us...> - 2012-12-19 01:08:19
|
Revision: 5557 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5557&view=rev Author: geoffthemedio Date: 2012-12-19 01:08:13 +0000 (Wed, 19 Dec 2012) Log Message: ----------- Re-added can produce ships and can colonize location condition tooltips using a shared_ptr-based workaround for weird RTTI problems or compile errors I was getting for unknown reasons using simpler methods. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-12-18 06:42:02 UTC (rev 5556) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-12-19 01:08:13 UTC (rev 5557) @@ -198,14 +198,15 @@ int empire_id) { std::vector<const Condition::ConditionBase*> location_conditions; - //Condition::CanProduceShips can_prod_ship_cond; - //location_conditions.push_back(&can_prod_ship_cond); - Condition::OwnerHasShipDesignAvailable ship_avail_cond(ship_design_id); - location_conditions.push_back(&ship_avail_cond); + boost::shared_ptr<Condition::ConditionBase> can_prod_ship_cond(new Condition::CanProduceShips()); + location_conditions.push_back(can_prod_ship_cond.get()); + boost::shared_ptr<Condition::ConditionBase> ship_avail_cond(new Condition::OwnerHasShipDesignAvailable(ship_design_id)); + location_conditions.push_back(ship_avail_cond.get()); + boost::shared_ptr<Condition::ConditionBase> can_colonize_cond; if (const ShipDesign* ship_design = GetShipDesign(ship_design_id)) { if (ship_design->CanColonize()) { - //Condition::CanColonize can_colonize_cond; - //location_conditions.push_back(&can_colonize_cond); + can_colonize_cond.reset(new Condition::CanColonize()); + location_conditions.push_back(can_colonize_cond.get()); } if (const HullType* hull_type = ship_design->GetHull()) location_conditions.push_back(hull_type->Location()); |
From: <geo...@us...> - 2012-12-27 05:58:55
|
Revision: 5579 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5579&view=rev Author: geoffthemedio Date: 2012-12-27 05:58:49 +0000 (Thu, 27 Dec 2012) Log Message: ----------- Delayed initialization for production item panels. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-12-27 04:49:15 UTC (rev 5578) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2012-12-27 05:58:49 UTC (rev 5579) @@ -31,6 +31,7 @@ ProductionItemPanel(GG::X w, GG::Y h, const ProductionQueue::ProductionItem& item, int empire_id, int location_id) : Control(GG::X0, GG::Y0, w, h, GG::Flags<GG::WndFlag>()), + m_initialized(false), m_item(item), m_empire_id(empire_id), m_location_id(location_id), @@ -41,7 +42,60 @@ m_desc(0) { SetChildClippingMode(ClipToClient); + } + /** Renders panel background and border. */ + virtual void Render() { + if (!m_initialized) + Init(); + GG::Clr background_clr = this->Disabled() ? ClientUI::WndColor() : ClientUI::CtrlColor(); + GG::FlatRectangle(UpperLeft(), LowerRight(), background_clr, ClientUI::WndOuterBorderColor(), 1u); + } + + virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr) { + const GG::Pt old_size = Size(); + GG::Control::SizeMove(ul, lr); + //std::cout << "ProductionItemPanel::SizeMove new size: (" << Value(Width()) << ", " << Value(Height()) << ")" << std::endl; + if (old_size != Size()) + DoLayout(); + } + + private: + void DoLayout() { + if (!m_initialized) + return; + + const GG::Y ICON_HEIGHT(ClientHeight()); + const GG::X ICON_WIDTH(Value(ClientHeight())); + const GG::X ITEM_NAME_WIDTH(ClientUI::Pts() * 16); + const GG::X COST_WIDTH(ClientUI::Pts() * 4); + const GG::X TIME_WIDTH(ClientUI::Pts() * 3); + const GG::X DESC_WIDTH(ClientUI::Pts() * 18); + + GG::X left(GG::X0); + GG::Y top(GG::Y0); + GG::Y bottom(ClientHeight()); + + m_icon->SizeMove(GG::Pt(left, GG::Y0), GG::Pt(left + ICON_WIDTH, bottom)); + left += ICON_WIDTH + GG::X(3); + + m_name->SizeMove(GG::Pt(left, GG::Y0), GG::Pt(left + ITEM_NAME_WIDTH, bottom)); + left += ITEM_NAME_WIDTH; + + m_cost->SizeMove(GG::Pt(left, GG::Y0), GG::Pt(left + COST_WIDTH, bottom)); + left += COST_WIDTH; + + m_time->SizeMove(GG::Pt(left, GG::Y0), GG::Pt(left + TIME_WIDTH, bottom)); + left += TIME_WIDTH; + + m_desc->SizeMove(GG::Pt(left, GG::Y0), GG::Pt(left + DESC_WIDTH, bottom)); + } + + void Init() { + if (m_initialized) + return; + m_initialized = true; + const Empire* empire = Empires().Lookup(m_empire_id); boost::shared_ptr<GG::Texture> texture; @@ -81,7 +135,7 @@ std::string cost_text; std::string time_text; if (empire) { - std::pair<double, int> cost_time = empire->ProductionCostAndTime(m_item, location_id); + std::pair<double, int> cost_time = empire->ProductionCostAndTime(m_item, m_location_id); cost_text = DoubleToString(cost_time.first, 3, false); time_text = boost::lexical_cast<std::string>(cost_time.second); } @@ -103,48 +157,8 @@ DoLayout(); } - /** Renders panel background and border. */ - virtual void Render() { - GG::Clr background_clr = this->Disabled() ? ClientUI::WndColor() : ClientUI::CtrlColor(); - GG::FlatRectangle(UpperLeft(), LowerRight(), background_clr, ClientUI::WndOuterBorderColor(), 1u); - } + bool m_initialized; - virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr) { - const GG::Pt old_size = Size(); - GG::Control::SizeMove(ul, lr); - //std::cout << "ProductionItemPanel::SizeMove new size: (" << Value(Width()) << ", " << Value(Height()) << ")" << std::endl; - if (old_size != Size()) - DoLayout(); - } - - private: - void DoLayout() { - const GG::Y ICON_HEIGHT(ClientHeight()); - const GG::X ICON_WIDTH(Value(ClientHeight())); - const GG::X ITEM_NAME_WIDTH(ClientUI::Pts() * 16); - const GG::X COST_WIDTH(ClientUI::Pts() * 4); - const GG::X TIME_WIDTH(ClientUI::Pts() * 3); - const GG::X DESC_WIDTH(ClientUI::Pts() * 18); - - GG::X left(GG::X0); - GG::Y top(GG::Y0); - GG::Y bottom(ClientHeight()); - - m_icon->SizeMove(GG::Pt(left, GG::Y0), GG::Pt(left + ICON_WIDTH, bottom)); - left += ICON_WIDTH + GG::X(3); - - m_name->SizeMove(GG::Pt(left, GG::Y0), GG::Pt(left + ITEM_NAME_WIDTH, bottom)); - left += ITEM_NAME_WIDTH; - - m_cost->SizeMove(GG::Pt(left, GG::Y0), GG::Pt(left + COST_WIDTH, bottom)); - left += COST_WIDTH; - - m_time->SizeMove(GG::Pt(left, GG::Y0), GG::Pt(left + TIME_WIDTH, bottom)); - left += TIME_WIDTH; - - m_desc->SizeMove(GG::Pt(left, GG::Y0), GG::Pt(left + DESC_WIDTH, bottom)); - } - const ProductionQueue::ProductionItem m_item; int m_empire_id; int m_location_id; |
From: <geo...@us...> - 2014-02-08 21:07:48
|
Revision: 6864 http://sourceforge.net/p/freeorion/code/6864 Author: geoffthemedio Date: 2014-02-08 21:07:45 +0000 (Sat, 08 Feb 2014) Log Message: ----------- Fixed producible items list tooltip time. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2014-02-08 21:03:05 UTC (rev 6863) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2014-02-08 21:07:45 UTC (rev 6864) @@ -292,7 +292,7 @@ } } - m_panel->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); + SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); SetBrowseInfoWnd(ProductionItemRowBrowseWnd(m_item, m_location_id, m_empire_id)); //std::cout << "ProductionItemRow(building) height: " << Value(Height()) << std::endl; |
From: <geo...@us...> - 2014-03-15 15:47:24
|
Revision: 6972 http://sourceforge.net/p/freeorion/code/6972 Author: geoffthemedio Date: 2014-03-15 15:47:21 +0000 (Sat, 15 Mar 2014) Log Message: ----------- Changed BuildSelector::PopulateList to use multi-row Insert. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2014-03-15 15:46:07 UTC (rev 6971) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2014-03-15 15:47:21 UTC (rev 6972) @@ -11,6 +11,7 @@ #include "InfoPanels.h" #include "../util/i18n.h" #include "../util/Logger.h" +#include "../util/ScopedTimer.h" #include "../universe/UniverseObject.h" #include "../Empire/Empire.h" #include "../Empire/EmpireManager.h" @@ -570,7 +571,7 @@ } void BuildDesignatorWnd::BuildSelector::Refresh() { - Logger().debugStream() << "BuildDesignatorWnd::BuildSelector::Refresh()"; + ScopedTimer timer("BuildDesignatorWnd::BuildSelector::Refresh()"); if (TemporaryPtr<const UniverseObject> prod_loc = GetUniverseObject(this->m_production_location)) this->SetName(boost::io::str(FlexibleFormat(UserString("PRODUCTION_WND_BUILD_ITEMS_TITLE_LOCATION")) % prod_loc->Name())); else @@ -728,23 +729,29 @@ //Logger().debugStream() << "BuildDesignatorWnd::BuildSelector::PopulateList() : Adding Buildings "; if (m_build_types_shown.find(BT_BUILDING) != m_build_types_shown.end()) { BuildingTypeManager& manager = GetBuildingTypeManager(); - + // craete and insert rows... + std::vector<GG::ListBox::Row*> rows; + rows.reserve(std::distance(manager.begin(), manager.end())); for (BuildingTypeManager::iterator it = manager.begin(); it != manager.end(); ++it, ++i) { const std::string name = it->first; - - if (!BuildableItemVisible(BT_BUILDING, name)) continue; - + if (!BuildableItemVisible(BT_BUILDING, name)) + continue; ProductionItemRow* item_row = new ProductionItemRow(row_size.x, row_size.y, ProductionQueue::ProductionItem(BT_BUILDING, name), m_empire_id, m_production_location); - - GG::ListBox::iterator row_it = m_buildable_items->Insert(item_row); - if (item_row->DragDropDataType() == initial_first_row_name) - new_first_row_it = row_it; - - item_row->Resize(row_size); + rows.push_back(item_row); } + m_buildable_items->Insert(rows); + // resize inserted rows and record first row to show + for (BuildableItemsListBox::iterator it = m_buildable_items->begin(); + it != m_buildable_items->end(); ++it) + { + if ((*it)->DragDropDataType() == initial_first_row_name) + new_first_row_it = it; + (*it)->Resize(row_size); + } } + // populate with ship designs //Logger().debugStream() << "BuildDesignatorWnd::BuildSelector::PopulateList() : Adding ship designs"; if (m_build_types_shown.find(BT_SHIP) != m_build_types_shown.end()) { @@ -757,26 +764,30 @@ for (Universe::ship_design_iterator it = GetUniverse().beginShipDesigns(); it != GetUniverse().endShipDesigns(); ++it) design_ids.push_back(it->first); + // craete and insert rows... + std::vector<GG::ListBox::Row*> rows; + rows.reserve(design_ids.size()); for (std::vector<int>::const_iterator it = design_ids.begin(); it != design_ids.end(); ++it, ++i) { int ship_design_id = *it; - - if (!BuildableItemVisible(BT_SHIP, ship_design_id)) continue; - + if (!BuildableItemVisible(BT_SHIP, ship_design_id)) + continue; const ShipDesign* ship_design = GetShipDesign(ship_design_id); - if (!ship_design) continue; - - // add build item panel - + if (!ship_design) + continue; ProductionItemRow* item_row = new ProductionItemRow(row_size.x, row_size.y, ProductionQueue::ProductionItem(BT_SHIP, ship_design_id), m_empire_id, m_production_location); - - GG::ListBox::iterator row_it = m_buildable_items->Insert(item_row); - if (item_row->DragDropDataType() == initial_first_row_name) - new_first_row_it = row_it; - - item_row->Resize(row_size); + rows.push_back(item_row); } + m_buildable_items->Insert(rows); + // resize inserted rows and record first row to show + for (BuildableItemsListBox::iterator it = m_buildable_items->begin(); + it != m_buildable_items->end(); ++it) + { + if ((*it)->DragDropDataType() == initial_first_row_name) + new_first_row_it = it; + (*it)->Resize(row_size); + } } if (new_first_row_it != m_buildable_items->end()) { |
From: <geo...@us...> - 2014-03-15 15:56:12
|
Revision: 6973 http://sourceforge.net/p/freeorion/code/6973 Author: geoffthemedio Date: 2014-03-15 15:56:09 +0000 (Sat, 15 Mar 2014) Log Message: ----------- -Set buildable items list scroll increment to 3 rows. -Set flag to not signal for each row insertion when populating buildable items list. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2014-03-15 15:47:21 UTC (rev 6972) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2014-03-15 15:56:09 UTC (rev 6973) @@ -332,6 +332,8 @@ SetNumCols(1); SetColWidth(0, GG::X0); LockColWidths(); + + SetVScrollWheelIncrement(Value(ListRowHeight())*3); } virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr) { @@ -741,7 +743,7 @@ m_empire_id, m_production_location); rows.push_back(item_row); } - m_buildable_items->Insert(rows); + m_buildable_items->Insert(rows, false); // resize inserted rows and record first row to show for (BuildableItemsListBox::iterator it = m_buildable_items->begin(); it != m_buildable_items->end(); ++it) @@ -779,7 +781,7 @@ m_empire_id, m_production_location); rows.push_back(item_row); } - m_buildable_items->Insert(rows); + m_buildable_items->Insert(rows, false); // resize inserted rows and record first row to show for (BuildableItemsListBox::iterator it = m_buildable_items->begin(); it != m_buildable_items->end(); ++it) |
From: <geo...@us...> - 2014-06-23 20:00:31
|
Revision: 7193 http://sourceforge.net/p/freeorion/code/7193 Author: geoffthemedio Date: 2014-06-23 20:00:23 +0000 (Mon, 23 Jun 2014) Log Message: ----------- -Modified test before signalling to add an item to the queue to check enqueuability instead of producibility. -grooming Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2014-06-23 19:59:07 UTC (rev 7192) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2014-06-23 20:00:23 UTC (rev 7193) @@ -1038,8 +1038,7 @@ m_build_selector->m_build_type_buttons[BT_SHIP]->MarkNotSelected(); } -void BuildDesignatorWnd::ToggleType(BuildType type, bool refresh_list) -{ +void BuildDesignatorWnd::ToggleType(BuildType type, bool refresh_list) { if (type == BT_BUILDING || type == BT_SHIP) { const std::set<BuildType>& types_shown = m_build_selector->GetBuildTypesShown(); if (types_shown.find(type) == types_shown.end()) @@ -1048,11 +1047,10 @@ HideType(type, refresh_list); } else { throw std::invalid_argument("BuildDesignatorWnd::ShowType was passed an invalid BuildType"); - } + } } -void BuildDesignatorWnd::ToggleAllTypes(bool refresh_list) -{ +void BuildDesignatorWnd::ToggleAllTypes(bool refresh_list) { const std::set<BuildType>& types_shown = m_build_selector->GetBuildTypesShown(); if (types_shown.size() == NUM_BUILD_TYPES - 1) // -1 because there are no buttons for BuildType::BT_NOT_BUILDING HideAllTypes(refresh_list); @@ -1060,8 +1058,7 @@ ShowAllTypes(refresh_list); } -void BuildDesignatorWnd::ShowAvailability(bool available, bool refresh_list) -{ +void BuildDesignatorWnd::ShowAvailability(bool available, bool refresh_list) { m_build_selector->ShowAvailability(available, refresh_list); if (available) m_build_selector->m_availability_buttons.at(0)->MarkSelectedGray(); @@ -1069,8 +1066,7 @@ m_build_selector->m_availability_buttons.at(1)->MarkSelectedGray(); } -void BuildDesignatorWnd::HideAvailability(bool available, bool refresh_list) -{ +void BuildDesignatorWnd::HideAvailability(bool available, bool refresh_list) { m_build_selector->HideAvailability(available, refresh_list); if (available) m_build_selector->m_availability_buttons.at(0)->MarkNotSelected(); @@ -1078,8 +1074,7 @@ m_build_selector->m_availability_buttons.at(1)->MarkNotSelected(); } -void BuildDesignatorWnd::ToggleAvailabilitly(bool available, bool refresh_list) -{ +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) @@ -1095,29 +1090,25 @@ } void BuildDesignatorWnd::ShowBuildingTypeInEncyclopedia(const std::string& building_type) -{ - m_enc_detail_panel->SetBuildingType(building_type); -} +{ m_enc_detail_panel->SetBuildingType(building_type); } void BuildDesignatorWnd::ShowShipDesignInEncyclopedia(int design_id) -{ - m_enc_detail_panel->SetDesign(design_id); -} +{ m_enc_detail_panel->SetDesign(design_id); } int BuildDesignatorWnd::BuildLocation() const -{ - return m_side_panel->SelectedPlanetID(); -} +{ return m_side_panel->SelectedPlanetID(); } -void BuildDesignatorWnd::BuildItemRequested(BuildType build_type, const std::string& item, int num_to_build) +void BuildDesignatorWnd::BuildItemRequested(BuildType build_type, const std::string& item, + int num_to_build) { //std::cout << "BuildDesignatorWnd::BuildItemRequested item name: " << item << std::endl; const Empire* empire = Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); - if (empire && empire->ProducibleItem(build_type, item, BuildLocation())) + if (empire && empire->EnqueuableItem(build_type, item, BuildLocation())) AddNamedBuildToQueueSignal(build_type, item, num_to_build, BuildLocation()); } -void BuildDesignatorWnd::BuildItemRequested(BuildType build_type, int design_id, int num_to_build) +void BuildDesignatorWnd::BuildItemRequested(BuildType build_type, int design_id, + int num_to_build) { //std::cout << "BuildDesignatorWnd::BuildItemRequested design id: " << design_id << std::endl; const Empire* empire = Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); @@ -1126,12 +1117,9 @@ } void BuildDesignatorWnd::BuildQuantityChanged(int queue_idx, int quantity) -{ - BuildQuantityChangedSignal(queue_idx, quantity); -} +{ BuildQuantityChangedSignal(queue_idx, quantity); } -void BuildDesignatorWnd::SelectDefaultPlanet() -{ +void BuildDesignatorWnd::SelectDefaultPlanet() { int system_id = SidePanel::SystemID(); if (system_id == INVALID_OBJECT_ID) { this->SelectPlanet(INVALID_OBJECT_ID); |
From: <geo...@us...> - 2014-07-12 17:38:01
|
Revision: 7239 http://sourceforge.net/p/freeorion/code/7239 Author: geoffthemedio Date: 2014-07-12 17:37:59 +0000 (Sat, 12 Jul 2014) Log Message: ----------- Added right-click popup add-to-queue command for items on producible items list. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2014-07-12 14:27:34 UTC (rev 7238) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2014-07-12 17:37:59 UTC (rev 7239) @@ -433,12 +433,15 @@ * filter settings. */ void PopulateList(); - /** respond to the user single-click to select item on the queue */ - void BuildItemClicked(GG::ListBox::iterator it, const GG::Pt& pt); + /** respond to the user single-clicking a producible item in the build selector */ + void BuildItemLeftClicked(GG::ListBox::iterator it, const GG::Pt& pt); - /** respond to the user double-clicking an item on the queue */ + /** respond to the user double-clicking a producible item in the build selector */ void BuildItemDoubleClicked(GG::ListBox::iterator it); + /** respond to the user right-clicking a producible item in the build selector */ + void BuildItemRightClicked(GG::ListBox::iterator it, const GG::Pt& pt); + std::map<BuildType, CUIButton*> m_build_type_buttons; std::vector<CUIButton*> m_availability_buttons; @@ -480,9 +483,11 @@ // selectable list of buildable items AttachChild(m_buildable_items); GG::Connect(m_buildable_items->LeftClickedSignal, - &BuildDesignatorWnd::BuildSelector::BuildItemClicked, this); + &BuildDesignatorWnd::BuildSelector::BuildItemLeftClicked, this); GG::Connect(m_buildable_items->DoubleClickedSignal, &BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked, this); + GG::Connect(m_buildable_items->RightClickedSignal, + &BuildDesignatorWnd::BuildSelector::BuildItemRightClicked, this); //GG::ListBox::Row* header = new GG::ListBox::Row(); //boost::shared_ptr<GG::Font> font = ClientUI::GetFont(); @@ -650,7 +655,9 @@ } } -bool BuildDesignatorWnd::BuildSelector::BuildableItemVisible(BuildType build_type, const std::string& name) { +bool BuildDesignatorWnd::BuildSelector::BuildableItemVisible(BuildType build_type, + const std::string& name) +{ if (build_type != BT_BUILDING) throw std::invalid_argument("BuildableItemVisible was passed an invalid build type with a name"); @@ -803,8 +810,9 @@ //Logger().debugStream() << "Done"; } -void BuildDesignatorWnd::BuildSelector::BuildItemClicked(GG::ListBox::iterator it, const GG::Pt& pt) { - +void BuildDesignatorWnd::BuildSelector::BuildItemLeftClicked(GG::ListBox::iterator it, + const GG::Pt& pt) +{ ProductionItemRow* item_row = dynamic_cast<ProductionItemRow*>(*it); if (!item_row) return; @@ -845,6 +853,30 @@ RequestIDedBuildItemSignal(BT_SHIP, item.design_id, 1); } +void BuildDesignatorWnd::BuildSelector::BuildItemRightClicked(GG::ListBox::iterator it, + const GG::Pt& pt) +{ + if ((*it)->Disabled()) + return; + + GG::MenuItem menu_contents; + menu_contents.next_level.push_back(GG::MenuItem(UserString("PRODUCTION_DETAIL_ADD_TO_QUEUE"), 1, false, false)); + + GG::PopupMenu popup(pt.x, pt.y, ClientUI::GetFont(), menu_contents, ClientUI::TextColor(), + ClientUI::WndOuterBorderColor(), ClientUI::WndColor(), ClientUI::EditHiliteColor()); + + if (popup.Run()) { + switch (popup.MenuID()) { + case 1: { // move item to top + BuildItemDoubleClicked(it); + break; + } + default: + break; + } + } +} + ////////////////////////////////////////////////// // BuildDesignatorWnd ////////////////////////////////////////////////// |