Source code for pyface.tasks.i_editor
# (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 (
Any,
Bool,
Event,
HasTraits,
Interface,
Instance,
Property,
Str,
Vetoable,
VetoableEvent,
cached_property,
)
[docs]class IEditor(Interface):
""" The base interface for all panes (central and dock) in a Task.
"""
#: The editor's user-visible name.
name = Str()
#: The tooltip to show for the editor's tab, if any.
tooltip = Str()
#: The toolkit-specific control that represents the editor.
control = Any()
#: The object that the editor is editing.
obj = Any()
#: Has the editor's object been modified but not saved?
dirty = Bool()
#: The editor area to which the editor belongs.
editor_area = Instance("pyface.tasks.i_editor_area_pane.IEditorAreaPane")
#: Is the editor active in the editor area?
is_active = Bool()
#: Does the editor currently have the focus?
has_focus = Bool()
#: Fired when the editor has been requested to close.
closing = VetoableEvent()
#: Fired when the editor has been closed.
closed = Event()
# ------------------------------------------------------------------------
# 'IEditor' interface.
# ------------------------------------------------------------------------
[docs] def close(self):
""" Close the editor.
"""
[docs] def create(self, parent):
""" Create and set the toolkit-specific control that represents the
editor.
"""
[docs] def destroy(self):
""" Destroy the toolkit-specific control that represents the editor.
"""
[docs]class MEditor(HasTraits):
""" Mixin containing common code for toolkit-specific implementations.
"""
# 'IEditor' interface -------------------------------------------------#
name = Str()
tooltip = Str()
control = Any()
obj = Any()
dirty = Bool(False)
editor_area = Instance("pyface.tasks.i_editor_area_pane.IEditorAreaPane")
is_active = Property(Bool, observe="editor_area.active_editor")
has_focus = Bool(False)
closing = VetoableEvent()
closed = Event()
# ------------------------------------------------------------------------
# 'IEditor' interface.
# ------------------------------------------------------------------------
[docs] def close(self):
""" Close the editor.
"""
if self.control is not None:
self.closing = event = Vetoable()
if not event.veto:
self.editor_area.remove_editor(self)
self.closed = True
# ------------------------------------------------------------------------
# Private interface.
# ------------------------------------------------------------------------
@cached_property
def _get_is_active(self):
if self.editor_area is not None:
return self.editor_area.active_editor == self
return False