File: charm.py

package info (click to toggle)
python-envisageplugins 3.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 1,600 kB
  • sloc: python: 6,968; sh: 11; makefile: 8; lisp: 1
file content (120 lines) | stat: -rw-r--r-- 3,248 bytes parent folder | download | duplicates (2)
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
119
120
""" Charm - the model for a simple Python IDE. """


# Enthought library imports.
from enthought.envisage.developer.api import CodeBrowser, Module
from enthought.traits.api import Event, HasTraits, Instance, Str


class Charm(HasTraits):
    """ Charm - the model for a simple Python IDE. """
    
    #### 'Charm' interface ####################################################

    # The code browser.
    code_browser = Instance(CodeBrowser)

    # The filename of the code database.
    filename = Str('code_database.pickle')
    
    # The current module.
    module = Instance(Module)

    #### Events ####

    # Fired when a module is about to be parsed.
    parsing_module = Event

    # Fired when a module has been parsed.
    parsed_module = Event
    
    ###########################################################################
    # 'Charm' interface.
    ###########################################################################

    #### Trait initializers ###################################################

    def _code_browser_default(self):
        """ Trait initializer. """

        code_browser = CodeBrowser(filename=self.filename)
        self._setup_code_browser(code_browser)

        return code_browser

    #### Methods ##############################################################

    def load(self):
        """ Loads the code database. """

        self.code_browser.load()

        return

    def save(self):
        """ Saves the code database. """

        self.code_browser.save()

        return
    
    ###########################################################################
    # Private interface.
    ###########################################################################

    def _setup_code_browser(self, code_browser):
        """ Adds trait change listeners to a code browser. """

        code_browser.on_trait_change(self._on_parsing_module, 'parsing_module')
        code_browser.on_trait_change(self._on_parsed_module, 'parsed_module')

        return

    def _tear_down_code_browser(self, code_browser):
        """ Removes trait change listeners from a code browser. """

        code_browser.on_trait_change(
            self._on_parsing_module, 'parsing_module', remove=True
        )

        code_browser.on_trait_change(
            self._on_parsed_module, 'parsed_module', remove=True
        )

        return
    
    #### Trait change handlers ################################################

    def _code_browser_changed(self, old, new):
        """ Static trait change handler. """

        if old is not None:
            self._tear_down_code_browser(old)

        if new is not None:
            self._setup_code_browser(new)

        return

    def _filename_changed(self, old, new):
        """ Static trait change handler. """

        self.code_browser.filename = new

        return
    
    def _on_parsing_module(self, event):
        """ Dysnamic trait change handler. """

        self.parsing_module = event

        return

    def _on_parsed_module(self, event):
        """ Dysnamic trait change handler. """

        self.parsed_module = event

        return
    
#### EOF ######################################################################