1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#pragma once
#include <wx/panel.h>
namespace wxutil
{
/**
* Base class of all panels that can either be floating or docked to the main area.
* Examples: XY Views, Light Inspector, Media Browser.
*
* Each panel can be active or inactive. Inactive panels should not react to map events
* not to unnecessarily waste processing time.
* - Docked panels are always active.
* - Tabbed panels are active if their tab is selected.
* - Floating panels are active if they're not hidden.
*/
class DockablePanel: public wxPanel
{
bool _active = false;
public:
DockablePanel(wxWindow* parent): wxPanel(parent)
{}
bool panelIsActive()
{
return _active;
}
// Ensure this panel is active.
void activatePanel()
{
if (_active) return;
_active = true;
onPanelActivated();
}
// Set this panel to inactive.
void deactivatePanel()
{
if (!_active) return;
_active = false;
onPanelDeactivated();
}
protected:
virtual void onPanelActivated()
{}
virtual void onPanelDeactivated()
{}
};
} // namespace
|