示例#1
0
 def select_colormap():
     # @GBY must move to plantgl or lpy
     from openalea.core.control.manager import ControlManager
     from openalea.plantlab.tools import to_material
     controls = ControlManager().namespace(interface='IColorList')
     for v in controls.values():
         return to_material(v)
示例#2
0
def get_control(name):
    """
    Get a tracked control by name.
    If multiple control with same name exists, returns a list of controls.
    """
    cm = ControlManager()
    return cm.control(name)
示例#3
0
class Control(Node, AbstractListener):

    def __init__(self, inputs, outputs):
        Node.__init__(self, inputs, outputs)
        AbstractListener.__init__(self)
        self.cm = ControlManager()
        self.cm.register_listener(self)

    def notify(self, sender, event):
        signal, data = event
        if signal == 'control_value_changed':
            self.invalidate()
            print 'control changed'
        elif signal == 'control_name_changed':
            ctrl, name = data
            self.set_input(0, name)
            self.set_caption(name)
            self.notify_listeners(("input_modified", 0))

    def __call__(self, inputs):
        """ inputs is the list of input values """

        key = inputs[0]
        if key in self.cm:
            obj = self.cm.control(name=key)
            self.set_caption("%s" % (key, ))
        if isinstance(obj, list):
            obj = obj[0]
        return (obj.value, )
示例#4
0
 def select_colormap():
     # @GBY must move to plantgl or lpy
     from openalea.core.control.manager import ControlManager
     from openalea.plantlab.tools import to_material
     controls = ControlManager().namespace(interface='IColorList')
     for v in controls.values():
         return to_material(v)
示例#5
0
class Control(Node, AbstractListener):

    def __init__(self, inputs, outputs):
        Node.__init__(self, inputs, outputs)
        AbstractListener.__init__(self)
        self.cm = ControlManager()
        self.cm.register_listener(self)

    def notify(self, sender, event):
        signal, data = event
        if signal == 'control_value_changed':
            self.invalidate()
            print 'control changed'
        elif signal == 'control_name_changed':
            ctrl, name = data
            self.set_input(0, name)
            self.set_caption(name)
            self.notify_listeners(("input_modified", 0))

    def __call__(self, inputs):
        """ inputs is the list of input values """

        key = inputs[0]
        if key in self.cm:
            obj = self.cm.control(name=key)
            self.set_caption("%s" % (key, ))
        if isinstance(obj, list):
            obj = obj[0]
        return (obj.value, )
示例#6
0
 def _save_controls(self, obj):
     from openalea.core.control.serialization import ControlSerializer
     from openalea.core.control.manager import ControlManager
     cm = ControlManager()
     controls = cm.controls()
     if controls:
         serializer = ControlSerializer()
         lines = serializer.serialize(controls)
     else:
         lines = []
     return lines
示例#7
0
 def _save_controls(self, obj):
     from openalea.core.control.serialization import ControlSerializer
     from openalea.core.control.manager import ControlManager
     cm = ControlManager()
     controls = cm.controls()
     if controls:
         serializer = ControlSerializer()
         lines = serializer.serialize(controls)
     else:
         lines = []
     return lines
示例#8
0
    def __init__(self):
        import traceback
        traceback.print_stack(file=sys.__stdout__)

        self._project = None
        self._is_proj = False
        self._debug = False
        self.gui = True

        self.tmpdir = path(get_openalea_tmp_dir())

        self._config = MainConfig()
        self.extension = None

        self.applet = {}
        self.manager = {}

        self.package_manager = package_manager
        self.control_manager = ControlManager()
        self.project_manager = ProjectManager()
        self.plugin_manager = PluginManager()
        self.plugin_instance_manager = PluginInstanceManager()

        self.manager['control'] = self.control_manager
        self.manager['package'] = self.package_manager
        self.manager['project'] = self.project_manager
        self.manager['plugin'] = self.plugin_manager
        self.manager['plugin_instance'] = self.plugin_instance_manager

        self.world = World()

        self.interpreter = interpreter()

        # Hack if interpreter is an object from class TerminalInteractiveShell
        if not hasattr(self.interpreter, "shell"):
            self.interpreter.shell = self.interpreter
        if hasattr(self.interpreter.shell, "events"):
            self.interpreter.shell.events.register("post_execute",
                                                   self.add_to_history)
        else:
            print("You need ipython >= 2.0 to use history.")

#         self.project_manager.set_shell(self.interpreter.shell)

        self.interpreter.locals['session'] = self

        self.old_syspath = sys.path

        self.load_default()

        self.__class__.instantiated = True
示例#9
0
def sample_controls():
    cm = ControlManager()
#     cc1 = ControlContainer()
#     cc2 = ControlContainer()

    cmw = ControlManagerWidget()
#     cmw.model.set_manager(cc2)
    cp = ControlPanel()

    percent = get_interface('IInt', min=0, max=100)
    c = new_control('i', percent)
#     cc2.add_control(c)

    c = new_control('f', 'IFloat')
    cm.add_control(c)
示例#10
0
def decode(mimetype, mimedata):
    """
    decode("openalealab/model", "model1") -> Model("model1")
    returns an object Model of model1
    """
    if mimetype == 'openalealab/control':
        from openalea.core.control.manager import ControlManager
        identifier, name = mimedata.split(';')
        control = ControlManager().control(name)
        if isinstance(control, list):
            return ControlManager().control(uid=identifier)
        return control
    elif mimetype == 'openalealab/data':
        from openalea.core.project.manager import ProjectManager
        from openalea.core.path import path
        pm = ProjectManager()
        return pm.get('data', path(mimedata).name)
    else:
        return str(mimedata)
示例#11
0
def decode(mimetype, mimedata):
    """
    decode("openalealab/model", "model1") -> Model("model1")
    returns an object Model of model1
    """
    if mimetype == 'openalealab/control':
        from openalea.core.control.manager import ControlManager
        identifier, name = mimedata.split(';')
        control = ControlManager().control(name)
        if isinstance(control, list):
            return ControlManager().control(uid=identifier)
        return control
    elif mimetype == 'openalealab/data':
        from openalea.core.service.project import active_project
        from openalea.core.path import path
        project = active_project()
        if project:
            return project.get_item('data', path(unicode(mimedata)).name)
    else:
        return str(mimedata)
示例#12
0
    def __init__(self):
        import traceback
        traceback.print_stack(file=sys.__stdout__)

        self._project = None
        self._is_proj = False
        self._debug = False
        self.gui = True

        self.tmpdir = path(get_openalea_tmp_dir())

        self._config = MainConfig()
        self.extension = None

        self.applet = {}
        self.manager = {}

        self.package_manager = package_manager
        self.control_manager = ControlManager()
        self.project_manager = ProjectManager()
        self.plugin_manager = PluginManager()
        self.plugin_instance_manager = PluginInstanceManager()

        self.manager['control'] = self.control_manager
        self.manager['package'] = self.package_manager
        self.manager['project'] = self.project_manager
        self.manager['plugin'] = self.plugin_manager
        self.manager['plugin_instance'] = self.plugin_instance_manager

        self.world = World()

        self.interpreter = interpreter()

        # Hack if interpreter is an object from class TerminalInteractiveShell
        if not hasattr(self.interpreter, "shell"):
            self.interpreter.shell = self.interpreter
        if hasattr(self.interpreter.shell, "events"):
            self.interpreter.shell.events.register("post_execute", self.add_to_history)
        else:
            print("You need ipython >= 2.0 to use history.")

#         self.project_manager.set_shell(self.interpreter.shell)

        self.interpreter.locals['session'] = self

        self.old_syspath = sys.path

        self.load_default()

        self.__class__.instantiated = True
示例#13
0
    def __init__(self, items=None, item_proxy=None, autoload=['entry_points']):
        # GenericManager
        GenericManager.__init__(self, items, item_proxy, autoload)
        self.default_group = "local"

        # ProjectManager
        self.tmpdir = Path(get_openalea_tmp_dir())
        self._cproject = None
        self._cwd = Path('.').abspath()
        self.old_syspath = sys.path

        self.cm = ControlManager()

        self.repositories = self.search_path()
        self.previous_project = "temp"

        self.shell = interpreter()
        self.cproject = None
示例#14
0
    def __init__(self):
        Observed.__init__(self)
        AbstractListener.__init__(self)

        self.tmpdir = Path(get_openalea_tmp_dir())
        self._cproject = None
        self._cwd = Path('.').abspath()
        self.old_syspath = sys.path

        self.cm = ControlManager()

        self.projects = []
        self.repositories = self.search_path()
        self.previous_project = "temp"

        self.shell = interpreter()
        # TODO Search in preference file if user has path to append in self.repositories
        self.cproject = self.default()
示例#15
0
    def __init__(self, manager=None, parent=None):
        AbstractListener.__init__(self)
        Splitter.__init__(self, parent=parent)

        if manager is None:
            self._manager = ControlManager()
        else:
            self._manager = manager

        self.model = ControlModel(self._manager)

        self.view = ControlView()
        self.view.setModel(self.model)
        self.view.controlsSelected.connect(self.on_controls_selected)

        self.model.rowsInserted.connect(self.view.onRowsInserted)

        self.addWidget(self.view)

        self._i = 1

        self._index = None
        self._widget_edit = None
示例#16
0
import copy
from openalea.core.control.manager import ControlManager
from openalea.core.project.manager import ProjectManager
from openalea.core.service.model import to_model

cm = ControlManager()
pm = ProjectManager()


def get_model(name):
    data = pm.cproject.get_model(name)
    if data:
        model = to_model(data)
        if model:
            return copy.copy(model)


def namespace():
    # Move to runner class (model manager or ParadigmEditor)

    namespace = {}
    namespace.update(cm.namespace())
    namespace.update(pm.cproject.ns)
    namespace['Model'] = get_model

    return namespace
示例#17
0
def disp_controls():
    cm = ControlManager()
    import sys
    for k, v in cm.namespace().items():
        print >> sys.__stdout__, k, v
示例#18
0
def unregister_control(control):
    """
    Ask application to stop tracking control.
    """
    cm = ControlManager()
    cm.remove_control(control)
示例#19
0
def register_control(control):
    """
    Ask application to track control.
    """
    cm = ControlManager()
    cm.add_control(control)
示例#20
0
__all__ = [
    "clear_controls",
    "create_control",
    "get_control",
    "group_controls",
    "new_control",
    "register_control",
    "unregister_control",
]

from openalea.core.control.control import Control
from openalea.core.control.manager import ControlManager, ControlContainer
from openalea.core.plugin import iter_plugins

CM = ControlManager()


def create_control(name, iname=None, value=None, constraints=None):
    """
    Create a new Control object.
    This object is local and standalone.
    To track it, use register service.
    """
    if iname is None and value is None:
        raise ValueError('You must define a least a value or an interface')
    control = Control(name, iname, value, constraints=constraints)
    return control


def register_control(control):
示例#21
0
def control_namespace():
    return ControlManager().namespace()
示例#22
0
 def __init__(self, inputs, outputs):
     Node.__init__(self, inputs, outputs)
     AbstractListener.__init__(self)
     self.cm = ControlManager()
     self.cm.register_listener(self)
示例#23
0
 def stop(self, *args, **kwargs):
     self.started = False
     self.ns.clear()
     from openalea.core.control.manager import ControlManager
     cm = ControlManager()
     cm.clear()
示例#24
0
def clear_controls():
    cm = ControlManager()
    return cm.clear()
示例#25
0
class Session(object):
    """
    Session is a non graphical class that centralize managers for ...

      - application settings (:class:`~openalea.oalab.config.main.MainConfig`)
      - projects (:class:`~openalea.oalab.project.manager.ProjectManager`)
      - world (:class:`~openalea.oalab.world.world.World`)
      - interpreter (see :mod:`~openalea.vpltk.shell.shell`)

    """

    __metaclass__ = Singleton
    instantiated = False

    def __init__(self):
        import traceback
        traceback.print_stack(file=sys.__stdout__)

        self._project = None
        self._is_proj = False
        self._debug = False
        self.gui = True

        self.tmpdir = path(get_openalea_tmp_dir())

        self._config = MainConfig()
        self.extension = None

        self.applet = {}
        self.manager = {}

        self.package_manager = package_manager
        self.control_manager = ControlManager()
        self.project_manager = ProjectManager()
        self.plugin_manager = PluginManager()
        self.plugin_instance_manager = PluginInstanceManager()

        self.manager['control'] = self.control_manager
        self.manager['package'] = self.package_manager
        self.manager['project'] = self.project_manager
        self.manager['plugin'] = self.plugin_manager
        self.manager['plugin_instance'] = self.plugin_instance_manager

        self.world = World()

        self.interpreter = interpreter()

        # Hack if interpreter is an object from class TerminalInteractiveShell
        if not hasattr(self.interpreter, "shell"):
            self.interpreter.shell = self.interpreter
        if hasattr(self.interpreter.shell, "events"):
            self.interpreter.shell.events.register("post_execute",
                                                   self.add_to_history)
        else:
            print("You need ipython >= 2.0 to use history.")

#         self.project_manager.set_shell(self.interpreter.shell)

        self.interpreter.locals['session'] = self

        self.old_syspath = sys.path

        self.load_default()

        self.__class__.instantiated = True

    @property
    def project(self):
        """
        :return: current project if one is opened. Else return None.
        """
        return self.project_manager.cproject

    def load_config_file(self, filename, path=None):
        self._config.load_config_file(filename=filename, path=path)

    def clear(self):
        self.world.clear()
        self.control_manager.clear()

    def load_default(self):
        self.project_manager.load_default()
        self.update_namespace()

    def update_namespace(self):
        """
        Definition: Update namespace
        """
        self.interpreter.locals['world'] = self.world
        self.interpreter.locals['get_control'] = self.control_manager.control
        self.interpreter.locals[
            'follow'] = self.control_manager.register_follower
        self.interpreter.locals[
            'unfollow'] = self.control_manager.unregister_follower

        if self.project:
            if self.project.path.exists():
                os.chdir(self.project.path)
                sys.path.insert(0, str(self.project.path / 'lib'))
            else:
                os.chdir(self.tmpdir)
                sys.path.insert(0, str(self.tmpdir / 'lib'))
            self.interpreter.locals.update(self.project.ns)
            self.interpreter.locals['project'] = self.project
            self.interpreter.locals['Model'] = get_model
            self.interpreter.locals['data'] = self.project.path / 'data'
        else:
            # close
            sys.path = self.old_syspath

    def add_to_history(self, *args, **kwargs):
        """
        Send the last sent of history to the components that display history
        """
        from openalea.oalab.service.history import display_history
        records = self.interpreter.shell.history_manager.get_range()

        input_ = ''
        # loop all elements in iterator to get last one.
        # TODO: search method returning directly last input
        for session, line, input_ in records:
            pass
        display_history(input_)

    config = property(fget=lambda self: self._config.config)

    @property
    def debug_plugins(self):
        return self.plugin_manager.debug

    @property
    def debug(self):
        return self._debug

    @debug.setter
    def debug(self, enable):
        """
        If True, add some objects useful for debug in shell namespace:
            - applet: dict containing weak references to all applets
            - manager: dict containing all managers
        """
        self._debug = enable
        env = self.interpreter.locals
        if self._debug is True:
            env['manager'] = self.manager
            env['applet'] = self.applet
        else:
            for varname in ('applet', 'manager'):
                if varname in env:
                    del env[varname]
示例#26
0
 def __init__(self, inputs, outputs):
     Node.__init__(self, inputs, outputs)
     AbstractListener.__init__(self)
     self.cm = ControlManager()
     self.cm.register_listener(self)
示例#27
0
class Session(object):

    """
    Session is a non graphical class that centralize managers for ...

      - application settings (:class:`~openalea.oalab.config.main.MainConfig`)
      - projects (:class:`~openalea.oalab.project.manager.ProjectManager`)
      - world (:class:`~openalea.oalab.world.world.World`)
      - interpreter (see :mod:`~openalea.vpltk.shell.shell`)

    """

    __metaclass__ = Singleton
    instantiated = False

    def __init__(self):
        import traceback
        traceback.print_stack(file=sys.__stdout__)

        self._project = None
        self._is_proj = False
        self._debug = False
        self.gui = True

        self.tmpdir = path(get_openalea_tmp_dir())

        self._config = MainConfig()
        self.extension = None

        self.applet = {}
        self.manager = {}

        self.package_manager = package_manager
        self.control_manager = ControlManager()
        self.project_manager = ProjectManager()
        self.plugin_manager = PluginManager()
        self.plugin_instance_manager = PluginInstanceManager()

        self.manager['control'] = self.control_manager
        self.manager['package'] = self.package_manager
        self.manager['project'] = self.project_manager
        self.manager['plugin'] = self.plugin_manager
        self.manager['plugin_instance'] = self.plugin_instance_manager

        self.world = World()

        self.interpreter = interpreter()

        # Hack if interpreter is an object from class TerminalInteractiveShell
        if not hasattr(self.interpreter, "shell"):
            self.interpreter.shell = self.interpreter
        if hasattr(self.interpreter.shell, "events"):
            self.interpreter.shell.events.register("post_execute", self.add_to_history)
        else:
            print("You need ipython >= 2.0 to use history.")

#         self.project_manager.set_shell(self.interpreter.shell)

        self.interpreter.locals['session'] = self

        self.old_syspath = sys.path

        self.load_default()

        self.__class__.instantiated = True

    @property
    def project(self):
        """
        :return: current project if one is opened. Else return None.
        """
        return self.project_manager.cproject

    def load_config_file(self, filename, path=None):
        self._config.load_config_file(filename=filename, path=path)

    def clear(self):
        self.world.clear()
        self.control_manager.clear()

    def load_default(self):
        self.project_manager.load_default()
        self.update_namespace()

    def update_namespace(self):
        """
        Definition: Update namespace
        """
        self.interpreter.locals['world'] = self.world
        self.interpreter.locals['get_control'] = self.control_manager.control
        self.interpreter.locals['follow'] = self.control_manager.register_follower
        self.interpreter.locals['unfollow'] = self.control_manager.unregister_follower

        if self.project:
            if self.project.path.exists():
                os.chdir(self.project.path)
                sys.path.insert(0, str(self.project.path / 'lib'))
            else:
                os.chdir(self.tmpdir)
                sys.path.insert(0, str(self.tmpdir / 'lib'))
            self.interpreter.locals.update(self.project.ns)
            self.interpreter.locals['project'] = self.project
            self.interpreter.locals['Model'] = get_model
            self.interpreter.locals['data'] = self.project.path / 'data'
        else:
            # close
            sys.path = self.old_syspath

    def add_to_history(self, *args, **kwargs):
        """
        Send the last sent of history to the components that display history
        """
        from openalea.oalab.service.history import display_history
        records = self.interpreter.shell.history_manager.get_range()

        input_ = ''
        # loop all elements in iterator to get last one.
        # TODO: search method returning directly last input
        for session, line, input_ in records:
            pass
        display_history(input_)

    config = property(fget=lambda self: self._config.config)

    @property
    def debug_plugins(self):
        return self.plugin_manager.debug

    @property
    def debug(self):
        return self._debug

    @debug.setter
    def debug(self, enable):
        """
        If True, add some objects useful for debug in shell namespace:
            - applet: dict containing weak references to all applets
            - manager: dict containing all managers
        """
        self._debug = enable
        env = self.interpreter.locals
        if self._debug is True:
            env['manager'] = self.manager
            env['applet'] = self.applet
        else:
            for varname in ('applet', 'manager'):
                if varname in env:
                    del env[varname]
示例#28
0
 def stop(self, *args, **kwargs):
     self.started = False
     self.ns.clear()
     from openalea.core.control.manager import ControlManager
     cm = ControlManager()
     cm.clear()