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
|