Source code for simphony_mayavi.plugins.engine_manager
from traits.api import HasTraits, Instance, ListStr, Str, Dict, Property
from traitsui.api import View, Group, Item
from mayavi.core.trait_defs import DEnum
from simphony.cuds.abc_modeling_engine import ABCModelingEngine
[docs]class EngineManager(HasTraits):
''' A basic container of Simphony Engine that comes with a GUI.
Additional panel can be added to support more operations related
to the modeling engines
Attributes
----------
engines : dict
Mappings of Simphony Modeling Engines in this manager
engine_name : str
Name of the Simphony Modeling Engine
engine : ABCModelingEngine
Simphony Modeling Engine
'''
# Engines that are added to the manager
engines = Dict(Str, Instance(ABCModelingEngine))
# Names of engines in the Manager
_engine_names = ListStr
# Selected engine
engine = Property(depends_on="engine_name")
# Selected engine name
engine_name = DEnum(values_name="_engine_names")
# Traits view
traits_view = View(Group(Item("engine_name", label="Engine Wrapper")),
resizable=True)
# ----------------------------------------------------
# Traits Property
# ----------------------------------------------------
def _get_engine(self):
if self.engine_name in self.engines:
return self.engines[self.engine_name]
else:
return None
def _set_engine(self, value):
if value not in self.engines.values():
msg = "{} is not an engine in the manager. Use ``add_engine()``"
raise ValueError(msg.format(value))
for name, engine in self.engines.items():
if value is engine:
self.engine_name = name
break
# ------------------------------------------------------
# Public methods
# ------------------------------------------------------
[docs] def add_engine(self, name, modeling_engine):
''' Add a Simphony Engine to the manager
Parameters
----------
name : str
Name to be associated with the modeling engine
modeling_engine : ABCModelingEngine
Simphony Engine Wrapper
'''
if name in self.engines:
raise ValueError("{} is already added".format(name))
self.engines[name] = modeling_engine
self._engine_names = self.engines.keys()
[docs] def remove_engine(self, name):
''' Remove a modeling engine from the manager.
If modeling engine to be removed is currently selected,
select the one of the remaining engines
Parameters
----------
name : str
Name associated with the engine to be removed
'''
if name not in self.engines:
msg = "{} is not an engine in this manager"
raise KeyError(msg.format(name))
if len(self.engines) == 1:
msg = ("There will be no more engine if {} is removed. "
"Not removing it.")
raise IndexError(msg.format(name))
self.engines.pop(name)
if self.engine_name == name:
self.engine_name = self.engines.keys()[0]
self._engine_names = self.engines.keys()