File: i_editor.py

package info (click to toggle)
python-pyface 8.0.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 13,944 kB
  • sloc: python: 54,107; makefile: 82
file content (118 lines) | stat: -rw-r--r-- 3,313 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# (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,
)


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.
    # ------------------------------------------------------------------------

    def close(self):
        """ Close the editor.
        """

    def create(self, parent):
        """ Create and set the toolkit-specific control that represents the
            editor.
        """

    def destroy(self):
        """ Destroy the toolkit-specific control that represents the editor.
        """


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.
    # ------------------------------------------------------------------------

    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