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()
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()
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 )