""" Boa plug-in which allows linking a sub application to a main application.
Add the main application as a file in the modules list.
When run application is performed on the linked application or any of it's
modules, the main application file is run.
Note, as running is always proxied to the main application, you won't be able
to run the link app module itself from the IDE!
Linked apps can be chained but beware of cycles! ;)
Only proxies the run and debug methods to the parent app.
"""
import wx
import Plugins
import sourceconst
from Models import PythonEditorModels,PythonControllers,EditorHelper,Controllers
EditorHelper.imgLinkAppModel = EditorHelper.imgIdxRange()
class LinkAppModel(PythonEditorModels.PyAppModel):
modelIdentifier = 'LinkApp'
defaultName = 'LinkApp'
bitmap = 'LinkApp_s.png'
imgIdx = EditorHelper.imgLinkAppModel
# def getDefaultData(self):
# return sourceconst.defSig %{'modelIdent':self.modelIdentifier, 'main': ''}
def findAppInModules(self, args):
for name, Model in self.moduleModels.items():
if Model.modelIdentifier in Controllers.appModelIdReg:
filepath = self.moduleFilename(name)
if self.editor.modules.has_key(filepath):
model = self.editor.modules[filepath].model
else:
model = Model('', filepath, '', self.editor, 0, {})
return model
return None
def run(self, args = '', execStart=None, execFinish=None):
app = self.findAppInModules(args)
if app:
app.run(args, execStart, execFinish)
else:
wx.LogWarning('No Application module found in modules list to link to')
def debug(self, params=None, cont_if_running=0, cont_always=0,
temp_breakpoint=None):
app = self.findAppInModules(params)
if app:
app.debug(params, cont_if_running, cont_always, temp_breakpoint)
else:
wx.LogWarning('No Application module found in modules list to link to')
class LinkAppController(PythonControllers.BaseAppController):
Model = LinkAppModel
#-------------------------------------------------------------------------------
Plugins.registerFileType(LinkAppController)
Controllers.appModelIdReg.append(LinkAppModel.modelIdentifier)
|