Source code for enaml.widgets.splitter
#------------------------------------------------------------------------------
# Copyright (c) 2011, Enthought, Inc.
# All rights reserved.
#------------------------------------------------------------------------------
from traits.api import Bool, Enum, Property, cached_property
from .constraints_widget import ConstraintsWidget
from .split_item import SplitItem
[docs]class Splitter(ConstraintsWidget):
""" A widget which displays its children in separate resizable
compartements that are connected with a resizing bar.
A Splitter can have an arbitrary number of Container children.
"""
#: The orientation of the Splitter. 'horizontal' means the children
#: are laid out left to right, 'vertical' means top to bottom.
orientation = Enum('horizontal', 'vertical')
#: Whether the child widgets resize as a splitter is being dragged
#: (True), or if a simple indicator is drawn until the drag handle
#: is released (False). The default is True.
live_drag = Bool(True)
#: A read only property which returns the split items being managed
#: by the splitter.
split_items = Property(depends_on='children')
#: How strongly a component hugs it's contents' width. A Splitter
#: container ignores its width hug by default, so it expands freely
#: in width.
hug_width = 'ignore'
#: How strongly a component hugs it's contents' height. A Splitter
#: container ignores its height hug by default, so it expands freely
#: in height.
hug_height = 'ignore'
#--------------------------------------------------------------------------
# Initialization
#--------------------------------------------------------------------------
[docs] def snapshot(self):
""" Return the dict of creation attributes for the control.
"""
snap = super(Splitter, self).snapshot()
snap['orientation'] = self.orientation
snap['live_drag'] = self.live_drag
return snap
[docs] def bind(self):
""" Bind the change handlers for the widget.
"""
super(Splitter, self).bind()
self.publish_attributes('orientation', 'live_drag')
#--------------------------------------------------------------------------
# Private API
#--------------------------------------------------------------------------
@cached_property
def _get_split_items(self):
""" The getter for the 'split_items' property.
Returns
-------
result : tuple
The tuple of SplitItem instances defined as children of
this Splitter.
"""
isinst = isinstance
items = (child for child in self.children if isinst(child, SplitItem))
return tuple(items)