From: <geo...@us...> - 2009-01-26 13:38:30
|
Revision: 2770 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2770&view=rev Author: geoffthemedio Date: 2009-01-26 13:38:26 +0000 (Mon, 26 Jan 2009) Log Message: ----------- Tweaked layout code in SidePanel::PlanetPanel to fix some alignment issues created in recent changes, and to make more future-proof (ie. if SidePanel becomes resizeable) Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-01-25 21:28:50 UTC (rev 2769) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-01-26 13:38:26 UTC (rev 2770) @@ -350,7 +350,7 @@ default : scale = 2.0/5.0; break; } - return static_cast<int>(SidePanel::MIN_PLANET_DIAMETER + (SidePanel::MAX_PLANET_DIAMETER - SidePanel::MIN_PLANET_DIAMETER) * scale); + return static_cast<int>(SidePanel::MIN_PLANET_DIAMETER + (SidePanel::MAX_PLANET_DIAMETER - SidePanel::MIN_PLANET_DIAMETER) * scale) - 2; // -2 for borders of planet panel so largest planet doesn't exceed its space } } @@ -717,34 +717,36 @@ std::string env_size_text = GetPlanetSizeName(planet) + " " + GetPlanetTypeName(planet) + " (" + GetPlanetEnvironmentName(planet) + ")"; // create info panels and attach signals - m_population_panel = new PopulationPanel(w - MAX_PLANET_DIAMETER, planet); + GG::X panel_width = w - MAX_PLANET_DIAMETER - 2*EDGE_PAD; + + m_population_panel = new PopulationPanel(panel_width, planet); AttachChild(m_population_panel); GG::Connect(m_population_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this); - m_resource_panel = new ResourcePanel(w - MAX_PLANET_DIAMETER, planet); + m_resource_panel = new ResourcePanel(panel_width, planet); AttachChild(m_resource_panel); 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_military_panel = new MilitaryPanel(w - MAX_PLANET_DIAMETER, planet); + m_military_panel = new MilitaryPanel(panel_width, planet); AttachChild(m_military_panel); GG::Connect(m_military_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this); - m_buildings_panel = new BuildingsPanel(w - MAX_PLANET_DIAMETER, 4, planet); + m_buildings_panel = new BuildingsPanel(panel_width, 4, planet); AttachChild(m_buildings_panel); GG::Connect(m_buildings_panel->ExpandCollapseSignal, &SidePanel::PlanetPanel::DoLayout, this); - m_specials_panel = new SpecialsPanel(w - MAX_PLANET_DIAMETER, planet); + m_specials_panel = new SpecialsPanel(panel_width, planet); AttachChild(m_specials_panel); - m_env_size = new GG::TextControl(GG::X(MAX_PLANET_DIAMETER), m_specials_panel->LowerRight().y - UpperLeft().y, env_size_text, ClientUI::GetFont(), ClientUI::TextColor()); + m_env_size = new GG::TextControl(GG::X(MAX_PLANET_DIAMETER), GG::Y0, env_size_text, ClientUI::GetFont(), ClientUI::TextColor()); AttachChild(m_env_size); - m_button_colonize = new CUIButton(GG::X(MAX_PLANET_DIAMETER), m_env_size->LowerRight().y - UpperLeft().y + 1, GG::X(80), + m_button_colonize = new CUIButton(GG::X(MAX_PLANET_DIAMETER), GG::Y0, GG::X(ClientUI::Pts()*8), UserString("PL_COLONIZE"), ClientUI::GetFont(), - ClientUI::ButtonColor(), ClientUI::CtrlBorderColor(), 1, + ClientUI::ButtonColor(), ClientUI::CtrlBorderColor(), 1, ClientUI::TextColor(), GG::CLICKABLE); GG::Connect(m_button_colonize->ClickedSignal, &SidePanel::PlanetPanel::ClickColonize, this); @@ -764,6 +766,7 @@ GG::Connect(plt->StateChangedSignal, &SidePanel::PlanetPanel::Refresh, this); Refresh(); + DoLayout(); } SidePanel::PlanetPanel::~PlanetPanel() @@ -799,37 +802,43 @@ void SidePanel::PlanetPanel::DoLayout() { - GG::X x = GG::X0 + MAX_PLANET_DIAMETER + EDGE_PAD; + GG::X left = GG::X0 + MAX_PLANET_DIAMETER + EDGE_PAD; + GG::X right = left + Width() - MAX_PLANET_DIAMETER - 2*EDGE_PAD; GG::Y y = GG::Y0; - m_planet_name->MoveTo(GG::Pt(x, y)); // assumed to always be this Wnd's child - y += m_planet_name->Height(); // no interpanel space needed here, I declare arbitrarily + m_planet_name->MoveTo(GG::Pt(left, y)); // assumed to always be this Wnd's child + y += m_planet_name->Height(); // no interpanel space needed here, I declare arbitrarily - m_specials_panel->MoveTo(GG::Pt(x, y)); // assumed to always be this Wnd's child + m_specials_panel->SizeMove(GG::Pt(left, y), GG::Pt(right, y + m_specials_panel->Height())); // assumed to always be this Wnd's child y += m_specials_panel->Height() + EDGE_PAD; if (m_env_size->Parent() == this) { - m_env_size->MoveTo(GG::Pt(x, y)); + m_env_size->MoveTo(GG::Pt(left, y)); y += m_env_size->Height() + EDGE_PAD; } + if (m_button_colonize->Parent() == this) { + m_button_colonize->MoveTo(GG::Pt(left, y)); + y += m_button_colonize->Height() + EDGE_PAD; + } + if (m_population_panel->Parent() == this) { - m_population_panel->MoveTo(GG::Pt(x, y)); + m_population_panel->SizeMove(GG::Pt(left, y), GG::Pt(right, y + m_population_panel->Height())); y += m_population_panel->Height() + EDGE_PAD; } if (m_resource_panel->Parent() == this) { - m_resource_panel->MoveTo(GG::Pt(x, y)); + m_resource_panel->SizeMove(GG::Pt(left, y), GG::Pt(right, y + m_resource_panel->Height())); y += m_resource_panel->Height() + EDGE_PAD; } if (m_military_panel->Parent() == this) { - m_military_panel->MoveTo(GG::Pt(x, y)); + m_military_panel->SizeMove(GG::Pt(left, y), GG::Pt(right, y + m_military_panel->Height())); y += m_military_panel->Height() + EDGE_PAD; } if (m_buildings_panel->Parent() == this) { - m_buildings_panel->MoveTo(GG::Pt(x, y)); + m_buildings_panel->SizeMove(GG::Pt(left, y), GG::Pt(right, y + m_buildings_panel->Height())); y += m_buildings_panel->Height(); } |
From: <geo...@us...> - 2009-04-21 12:55:14
|
Revision: 2994 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2994&view=rev Author: geoffthemedio Date: 2009-04-21 12:55:12 +0000 (Tue, 21 Apr 2009) Log Message: ----------- Shrunk-fit asteroid planet panels Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-04-21 09:26:22 UTC (rev 2993) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-04-21 12:55:12 UTC (rev 2994) @@ -692,29 +692,33 @@ { SetName(UserString("PLANET_PANEL")); - GG::Pt ul = UpperLeft(), lr = LowerRight(); - int planet_image_sz = PlanetDiameter(); const int MAX_PLANET_DIAMETER = GetOptionsDB().Get<int>("UI.sidepanel-planet-max-diameter"); - GG::Pt planet_image_pos(GG::X(MAX_PLANET_DIAMETER / 2 - planet_image_sz / 2 + 3), GG::Y(MAX_PLANET_DIAMETER / 2 - planet_image_sz / 2)); - - if (planet.Type() == PT_ASTEROIDS) - { + if (planet.Type() == PT_ASTEROIDS) { std::vector<boost::shared_ptr<GG::Texture> > textures; GetAsteroidTextures(planet.ID(), textures); - m_planet_graphic = new GG::DynamicGraphic(planet_image_pos.x, planet_image_pos.y, GG::X(planet_image_sz), GG::Y(planet_image_sz), true,textures[0]->DefaultWidth(),textures[0]->DefaultHeight(),0,textures, GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); + GG::X texture_width = textures[0]->DefaultWidth(); + GG::Y texture_height = textures[0]->DefaultHeight(); + GG::Pt planet_image_pos(GG::X(MAX_PLANET_DIAMETER / 2 - texture_width / 2 + 3), GG::Y0); + + m_planet_graphic = new GG::DynamicGraphic(planet_image_pos.x, planet_image_pos.y, + texture_width, texture_height, true, + texture_width, texture_height, 0, textures, + GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); m_planet_graphic->SetFPS(GetAsteroidsFPS()); m_planet_graphic->SetFrameIndex(RandSmallInt(0, textures.size() - 1)); AttachChild(m_planet_graphic); m_planet_graphic->Play(); - } - else if (planet.Type() < NUM_PLANET_TYPES) - { + + } else if (planet.Type() < NUM_PLANET_TYPES) { + int planet_image_sz = PlanetDiameter(); + GG::Pt planet_image_pos(GG::X(MAX_PLANET_DIAMETER / 2 - GG::X(planet_image_sz) / 2 + 3), + GG::Y(MAX_PLANET_DIAMETER / 2 - GG::Y(planet_image_sz) / 2)); + const std::map<PlanetType, std::vector<RotatingPlanetData> >& planet_data = GetRotatingPlanetData(); std::map<PlanetType, std::vector<RotatingPlanetData> >::const_iterator it = planet_data.find(planet.Type()); int num_planets_of_type; - if (it != planet_data.end() && (num_planets_of_type = planet_data.find(planet.Type())->second.size())) - { + if (it != planet_data.end() && (num_planets_of_type = planet_data.find(planet.Type())->second.size())) { // using algorithm from Thomas Wang's 32 bit Mix Function; assumes that only the lower 16 bits of the system and // planet ID's are significant unsigned int hash_value = @@ -865,7 +869,12 @@ y += m_buildings_panel->Height(); } - Resize(GG::Pt(Width(), std::max(y, GG::Y(MAX_PLANET_DIAMETER)))); + GG::Y min_height = GG::Y(MAX_PLANET_DIAMETER); + if (m_planet_graphic) + min_height = m_planet_graphic->Height(); + + Resize(GG::Pt(Width(), std::max(y, min_height))); + ResizedSignal(); } |
From: <geo...@us...> - 2009-05-19 10:15:43
|
Revision: 3058 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3058&view=rev Author: geoffthemedio Date: 2009-05-19 10:15:35 +0000 (Tue, 19 May 2009) Log Message: ----------- Added MouseWheel forwarding to PlanetPanel so scrolling on a planet panel will scroll the list of panels Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-05-19 10:03:10 UTC (rev 3057) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-05-19 10:15:35 UTC (rev 3058) @@ -412,6 +412,7 @@ void Refresh(); ///< updates panels, shows / hides colonize button, redoes layout of infopanels void Hilite(HilitingType ht); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); //@} mutable LeftClickedSignalType PlanetImageLClickedSignal; ///< returns the left clicked signal object for this Planet panel @@ -1016,6 +1017,9 @@ PlanetImageLClickedSignal(m_planet_id); } +void SidePanel::PlanetPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + void SidePanel::PlanetPanel::Render() { GG::Clr DARK_GREY = GG::Clr(26, 26, 26, 255); |
From: <tz...@us...> - 2009-05-20 03:45:33
|
Revision: 3064 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3064&view=rev Author: tzlaine Date: 2009-05-20 03:45:25 +0000 (Wed, 20 May 2009) Log Message: ----------- Fixed a SizeScroll() call in SidePanel that was failing an assertion recently added to GG::Scroll. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-05-20 01:48:51 UTC (rev 3063) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-05-20 03:45:25 UTC (rev 3064) @@ -1245,13 +1245,14 @@ } // adjust size of scrollbar to account for panel resizing - const int MAX_PLANET_DIAMETER = GetOptionsDB().Get<int>("UI.sidepanel-planet-max-diameter"); - m_vscroll->SizeScroll(0, Value(y - m_planet_panels_top), MAX_PLANET_DIAMETER, Value(available_height)); - + const int MAX_PLANET_DIAMETER = + GetOptionsDB().Get<int>("UI.sidepanel-planet-max-diameter"); // hide scrollbar if all panels are visible and fit into the available height if (Value(y - m_planet_panels_top) < available_height + 1) { DetachChild(m_vscroll); } else { + m_vscroll->SizeScroll(0, Value(y - m_planet_panels_top), + MAX_PLANET_DIAMETER, Value(available_height)); AttachChild(m_vscroll); m_vscroll->Show(); } |
From: <geo...@us...> - 2009-09-05 08:36:10
|
Revision: 3140 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3140&view=rev Author: geoffthemedio Date: 2009-09-05 08:36:02 +0000 (Sat, 05 Sep 2009) Log Message: ----------- Added option (in config.xml, but not in UI yet) to turn off planet renders and asteroid animations. Empty space left on planet panels is just black. Mainly intended for performance test purposes, since it's been proposed that setting up the rendered planets or asteroids might be partly the cause of log when changing the selected system for some players. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-09-05 07:38:56 UTC (rev 3139) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-09-05 08:36:02 UTC (rev 3140) @@ -350,6 +350,7 @@ db.Add("UI.sidepanel-width", "OPTIONS_DB_UI_SIDEPANEL_WIDTH", 370, RangedValidator<int>(64, 512)); db.Add("UI.sidepanel-planet-max-diameter", "OPTIONS_DB_UI_SIDEPANEL_PLANET_MAX_DIAMETER", 128, RangedValidator<int>(16, 512)); db.Add("UI.sidepanel-planet-min-diameter", "OPTIONS_DB_UI_SIDEPANEL_PLANET_MIN_DIAMETER", 24, RangedValidator<int>(8, 128)); + db.Add("UI.sidepanel-planet-shown", "OPTIONS_DB_UI_SIDEPANEL_PLANET_SHOWN", true, Validator<bool>()); } bool temp_bool = RegisterOptions(&AddOptions); } @@ -367,10 +368,6 @@ /** \name Accessors */ //@{ virtual bool InWindow(const GG::Pt& pt) const; int PlanetID() const {return m_planet_id;} - - const PopulationPanel* GetPopulationPanel() const; - const ResourcePanel* GetResourcePanel() const; - const BuildingsPanel* GetBuildingsPanel() const; //@} /** \name Mutators */ //@{ @@ -660,49 +657,50 @@ const int MAX_PLANET_DIAMETER = GetOptionsDB().Get<int>("UI.sidepanel-planet-max-diameter"); - if (planet.Type() == PT_ASTEROIDS) { - std::vector<boost::shared_ptr<GG::Texture> > textures; - GetAsteroidTextures(planet.ID(), textures); - GG::X texture_width = textures[0]->DefaultWidth(); - GG::Y texture_height = textures[0]->DefaultHeight(); - GG::Pt planet_image_pos(GG::X(MAX_PLANET_DIAMETER / 2 - texture_width / 2 + 3), GG::Y0); + if (GetOptionsDB().Get<bool>("UI.sidepanel-planet-shown")) { + if (planet.Type() == PT_ASTEROIDS) { + std::vector<boost::shared_ptr<GG::Texture> > textures; + GetAsteroidTextures(planet.ID(), textures); + GG::X texture_width = textures[0]->DefaultWidth(); + GG::Y texture_height = textures[0]->DefaultHeight(); + GG::Pt planet_image_pos(GG::X(MAX_PLANET_DIAMETER / 2 - texture_width / 2 + 3), GG::Y0); - m_planet_graphic = new GG::DynamicGraphic(planet_image_pos.x, planet_image_pos.y, - texture_width, texture_height, true, - texture_width, texture_height, 0, textures, - GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); - m_planet_graphic->SetFPS(GetAsteroidsFPS()); - m_planet_graphic->SetFrameIndex(RandSmallInt(0, textures.size() - 1)); - AttachChild(m_planet_graphic); - m_planet_graphic->Play(); + m_planet_graphic = new GG::DynamicGraphic(planet_image_pos.x, planet_image_pos.y, + texture_width, texture_height, true, + texture_width, texture_height, 0, textures, + GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); + m_planet_graphic->SetFPS(GetAsteroidsFPS()); + m_planet_graphic->SetFrameIndex(RandSmallInt(0, textures.size() - 1)); + AttachChild(m_planet_graphic); + m_planet_graphic->Play(); - } else if (planet.Type() < NUM_PLANET_TYPES) { - int planet_image_sz = PlanetDiameter(); - GG::Pt planet_image_pos(GG::X(MAX_PLANET_DIAMETER / 2 - GG::X(planet_image_sz) / 2 + 3), - GG::Y(MAX_PLANET_DIAMETER / 2 - GG::Y(planet_image_sz) / 2)); + } else if (planet.Type() < NUM_PLANET_TYPES) { + int planet_image_sz = PlanetDiameter(); + GG::Pt planet_image_pos(GG::X(MAX_PLANET_DIAMETER / 2 - GG::X(planet_image_sz) / 2 + 3), + GG::Y(MAX_PLANET_DIAMETER / 2 - GG::Y(planet_image_sz) / 2)); - const std::map<PlanetType, std::vector<RotatingPlanetData> >& planet_data = GetRotatingPlanetData(); - std::map<PlanetType, std::vector<RotatingPlanetData> >::const_iterator it = planet_data.find(planet.Type()); - int num_planets_of_type; - if (it != planet_data.end() && (num_planets_of_type = planet_data.find(planet.Type())->second.size())) { - // using algorithm from Thomas Wang's 32 bit Mix Function; assumes that only the lower 16 bits of the system and - // planet ID's are significant - unsigned int hash_value = - (static_cast<unsigned int>(planet.SystemID()) & 0xFFFF) + (static_cast<unsigned int>(planet.ID()) & 0xFFFF); - hash_value += ~(hash_value << 15); - hash_value ^= hash_value >> 10; - hash_value += hash_value << 3; - hash_value ^= hash_value >> 6; - hash_value += ~(hash_value << 11); - hash_value ^= hash_value >> 16; - m_rotating_planet_graphic = - new RotatingPlanetControl(planet_image_pos.x, planet_image_pos.y, planet, star_type, - it->second[hash_value % num_planets_of_type]); - AttachChild(m_rotating_planet_graphic); + const std::map<PlanetType, std::vector<RotatingPlanetData> >& planet_data = GetRotatingPlanetData(); + std::map<PlanetType, std::vector<RotatingPlanetData> >::const_iterator it = planet_data.find(planet.Type()); + int num_planets_of_type; + if (it != planet_data.end() && (num_planets_of_type = planet_data.find(planet.Type())->second.size())) { + // using algorithm from Thomas Wang's 32 bit Mix Function; assumes that only the lower 16 bits of the system and + // planet ID's are significant + unsigned int hash_value = + (static_cast<unsigned int>(planet.SystemID()) & 0xFFFF) + (static_cast<unsigned int>(planet.ID()) & 0xFFFF); + hash_value += ~(hash_value << 15); + hash_value ^= hash_value >> 10; + hash_value += hash_value << 3; + hash_value ^= hash_value >> 6; + hash_value += ~(hash_value << 11); + hash_value ^= hash_value >> 16; + m_rotating_planet_graphic = + new RotatingPlanetControl(planet_image_pos.x, planet_image_pos.y, planet, star_type, + it->second[hash_value % num_planets_of_type]); + AttachChild(m_rotating_planet_graphic); + } } } - // create planet name text // apply formatting tags around planet name to indicate: @@ -789,7 +787,7 @@ GG::Connect(m_button_colonize->ClickedSignal, &SidePanel::PlanetPanel::ClickColonize, this); - if (planet.Type() == PT_ASTEROIDS) + if (m_planet_graphic) MoveChildDown(m_planet_graphic); const Planet* plt = GetUniverse().Object<const Planet>(m_planet_id); |
From: <geo...@us...> - 2009-10-19 07:47:51
|
Revision: 3227 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3227&view=rev Author: geoffthemedio Date: 2009-10-19 07:47:39 +0000 (Mon, 19 Oct 2009) Log Message: ----------- Nearly fixed (but definitely improved) planet panel InWindow function, which was not taking into account limited vertical space of planet render. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-10-19 07:19:40 UTC (rev 3226) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-10-19 07:47:39 UTC (rev 3227) @@ -418,8 +418,6 @@ private: void DoLayout(); - bool InPlanet(const GG::Pt& pt) const; ///< returns true if pt is within the planet image - void SetPrimaryFocus (FocusType focus); ///< set the primary focus of the planet to focus void SetSecondaryFocus(FocusType focus); ///< set the secondary focus of the planet to focus @@ -1001,7 +999,32 @@ bool SidePanel::PlanetPanel::InWindow(const GG::Pt& pt) const { GG::Pt ul = UpperLeft(), lr = LowerRight(); - return (ul <= pt && pt < lr || m_specials_panel->InWindow(pt) || InPlanet(pt)); + if (!(ul <= pt && pt < lr)) + return false; + + const int MAX_PLANET_DIAMETER = GetOptionsDB().Get<int>("UI.sidepanel-planet-max-diameter"); + GG::Pt planet_box_lr = ul + GG::Pt(GG::X(MAX_PLANET_DIAMETER), GG::Y(MAX_PLANET_DIAMETER)); + + // if pt is to the right of the space where the planet render could be, + // it doesn't matter whether the render is being shown + if (pt.x >= planet_box_lr.x) + return true; + + // if pt is in the horizontal space of the planet render, it matters + // whether the render is being shown + if (m_rotating_planet_graphic) { + // showing full sized graphic. size defaulted to above is accurate + } else if (m_planet_graphic) { + planet_box_lr = m_planet_graphic->LowerRight(); // smaller sized image being shown. use its size. + } else { + return false; // not showing a render, and pt is outside the non-render space, so is not over panel + } + + // if pt is below planet render space, it can't be over the panel + if (pt.y > planet_box_lr.y) + return false; + + // TODO: consider corners } void SidePanel::PlanetPanel::LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) @@ -1148,21 +1171,6 @@ } } -bool SidePanel::PlanetPanel::InPlanet(const GG::Pt& pt) const -{ - const int MAX_PLANET_DIAMETER = GetOptionsDB().Get<int>("UI.sidepanel-planet-max-diameter"); - GG::Pt center = UpperLeft() + GG::Pt(GG::X(MAX_PLANET_DIAMETER / 2), GG::Y(MAX_PLANET_DIAMETER / 2)); - GG::Pt diff = pt - center; - - int r; - if (const Planet* planet = GetPlanet()) - r = PlanetDiameter(planet->Size()) / 2; - else - r = MAX_PLANET_DIAMETER / 2; - - return Value(diff.x * diff.x) + Value(diff.y * diff.y) <= r * r; -} - void SidePanel::PlanetPanel::ClickColonize() { // order or cancel colonization, depending on whether it has previosuly |
From: <tz...@us...> - 2009-10-21 18:41:00
|
Revision: 3235 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3235&view=rev Author: tzlaine Date: 2009-10-21 18:40:52 +0000 (Wed, 21 Oct 2009) Log Message: ----------- Added a missing fallthrough return statement to SidePanel::PlanetPanel:: InWindow(). Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-10-21 08:29:22 UTC (rev 3234) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-10-21 18:40:52 UTC (rev 3235) @@ -1025,6 +1025,8 @@ return false; // TODO: consider corners + + return false; } void SidePanel::PlanetPanel::LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) |
From: <geo...@us...> - 2009-11-23 10:38:16
|
Revision: 3281 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3281&view=rev Author: geoffthemedio Date: 2009-11-23 10:38:02 +0000 (Mon, 23 Nov 2009) Log Message: ----------- Added fog of war scanlines to non-visible planets (other than asteroid belts) on the sidepanel Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-11-23 09:14:54 UTC (rev 3280) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-11-23 10:38:02 UTC (rev 3281) @@ -1,3 +1,7 @@ +#ifdef FREEORION_WIN32 +#include <GL/glew.h> +#endif + #include "SidePanel.h" #include "CUIWnd.h" @@ -7,12 +11,14 @@ #include "FleetWnd.h" #include "InfoPanels.h" #include "MapWnd.h" +#include "ShaderProgram.h" #include "../universe/Predicates.h" #include "../universe/ShipDesign.h" #include "../universe/Fleet.h" #include "../universe/Ship.h" #include "../universe/Building.h" #include "../Empire/Empire.h" +#include "../util/Directories.h" #include "../util/MultiplayerCommon.h" #include "../util/Random.h" #include "../util/XMLDoc.h" @@ -39,7 +45,8 @@ class SpecialsPanel; namespace { - const int EDGE_PAD(3); + const int EDGE_PAD(3); + const double TWO_PI(2.0*3.1415926536); void PlaySidePanelOpenSound() {Sound::GetSound().PlaySound(ClientUI::SoundDir() / GetOptionsDB().Get<std::string>("UI.sound.sidepanel-open"), true);} void PlayFarmingFocusClickSound() {Sound::GetSound().PlaySound(ClientUI::SoundDir() / GetOptionsDB().Get<std::string>("UI.sound.farming-focus"), true);} @@ -521,6 +528,7 @@ double axial_tilt = std::max(-30.0, std::min(static_cast<double>(m_planet.AxialTilt()), 60.0)); RenderPlanet(ul + GG::Pt(Width() / 2, Height() / 2), Value(Width()), m_surface_texture, m_initial_rotation, 1.0 / m_planet.RotationalPeriod(), axial_tilt, m_planet_data.shininess, m_star_type); + if (m_atmosphere_texture) { int texture_w = Value(m_atmosphere_texture->DefaultWidth()); int texture_h = Value(m_atmosphere_texture->DefaultHeight()); @@ -532,6 +540,21 @@ GG::Pt(static_cast<GG::X>(lr.x + (texture_w - m_atmosphere_planet_rect.lr.x) * x_scale), static_cast<GG::Y>(lr.y + (texture_h - m_atmosphere_planet_rect.lr.y) * y_scale))); } + + // render fog of war over planet if it's not visible to this client's player + if (GetUniverse().GetObjectVisibilityByEmpire(m_planet.ID(), HumanClientApp::GetApp()->EmpireID()) <= VIS_BASIC_VISIBILITY && + GetOptionsDB().Get<bool>("UI.system-fog-of-war")) + { + if (!s_scanline_shader) + s_scanline_shader = boost::shared_ptr<ShaderProgram>(new ShaderProgram("", + ReadFile((GetRootDataDir() / "default" / "shaders" / "scanlines.frag").file_string()))); + + float fog_scanline_spacing = GetOptionsDB().Get<double>("UI.system-fog-of-war-spacing"); + s_scanline_shader->Use(); + s_scanline_shader->Bind("scanline_spacing", fog_scanline_spacing); + CircleArc(ul, lr, 0.0, TWO_PI, true); + glUseProgram(0); + } } void SetRotatingPlanetData(const RotatingPlanetData& planet_data) @@ -549,8 +572,12 @@ GG::Rect m_atmosphere_planet_rect; double m_initial_rotation; StarType m_star_type; + + static boost::shared_ptr<ShaderProgram> s_scanline_shader; }; +boost::shared_ptr<ShaderProgram> RotatingPlanetControl::s_scanline_shader = boost::shared_ptr<ShaderProgram>(); + //////////////////////////////////////////////// // SidePanel::PlanetPanel //////////////////////////////////////////////// @@ -741,7 +768,6 @@ } - // create planet name text // apply formatting tags around planet name to indicate: |
From: <geo...@us...> - 2010-07-13 05:09:23
|
Revision: 3659 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3659&view=rev Author: geoffthemedio Date: 2010-07-13 05:09:16 +0000 (Tue, 13 Jul 2010) Log Message: ----------- Similarly modified SidePanel::PlanetPanel to get whether a planet is a homeworld by checking all species, so as to restore the italicizing of names of homeworld planets on the SidePanel. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2010-07-13 05:03:49 UTC (rev 3658) +++ trunk/FreeOrion/UI/SidePanel.cpp 2010-07-13 05:09:16 UTC (rev 3659) @@ -793,8 +793,8 @@ bool capitol = false, homeworld = false, has_shipyard = false; // need to check all empires for capitols - const EmpireManager& manager = Empires(); - for (EmpireManager::const_iterator empire_it = manager.begin(); empire_it != manager.end(); ++empire_it) { + const EmpireManager& empire_manager = Empires(); + for (EmpireManager::const_iterator empire_it = empire_manager.begin(); empire_it != empire_manager.end(); ++empire_it) { const Empire* empire = empire_it->second; if (!empire) { Logger().errorStream() << "PlanetPanel::PlanetPanel got null empire pointer for id " << empire_it->first; @@ -807,10 +807,17 @@ } // need to check all species for homeworlds + const SpeciesManager& species_manager = GetSpeciesManager(); + for (SpeciesManager::iterator species_it = species_manager.begin(); species_it != species_manager.end(); ++species_it) { + if (const Species* species = species_it->second) { + const std::set<int>& homeworld_ids = species->Homeworlds(); + if (homeworld_ids.find(m_planet_id) != homeworld_ids.end()) { + homeworld = true; + break; + } + } + } - // TODO: THIS, once species have homeworlds - - // check for shipyard const std::set<int>& buildings = planet->Buildings(); for (std::set<int>::const_iterator building_it = buildings.begin(); building_it != buildings.end(); ++building_it) { |
From: <geo...@us...> - 2010-07-18 04:12:40
|
Revision: 3676 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3676&view=rev Author: geoffthemedio Date: 2010-07-18 04:12:34 +0000 (Sun, 18 Jul 2010) Log Message: ----------- -Commented out the SpeciesSelector on SidePanel::PlanetPanel. Decided to switch to using the selected ship to determine what species the colonize button population estimate gives. -Added ValidColonyShipSelected file-scope function in SidePanel.cpp that returns true if there is a single colony ship owned by the client's player's empire selected in the active FleetWnd at the indicated system. This is now used when deciding whether to show the colonize button in the PlanetPanel. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2010-07-18 04:10:13 UTC (rev 3675) +++ trunk/FreeOrion/UI/SidePanel.cpp 2010-07-18 04:12:34 UTC (rev 3676) @@ -879,8 +879,8 @@ ClientUI::TextColor(), GG::INTERACTIVE); GG::Connect(m_button_colonize->ClickedSignal, &SidePanel::PlanetPanel::ClickColonize, this); - m_species_selector = new SpeciesSelector(GG::X(MAX_PLANET_DIAMETER), m_button_colonize->Height()/*, std::vector<std::string>()*/); - m_species_selector->MoveTo(GG::Pt(m_button_colonize->LowerRight().x + GG::X(EDGE_PAD), m_button_colonize->UpperLeft().y)); + //m_species_selector = new SpeciesSelector(GG::X(MAX_PLANET_DIAMETER), m_button_colonize->Height()/*, std::vector<std::string>()*/); + //m_species_selector->MoveTo(GG::Pt(m_button_colonize->LowerRight().x + GG::X(EDGE_PAD), m_button_colonize->UpperLeft().y)); if (m_planet_graphic) @@ -931,11 +931,11 @@ if (m_button_colonize && m_button_colonize->Parent() == this) { m_button_colonize->MoveTo(GG::Pt(left, y)); - if (m_species_selector && m_species_selector->Parent() == this) { - GG::X ss_left = left + m_button_colonize->Width() + GG::X(EDGE_PAD); - GG::Y ss_height = m_button_colonize->Height(); - m_species_selector->SizeMove(GG::Pt(ss_left, y), GG::Pt(right, y + ss_height)); - } + //if (m_species_selector && m_species_selector->Parent() == this) { + // GG::X ss_left = left + m_button_colonize->Width() + GG::X(EDGE_PAD); + // GG::Y ss_height = m_button_colonize->Height(); + // m_species_selector->SizeMove(GG::Pt(ss_left, y), GG::Pt(right, y + ss_height)); + //} y += m_button_colonize->Height() + EDGE_PAD; } @@ -969,6 +969,32 @@ ResizedSignal(); } +namespace { + bool ValidColonyShipSelected(int system_id) { + // if not looking in a valid system, no valid colony ship can be available + if (system_id == UniverseObject::INVALID_OBJECT_ID) + return false; + + // is there a valid single selected ship in the active FleetWnd? + int ship_id = FleetUIManager::GetFleetUIManager().SelectedShipID(); + const Ship* ship = GetUniverse().Objects().Object<Ship>(ship_id); + if (!ship) + return false; + + // is selected ship: a colony ship, owned by this client's player, + // in the right system, and does it have a valid species? + if (ship->SystemID() != system_id || + !ship->CanColonize() || + !ship->OwnedBy(HumanClientApp::GetApp()->EmpireID()) || + ship->SpeciesName().empty()) + { + return false; + } + + return true; + } +} + void SidePanel::PlanetPanel::Refresh() { const Planet* planet = GetObject<Planet>(m_planet_id); @@ -1060,7 +1086,7 @@ owner == OS_NONE && planet->CurrentMeterValue(METER_TARGET_POPULATION) > 0 && !planet->IsAboutToBeColonized() && - FindColonyShip(planet->SystemID())) + ValidColonyShipSelected(SidePanel::SystemID())) { AttachChild(m_button_colonize); std::string target_pop = DoubleToString(planet->CurrentMeterValue(METER_TARGET_POPULATION), 2, false); @@ -1068,8 +1094,7 @@ if (m_button_colonize) m_button_colonize->SetText(colonize_text); - AttachChild(m_species_selector); - // TODO: find available species and populate selector with those + //AttachChild(m_species_selector); } else if (!Disabled() && planet->IsAboutToBeColonized()) { AttachChild(m_button_colonize); |
From: <geo...@us...> - 2010-07-28 03:38:40
|
Revision: 3708 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3708&view=rev Author: geoffthemedio Date: 2010-07-28 03:38:32 +0000 (Wed, 28 Jul 2010) Log Message: ----------- -Removed erroneous "uninhabitable" text from planet panels after a planet has been ordered colonized. -Tweaked comments in SidePanel.cpp Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2010-07-27 17:45:51 UTC (rev 3707) +++ trunk/FreeOrion/UI/SidePanel.cpp 2010-07-28 03:38:32 UTC (rev 3708) @@ -1061,7 +1061,9 @@ const Ship* ship = ValidSelectedColonyShip(SidePanel::SystemID()); - // create colonize or cancel button, if appropriate (a ship is in the system that can colonize, or the planet has been ordered to be colonized already this turn) + // create colonize or cancel button, if appropriate (a ship is in the system + // that can colonize, or the planet has been ordered to be colonized already + // this turn) if (!Disabled() && owner == OS_NONE && ship && @@ -1102,10 +1104,9 @@ m_button_colonize->SetText(UserString("CANCEL")); DetachChild(m_colonize_instruction); - std::string env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE_ENV")) + std::string env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE")) % GetPlanetSizeName(*planet) - % GetPlanetTypeName(*planet) - % GetPlanetEnvironmentName(*planet, planet->SpeciesName())); + % GetPlanetTypeName(*planet)); m_env_size->SetText(env_size_text); } else { @@ -1125,7 +1126,8 @@ if (m_specials_panel) m_specials_panel->Update(); - // BuildingsPanel::Refresh (and other panels) emit ExpandCollapseSignal, which should be connected to SidePanel::PlanetPanel::DoLayout + // BuildingsPanel::Refresh (and other panels) emit ExpandCollapseSignal, + // which should be connected to SidePanel::PlanetPanel::DoLayout } void SidePanel::PlanetPanel::SetFocus(const std::string& focus) |
From: <geo...@us...> - 2010-08-19 07:10:28
|
Revision: 3741 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3741&view=rev Author: geoffthemedio Date: 2010-08-19 07:10:21 +0000 (Thu, 19 Aug 2010) Log Message: ----------- Fixed issue with SidePanel where scrolling up planet panels would cause the system droplist and forward/backward buttons to become unusable. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2010-08-19 01:02:19 UTC (rev 3740) +++ trunk/FreeOrion/UI/SidePanel.cpp 2010-08-19 07:10:21 UTC (rev 3741) @@ -1374,12 +1374,22 @@ bool SidePanel::PlanetPanelContainer::InWindow(const GG::Pt& pt) const { + // ensure pt is below top of container + if (pt.y < UpperLeft().y) + return false; + + // allow point to be within any planet panel that is below top of container const int MAX_PLANET_DIAMETER = GetOptionsDB().Get<int>("UI.sidepanel-planet-max-diameter"); for (std::vector<PlanetPanel*>::const_iterator it = m_planet_panels.begin(); it != m_planet_panels.end(); ++it) { if ((*it)->InWindow(pt)) return true; } + // disallow point between containers that is left of solid portion of sidepanel. + // this done by restricting InWindow to discard space between left of container + // and left of solid portion that wasn't already caught above as being part + // of a planet panel. + return UpperLeft() + GG::Pt(GG::X(MAX_PLANET_DIAMETER), GG::Y0) <= pt && pt < LowerRight(); } |
From: <geo...@us...> - 2010-08-24 20:01:19
|
Revision: 3757 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3757&view=rev Author: geoffthemedio Date: 2010-08-24 20:01:13 +0000 (Tue, 24 Aug 2010) Log Message: ----------- Made it possible to drag around sidepanel by dragging within the planet planel list (when not clicking on a planet planel). Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2010-08-24 19:09:08 UTC (rev 3756) +++ trunk/FreeOrion/UI/SidePanel.cpp 2010-08-24 20:01:13 UTC (rev 3757) @@ -466,6 +466,8 @@ //@} /** \name Mutators */ //@{ + virtual void LDrag(const GG::Pt& pt, const GG::Pt& move, GG::Flags<GG::ModKey> mod_keys); + void Clear(); void SetPlanets(const std::vector<int>& planet_ids, StarType star_type); void SelectPlanet(int planet_id); //!< programatically selects a planet with id \a planet_id @@ -1438,6 +1440,11 @@ } } +void SidePanel::PlanetPanelContainer::LDrag(const GG::Pt& pt, const GG::Pt& move, GG::Flags<GG::ModKey> mod_keys) +{ + ForwardEventToParent(); +} + int SidePanel::PlanetPanelContainer::ScrollPosition() const { if (m_vscroll && m_vscroll->Parent() == this) |
From: <geo...@us...> - 2010-08-25 22:44:44
|
Revision: 3763 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3763&view=rev Author: geoffthemedio Date: 2010-08-25 22:44:38 +0000 (Wed, 25 Aug 2010) Log Message: ----------- Removed unnecessary debug output code from SidePanel.cpp. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2010-08-25 21:31:33 UTC (rev 3762) +++ trunk/FreeOrion/UI/SidePanel.cpp 2010-08-25 22:44:38 UTC (rev 3763) @@ -1769,8 +1769,6 @@ GG::Pt ul = UpperLeft() + GG::Pt(GG::X(MaxPlanetDiameter() + 2), GG::Y0); GG::Pt lr = LowerRight(); - std::cout << ul.x << ", " << ul.y << std::endl; - GG::Pt cl_ul = ClientUpperLeft() + GG::Pt(GG::X(MaxPlanetDiameter() + 2), PLANET_PANEL_TOP); GG::Pt cl_lr = lr - GG::Pt(BORDER_RIGHT, BORDER_BOTTOM); |
From: <geo...@us...> - 2010-09-25 08:35:52
|
Revision: 3798 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3798&view=rev Author: geoffthemedio Date: 2010-09-25 08:35:46 +0000 (Sat, 25 Sep 2010) Log Message: ----------- Fixed issue with production screen where ending turn would deselect the selected planet on the sidepanel. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2010-09-21 22:06:33 UTC (rev 3797) +++ trunk/FreeOrion/UI/SidePanel.cpp 2010-09-25 08:35:46 UTC (rev 3798) @@ -1499,6 +1499,8 @@ { //std::cout << "SidePanel::PlanetPanelContainer::SetPlanets( size: " << planet_ids.size() << " )" << std::endl; + int initial_selected_planet_panel = m_selected_planet_id; + // remove old panels Clear(); @@ -1520,6 +1522,8 @@ // redo contents and layout of panels, after enabling or disabling, so // they take this into account when doing contents RefreshAllPlanetPanels(); + + SelectPlanet(initial_selected_planet_panel); } void SidePanel::PlanetPanelContainer::DoPanelsLayout() @@ -1667,9 +1671,10 @@ void SidePanel::PlanetPanelContainer::RefreshAllPlanetPanels() { - //std::cout << "SidePanel::PlanetPanelContainer::RefreshAllPlanetPanels" << std::endl; + //std::cout << "SidePanel::PlanetPanelContainer::RefreshAllPlanetPanels. selected planet id: " << m_selected_planet_id << std::endl; for (std::vector<PlanetPanel*>::iterator it = m_planet_panels.begin(); it != m_planet_panels.end(); ++it) (*it)->Refresh(); + //std::cout << " ... after refreshing all planet panels: selected planet id: " << m_selected_planet_id << std::endl<< std::endl<< std::endl; } void SidePanel::PlanetPanelContainer::SizeMove(const GG::Pt& ul, const GG::Pt& lr) @@ -1930,7 +1935,10 @@ // save initial scroll position so it can be restored after repopulating the planet panel container const int initial_scroll_pos = m_planet_panel_container->ScrollPosition(); + // save initial selected planet so it can be restored + const int initial_selected_planet_id = m_planet_panel_container->SelectedPlanetID(); + // clear out current contents m_planet_panel_container->Clear(); m_system_name->Clear(); @@ -2026,7 +2034,10 @@ // restore planet panel container scroll position from before clearing m_planet_panel_container->ScrollTo(initial_scroll_pos); + // restore planet selection + m_planet_panel_container->SelectPlanet(initial_selected_planet_id); + // populate system resource summary // get planets owned by player's empire |
From: <geo...@us...> - 2010-10-15 06:46:34
|
Revision: 3819 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3819&view=rev Author: geoffthemedio Date: 2010-10-15 06:46:28 +0000 (Fri, 15 Oct 2010) Log Message: ----------- Fixed crash when opening production screen using button at top-right before opening a system in the sidepanel separately. Remaining issue is why no system is selected by default when using that button, and why nothing seems enqueuable on the production queue. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2010-10-15 06:28:37 UTC (rev 3818) +++ trunk/FreeOrion/UI/SidePanel.cpp 2010-10-15 06:46:28 UTC (rev 3819) @@ -1789,8 +1789,8 @@ bool SidePanel::InWindow(const GG::Pt& pt) const { return (UpperLeft() + GG::Pt(GG::X(MaxPlanetDiameter()), GG::Y0) <= pt && pt < LowerRight()) - || m_planet_panel_container->InWindow(pt) - || m_system_resource_summary->InWindow(pt); + || (m_planet_panel_container && m_planet_panel_container->InWindow(pt)) + || (m_system_resource_summary && m_system_resource_summary->InWindow(pt)); } GG::Pt SidePanel::ClientUpperLeft() const |
From: <geo...@us...> - 2011-07-16 23:48:33
|
Revision: 4050 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4050&view=rev Author: geoffthemedio Date: 2011-07-16 23:48:27 +0000 (Sat, 16 Jul 2011) Log Message: ----------- Tweaked PlanetPanel to hide/show the PopulationPanel, ResourcePanel and MilitaryPanel based on whether a planet has population, not based on whether it is owned by a player empire. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2011-07-16 23:46:53 UTC (rev 4049) +++ trunk/FreeOrion/UI/SidePanel.cpp 2011-07-16 23:48:27 UTC (rev 4050) @@ -1084,14 +1084,9 @@ } - // set up planet panel differently for owned and unowned planets... - if (owner == OS_NONE && !SHOW_ALL_PLANET_PANELS) { - // show only the environment and size information and (if applicable) buildings and specials - DetachChild(m_population_panel); - DetachChild(m_resource_panel); - DetachChild(m_military_panel); - } else { - // show population, resource and military panels, but hide environement / size indicator that's used only for uncolonized planets + if (planet->CurrentMeterValue(METER_POPULATION) > 0 || SHOW_ALL_PLANET_PANELS) { + // show population, resource and military panels, but hide environement + // size indicator that's used only for uncolonized planets AttachChild(m_population_panel); if (m_population_panel) m_population_panel->Refresh(); @@ -1101,6 +1096,10 @@ AttachChild(m_military_panel); if (m_military_panel) m_military_panel->Refresh(); + } else { + DetachChild(m_population_panel); + DetachChild(m_resource_panel); + DetachChild(m_military_panel); } const Ship* ship = ValidSelectedColonyShip(SidePanel::SystemID()); @@ -1109,7 +1108,8 @@ // that can colonize, or the planet has been ordered to be colonized already // this turn) if (!Disabled() && - owner == OS_NONE && + (owner == OS_NONE || owner == OS_SELF) && + planet->CurrentMeterValue(METER_POPULATION) <= 0.0 && ship && !planet->IsAboutToBeColonized() && planet->CurrentMeterValue(METER_TARGET_POPULATION) > 0) |
From: <geo...@us...> - 2011-08-10 03:30:10
|
Revision: 4115 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4115&view=rev Author: geoffthemedio Date: 2011-08-10 03:30:04 +0000 (Wed, 10 Aug 2011) Log Message: ----------- Slightly enlarged default sidepanel width to better show 6th meter icon in expanded view. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2011-08-09 17:38:41 UTC (rev 4114) +++ trunk/FreeOrion/UI/SidePanel.cpp 2011-08-10 03:30:04 UTC (rev 4115) @@ -354,7 +354,7 @@ /** Adds options related to sidepanel to Options DB. */ void AddOptions(OptionsDB& db) { - db.Add("UI.sidepanel-width", "OPTIONS_DB_UI_SIDEPANEL_WIDTH", 370, RangedValidator<int>(64, 512)); + db.Add("UI.sidepanel-width", "OPTIONS_DB_UI_SIDEPANEL_WIDTH", 384, RangedValidator<int>(64, 512)); db.Add("UI.sidepanel-planet-max-diameter", "OPTIONS_DB_UI_SIDEPANEL_PLANET_MAX_DIAMETER", 128, RangedValidator<int>(16, 512)); db.Add("UI.sidepanel-planet-min-diameter", "OPTIONS_DB_UI_SIDEPANEL_PLANET_MIN_DIAMETER", 24, RangedValidator<int>(8, 128)); db.Add("UI.sidepanel-planet-shown", "OPTIONS_DB_UI_SIDEPANEL_PLANET_SHOWN", true, Validator<bool>()); |
From: <geo...@us...> - 2011-08-12 13:25:22
|
Revision: 4124 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4124&view=rev Author: geoffthemedio Date: 2011-08-12 13:25:16 +0000 (Fri, 12 Aug 2011) Log Message: ----------- Tweaked implementation of ValidSelectedColonyShip in SidePanel.cpp Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2011-08-11 07:03:22 UTC (rev 4123) +++ trunk/FreeOrion/UI/SidePanel.cpp 2011-08-12 13:25:16 UTC (rev 4124) @@ -973,22 +973,13 @@ if (system_id == UniverseObject::INVALID_OBJECT_ID) return 0; - // is there a valid single selected ship in the active FleetWnd? - int ship_id = FleetUIManager::GetFleetUIManager().SelectedShipID(); - const Ship* ship = GetUniverse().Objects().Object<Ship>(ship_id); - if (!ship) - return 0; - - // is selected ship: a colony ship, owned by this client's player, - // in the right system, and does it have a valid species? - if (ship->SystemID() != system_id || - !ship->CanColonize() || - !ship->OwnedBy(HumanClientApp::GetApp()->EmpireID())) - { - return 0; - } - - return ship; + // is there a valid selected ship in the active FleetWnd? + std::set<int> selected_ship_ids = FleetUIManager::GetFleetUIManager().SelectedShipIDs(); + for (std::set<int>::const_iterator ss_it = selected_ship_ids.begin(); ss_it != selected_ship_ids.end(); ++ss_it) + if (const Ship* ship = GetUniverse().Objects().Object<Ship>(*ss_it)) + if (ship->SystemID() == system_id && ship->CanColonize() && ship->OwnedBy(HumanClientApp::GetApp()->EmpireID())) + return ship; + return 0; } std::set<const Ship*> ValidSelectedInvasionShips(int system_id) { |
From: <geo...@us...> - 2011-08-14 03:45:17
|
Revision: 4137 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4137&view=rev Author: geoffthemedio Date: 2011-08-14 03:45:11 +0000 (Sun, 14 Aug 2011) Log Message: ----------- Got (mispositioned and nonfunctional) invade button to appear on sidepanel when a player has one or more invasion ships in the system of an enemy empire's planet. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2011-08-14 03:43:03 UTC (rev 4136) +++ trunk/FreeOrion/UI/SidePanel.cpp 2011-08-14 03:45:11 UTC (rev 4137) @@ -902,6 +902,7 @@ SidePanel::PlanetPanel::~PlanetPanel() { delete m_colonize_button; + delete m_invade_button; delete m_colonize_instruction; delete m_env_size; delete m_population_panel; @@ -993,11 +994,10 @@ // is there a valid single selected ship in the active FleetWnd? std::set<int> selected_ship_ids = FleetUIManager::GetFleetUIManager().SelectedShipIDs(); - std::set<const Ship*> selected_invasion_ships; for (std::set<int>::const_iterator ss_it = selected_ship_ids.begin(); ss_it != selected_ship_ids.end(); ++ss_it) if (const Ship* ship = GetUniverse().Objects().Object<Ship>(*ss_it)) if (ship->SystemID() == system_id && ship->HasTroops() && ship->OwnedBy(HumanClientApp::GetApp()->EmpireID())) - selected_invasion_ships.insert(ship); + retval.insert(ship); return retval; } @@ -1138,21 +1138,23 @@ DetachChild(m_military_panel); } - const Ship* ship = ValidSelectedColonyShip(SidePanel::SystemID()); + const Ship* colony_ship = ValidSelectedColonyShip(SidePanel::SystemID()); + std::set<const Ship*> invasion_ships = ValidSelectedInvasionShips(SidePanel::SystemID()); + // create colonize or cancel button, if appropriate (a ship is in the system // that can colonize, or the planet has been ordered to be colonized already // this turn) if (!Disabled() && (owner == OS_NONE || owner == OS_SELF) && planet->CurrentMeterValue(METER_POPULATION) <= 0.0 && - ship && + colony_ship && !planet->IsAboutToBeColonized() && planet->CurrentMeterValue(METER_TARGET_POPULATION) > 0) { DetachChild(m_invade_button); AttachChild(m_colonize_button); - std::string initial_pop = DoubleToString(ColonyShipCapacity(ship), 2, false); + std::string initial_pop = DoubleToString(ColonyShipCapacity(colony_ship), 2, false); std::string target_pop = DoubleToString(planet->CurrentMeterValue(METER_TARGET_POPULATION), 2, false); std::string colonize_text = boost::io::str(FlexibleFormat(UserString("PL_COLONIZE")) % initial_pop % target_pop); if (m_colonize_button) @@ -1162,13 +1164,13 @@ std::string env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE_ENV")) % GetPlanetSizeName(*planet) % GetPlanetTypeName(*planet) - % GetPlanetEnvironmentName(*planet, ship->SpeciesName())); + % GetPlanetEnvironmentName(*planet, colony_ship->SpeciesName())); m_env_size->SetText(env_size_text); } else if (!Disabled() && owner == OS_FOREIGN && planet->CurrentMeterValue(METER_POPULATION) > 0.0 && - ship) + !invasion_ships.empty()) { AttachChild(m_invade_button); DetachChild(m_colonize_button); |
From: <geo...@us...> - 2011-09-02 06:40:33
|
Revision: 4224 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4224&view=rev Author: geoffthemedio Date: 2011-09-02 06:40:26 +0000 (Fri, 02 Sep 2011) Log Message: ----------- Possibly fixed a crash on OSX (and possibly other systems) when issuing multiple colonize orders that involve cancelling existing colonize orders and looping through the set of orders while the cancelling is removing them. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2011-09-02 06:03:19 UTC (rev 4223) +++ trunk/FreeOrion/UI/SidePanel.cpp 2011-09-02 06:40:26 UTC (rev 4224) @@ -1446,10 +1446,13 @@ namespace { void CancelColonizeInvadeScrapShipOrders(Ship* ship) { + if (!ship) + return; + const ClientApp* app = ClientApp::GetApp(); if (!app) return; - const OrderSet& orders = app->Orders(); + const OrderSet orders = app->Orders(); // is selected ship already ordered to colonize? If so, recind that order. if (ship->OrderedColonizePlanet() != UniverseObject::INVALID_OBJECT_ID) { |
From: <geo...@us...> - 2011-10-25 06:46:50
|
Revision: 4438 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4438&view=rev Author: geoffthemedio Date: 2011-10-25 06:46:44 +0000 (Tue, 25 Oct 2011) Log Message: ----------- PlanetPanel::Refresh code cleanup by Daniel Santos Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2011-10-25 01:02:55 UTC (rev 4437) +++ trunk/FreeOrion/UI/SidePanel.cpp 2011-10-25 06:46:44 UTC (rev 4438) @@ -1140,54 +1140,54 @@ DetachChild(m_military_panel); } + // calculate our truth tables using simpler words const Ship* colony_ship = ValidSelectedColonyShip(SidePanel::SystemID()); std::set<Ship*> invasion_ships = ValidSelectedInvasionShips(SidePanel::SystemID()); + bool mine = planet->OwnedBy(client_empire_id); + bool populated = planet->CurrentMeterValue(METER_POPULATION) > 0.; + bool habitable = planet->CurrentMeterValue(METER_TARGET_POPULATION) > 0.; + bool visible = GetUniverse().GetObjectVisibilityByEmpire(m_planet_id, client_empire_id) >= VIS_PARTIAL_VISIBILITY; + bool vulnerable = planet->CurrentMeterValue(METER_SHIELD) <= 0.; + bool being_colonized = planet->IsAboutToBeColonized(); + bool colonizable = !populated && habitable && visible && !being_colonized; + bool can_colonize = colonizable && colony_ship; +// bool could_colonize = colonizable && OwnedColonyShipsInSystem(client_empire_id, SidePanel::SystemID()); + bool could_colonize = !populated && visible && !being_colonized && OwnedColonyShipsInSystem(client_empire_id, SidePanel::SystemID()); + bool being_invaded = planet->IsAboutToBeInvaded(); + bool invadable = !mine && vulnerable && habitable && visible && !being_invaded && !invasion_ships.empty(); - if (!Disabled() && - planet->CurrentMeterValue(METER_POPULATION) <= 0.0 && - colony_ship && - !planet->IsAboutToBeColonized() && - planet->CurrentMeterValue(METER_TARGET_POPULATION) > 0 && - GetUniverse().GetObjectVisibilityByEmpire(m_planet_id, client_empire_id) >= VIS_PARTIAL_VISIBILITY) - { + DetachChild(m_invade_button); + DetachChild(m_colonize_button); + DetachChild(m_colonize_instruction); + std::string env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE")) + % GetPlanetSizeName(*planet) + % GetPlanetTypeName(*planet)); + + if(Disabled() || !(can_colonize || could_colonize || being_colonized || invadable || being_invaded)) { + // hide everything + + } else if(can_colonize) { // show colonize button - DetachChild(m_invade_button); AttachChild(m_colonize_button); std::string initial_pop = DoubleToString(ColonyShipCapacity(colony_ship), 2, false); std::string target_pop = DoubleToString(planet->CurrentMeterValue(METER_TARGET_POPULATION), 2, false); std::string colonize_text = boost::io::str(FlexibleFormat(UserString("PL_COLONIZE")) % initial_pop % target_pop); if (m_colonize_button) m_colonize_button->SetText(colonize_text); - DetachChild(m_colonize_instruction); - std::string env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE_ENV")) - % GetPlanetSizeName(*planet) - % GetPlanetTypeName(*planet) - % GetPlanetEnvironmentName(*planet, colony_ship->SpeciesName())); - m_env_size->SetText(env_size_text); + env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE_ENV")) + % GetPlanetSizeName(*planet) + % GetPlanetTypeName(*planet) + % GetPlanetEnvironmentName(*planet, colony_ship->SpeciesName())); - } else if (!Disabled() && planet->IsAboutToBeColonized()) { + } else if(being_colonized) { // shown colonize cancel button - DetachChild(m_invade_button); AttachChild(m_colonize_button); if (m_colonize_button) m_colonize_button->SetText(UserString("PL_CANCEL_COLONIZE")); - DetachChild(m_colonize_instruction); - std::string env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE")) - % GetPlanetSizeName(*planet) - % GetPlanetTypeName(*planet)); - m_env_size->SetText(env_size_text); - - } else if (!Disabled() && - !planet->OwnedBy(client_empire_id) && - !planet->IsAboutToBeInvaded() && - planet->CurrentMeterValue(METER_POPULATION) > 0.0 && - planet->CurrentMeterValue(METER_SHIELD) <= 0.0 && - !invasion_ships.empty() && - GetUniverse().GetObjectVisibilityByEmpire(m_planet_id, client_empire_id) >= VIS_PARTIAL_VISIBILITY) - { + } else if(invadable) { // show invade button AttachChild(m_invade_button); double invasion_troops = 0.0; @@ -1203,56 +1203,18 @@ if (m_invade_button) m_invade_button->SetText(invasion_text); - DetachChild(m_colonize_button); - DetachChild(m_colonize_instruction); - - std::string env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE")) - % GetPlanetSizeName(*planet) - % GetPlanetTypeName(*planet)); - m_env_size->SetText(env_size_text); - - } else if (!Disabled() && planet->IsAboutToBeInvaded()) { + } else if(being_invaded) { // show invade cancel button AttachChild(m_invade_button); if (m_invade_button) m_invade_button->SetText(UserString("PL_CANCEL_INVADE")); - DetachChild(m_colonize_button); - DetachChild(m_colonize_instruction); - std::string env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE")) - % GetPlanetSizeName(*planet) - % GetPlanetTypeName(*planet)); - m_env_size->SetText(env_size_text); - - } else if (!Disabled() && - planet->CurrentMeterValue(METER_POPULATION) <= 0.0 && - !planet->IsAboutToBeColonized() && - !ValidSelectedColonyShip(SidePanel::SystemID()) && - OwnedColonyShipsInSystem(client_empire_id, SidePanel::SystemID()) && - GetUniverse().GetObjectVisibilityByEmpire(m_planet_id, client_empire_id) >= VIS_PARTIAL_VISIBILITY) - { + } else if(could_colonize) { // show colonization instruction text - DetachChild(m_invade_button); AttachChild(m_colonize_instruction); - DetachChild(m_colonize_button); - - std::string env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE")) - % GetPlanetSizeName(*planet) - % GetPlanetTypeName(*planet)); - m_env_size->SetText(env_size_text); - - } else { - // hide everything - DetachChild(m_invade_button); - DetachChild(m_colonize_button); - DetachChild(m_colonize_instruction); - - std::string env_size_text = boost::io::str(FlexibleFormat(UserString("PL_TYPE_SIZE")) - % GetPlanetSizeName(*planet) - % GetPlanetTypeName(*planet)); - m_env_size->SetText(env_size_text); } + m_env_size->SetText(env_size_text); // update panels if (m_buildings_panel) |
From: <geo...@us...> - 2011-11-05 09:24:20
|
Revision: 4470 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4470&view=rev Author: geoffthemedio Date: 2011-11-05 09:24:13 +0000 (Sat, 05 Nov 2011) Log Message: ----------- Tweak by Daniel Santos to fix logic of when invasions should be allowed in the UI. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2011-11-05 02:05:25 UTC (rev 4469) +++ trunk/FreeOrion/UI/SidePanel.cpp 2011-11-05 09:24:13 UTC (rev 4470) @@ -1154,7 +1154,7 @@ // bool could_colonize = colonizable && OwnedColonyShipsInSystem(client_empire_id, SidePanel::SystemID()); bool could_colonize = !populated && visible && !being_colonized && OwnedColonyShipsInSystem(client_empire_id, SidePanel::SystemID()); bool being_invaded = planet->IsAboutToBeInvaded(); - bool invadable = !mine && vulnerable && habitable && visible && !being_invaded && !invasion_ships.empty(); + bool invadable = !mine && vulnerable && populated && visible && !being_invaded && !invasion_ships.empty(); DetachChild(m_invade_button); |
From: <geo...@us...> - 2012-02-19 23:26:59
|
Revision: 4666 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4666&view=rev Author: geoffthemedio Date: 2012-02-19 23:26:52 +0000 (Sun, 19 Feb 2012) Log Message: ----------- -Fixed memory leak / massive FPS drop when the sidepanel had a rotating planet control open and the system was repeatedly modified, leading to duplicate controls being created with the original not being deleted. -Grooming Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2012-02-19 21:55:35 UTC (rev 4665) +++ trunk/FreeOrion/UI/SidePanel.cpp 2012-02-19 23:26:52 UTC (rev 4666) @@ -544,8 +544,7 @@ CUIScroll* m_vscroll; ///< the vertical scroll (for viewing all the planet panes) }; -class RotatingPlanetControl : public GG::Control -{ +class RotatingPlanetControl : public GG::Control { public: RotatingPlanetControl(GG::X x, GG::Y y, const Planet& planet, StarType star_type, const RotatingPlanetData& planet_data) : GG::Control(x, y, GG::X(PlanetDiameter(planet.Size())), GG::Y(PlanetDiameter(planet.Size())), GG::Flags<GG::WndFlag>()), @@ -573,8 +572,7 @@ } } - ~RotatingPlanetControl() - { + ~RotatingPlanetControl() { s_instances_counter--; if (!s_instances_counter && s_scanline_shader) s_scanline_shader.reset(); @@ -945,6 +943,11 @@ void SidePanel::PlanetPanel::CheckDisplayPlanets() { const Planet* planet = GetPlanet(m_planet_id); if (planet && GetOptionsDB().Get<bool>("UI.sidepanel-planet-shown")) { + delete m_planet_graphic; + m_planet_graphic = 0; + delete m_rotating_planet_graphic; + m_rotating_planet_graphic = 0; + if (planet->Type() == PT_ASTEROIDS) { std::vector<boost::shared_ptr<GG::Texture> > textures; GetAsteroidTextures(m_planet_id, textures); @@ -1070,13 +1073,10 @@ } } -void SidePanel::PlanetPanel::Refresh() -{ +void SidePanel::PlanetPanel::Refresh() { int client_empire_id = HumanClientApp::GetApp()->EmpireID(); const Planet* planet = GetPlanet(m_planet_id); - if (!planet) - planet = GetEmpireKnownPlanet(m_planet_id, client_empire_id); if (!planet) { Logger().debugStream() << "PlanetPanel::Refresh couldn't get planet!"; // clear / hide everything... @@ -1169,7 +1169,7 @@ % GetPlanetSizeName(*planet) % GetPlanetTypeName(*planet)); - if(Disabled() || !(can_colonize || could_colonize || being_colonized || invadable || being_invaded)) { + if (Disabled() || !(can_colonize || could_colonize || being_colonized || invadable || being_invaded)) { // hide everything } else if(can_colonize) { @@ -1231,8 +1231,7 @@ // which should be connected to SidePanel::PlanetPanel::DoLayout } -void SidePanel::PlanetPanel::SizeMove(const GG::Pt& ul, const GG::Pt& lr) -{ +void SidePanel::PlanetPanel::SizeMove(const GG::Pt& ul, const GG::Pt& lr) { GG::Pt old_size = GG::Wnd::Size(); GG::Wnd::SizeMove(ul, lr); @@ -1241,8 +1240,7 @@ DoLayout(); } -void SidePanel::PlanetPanel::SetFocus(const std::string& focus) -{ +void SidePanel::PlanetPanel::SetFocus(const std::string& focus) { const Planet* planet = GetPlanet(m_planet_id); if (!planet || !planet->OwnedBy(HumanClientApp::GetApp()->EmpireID())) return; @@ -1250,8 +1248,7 @@ new ChangeFocusOrder(HumanClientApp::GetApp()->EmpireID(), planet->ID(), focus))); } -bool SidePanel::PlanetPanel::InWindow(const GG::Pt& pt) const -{ +bool SidePanel::PlanetPanel::InWindow(const GG::Pt& pt) const { GG::Pt ul = UpperLeft(), lr = LowerRight(); if (!(ul <= pt && pt < lr)) return false; @@ -1283,15 +1280,13 @@ return true; } -void SidePanel::PlanetPanel::LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) -{ +void SidePanel::PlanetPanel::LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) { //std::cout << "SidePanel::PlanetPanel::LClick m_planet_id: " << m_planet_id << std::endl; if (!Disabled()) LClickedSignal(m_planet_id); } -void SidePanel::PlanetPanel::RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) -{ +void SidePanel::PlanetPanel::RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) { const Planet* planet = GetPlanet(m_planet_id); if (!planet || !planet->OwnedBy(HumanClientApp::GetApp()->EmpireID()) || !m_order_issuing_enabled) return; @@ -1323,8 +1318,7 @@ void SidePanel::PlanetPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) { ForwardEventToParent(); } -void SidePanel::PlanetPanel::Render() -{ +void SidePanel::PlanetPanel::Render() { GG::Pt ul = UpperLeft(), lr = LowerRight(); GG::Pt name_ul = m_planet_name->UpperLeft() - GG::Pt(GG::X(EDGE_PAD), GG::Y0); GG::Pt name_lr = GG::Pt(lr.x, m_planet_name->LowerRight().y); @@ -1416,8 +1410,7 @@ glEnable(GL_TEXTURE_2D); } -void SidePanel::PlanetPanel::Select(bool selected) -{ +void SidePanel::PlanetPanel::Select(bool selected) { if (m_selected != selected) { m_selected = selected; // TODO: consider setting text box colours? @@ -1472,8 +1465,7 @@ } } -void SidePanel::PlanetPanel::ClickColonize() -{ +void SidePanel::PlanetPanel::ClickColonize() { // order or cancel colonization, depending on whether it has previosuly // been ordered @@ -1515,8 +1507,7 @@ } } -void SidePanel::PlanetPanel::ClickInvade() -{ +void SidePanel::PlanetPanel::ClickInvade() { // order or cancel invasion, depending on whether it has previosuly // been ordered @@ -1558,8 +1549,7 @@ } } -void SidePanel::PlanetPanel::EnableOrderIssuing(bool enable/* = true*/) -{ +void SidePanel::PlanetPanel::EnableOrderIssuing(bool enable/* = true*/) { m_order_issuing_enabled = enable; m_colonize_button->Disable(!enable); @@ -1594,8 +1584,7 @@ SidePanel::PlanetPanelContainer::~PlanetPanelContainer() { delete m_vscroll; } -bool SidePanel::PlanetPanelContainer::InWindow(const GG::Pt& pt) const -{ +bool SidePanel::PlanetPanelContainer::InWindow(const GG::Pt& pt) const { // ensure pt is below top of container if (pt.y < UpperLeft().y) return false; @@ -1614,8 +1603,7 @@ return UpperLeft() + GG::Pt(GG::X(MaxPlanetDiameter()), GG::Y0) <= pt && pt < LowerRight(); } -void SidePanel::PlanetPanelContainer::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ +void SidePanel::PlanetPanelContainer::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) { if (m_vscroll && m_vscroll->Parent() == this) { const std::pair<int, int> initial_pos = m_vscroll->PosnRange(); if (move < 0) @@ -1628,20 +1616,16 @@ } void SidePanel::PlanetPanelContainer::LDrag(const GG::Pt& pt, const GG::Pt& move, GG::Flags<GG::ModKey> mod_keys) -{ - ForwardEventToParent(); -} +{ ForwardEventToParent(); } -int SidePanel::PlanetPanelContainer::ScrollPosition() const -{ +int SidePanel::PlanetPanelContainer::ScrollPosition() const { if (m_vscroll && m_vscroll->Parent() == this) return m_vscroll->PosnRange().first; else return 0; } -void SidePanel::PlanetPanelContainer::ScrollTo(int pos) -{ +void SidePanel::PlanetPanelContainer::ScrollTo(int pos) { if (m_vscroll && m_vscroll->Parent() == this) { const std::pair<int, int> initial_pos = m_vscroll->PosnRange(); m_vscroll->ScrollTo(pos); @@ -1650,8 +1634,7 @@ } } -void SidePanel::PlanetPanelContainer::Clear() -{ +void SidePanel::PlanetPanelContainer::Clear() { m_planet_panels.clear(); m_selected_planet_id = INVALID_OBJECT_ID; PlanetSelectedSignal(m_selected_planet_id); @@ -1660,8 +1643,7 @@ AttachChild(m_vscroll); } -void SidePanel::PlanetPanelContainer::SetPlanets(const std::vector<int>& planet_ids, StarType star_type) -{ +void SidePanel::PlanetPanelContainer::SetPlanets(const std::vector<int>& planet_ids, StarType star_type) { //std::cout << "SidePanel::PlanetPanelContainer::SetPlanets( size: " << planet_ids.size() << " )" << std::endl; int initial_selected_planet_panel = m_selected_planet_id; @@ -1692,12 +1674,9 @@ } void SidePanel::PlanetPanelContainer::DoPanelsLayout() -{ - DoPanelsLayout(m_planet_panels_top); // redo layout without moving panels -} +{ DoPanelsLayout(m_planet_panels_top); } -void SidePanel::PlanetPanelContainer::DoPanelsLayout(GG::Y top) -{ +void SidePanel::PlanetPanelContainer::DoPanelsLayout(GG::Y top) { if (top > 0) Logger().errorStream() << "SidePanel::PlanetPanelContainer::DoPanelsLaout passed positive top. It is expected to be 0 or negative only."; m_planet_panels_top = top; @@ -1738,8 +1717,7 @@ } } -void SidePanel::PlanetPanelContainer::DoLayout() -{ +void SidePanel::PlanetPanelContainer::DoLayout() { GG::Pt scroll_ul(Width() - ClientUI::ScrollWidth(), GG::Y0); //GG::Pt scroll_ul(ClientLowerRight().x - GG::X(ClientUI::ScrollWidth()), ClientUpperLeft().y); GG::Pt scroll_lr = scroll_ul + GG::Pt(GG::X(ClientUI::ScrollWidth()), Height()); @@ -1747,8 +1725,7 @@ DoPanelsLayout(); } -void SidePanel::PlanetPanelContainer::SelectPlanet(int planet_id) -{ +void SidePanel::PlanetPanelContainer::SelectPlanet(int planet_id) { //std::cout << "SidePanel::PlanetPanelContainer::SelectPlanet(" << planet_id << ")" << std::endl; if (planet_id != m_selected_planet_id && m_candidate_ids.find(planet_id) != m_candidate_ids.end()) { m_selected_planet_id = planet_id; @@ -1776,13 +1753,9 @@ } void SidePanel::PlanetPanelContainer::SetValidSelectionPredicate(const boost::shared_ptr<UniverseObjectVisitor>& visitor) -{ - //std::cout << "SidePanel::PlanetPanelContainer::SetValidSelectionPredicate" << std::endl; - m_valid_selection_predicate = visitor; -} +{ m_valid_selection_predicate = visitor; } -void SidePanel::PlanetPanelContainer::DisableNonSelectionCandidates() -{ +void SidePanel::PlanetPanelContainer::DisableNonSelectionCandidates() { //std::cout << "SidePanel::PlanetPanelContainer::DisableNonSelectionCandidates" << std::endl; m_candidate_ids.clear(); std::set<PlanetPanel*> disabled_panels; @@ -1818,14 +1791,12 @@ } } -void SidePanel::PlanetPanelContainer::PlanetPanelClicked(int planet_id) -{ - Logger().debugStream() << "SidePanel::PlanetPanelContainer::PlanetPanelClicked(" << planet_id << ")"; +void SidePanel::PlanetPanelContainer::PlanetPanelClicked(int planet_id) { + //Logger().debugStream() << "SidePanel::PlanetPanelContainer::PlanetPanelClicked(" << planet_id << ")"; PlanetSelectedSignal(planet_id); } -void SidePanel::PlanetPanelContainer::VScroll(int pos_top, int pos_bottom, int range_min, int range_max) -{ +void SidePanel::PlanetPanelContainer::VScroll(int pos_top, int pos_bottom, int range_min, int range_max) { if (pos_bottom > range_max) { // prevent scrolling beyond allowed max int extra = pos_bottom - range_max; @@ -1834,16 +1805,14 @@ DoPanelsLayout(GG::Y(-pos_top)); // scrolling bar down pos_top pixels causes the panels to move up that many pixels } -void SidePanel::PlanetPanelContainer::RefreshAllPlanetPanels() -{ +void SidePanel::PlanetPanelContainer::RefreshAllPlanetPanels() { //std::cout << "SidePanel::PlanetPanelContainer::RefreshAllPlanetPanels. selected planet id: " << m_selected_planet_id << std::endl; for (std::vector<PlanetPanel*>::iterator it = m_planet_panels.begin(); it != m_planet_panels.end(); ++it) (*it)->Refresh(); //std::cout << " ... after refreshing all planet panels: selected planet id: " << m_selected_planet_id << std::endl<< std::endl<< std::endl; } -void SidePanel::PlanetPanelContainer::SizeMove(const GG::Pt& ul, const GG::Pt& lr) -{ +void SidePanel::PlanetPanelContainer::SizeMove(const GG::Pt& ul, const GG::Pt& lr) { GG::Pt old_size = GG::Wnd::Size(); GG::Wnd::SizeMove(ul, lr); @@ -1852,8 +1821,7 @@ DoLayout(); } -void SidePanel::PlanetPanelContainer::EnableOrderIssuing(bool enable/* = true*/) -{ +void SidePanel::PlanetPanelContainer::EnableOrderIssuing(bool enable/* = true*/) { for (std::vector<PlanetPanel*>::iterator it = m_planet_panels.begin(); it != m_planet_panels.end(); ++it) { PlanetPanel* panel = *it; panel->EnableOrderIssuing(enable); @@ -2027,15 +1995,13 @@ glEnable(GL_TEXTURE_2D); } -void SidePanel::Update() -{ +void SidePanel::Update() { //std::cout << "SidePanel::Update" << std::endl; for (std::set<SidePanel*>::iterator it = s_side_panels.begin(); it != s_side_panels.end(); ++it) (*it)->UpdateImpl(); } -void SidePanel::UpdateImpl() -{ +void SidePanel::UpdateImpl() { //std::cout << "SidePanel::UpdateImpl" << std::endl; if (m_system_resource_summary) m_system_resource_summary->Update(); @@ -2043,10 +2009,7 @@ m_planet_panel_container->RefreshAllPlanetPanels(); } -void SidePanel::Refresh() -{ - //std::cout << "SidePanel::Refresh" << std::endl; - +void SidePanel::Refresh() { // disconnect any existing system and fleet signals for (std::set<boost::signals::connection>::iterator it = s_system_connections.begin(); it != s_system_connections.end(); ++it) it->disconnect(); @@ -2069,8 +2032,6 @@ // connect state changed and insertion signals for planets and fleets in system const System* system = GetSystem(s_system_id); - if (!system) - system = GetEmpireKnownSystem(s_system_id, HumanClientApp::GetApp()->EmpireID()); if (!system) { Logger().errorStream() << "SidePanel::Refresh couldn't get system with id " << s_system_id; return; @@ -2091,8 +2052,7 @@ s_system_connections.insert(GG::Connect(system->FleetRemovedSignal, &SidePanel::FleetRemoved)); } -void SidePanel::RefreshImpl() -{ +void SidePanel::RefreshImpl() { //std::cout << "SidePanel::RefreshImpl" << std::endl; Sound::TempUISoundDisabler sound_disabler; @@ -2248,8 +2208,7 @@ DoLayout(); } -void SidePanel::DoLayout() -{ +void SidePanel::DoLayout() { // left button GG::Pt ul(GG::X(MaxPlanetDiameter()) + 2*EDGE_PAD, GG::Y(EDGE_PAD)); GG::Pt lr(ul + GG::Pt(ButtonWidth(), ButtonHeight())); @@ -2283,12 +2242,10 @@ } } -GG::Pt SidePanel::ListRowSize() const { - return GG::Pt(m_system_name->Width() - ClientUI::ScrollWidth() - 5, m_system_name->Height()); -} +GG::Pt SidePanel::ListRowSize() const +{ return GG::Pt(m_system_name->Width() - ClientUI::ScrollWidth() - 5, m_system_name->Height()); } -void SidePanel::SizeMove(const GG::Pt& ul, const GG::Pt& lr) -{ +void SidePanel::SizeMove(const GG::Pt& ul, const GG::Pt& lr) { GG::Pt old_size = GG::Wnd::Size(); GG::Wnd::SizeMove(ul, lr); @@ -2297,8 +2254,7 @@ DoLayout(); } -void SidePanel::SystemSelectionChanged(GG::DropDownList::iterator it) -{ +void SidePanel::SystemSelectionChanged(GG::DropDownList::iterator it) { int system_id = INVALID_OBJECT_ID; if (it != m_system_name->end()) system_id = boost::polymorphic_downcast<const SystemRow*>(*it)->SystemID(); @@ -2306,8 +2262,7 @@ SystemSelectedSignal(system_id); } -void SidePanel::PrevButtonClicked() -{ +void SidePanel::PrevButtonClicked() { assert(!m_system_name->Empty()); GG::DropDownList::iterator selected = m_system_name->CurrentItem(); if (selected == m_system_name->begin()) @@ -2316,8 +2271,7 @@ SystemSelectionChanged(m_system_name->CurrentItem()); } -void SidePanel::NextButtonClicked() -{ +void SidePanel::NextButtonClicked() { assert(!m_system_name->Empty()); GG::DropDownList::iterator selected = m_system_name->CurrentItem(); if (++selected == m_system_name->end()) @@ -2326,23 +2280,20 @@ SystemSelectionChanged(m_system_name->CurrentItem()); } -void SidePanel::PlanetSelected(int planet_id) -{ +void SidePanel::PlanetSelected(int planet_id) { //std::cout << "SidePanel::PlanetSelected(" << planet_id << ")" << std::endl; if (SelectedPlanetID() != planet_id) PlanetSelectedSignal(planet_id); } -void SidePanel::FleetInserted(Fleet& fleet) -{ +void SidePanel::FleetInserted(Fleet& fleet) { //std::cout << "SidePanel::FleetInserted" << std::endl; s_fleet_state_change_signals[fleet.ID()].disconnect(); // in case already present s_fleet_state_change_signals[fleet.ID()] = GG::Connect(fleet.StateChangedSignal, &SidePanel::FleetStateChanged); SidePanel::Update(); } -void SidePanel::FleetRemoved(Fleet& fleet) -{ +void SidePanel::FleetRemoved(Fleet& fleet) { //std::cout << "SidePanel::FleetRemoved" << std::endl; std::map<int, boost::signals::connection>::iterator it = s_fleet_state_change_signals.find(fleet.ID()); if (it != s_fleet_state_change_signals.end()) { @@ -2353,46 +2304,36 @@ } void SidePanel::FleetStateChanged() -{ - //std::cout << "SidePanel::FleetStateChanged" << std::endl; - SidePanel::Update(); -} +{ SidePanel::Update(); } int SidePanel::SystemID() -{ - return s_system_id; -} +{ return s_system_id; } -int SidePanel::SelectedPlanetID() const -{ +int SidePanel::SelectedPlanetID() const { if (m_planet_panel_container) return m_planet_panel_container->SelectedPlanetID(); else return INVALID_OBJECT_ID; } -bool SidePanel::PlanetSelectable(int id) const -{ +bool SidePanel::PlanetSelectable(int id) const { if (!m_planet_panel_container) return false; const std::set<int>& candidate_ids = m_planet_panel_container->SelectionCandidates(); return (candidate_ids.find(id) != candidate_ids.end()); } -void SidePanel::SelectPlanet(int planet_id) -{ +void SidePanel::SelectPlanet(int planet_id) { for (std::set<SidePanel*>::iterator it = s_side_panels.begin(); it != s_side_panels.end(); ++it) (*it)->SelectPlanetImpl(planet_id); } -void SidePanel::SelectPlanetImpl(int planet_id) -{ +void SidePanel::SelectPlanetImpl(int planet_id) { //std::cout << "SidePanel::SelectPlanetImpl(" << planet_id << ")" << std::endl; m_planet_panel_container->SelectPlanet(planet_id); } -void SidePanel::SetSystem(int system_id) -{ +void SidePanel::SetSystem(int system_id) { if (s_system_id == system_id) return; @@ -2406,12 +2347,7 @@ } void SidePanel::EnableSelection(bool enable/* = true*/) -{ - //std::cout << "SidePanel::EnableSelection(" << enable << ")" << std::endl; - m_selection_enabled = enable; -} +{ m_selection_enabled = enable; } void SidePanel::EnableOrderIssuing(bool enable/* = true*/) -{ - m_planet_panel_container->EnableOrderIssuing(enable); -} +{ m_planet_panel_container->EnableOrderIssuing(enable); } |
From: <geo...@us...> - 2012-03-12 01:34:28
|
Revision: 4718 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4718&view=rev Author: geoffthemedio Date: 2012-03-12 01:34:22 +0000 (Mon, 12 Mar 2012) Log Message: ----------- Implemented rendering of planet overlay textures (on top of base texture, optionally transparent). Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2012-03-12 00:01:59 UTC (rev 4717) +++ trunk/FreeOrion/UI/SidePanel.cpp 2012-03-12 01:34:22 UTC (rev 4718) @@ -229,9 +229,9 @@ //} GLfloat ambient_v[] = {ambient.r / 255.0f, ambient.g / 255.0f, ambient.b / 255.0f, ambient.a / 255.0f}; - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient_v); + glMaterialfv(GL_FRONT, GL_AMBIENT, ambient_v); GLfloat diffuse_v[] = {diffuse.r / 255.0f, diffuse.g / 255.0f, diffuse.b / 255.0f, diffuse.a / 255.0f}; - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse_v); + glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse_v); gluQuadricTexture(quad, texture ? GL_TRUE : GL_FALSE); gluQuadricNormals(quad, GLU_SMOOTH); @@ -298,6 +298,7 @@ } void RenderPlanet(const GG::Pt& center, int diameter, boost::shared_ptr<GG::Texture> texture, + boost::shared_ptr<GG::Texture> overlay_texture, double initial_rotation, double RPM, double axial_tilt, double shininess, StarType star_type) { @@ -338,6 +339,15 @@ GG::Clr diffuse = GG::FloatClr(intensity, intensity, intensity, 1.0f); RenderSphere(diameter / 2, ambient, diffuse, GG::CLR_WHITE, shininess, texture); + if (overlay_texture) { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glCullFace(GL_FRONT); + glEnable(GL_CULL_FACE); + RenderSphere(diameter / 2 + 0.1, ambient, diffuse, GG::CLR_WHITE, 0.0, overlay_texture); + glDisable(GL_CULL_FACE); + glDisable(GL_BLEND); + } glPopAttrib(); @@ -580,7 +590,7 @@ virtual void Render() { GG::Pt ul = UpperLeft(), lr = LowerRight(); // render rotating base planet texture - RenderPlanet(ul + GG::Pt(Width() / 2, Height() / 2), Value(Width()), m_surface_texture, + RenderPlanet(ul + GG::Pt(Width() / 2, Height() / 2), Value(Width()), m_surface_texture, m_overlay_texture, m_initial_rotation, m_rpm, m_axial_tilt, m_shininess, m_star_type); // overlay atmosphere texture (non-animated) @@ -640,6 +650,9 @@ } } + if (!planet->SurfaceTexture().empty()) + m_overlay_texture = ClientUI::GetTexture(ClientUI::ArtDir() / planet->SurfaceTexture(), true); + Resize(GG::Pt(GG::X(PlanetDiameter(planet->Size())), GG::Y(PlanetDiameter(planet->Size())))); } @@ -651,7 +664,7 @@ Visibility m_visibility; boost::shared_ptr<GG::Texture> m_surface_texture; double m_shininess; - // TODO: Extra texture? + boost::shared_ptr<GG::Texture> m_overlay_texture; boost::shared_ptr<GG::Texture> m_atmosphere_texture; int m_atmosphere_alpha; GG::Rect m_atmosphere_planet_rect; |