File: DockablePanel.h

package info (click to toggle)
darkradiant 3.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 41,080 kB
  • sloc: cpp: 264,743; ansic: 10,659; python: 1,852; xml: 1,650; sh: 92; makefile: 21
file content (56 lines) | stat: -rw-r--r-- 1,122 bytes parent folder | download | duplicates (2)
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