示例#1
0
 def configure(self):
     """Pops up the GUI control widget."""        
     if self.ui is None:
         self._show_glyphs()
         view = View(Group(Item(name='light_mode'),
                           Item(name='number_of_lights'),
                           label='LightManager'),
                     Group(Item(name='lights', style='custom'),
                           label='Lights',
                           selected=True, show_labels=False),
                     resizable=True,
                     buttons=['OK'],
                     handler=CloseHandler())
         self.ui = view.ui(self)
     else:
         try:
             self.ui.control.Raise()
         except AttributeError:
             pass
示例#2
0
 def configure(self):
     """Pops up the GUI control widget."""
     if self.ui is None:
         self._show_glyphs()
         view = View(Group(Item(name='light_mode'),
                           Item(name='number_of_lights'),
                           label='LightManager'),
                     Group(Item(name='lights', style='custom'),
                           label='Lights',
                           selected=True,
                           show_labels=False),
                     resizable=True,
                     buttons=['OK'],
                     handler=CloseHandler())
         self.ui = view.ui(self)
     else:
         try:
             self.ui.control.Raise()
         except AttributeError:
             pass
示例#3
0
class PipelineBrowser(HasTraits):
    # The tree generator to use.
    tree_generator = Trait(FullTreeGenerator(),
                           Instance(TreeGenerator))

    # The TVTK render window(s) associated with this browser.
    renwins = List

    # The root object to view in the pipeline.  If None (default), the
    # root object is the render_window of the Scene instance passed at
    # object instantiation time.
    root_object = List(TVTKBase)
    
    # Private traits.
    # The root of the tree to display.
    _root = Any

    ###########################################################################
    # `object` interface.
    ###########################################################################
    def __init__(self, renwin=None, **traits):
        """Initializes the object.

        Parameters
        ----------

        - renwin: `Scene` instance.  Defaults to None.

          This may be passed in addition to the renwins attribute
          which can be a list of scenes.

        """
        super(PipelineBrowser, self).__init__(**traits)
        self.ui = None
        self.view = None
        if renwin:
            self.renwins.append(renwin)

        self._root_object_changed(self.root_object)
        menu = Menu(Action(name='Refresh', action='editor.update_editor'),
                    Action(name='Expand all', action='editor.expand_all'))
        self.menu = menu

        nodes = self.tree_generator.get_nodes(menu)
        
        self.tree_editor = TreeEditor(nodes=nodes,
                                      editable=False,
                                      orientation='vertical',
                                      hide_root=True,
                                      on_dclick=self._on_dclick)
        self.view = View(Group(Item(name='_root',
                                    editor=self.tree_editor,
                                    resizable=True),
                               show_labels=False,
                               show_border=False,
                               orientation='vertical'),
                         title='Pipeline browser',
                         help=False,
                         resizable=True, undo=False, revert=False,
                         width=.3, height=.3)

    ###########################################################################
    # `PipelineBrowser` interface.
    ###########################################################################
    def show(self, parent=None):
        """Show the tree view if not already show.  If optional
        `parent` widget is passed, the tree is displayed inside the
        passed parent widget."""
        # If UI already exists, raise it and return.
        if self.ui and self.ui.control:
            try:
                self.ui.control.Raise()
            except AttributeError:
                pass
            else:
                return
        else:
            # No active ui, create one.
            if parent:
                self.ui = self.view.ui(self, parent=parent, kind='subpanel')
            else:
                self.ui = self.view.ui(self, parent=parent)
                
    def update(self):
        """Update the tree view."""
        # This is a hack.
        if self.ui and self.ui.control:
            try:
                ed = self.ui._editors[0]
                ed.update_editor()
                self.ui.control.Refresh()
            except (AttributeError, IndexError):
                pass
    # Another name for update.
    refresh = update

    def render(self):
        """Calls render on all render windows associated with this
        browser."""
        for rw in self.renwins:
            rw.render()

    ###########################################################################
    # Non-public interface.
    ###########################################################################
    def _make_default_root(self):
        tree_gen = self.tree_generator
        objs = [x.render_window for x in self.renwins]
        node = TVTKCollectionNode(object=objs, name="Root",
                                  tree_generator=tree_gen)
        return node

    def _tree_generator_changed(self, tree_gen):
        """Traits event handler."""
        if self._root:
            root_obj = self._root.object
        else:
            root_obj = self.root_object
        if root_obj:
            ro = root_obj
            if not hasattr(root_obj, '__len__'):
                ro = [root_obj]
                
            self._root = TVTKCollectionNode(object=ro,
                                            name="Root",
                                            tree_generator=tree_gen)
        else:
            self._root = self._make_default_root()

        self.tree_editor.nodes = tree_gen.get_nodes(self.menu)
        self.update()

    def _root_object_changed(self, root_obj):
        """Trait handler called when the root object is assigned to."""
        tg = self.tree_generator
        if root_obj:
            self._root = TVTKCollectionNode(object=root_obj, name="Root",
                                            tree_generator=tg)
        else:
            self._root = self._make_default_root()
            self.root_object = self._root.object
        self.update()

    def _root_object_items_changed(self, list_event):
        """Trait handler called when the items of the list change."""
        self._root_object_changed(self.root_object)
    
    def _on_dclick(self, obj):
        """Callback that is called when nodes are double-clicked."""
        if hasattr(obj, 'object') and hasattr(obj.object, 'edit_traits'):
            object = obj.object
            view = object.trait_view()
            view.handler = UICloseHandler(browser=self)
            object.on_trait_change(self.render)
            ui = object.edit_traits(view=view)
示例#4
0
class PipelineBrowser(HasTraits):
    # The tree generator to use.
    tree_generator = Trait(FullTreeGenerator(), Instance(TreeGenerator))

    # The TVTK render window(s) associated with this browser.
    renwins = List

    # The root object to view in the pipeline.  If None (default), the
    # root object is the render_window of the Scene instance passed at
    # object instantiation time.
    root_object = List(TVTKBase)

    # Private traits.
    # The root of the tree to display.
    _root = Any

    ###########################################################################
    # `object` interface.
    ###########################################################################
    def __init__(self, renwin=None, **traits):
        """Initializes the object.

        Parameters
        ----------

        - renwin: `Scene` instance.  Defaults to None.

          This may be passed in addition to the renwins attribute
          which can be a list of scenes.

        """
        super(PipelineBrowser, self).__init__(**traits)
        self.ui = None
        self.view = None
        if renwin:
            self.renwins.append(renwin)

        self._root_object_changed(self.root_object)
        menu = Menu(Action(name='Refresh', action='editor.update_editor'),
                    Action(name='Expand all', action='editor.expand_all'))
        self.menu = menu

        nodes = self.tree_generator.get_nodes(menu)

        self.tree_editor = TreeEditor(nodes=nodes,
                                      editable=False,
                                      orientation='vertical',
                                      hide_root=True,
                                      on_dclick=self._on_dclick)
        self.view = View(Group(Item(name='_root',
                                    editor=self.tree_editor,
                                    resizable=True),
                               show_labels=False,
                               show_border=False,
                               orientation='vertical'),
                         title='Pipeline browser',
                         help=False,
                         resizable=True,
                         undo=False,
                         revert=False,
                         width=.3,
                         height=.3)

    ###########################################################################
    # `PipelineBrowser` interface.
    ###########################################################################
    def show(self, parent=None):
        """Show the tree view if not already show.  If optional
        `parent` widget is passed, the tree is displayed inside the
        passed parent widget."""
        # If UI already exists, raise it and return.
        if self.ui and self.ui.control:
            try:
                self.ui.control.Raise()
            except AttributeError:
                pass
            else:
                return
        else:
            # No active ui, create one.
            if parent:
                self.ui = self.view.ui(self, parent=parent, kind='subpanel')
            else:
                self.ui = self.view.ui(self, parent=parent)

    def update(self):
        """Update the tree view."""
        # This is a hack.
        if self.ui and self.ui.control:
            try:
                ed = self.ui._editors[0]
                ed.update_editor()
                self.ui.control.Refresh()
            except (AttributeError, IndexError):
                pass

    # Another name for update.
    refresh = update

    def render(self):
        """Calls render on all render windows associated with this
        browser."""
        for rw in self.renwins:
            rw.render()

    ###########################################################################
    # Non-public interface.
    ###########################################################################
    def _make_default_root(self):
        tree_gen = self.tree_generator
        objs = [x.render_window for x in self.renwins]
        node = TVTKCollectionNode(object=objs,
                                  name="Root",
                                  tree_generator=tree_gen)
        return node

    def _tree_generator_changed(self, tree_gen):
        """Traits event handler."""
        if self._root:
            root_obj = self._root.object
        else:
            root_obj = self.root_object
        if root_obj:
            ro = root_obj
            if not hasattr(root_obj, '__len__'):
                ro = [root_obj]

            self._root = TVTKCollectionNode(object=ro,
                                            name="Root",
                                            tree_generator=tree_gen)
        else:
            self._root = self._make_default_root()

        self.tree_editor.nodes = tree_gen.get_nodes(self.menu)
        self.update()

    def _root_object_changed(self, root_obj):
        """Trait handler called when the root object is assigned to."""
        tg = self.tree_generator
        if root_obj:
            self._root = TVTKCollectionNode(object=root_obj,
                                            name="Root",
                                            tree_generator=tg)
        else:
            self._root = self._make_default_root()
            self.root_object = self._root.object
        self.update()

    def _root_object_items_changed(self, list_event):
        """Trait handler called when the items of the list change."""
        self._root_object_changed(self.root_object)

    def _on_dclick(self, obj):
        """Callback that is called when nodes are double-clicked."""
        if hasattr(obj, 'object') and hasattr(obj.object, 'edit_traits'):
            object = obj.object
            view = object.trait_view()
            view.handler = UICloseHandler(browser=self)
            object.on_trait_change(self.render)
            ui = object.edit_traits(view=view)
示例#5
0
class AVLTreeBrowser(HasTraits):
    # The tree generator to use.
    tree_generator = Trait(SimpleTreeGenerator(), Instance(TreeGenerator))

    # The TVTK render window(s) associated with this browser.
    avl = Instance(AVL)

    avlhandler = Instance(AVLHandler, AVLHandler())
    # The root object to view in the pipeline.  If None (default), the
    # root object is the render_window of the Scene instance passed at
    # object instantiation time.
    root_object = List()

    selected = Any

    # Private traits.
    # The root of the tree to display.
    _root = Any

    ###########################################################################
    # `object` interface.
    ###########################################################################
    def __init__(self, avl=None, **traits):
        """Initializes the object.
        """
        super(AVLTreeBrowser, self).__init__(**traits)
        self.ui = None
        self.view = None
        if avl:
            self.avl = avl

        menu = Menu(Action(name='Refresh', action='editor.update_editor'),
                    Action(name='Expand all', action='editor.expand_all'))
        self.menu = menu

        self._root_object_changed(self.root_object)

        nodes = self.tree_generator.get_nodes(menu)

        self.tree_editor = TreeEditor(nodes=nodes,
                                      orientation='vertical',
                                      hide_root=True,
                                      on_dclick=self._on_dclick,
                                      selected='selected')
        self.view = View(Group(Item(name='_root',
                                    editor=self.tree_editor,
                                    resizable=True),
                               show_labels=False,
                               show_border=False,
                               orientation='vertical'),
                         title='pyAVL',
                         help=False,
                         resizable=True,
                         undo=False,
                         revert=False,
                         width=.3,
                         height=.3,
                         handler=self.avlhandler,
                         toolbar=ToolBar(*self.avlhandler.toolbar_actions))

    ###########################################################################
    # `PipelineBrowser` interface.
    ###########################################################################
    def show(self, parent=None):
        """Show the tree view if not already show.  If optional
        `parent` widget is passed, the tree is displayed inside the
        passed parent widget."""
        # If UI already exists, raise it and return.
        if self.ui and self.ui.control:
            try:
                self.ui.control.Raise()
            except AttributeError:
                pass
            else:
                return
        else:
            # No active ui, create one.
            if parent:
                self.ui = self.view.ui(self, parent=parent, kind='subpanel')
            else:
                self.ui = self.view.ui(self, parent=parent)

    #@on_trait_change('avl?.[(case?.geometry?.[bodies?,surfaces?.sections?])?,run_cases?]')
    #@on_trait_change('avl.case.geometry.refresh_geometry_view')
    # this doesn't work, self.ui is None
    def update(self):
        """Update the tree view."""
        # This is a hack.
        logger.info('updating tree view')
        if self.ui and self.ui.control:
            try:
                ed = self.ui._editors[0]
                ed.update_editor()
                self.ui.control.Refresh()
            except (AttributeError, IndexError):
                pass

    # Another name for update.
    refresh = update

    ###########################################################################
    # Non-public interface.
    ###########################################################################
    def _make_default_root(self):
        tree_gen = self.tree_generator
        objs = [self.avl]
        node = TreeCollectionNode(object=objs,
                                  name="Root",
                                  tree_generator=tree_gen)
        return node

    #@on_trait_change('avl?,avl?.case?,avl?.case?.geometry?,avl?.run_cases?[],avl?.case?.geometry?.surfaces?[],avl?.case?.geometry?.surfaces?.sections?[],avl?.case?.geometry?.bodies?[]')
    @on_trait_change('avl?,avl.case?,avl.case.geometry.refresh_geometry_view')
    def recreate_tree(self):
        self._tree_generator_changed(self.tree_generator)

    def _tree_generator_changed(self, tree_gen):
        """Traits event handler."""
        if self._root:
            root_obj = self._root.object
        else:
            root_obj = self.root_object
        if root_obj:
            ro = root_obj
            if not hasattr(root_obj, '__len__'):
                ro = [root_obj]

            self._root = TreeCollectionNode(object=ro,
                                            name="Root",
                                            tree_generator=tree_gen)
        else:
            self._root = self._make_default_root()

        if hasattr(self, 'tree_editor'):
            self.tree_editor.nodes = tree_gen.get_nodes(self.menu)
        self.update()

    #@on_trait_change('avl.[(case.geometry.[bodies,surfaces.sections]),run_cases]')
    @on_trait_change(
        'avl.case.geometry.bodies_items,avl.case.geometry.surfaces.sections_items'
    )
    def refresh(self):
        self.update()

    def _root_object_changed(self, root_obj):
        """Trait handler called when the root object is assigned to."""
        logger.info('in _root_object_changed')
        tg = self.tree_generator
        if root_obj:
            self._root = TreeCollectionNode(object=root_obj,
                                            name="Root",
                                            tree_generator=tg)
        else:
            self._root = self._make_default_root()
            self.root_object = self._root.object
        self.update()

    def _root_object_items_changed(self, list_event):
        """Trait handler called when the items of the list change."""
        self._root_object_changed(self.root_object)

    def _on_dclick(self, obj):
        """Callback that is called when nodes are double-clicked."""
        if hasattr(obj, 'object') and hasattr(obj.object, 'edit_traits'):
            object = obj.object
            view = object.trait_view()
            view.handler = UICloseHandler(browser=self)
            #object.on_trait_change(self.render)
            ui = object.edit_traits(view=view)
示例#6
0
class AVLTreeBrowser(HasTraits):
    # The tree generator to use.
    tree_generator = Trait(SimpleTreeGenerator(),
                           Instance(TreeGenerator))

    # The TVTK render window(s) associated with this browser.
    avl = Instance(AVL)
    
    avlhandler = Instance(AVLHandler, AVLHandler())
    # The root object to view in the pipeline.  If None (default), the
    # root object is the render_window of the Scene instance passed at
    # object instantiation time.
    root_object = List()
    
    selected = Any
    
    # Private traits.
    # The root of the tree to display.
    _root = Any

    ###########################################################################
    # `object` interface.
    ###########################################################################
    def __init__(self, avl=None, **traits):
        """Initializes the object.
        """
        super(AVLTreeBrowser, self).__init__(**traits)
        self.ui = None
        self.view = None
        if avl:
            self.avl = avl
        
        menu = Menu(Action(name='Refresh', action='editor.update_editor'),
                    Action(name='Expand all', action='editor.expand_all'))
        self.menu = menu

        self._root_object_changed(self.root_object)

        nodes = self.tree_generator.get_nodes(menu)
        
        self.tree_editor = TreeEditor(nodes=nodes,
                                      orientation='vertical',
                                      hide_root=True,
                                      on_dclick=self._on_dclick,
                                      selected='selected')
        self.view = View(Group(Item(name='_root',
                                    editor=self.tree_editor,
                                    resizable=True),
                               show_labels=False,
                               show_border=False,
                               orientation='vertical'),
                         title='pyAVL',
                         help=False,
                         resizable=True, undo=False, revert=False,
                         width=.3, height=.3,
                         handler=self.avlhandler,
                         toolbar=ToolBar(*self.avlhandler.toolbar_actions)
                         )

    ###########################################################################
    # `PipelineBrowser` interface.
    ###########################################################################
    def show(self, parent=None):
        """Show the tree view if not already show.  If optional
        `parent` widget is passed, the tree is displayed inside the
        passed parent widget."""
        # If UI already exists, raise it and return.
        if self.ui and self.ui.control:
            try:
                self.ui.control.Raise()
            except AttributeError:
                pass
            else:
                return
        else:
            # No active ui, create one.
            if parent:
                self.ui = self.view.ui(self, parent=parent, kind='subpanel')
            else:
                self.ui = self.view.ui(self, parent=parent)
    
    #@on_trait_change('avl?.[(case?.geometry?.[bodies?,surfaces?.sections?])?,run_cases?]')
    #@on_trait_change('avl.case.geometry.refresh_geometry_view')
    # this doesn't work, self.ui is None
    def update(self):
        """Update the tree view."""
        # This is a hack.
        logger.info('updating tree view')
        if self.ui and self.ui.control:
            try:
                ed = self.ui._editors[0]
                ed.update_editor()
                self.ui.control.Refresh()
            except (AttributeError, IndexError):
                pass
    # Another name for update.
    refresh = update

    ###########################################################################
    # Non-public interface.
    ###########################################################################
    def _make_default_root(self):
        tree_gen = self.tree_generator
        objs = [self.avl]
        node = TreeCollectionNode(object=objs, name="Root",
                                  tree_generator=tree_gen)
        return node

    #@on_trait_change('avl?,avl?.case?,avl?.case?.geometry?,avl?.run_cases?[],avl?.case?.geometry?.surfaces?[],avl?.case?.geometry?.surfaces?.sections?[],avl?.case?.geometry?.bodies?[]')
    @on_trait_change('avl?,avl.case?,avl.case.geometry.refresh_geometry_view')
    def recreate_tree(self):
        self._tree_generator_changed(self.tree_generator)
    
    def _tree_generator_changed(self, tree_gen):
        """Traits event handler."""
        if self._root:
            root_obj = self._root.object
        else:
            root_obj = self.root_object
        if root_obj:
            ro = root_obj
            if not hasattr(root_obj, '__len__'):
                ro = [root_obj]
                
            self._root = TreeCollectionNode(object=ro,
                                            name="Root",
                                            tree_generator=tree_gen)
        else:
            self._root = self._make_default_root()
        
        if hasattr(self, 'tree_editor'):
            self.tree_editor.nodes = tree_gen.get_nodes(self.menu)
        self.update()

    #@on_trait_change('avl.[(case.geometry.[bodies,surfaces.sections]),run_cases]')
    @on_trait_change('avl.case.geometry.bodies_items,avl.case.geometry.surfaces.sections_items')
    def refresh(self):
        self.update()
    
    def _root_object_changed(self, root_obj):
        """Trait handler called when the root object is assigned to."""
        logger.info('in _root_object_changed')
        tg = self.tree_generator
        if root_obj:
            self._root = TreeCollectionNode(object=root_obj, name="Root",
                                            tree_generator=tg)
        else:
            self._root = self._make_default_root()
            self.root_object = self._root.object
        self.update()

    def _root_object_items_changed(self, list_event):
        """Trait handler called when the items of the list change."""
        self._root_object_changed(self.root_object)
    
    def _on_dclick(self, obj):
        """Callback that is called when nodes are double-clicked."""
        if hasattr(obj, 'object') and hasattr(obj.object, 'edit_traits'):
            object = obj.object
            view = object.trait_view()
            view.handler = UICloseHandler(browser=self)
            #object.on_trait_change(self.render)
            ui = object.edit_traits(view=view)