Source code for pyface.i_layout_widget

# (C) Copyright 2005-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!

from traits.api import HasTraits, Int, Tuple

from pyface.i_layout_item import ILayoutItem, Size, SizePolicy
from pyface.i_widget import IWidget


[docs]class ILayoutWidget(IWidget, ILayoutItem): """ Interface for widgets that can participate in layout. Most widgets implement ILayoutWidget, but widgets like top-level windows, menus, toolbars, etc. do not. """ pass
[docs]class MLayoutWidget(HasTraits): """ A mixin for Widgets that can participate in layouts. Most widgets implement ILayoutWidget, but widgets like top-level windows, menus, toolbars, etc. do not. """ #: The minimum size that the widget can take. minimum_size = Size #: The maximum size that the widget can take. maximum_size = Size #: Weight factor used to distribute extra space between widgets. stretch = Tuple(Int, Int) #: How the widget should behave when more space is available. size_policy = Tuple(SizePolicy, SizePolicy) def _initialize_control(self): """ Initialize the toolkit control. """ super()._initialize_control() self._set_control_minimum_size(self.minimum_size) self._set_control_maximum_size(self.maximum_size) self._set_control_stretch(self.stretch) self._set_control_size_policy(self.size_policy) def _add_event_listeners(self): """ Add trait observers and toolkit binding. """ super()._add_event_listeners() self.observe( self._minimum_size_updated, "minimum_size", dispatch="ui", ) self.observe( self._maximum_size_updated, "maximum_size", dispatch="ui", ) self.observe( self._stretch_updated, "stretch", dispatch="ui", ) self.observe( self._size_policy_updated, "size_policy", dispatch="ui", ) def _remove_event_listeners(self): """ Remove trait observers and toolkit binding. """ self.observe( self._minimum_size_updated, "minimum_size", dispatch="ui", remove=True, ) self.observe( self._maximum_size_updated, "maximum_size", dispatch="ui", remove=True, ) self.observe( self._stretch_updated, "stretch", dispatch="ui", remove=True, ) self.observe( self._size_policy_updated, "size_policy", dispatch="ui", remove=True, ) super()._remove_event_listeners() def _minimum_size_updated(self, event): """ Trait observer for minimum size. """ if self.control is not None: self._set_control_minimum_size(event.new) def _maximum_size_updated(self, event): """ Trait observer for maximum size. """ if self.control is not None: self._set_control_maximum_size(event.new) def _stretch_updated(self, event): """ Trait observer for stretch. """ if self.control is not None: self._set_control_stretch(event.new) def _size_policy_updated(self, event): """ Trait observer for size policy. """ if self.control is not None: self._set_control_size_policy(event.new) def _set_control_minimum_size(self, size): """ Set the minimum size of the control. Toolkit implementations will need to override this method. """ raise NotImplementedError() def _get_control_minimum_size(self): """ Get the minimum size of the control. Toolkit implementations will need to override this method. This method is only used for testing. """ raise NotImplementedError() def _set_control_maximum_size(self, size): """ Set the maximum size of the control. Toolkit implementations will need to override this method. """ raise NotImplementedError() def _get_control_maximum_size(self): """ Get the maximum size of the control. Toolkit implementations will need to override this method. This method is only used for testing. """ raise NotImplementedError() def _set_control_stretch(self, stretch): """ Set the stretch factor of the control. Toolkit implementations will need to override this method. """ raise NotImplementedError() def _get_control_stretch(self): """ Get the stretch factor of the control. Toolkit implementations will need to override this method. This method is only used for testing. """ raise NotImplementedError() def _set_control_size_policy(self, size_policy): """ Set the size policy of the control. Toolkit implementations will need to override this method. """ raise NotImplementedError() def _get_control_size_policy(self): """ Get the size policy of the control. Toolkit implementations will need to override this method. This method is only used for testing. """ raise NotImplementedError()