Source code for enaml.widgets.combo_box

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

from .control import Control


[docs]class ComboBox(Control): """ A drop-down list from which one item can be selected at a time. Use a combo box to select a single item from a collection of items. """ #: The unicode strings to display in the combo box. items = List(Unicode) #: The integer index of the currently selected item. If the given #: index falls outside of the range of items, the item will be #: deselected. index = Int(-1) #: Whether the text in the combo box can be edited by the user. editable = Bool(False) #: A readonly property that will return the currently selected #: item. If the index falls out of range, the selected item will #: be the empty string. selected_item = Property(Unicode, depends_on=['index', 'items[]']) #: How strongly a component hugs it's contents' width. ComboBoxes #: hug width weakly, by default. hug_width = 'weak' #-------------------------------------------------------------------------- # Initialization #--------------------------------------------------------------------------
[docs] def snapshot(self): """ Returns the dict of creation attributes for the combo box. """ snap = super(ComboBox, self).snapshot() snap['items'] = self.items snap['index'] = self.index snap['editable'] = self.editable return snap
[docs] def bind(self): """ A method called after initialization which allows the widget to bind any event handlers necessary. """ super(ComboBox, self).bind() self.publish_attributes('index', 'editable') self.on_trait_change(self._send_items, 'items, items_items')
def _send_items(self): """ Send the 'set_items' action to the client widget. """ content = {'items': self.items} self.send_action('set_items', content) #-------------------------------------------------------------------------- # Message Handling #--------------------------------------------------------------------------
[docs] def on_action_index_changed(self, content): """ The message handler for the 'index_changed' action from the client widget. The content will contain the selected 'index'. """ index = content['index'] self.set_guarded(index=index) #-------------------------------------------------------------------------- # Property Handlers #--------------------------------------------------------------------------
@cached_property def _get_selected_item(self): """ The getter for the `selected_item` property. """ items = self.items idx = self.index if idx < 0 or idx >= len(items): return u'' return items[idx]