Skip to content

Commit

Permalink
#6131: Handle event subscriptions in LayerControlPanel
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Oct 18, 2022
1 parent 2bc1a60 commit e367238
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 49 deletions.
69 changes: 28 additions & 41 deletions radiant/ui/layers/LayerControlPanel.cpp
Expand Up @@ -38,7 +38,31 @@ LayerControlPanel::LayerControlPanel(wxWindow* parent) :
{
populateWindow();

Bind(wxEVT_IDLE, [&](wxIdleEvent&) { onIdle(); });
_selectionChangedSignal = GlobalSelectionSystem().signal_selectionChanged().connect([this](const ISelectable&)
{
_rescanSelectionOnIdle = true;
requestIdleCallback();
});

connectToMapRoot();

_mapEventSignal = GlobalMapModule().signal_mapEvent().connect(
sigc::mem_fun(this, &LayerControlPanel::onMapEvent)
);

// Re-populate the dialog
queueRefresh();
}

LayerControlPanel::~LayerControlPanel()
{
disconnectFromMapRoot();

_mapEventSignal.disconnect();
_selectionChangedSignal.disconnect();
_refreshTreeOnIdle = false;
_updateTreeOnIdle = false;
_rescanSelectionOnIdle = false;
}

void LayerControlPanel::populateWindow()
Expand Down Expand Up @@ -124,12 +148,14 @@ void LayerControlPanel::queueRefresh()
{
_refreshTreeOnIdle = true;
_rescanSelectionOnIdle = true;
requestIdleCallback();
}

void LayerControlPanel::queueUpdate()
{
_updateTreeOnIdle = true;
_rescanSelectionOnIdle = true;
requestIdleCallback();
}

class LayerControlPanel::TreePopulator
Expand Down Expand Up @@ -372,46 +398,6 @@ void LayerControlPanel::onIdle()
}
}

void LayerControlPanel::onMainFrameShuttingDown()
{
// Hide the window and save its state
if (IsShownOnScreen())
{
Hide();
}

// Destroy the window
SendDestroyEvent();
}

void LayerControlPanel::_preShow()
{
_selectionChangedSignal = GlobalSelectionSystem().signal_selectionChanged().connect([this](const ISelectable&)
{
_rescanSelectionOnIdle = true;
});

connectToMapRoot();

_mapEventSignal = GlobalMapModule().signal_mapEvent().connect(
sigc::mem_fun(this, &LayerControlPanel::onMapEvent)
);

// Re-populate the dialog
queueRefresh();
}

void LayerControlPanel::_postHide()
{
disconnectFromMapRoot();

_mapEventSignal.disconnect();
_selectionChangedSignal.disconnect();
_refreshTreeOnIdle = false;
_updateTreeOnIdle = false;
_rescanSelectionOnIdle = false;
}

void LayerControlPanel::connectToMapRoot()
{
// Always disconnect first
Expand All @@ -437,6 +423,7 @@ void LayerControlPanel::connectToMapRoot()
_nodeLayerMembershipChangedSignal = layerSystem.signal_nodeMembershipChanged().connect([this]()
{
_rescanSelectionOnIdle = true;
requestIdleCallback();
});
}
}
Expand Down
15 changes: 7 additions & 8 deletions radiant/ui/layers/LayerControlPanel.h
Expand Up @@ -7,6 +7,7 @@
#include <sigc++/connection.h>

#include "wxutil/dataview/TreeModel.h"
#include "wxutil/event/SingleIdleCallback.h"

namespace wxutil
{
Expand All @@ -22,7 +23,8 @@ namespace ui
{

class LayerControlPanel :
public wxPanel
public wxPanel,
public wxutil::SingleIdleCallback
{
private:
struct TreeColumns :
Expand Down Expand Up @@ -67,14 +69,12 @@ class LayerControlPanel :

public:
LayerControlPanel(wxWindow* parent);
~LayerControlPanel() override;

private:
void onMainFrameShuttingDown();

// TransientWindow events
void _preShow();
void _postHide();
protected:
void onIdle() override;

private:
// Calls refresh() on the next idle event
void queueRefresh();

Expand All @@ -99,7 +99,6 @@ class LayerControlPanel :
void createButtons();

void setVisibilityOfAllLayers(bool visible);
void onIdle();

void onMapEvent(IMap::MapEvent ev);

Expand Down

0 comments on commit e367238

Please sign in to comment.