Source code for enaml.widgets.notebook

#------------------------------------------------------------------------------
# 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 (
    Enum, Bool, Typed, ForwardTyped, Str, set_default
)

from enaml.core.declarative import d_, observe

from .constraints_widget import ConstraintsWidget, ProxyConstraintsWidget
from .page import Page


class ProxyNotebook(ProxyConstraintsWidget):
    """ The abstract definition of a proxy Notebook object.

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

    def set_tab_style(self, style):
        raise NotImplementedError

    def set_tab_position(self, position):
        raise NotImplementedError

    def set_tabs_closable(self, closable):
        raise NotImplementedError

    def set_tabs_movable(self, movable):
        raise NotImplementedError

    def set_selected_tab(self, name):
        raise NotImplementedError

    def set_size_hint_mode(self, mode):
        raise NotImplementedError


[docs] class Notebook(ConstraintsWidget): """ A component which displays its children as tabbed pages. """ #: The style of tabs to use in the notebook. Preferences style #: tabs are appropriate for configuration dialogs and the like. #: Document style tabs are appropriate for multi-page editing #: in code editors and the like. tab_style = d_(Enum('document', 'preferences')) #: The position of tabs in the notebook. tab_position = d_(Enum('top', 'bottom', 'left', 'right')) #: Whether or not the tabs in the notebook should be closable. tabs_closable = d_(Bool(True)) #: Whether or not the tabs in the notebook should be movable. tabs_movable = d_(Bool(True)) #: The object name for the selected tab in the notebook. selected_tab = d_(Str()) #: The size hint mode for the stack. The default is 'union' and #: means that the size hint of the notebook is the union of all #: the tab size hints. 'current' means the size hint of the #: notebook will be the size hint of the current tab. size_hint_mode = d_(Enum('union', 'current')) #: A notebook expands freely in height and width by default. hug_width = set_default('ignore') hug_height = set_default('ignore') #: A reference to the ProxyNotebook object. proxy = Typed(ProxyNotebook)
[docs] def pages(self): """ Get the Page children defined on the notebook. """ return [c for c in self.children if isinstance(c, Page)]
#-------------------------------------------------------------------------- # Observers #-------------------------------------------------------------------------- @observe('tab_style', 'tab_position', 'tabs_closable', 'tabs_movable', 'selected_tab', 'size_hint_mode') def _update_proxy(self, change): """ Send the state change to the proxy. """ # The superclass implementation is sufficient. super(Notebook, self)._update_proxy(change)