Source code for enaml.widgets.stack

#  Copyright (c) 2012, Enthought, Inc.
#  All rights reserved.
from traits.api import Dict, Int, Property, cached_property

from .constraints_widget import ConstraintsWidget
from .stack_item import StackItem

[docs]class Stack(ConstraintsWidget): """ A component which displays its children as a stack of widgets, only one of which is visible at a time. """ #: The index of the visible widget in the stack. The widget itself #: does not provide a means to changing this index. That control #: must be supplied externally. If the given index falls outside of #: the range of stack items, no widget will be visible. index = Int(0) #: The transition to use when change between stack items. #: XXX Document the supported transitions. transition = Dict #: A read only property which returns the stack's StackItems stack_items = Property(depends_on='children') #-------------------------------------------------------------------------- # Initialization #--------------------------------------------------------------------------
[docs] def snapshot(self): """ Returns the snapshot for the control. """ snap = super(Stack, self).snapshot() snap['index'] = self.index snap['transition'] = self.transition return snap
[docs] def bind(self): """ Bind the change handlers for the control. """ super(Stack, self).bind() self.publish_attributes('index', 'transition') #-------------------------------------------------------------------------- # Message Handling #--------------------------------------------------------------------------
[docs] def on_action_index_changed(self, content): """ Handle the `index_changed` action from the client widget. """ with self.loopback_guard('index'): self.index = content['index'] #-------------------------------------------------------------------------- # Private API #--------------------------------------------------------------------------
@cached_property def _get_stack_items(self): """ The getter for the 'stack_items' property. Returns ------- result : tuple The tuple of StackItem instances defined as children of this Stack. """ isinst = isinstance items = (child for child in self.children if isinst(child, StackItem)) return tuple(items)