Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Double clicking planets #194

Merged
merged 1 commit into from Jul 16, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
19 changes: 19 additions & 0 deletions UI/MapWnd.cpp
Expand Up @@ -1103,6 +1103,7 @@ MapWnd::MapWnd() :

GG::Connect(SidePanel::SystemSelectedSignal, &MapWnd::SelectSystem, this);
GG::Connect(SidePanel::PlanetSelectedSignal, &MapWnd::SelectPlanet, this);
GG::Connect(SidePanel::PlanetDoubleClickedSignal, &MapWnd::PlanetDoubleClicked, this);
GG::Connect(SidePanel::PlanetRightClickedSignal, &MapWnd::PlanetRightClicked, this);
GG::Connect(SidePanel::BuildingRightClickedSignal, &MapWnd::BuildingRightClicked, this);

Expand Down Expand Up @@ -4150,6 +4151,24 @@ void MapWnd::MouseEnteringSystem(int system_id, GG::Flags< GG::ModKey > mod_keys
void MapWnd::MouseLeavingSystem(int system_id)
{ MouseEnteringSystem(INVALID_OBJECT_ID, GG::Flags<GG::ModKey>()); }

void MapWnd::PlanetDoubleClicked(int planet_id) {
if (planet_id == INVALID_OBJECT_ID)
return;

// retrieve system_id from planet_id
TemporaryPtr<const Planet> planet = GetPlanet(planet_id);
if (!planet)
return;

// open production screen
if (!m_in_production_view_mode) {
if (!m_production_wnd->Visible())
ToggleProduction();
CenterOnObject(planet->SystemID());
m_production_wnd->SelectSystem(planet->SystemID());
}
}

void MapWnd::PlanetRightClicked(int planet_id) {
if (planet_id == INVALID_OBJECT_ID)
return;
Expand Down
1 change: 1 addition & 0 deletions UI/MapWnd.h
Expand Up @@ -264,6 +264,7 @@ class MapWnd : public GG::Wnd {
void MouseEnteringSystem(int system_id, GG::Flags< GG::ModKey > mod_keys);
void MouseLeavingSystem(int system_id);

void PlanetDoubleClicked(int planet_id);
void PlanetRightClicked(int planet_id);
void BuildingRightClicked(int building_id);

Expand Down
29 changes: 22 additions & 7 deletions UI/SidePanel.cpp
Expand Up @@ -472,6 +472,7 @@ class SidePanel::PlanetPanel : public GG::Control {

virtual void Render();
virtual void LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys);
virtual void LDoubleClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys);
virtual void RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys);
virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys);

Expand All @@ -487,6 +488,10 @@ class SidePanel::PlanetPanel : public GG::Control {
* returns the id of the clicked planet */
mutable boost::signals2::signal<void (int)> LeftClickedSignal;

/** emitted when the planet is left double clicked by the user.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the difference between LeftDoubleClickedSignal and PlanetLeftDoubleClickedSignal?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LDCS is emitted by the PlanetPanel, PLDCS is emitted by the PlanetPanelContainer. This is how it is handled with (single) left as well as right-clicking. My understanding is that the signal gets passed down from PlanetPanel to PlanetPanelContainer to SidePanel, so that every class is notified of the click-event.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, OK. Didn't notice these two additions were in separate classes.

* returns id of the clicked planet */
mutable boost::signals2::signal<void (int)> LeftDoubleClickedSignal;

/** emitted when the planet panel is right clicked by the user.
* returns the id of the clicked planet */
mutable boost::signals2::signal<void (int)> RightClickedSignal;
Expand Down Expand Up @@ -572,6 +577,9 @@ class SidePanel::PlanetPanelContainer : public GG::Wnd {
/** emitted when an enabled planet panel is clicked by the user */
mutable boost::signals2::signal<void (int)> PlanetSelectedSignal;

/** emitted when a planet panel is left-double-clicked*/
mutable boost::signals2::signal<void (int)> PlanetLeftDoubleClickedSignal;

/** emitted when a planet panel is right-clicked */
mutable boost::signals2::signal<void (int)> PlanetRightClickedSignal;

Expand Down Expand Up @@ -1811,6 +1819,11 @@ void SidePanel::PlanetPanel::LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_
LeftClickedSignal(m_planet_id);
}

void SidePanel::PlanetPanel::LDoubleClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) {
if (!Disabled())
LeftDoubleClickedSignal(m_planet_id);
}

void SidePanel::PlanetPanel::RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) {
int client_empire_id = HumanClientApp::GetApp()->EmpireID();

Expand Down Expand Up @@ -2391,6 +2404,7 @@ void SidePanel::PlanetPanelContainer::SetPlanets(const std::vector<int>& planet_
AttachChild(planet_panel);
m_planet_panels.push_back(planet_panel);
GG::Connect(m_planet_panels.back()->LeftClickedSignal, &SidePanel::PlanetPanelContainer::PlanetLeftClicked, this);
GG::Connect(m_planet_panels.back()->LeftDoubleClickedSignal, PlanetLeftDoubleClickedSignal);
GG::Connect(m_planet_panels.back()->RightClickedSignal, PlanetRightClickedSignal);
GG::Connect(m_planet_panels.back()->BuildingRightClickedSignal, BuildingRightClickedSignal);
GG::Connect(m_planet_panels.back()->ResizedSignal, &SidePanel::PlanetPanelContainer::DoPanelsLayout, this);
Expand Down Expand Up @@ -2572,6 +2586,7 @@ std::map<int, boost::signals2::connection> SidePanel::s_fleet_state_change_signa
boost::signals2::signal<void ()> SidePanel::ResourceCenterChangedSignal;
boost::signals2::signal<void (int)> SidePanel::PlanetSelectedSignal;
boost::signals2::signal<void (int)> SidePanel::PlanetRightClickedSignal;
boost::signals2::signal<void (int)> SidePanel::PlanetDoubleClickedSignal;
boost::signals2::signal<void (int)> SidePanel::BuildingRightClickedSignal;
boost::signals2::signal<void (int)> SidePanel::SystemSelectedSignal;

Expand Down Expand Up @@ -2627,13 +2642,13 @@ SidePanel::SidePanel(GG::X x, GG::Y y, GG::Y h) :
m_system_resource_summary = new MultiIconValueIndicator(Width() - EDGE_PAD*2);
AttachChild(m_system_resource_summary);


GG::Connect(m_system_name->SelChangedSignal, &SidePanel::SystemSelectionChanged, this);
GG::Connect(m_button_prev->LeftClickedSignal, &SidePanel::PrevButtonClicked, this);
GG::Connect(m_button_next->LeftClickedSignal, &SidePanel::NextButtonClicked, this);
GG::Connect(m_planet_panel_container->PlanetSelectedSignal, &SidePanel::PlanetSelected, this);
GG::Connect(m_planet_panel_container->PlanetRightClickedSignal, PlanetRightClickedSignal);
GG::Connect(m_planet_panel_container->BuildingRightClickedSignal, BuildingRightClickedSignal);
GG::Connect(m_system_name->SelChangedSignal, &SidePanel::SystemSelectionChanged, this);
GG::Connect(m_button_prev->LeftClickedSignal, &SidePanel::PrevButtonClicked, this);
GG::Connect(m_button_next->LeftClickedSignal, &SidePanel::NextButtonClicked, this);
GG::Connect(m_planet_panel_container->PlanetSelectedSignal, &SidePanel::PlanetSelected, this);
GG::Connect(m_planet_panel_container->PlanetLeftDoubleClickedSignal, PlanetDoubleClickedSignal);
GG::Connect(m_planet_panel_container->PlanetRightClickedSignal, PlanetRightClickedSignal);
GG::Connect(m_planet_panel_container->BuildingRightClickedSignal, BuildingRightClickedSignal);

SetMinSize(GG::Pt(GG::X(MaxPlanetDiameter() + BORDER_LEFT + BORDER_RIGHT + 120),
PLANET_PANEL_TOP + GG::Y(MaxPlanetDiameter())));
Expand Down
3 changes: 3 additions & 0 deletions UI/SidePanel.h
Expand Up @@ -87,6 +87,9 @@ class SidePanel : public CUIWnd {
* focus is changed */
static boost::signals2::signal<void ()> ResourceCenterChangedSignal;

/** emitted when a planet is left double clicked*/
static boost::signals2::signal<void (int)> PlanetDoubleClickedSignal;

/** emitted when a planet is right clicked */
static boost::signals2::signal<void (int)> PlanetRightClickedSignal;

Expand Down