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