Ejemplo n.º 1
0
    def update_editor ( self ):
        """ Updates the editor when the object facet changes external to the
            editor.
        """
        factory = self.factory
        if self._control.canvas is None:
            self._control.canvas = HistogramCanvas( editor = self )

            # Set up the hover/selection listeners (if necessary):
            self.sync_value( factory.hovered,  'hovered',  'to' )
            self.sync_value( factory.selected, 'selected', 'to' )

        data = self.value
        if len( data ) < 2:
            return

        canvas = self._control.canvas
        labels = factory.labels
        if (len( data ) == 2) and (labels is None):
            data, labels = data
        elif isinstance( labels, basestring ):
            labels = xgetattr( aelf.object, labels, None )

        if labels is None:
            labels = [ str( i ) for i in xrange( 1, len( data ) + 1 ) ]

        n = len( data )
        if len( labels ) == (n + 1):
            labels = [ (labels[ i + 1 ] + labels[ i ]) / 2.0
                       for i in xrange( n ) ]

        for i in xrange( n ):
            label = labels[ i ]
            if not isinstance( label, basestring ):
                labels[ i ] = self.string_value( label )

        x_units = self.factory.x_units
        if x_units != '':
            labels = [ '%s%s' % ( label, x_units ) for label in labels ]

        canvas.set( data = data, labels = labels, factory = factory )
        self._control.refresh()
Ejemplo n.º 2
0
    def update_page_name ( self ):
        """ Handles the facet defining a particular page's name being changed.
        """
        changed = False
        for i, value in enumerate( self._uis ):
            dock_control, user_object, view_object, monitoring = value
            if dock_control.control is not None:
                name    = None
                handler = getattr( self.ui.handler, '%s_%s_page_name' %
                                   ( self.object_name, self.name ), None )
                if handler is not None:
                    name = handler( self.ui.info, user_object )

                if name is None:
                    name = str( xgetattr( view_object,
                                          self.factory.page_name[1:], '???' ) )

                changed |= ( dock_control.name != name )
                dock_control.name = name

        if changed:
            self.adapter.update()
Ejemplo n.º 3
0
    def _create_page ( self, object ):
        """ Creates a DockControl for a specified object.
        """
        # Create the view for the object:
        view_object = object
        factory     = self.factory
        if factory.factory is not None:
            view_object = factory.factory( object )

        self.facet_setq( view = factory.view )
        self.sync_value( factory.view_name, 'view', 'from' )
        ui = view_object.edit_facets(
            parent = self.control,
            view   = self.view,
            kind   = factory.ui_kind
        ).set(
            parent = self.ui
        )

        # Get the name of the page being added to the notebook:
        name       = ''
        monitoring = False
        prefix     = '%s_%s_page_' % ( self.object_name, self.name )
        page_name  = self.factory.page_name
        if page_name[:1] == '.':
            name       = xgetattr( view_object, page_name[1:], None )
            monitoring = (name is not None)
            if monitoring:
                handler_name = None
                method       = getattr( self.ui.handler, prefix + 'name', None )
                if method is not None:
                    handler_name = method( self.ui.info, object )

                if handler_name is not None:
                    name = handler_name
                else:
                    name = str( name ) or '???'

                view_object.on_facet_set(
                    self.update_page_name, page_name[1:], dispatch = 'ui'
                )
            else:
                name = ''
        elif page_name != '':
            name = page_name

        if name == '':
            name = user_name_for( view_object.__class__.__name__ )

        # Make sure the name is not a duplicate:
        if not monitoring:
            self._pages[ name ] = count = self._pages.get( name, 0 ) + 1
            if count > 1:
                name += (' %d' % count)

        # Return a new DockControl for the ui, and whether or not its name is
        # being monitored:
        image   = None
        method  = getattr( self.ui.handler, prefix + 'image', None )
        if method is not None:
            image = method( self.ui.info, object )

        dock_control = DockControl(
            max_tab_length = ( 256, 30 )[ factory.allow_tabs ] ).set(
            control        = ui.control,
            id             = name,
            name           = name,
            image          = image,
            export         = factory.export,
            closeable      = factory.deletable,
            dockable       = DockableListElement( ui = ui, editor = self )
        )
        self.set_dock_control_listener( dock_control )

        return ( dock_control, view_object, monitoring )