Source code for enaml.widgets.dock_pane

#------------------------------------------------------------------------------
# Copyright (c) 2012, Enthought, Inc.
# All rights reserved.
#------------------------------------------------------------------------------
from traits.api import List, Enum, Unicode, Bool,  Property, cached_property

from enaml.core.trait_types import EnamlEvent

from .container import Container
from .widget import Widget


[docs]class DockPane(Widget): """ A widget which can be docked in a MainWindow. A DockPane is a widget which can be docked in designated dock areas in a MainWindow. It can have at most a single child widget which is an instance of Container. """ #: The title to use in the title bar. title = Unicode #: Whether or not the title bar is visible. title_bar_visible = Bool(True) #: The orientation of the title bar. title_bar_orientation = Enum('horizontal', 'vertical') #: Whether or not the dock pane is closable via a close button. closable = Bool(True) #: Whether or not the dock pane is movable by the user. movable = Bool(True) #: Whether or not the dock can be floated as a separate window. floatable = Bool(True) #: A boolean indicating whether or not the dock pane is floating. floating = Bool(False) #: The dock area in the MainWindow where the pane is docked. dock_area = Enum('left', 'right', 'top', 'bottom') #: The dock areas in the MainWindow where the pane can be docked #: by the user. Note that this does not preclude the pane from #: being docked programmatically via the 'dock_area' attribute. allowed_dock_areas = List( Enum('left', 'right', 'top', 'bottom', 'all'), value=['all'], ) #: A read only property which returns the pane's dock widget. dock_widget = Property(depends_on='children') #: An event fired when the user closes the pane by clicking on the #: dock pane's close button. closed = EnamlEvent #-------------------------------------------------------------------------- # Initialization #--------------------------------------------------------------------------
[docs] def snapshot(self): """ Returns the snapshot dict for the DockPane. """ snap = super(DockPane, self).snapshot() snap['title'] = self.title snap['title_bar_visible'] = self.title_bar_visible snap['title_bar_orientation'] = self.title_bar_orientation snap['closable'] = self.closable snap['movable'] = self.movable snap['floatable'] = self.floatable snap['floating'] = self.floating snap['dock_area'] = self.dock_area snap['allowed_dock_areas'] = self.allowed_dock_areas return snap
def bind(self): super(DockPane, self).bind() attrs = ( 'title', 'title_bar_visible', 'title_bar_orientation', 'closable', 'movable', 'floatable', 'floating', 'dock_area', 'allowed_dock_areas' ) self.publish_attributes(*attrs) #-------------------------------------------------------------------------- # Private API #-------------------------------------------------------------------------- @cached_property def _get_dock_widget(self): """ The getter for the 'dock_widget' property. Returns ------- result : Container or None The dock widget for the DockPane, or None if not provided. """ widget = None for child in self.children: if isinstance(child, Container): widget = child return widget #-------------------------------------------------------------------------- # Message Handling #--------------------------------------------------------------------------
[docs] def on_action_closed(self, content): """ Handle the 'closed' action from the client widget. """ self.set_guarded(visible=False) self.closed()
[docs] def on_action_floated(self, content): """ Handle the 'floated' action from the client widget. """ self.set_guarded(floating=True)
[docs] def on_action_docked(self, content): """ Handle the 'docked' action from the client widget. """ self.set_guarded(floating=False) self.set_guarded(dock_area=content['dock_area']) #-------------------------------------------------------------------------- # Public API #--------------------------------------------------------------------------
[docs] def open(self): """ Open the dock pane in the MainWindow. Calling this method will also set the pane visibility to True. """ self.set_guarded(visible=True) self.send_action('open', {})
[docs] def close(self): """ Close the dock pane in the MainWindow. Calling this method will set the pane visibility to False. """ self.set_guarded(visible=False) self.send_action('close', {})