Source code for simphony_mayavi.plugins.engine_manager_mayavi2

import logging

from traits.api import Instance, List, on_trait_change
from traitsui.api import View, VGroup, Group, Item
from envisage.api import Plugin, ServiceOffer

# EngineManager imports mayavi.core.trait_defs in the module level
from simphony_mayavi.plugins.engine_manager import EngineManager
from simphony_mayavi.plugins.tabbed_panel_collection import (
    TabbedPanelCollection)

# More internal mayavi imports are done within EngineManagerMayavi2 to
# avoid import cycles when the class is imported as a Mayavi2 plugin

logger = logging.getLogger(__name__)


[docs]class EngineManagerMayavi2(EngineManager): """ The Simphony panel in the Mayavi2 application """ window = Instance("pyface.workbench.api.WorkbenchWindow") panels = Instance(TabbedPanelCollection) view = View( VGroup( Group(Item("engine_name", label="Engine Wrapper")), Group(Item("panels", style="custom", show_label=False))), resizable=True)
[docs] def get_mayavi(self): '''Get the mayavi engine in Mayavi2''' from mayavi.core.engine import Engine return self.window.get_service(Engine)
def _window_changed(self): self._set_panels() def _set_panels(self): # mayavi imports here to avoid import cycle from simphony_mayavi.plugins.add_source_panel import AddSourcePanel from simphony_mayavi.plugins.run_and_animate_panel import ( RunAndAnimatePanel) from simphony_mayavi.plugins.add_engine_panel import AddEnginePanel # Mayavi engine from the Mayavi2 mayavi_engine = self.get_mayavi() # Add panels self.panels = TabbedPanelCollection.create( add_engine=AddEnginePanel(engine_manager=self), add_source=AddSourcePanel(engine_name=self.engine_name, engine=self.engine, mayavi_engine=mayavi_engine), run_and_animate=RunAndAnimatePanel(engine=self.engine, mayavi_engine=mayavi_engine)) logger.info("Simphony EngineManagerMayavi2 panel setup completed") def _engine_name_changed(self): for panel in self.panels: panel.engine = self.engine self.panels.add_source.engine_name = self.engine_name
class EngineManagerMayavi2Plugin(Plugin): SERVICE_OFFERS = "envisage.ui.workbench.service_offers" VIEWS = "envisage.ui.workbench.views" service_offers = List(contributes_to=SERVICE_OFFERS) views = List(contributes_to=VIEWS) # Private methods. def _service_offers_default(self): """ Trait initializer. """ worker_service_offer = ServiceOffer( protocol='simphony_mayavi.plugins.engine_manager_mayavi2.EngineManagerMayavi2', # noqa factory='simphony_mayavi.plugins.engine_manager_mayavi2.EngineManagerMayavi2' # noqa ) return [worker_service_offer] def _views_default(self): """ Trait initializer. """ return [self._worker_view_factory] def _worker_view_factory(self, window, **traits): """ Factory method for the current selection of the engine. """ from pyface.workbench.traits_ui_view import TraitsUIView worker = window.get_service(('simphony_mayavi.plugins.' 'engine_manager_mayavi2.' 'EngineManagerMayavi2')) tui_worker_view = TraitsUIView( obj=worker, view='view', id='user_mayavi.EngineManagerMayavi2.view', name='Simphony', window=window, position='left', **traits ) return tui_worker_view @on_trait_change("application.gui:started") def _on_application_gui_started(self, obj, trait_name, old, new): if trait_name != "started" or not new: return # Bind the EngineManagerMayavi2 instance to ``simphony_panel`` SHELL_VIEW = "envisage.plugins.python_shell_view" window = self.application.workbench.active_window # python shell py = window.get_view_by_id(SHELL_VIEW) # EngineManagerMayavi2 instance worker = window.get_service(('simphony_mayavi.plugins.' 'engine_manager_mayavi2.' 'EngineManagerMayavi2')) if py is None: logger.warn("*"*80) logger.warn("Cannot find the Python shell") else: try: py.bind("simphony_panel", worker) except AttributeError as exception: logger.warn(exception.message) logger.warn("Cannot bind simphony_panel to the Python shell") else: logger.info("binded ``simphony_panel`` to the Python shell")