File: workbench_dock_window.py

package info (click to toggle)
python-pyface 8.0.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 13,944 kB
  • sloc: python: 54,107; makefile: 82
file content (143 lines) | stat: -rwxr-xr-x 4,052 bytes parent folder | download
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# (C) Copyright 2005-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!


""" Base class for workbench dock windows.
"""


import logging


from pyface.dock.api import DockGroup, DockRegion, DockWindow


logger = logging.getLogger(__name__)


class WorkbenchDockWindow(DockWindow):
    """ Base class for workbench dock windows.

    This class just adds a few useful methods to the standard 'DockWindow'
    interface. Hopefully at some stage these can be part of that API too!

    """

    # ------------------------------------------------------------------------
    # Protected 'DockWindow' interface.
    # ------------------------------------------------------------------------

    def _right_up(self, event):
        """ Handles the right mouse button being released.

        We override this to stop the default dock window context menus from
        appearing.

        """

        pass

    # ------------------------------------------------------------------------
    # 'WorkbenchDockWindow' interface.
    # ------------------------------------------------------------------------

    def activate_control(self, id):
        """ Activates the dock control with the specified Id.

        Does nothing if no such dock control exists (well, it *does* write
        a debug message to the logger).

        """

        control = self.get_control(id)
        if control is not None:
            logger.debug("activating control <%s>", id)
            control.activate()

        else:
            logger.debug("no control <%s> to activate", id)

    def close_control(self, id):
        """ Closes the dock control with the specified Id.

        Does nothing if no such dock control exists (well, it *does* write
        a debug message to the logger).

        """

        control = self.get_control(id)
        if control is not None:
            logger.debug("closing control <%s>", id)
            control.close()

        else:
            logger.debug("no control <%s> to close", id)

    def get_control(self, id, visible_only=True):
        """ Returns the dock control with the specified Id.

        Returns None if no such dock control exists.

        """

        for control in self.get_controls(visible_only):
            if control.id == id:
                break

        else:
            control = None

        return control

    def get_controls(self, visible_only=True):
        """ Returns all of the dock controls in the window. """

        sizer = self.control.GetSizer()
        section = sizer.GetContents()

        return section.get_controls(visible_only=visible_only)

    def get_regions(self, group):
        """ Returns all dock regions in a dock group (recursively). """

        regions = []
        for item in group.contents:
            if isinstance(item, DockRegion):
                regions.append(item)

            if isinstance(item, DockGroup):
                regions.extend(self.get_regions(item))

        return regions

    def get_structure(self):
        """ Returns the window structure (minus the content). """

        sizer = self.control.GetSizer()

        return sizer.GetStructure()

    def reset_regions(self):
        """ Activates the first dock control in every region. """

        sizer = self.control.GetSizer()
        section = sizer.GetContents()

        for region in self.get_regions(section):
            if len(region.contents) > 0:
                region.contents[0].activate(layout=False)

    def set_structure(self, structure, handler=None):
        """ Sets the window structure. """

        sizer = self.control.GetSizer()
        sizer.SetStructure(self.control.GetParent(), structure, handler)

        return