Source code for enaml.widgets.splitter

#------------------------------------------------------------------------------
# Copyright (c) 2013, Nucleic Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
#------------------------------------------------------------------------------
from atom.api import Bool, Enum, Typed, ForwardTyped, set_default

from enaml.core.declarative import d_, observe

from .constraints_widget import ConstraintsWidget, ProxyConstraintsWidget
from .split_item import SplitItem


class ProxySplitter(ProxyConstraintsWidget):
    """ The abstract definition of a proxy Splitter object.

    """
    #: A reference to the Splitter declaration.
    declaration = ForwardTyped(lambda: Splitter)

    def set_orientation(self, orientation):
        raise NotImplementedError

    def set_live_drag(self, live_drag):
        raise NotImplementedError


[docs]class Splitter(ConstraintsWidget): """ A widget which displays its children in separate resizable compartments 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 = d_(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 = d_(Bool(True)) #: A splitter expands freely in height and width by default. hug_width = set_default('ignore') hug_height = set_default('ignore') #: A reference to the ProxySplitter object. proxy = Typed(ProxySplitter)
[docs] def split_items(self): """ Get the split item children defined on the splitter. """ return [c for c in self.children if isinstance(c, SplitItem)]
#-------------------------------------------------------------------------- # Observers #-------------------------------------------------------------------------- @observe('orientation', 'live_drag') def _update_proxy(self, change): """ An observer which sends state change to the proxy. """ # The superclass handler implementation is sufficient. super(Splitter, self)._update_proxy(change)