Skip to main content

ViewClass

Trait ViewClass 

Source
pub trait ViewClass: Send + Sync {
Show 20 methods // Required methods fn identifier() -> ViewClassIdentifier where Self: Sized; fn display_name(&self) -> &'static str; fn help(&self, os: OperatingSystem) -> Help; fn on_register( &self, system_registry: &mut ViewSystemRegistrator<'_>, ) -> Result<(), ViewClassRegistryError>; fn new_state(&self) -> Box<dyn ViewState>; fn layout_priority(&self) -> ViewClassLayoutPriority; fn spawn_heuristics( &self, ctx: &ViewerContext<'_>, include_entity: &dyn Fn(&EntityPath) -> bool, ) -> ViewSpawnHeuristics; fn ui( &self, ctx: &ViewerContext<'_>, missing_chunk_reporter: &MissingChunkReporter, ui: &mut Ui, state: &mut dyn ViewState, query: &ViewQuery<'_>, system_output: SystemExecutionOutput, ) -> Result<ViewClassUiOutput, ViewSystemExecutionError>; // Provided methods fn recommendation_order(&self) -> i32 { ... } fn is_experimental(&self) -> bool { ... } fn icon(&self) -> &'static Icon { ... } fn preferred_tile_aspect_ratio(&self, _state: &dyn ViewState) -> Option<f32> { ... } fn supports_visible_time_range(&self) -> bool { ... } fn default_query_range(&self, _state: &dyn ViewState) -> QueryRange { ... } fn recommended_origin_for_entities( &self, entities: &IntSet<EntityPath>, _entity_db: &EntityDb, ) -> Option<EntityPath> { ... } fn recommended_visualizers_for_entity( &self, entity_path: &EntityPath, visualizers_with_reason: &[(ViewSystemIdentifier, &VisualizableReason)], indicated_entities_per_visualizer: &PerVisualizerType<&IndicatedEntities>, ) -> RecommendedVisualizers { ... } fn visualizers_section<'a>( &'a self, _ctx: &'a ViewContext<'a>, ) -> Option<VisualizersSectionOutput<'a>> { ... } fn selection_ui( &self, _ctx: &ViewerContext<'_>, _ui: &mut Ui, _state: &mut dyn ViewState, _space_origin: &EntityPath, _view_id: ViewId, ) -> Result<(), ViewSystemExecutionError> { ... } fn extra_title_bar_ui( &self, _ctx: &ViewerContext<'_>, _ui: &mut Ui, _state: &mut dyn ViewState, _space_origin: &EntityPath, _view_id: ViewId, ) -> Result<(), ViewSystemExecutionError> { ... } fn handle_component_drop( &self, _ctx: &ViewerContext<'_>, _view_id: ViewId, _component_paths: &[ComponentPath], _released: bool, ) -> DragAndDropFeedback { ... }
}
Expand description

Defines a class of view without any concrete types making it suitable for storage and interfacing.

Each View in the viewer’s viewport has a single class assigned immutable at its creation time. The class defines all aspects of its behavior. It determines which entities are queried, how they are rendered, and how the user can interact with them.

Required Methods§

Source

fn identifier() -> ViewClassIdentifier
where Self: Sized,

Identifier string of this view class.

By convention we use PascalCase.

Source

fn display_name(&self) -> &'static str

User-facing name of this view class.

Used for UI display.

Source

fn help(&self, os: OperatingSystem) -> Help

Source

fn on_register( &self, system_registry: &mut ViewSystemRegistrator<'_>, ) -> Result<(), ViewClassRegistryError>

Called once upon registration of the class

This can be used to register all built-in crate::ViewContextSystem and crate::VisualizerSystem.

Source

fn new_state(&self) -> Box<dyn ViewState>

Called once for every new view instance of this class.

The state is not persisted across viewer sessions, only shared frame-to-frame.

Source

fn layout_priority(&self) -> ViewClassLayoutPriority

Controls how likely this view will get a large tile in the ui.

Source

fn spawn_heuristics( &self, ctx: &ViewerContext<'_>, include_entity: &dyn Fn(&EntityPath) -> bool, ) -> ViewSpawnHeuristics

Determines which views should be spawned by default for this class.

Only entities matching include_entity should be considered, though this is only a suggestion and may be overwritten if a view decides to display more data.

Source

fn ui( &self, ctx: &ViewerContext<'_>, missing_chunk_reporter: &MissingChunkReporter, ui: &mut Ui, state: &mut dyn ViewState, query: &ViewQuery<'_>, system_output: SystemExecutionOutput, ) -> Result<ViewClassUiOutput, ViewSystemExecutionError>

Draws the ui for this view class and handles ui events.

The passed state is kept frame-to-frame.

TODO(wumpf): Right now the ui methods control when and how to create re_renderer::ViewBuilders. In the future, we likely want to move view builder handling to re_viewport with minimal configuration options exposed via crate::ViewClass.

Provided Methods§

Source

fn recommendation_order(&self) -> i32

Ordering hint for view class recommendations. Lower values are recommended more.

If tied, the display name is used as a tiebreaker in lexicographical order.

Source

fn is_experimental(&self) -> bool

Whether this view class is still experimental.

Experimental views are shown in a separate “Experimental” section at the bottom of the “add view” picker (with a warning icon), and surface an inline warning banner in the selection panel when a view of this kind is selected. They are otherwise fully functional.

Source

fn icon(&self) -> &'static Icon

Icon used to identify this view class.

Source

fn preferred_tile_aspect_ratio(&self, _state: &dyn ViewState) -> Option<f32>

Preferred aspect ratio for the ui tiles of this view.

Source

fn supports_visible_time_range(&self) -> bool

Controls whether the visible time range UI should be displayed for this view.

Source

fn default_query_range(&self, _state: &dyn ViewState) -> QueryRange

Default query range for this view.

Source

fn recommended_origin_for_entities( &self, entities: &IntSet<EntityPath>, _entity_db: &EntityDb, ) -> Option<EntityPath>

Determines a suitable origin given the provided set of entities.

This function only considers the transform topology, disregarding the actual visualizability of the entities.

Source

fn recommended_visualizers_for_entity( &self, entity_path: &EntityPath, visualizers_with_reason: &[(ViewSystemIdentifier, &VisualizableReason)], indicated_entities_per_visualizer: &PerVisualizerType<&IndicatedEntities>, ) -> RecommendedVisualizers

Auto picked visualizers for an entity if there was not explicit selection.

Helpful for customizing fallback behavior for types that are insufficient to determine indicated on their own.

Will only be called for entities where the selected visualizers have not been overridden by the blueprint.

visualizers_with_reason contains the visualizers that are visualizable for this entity, along with the reason why they are visualizable.

This interface provides a default implementation which will return all visualizers which are both visualizable and indicated for the given entity.

Source

fn visualizers_section<'a>( &'a self, _ctx: &'a ViewContext<'a>, ) -> Option<VisualizersSectionOutput<'a>>

Custom UI and add-visualizer options for the “Visualizers” section in the selection panel.

Returns None if the view doesn’t provide a custom visualizers section (the default).

Source

fn selection_ui( &self, _ctx: &ViewerContext<'_>, _ui: &mut Ui, _state: &mut dyn ViewState, _space_origin: &EntityPath, _view_id: ViewId, ) -> Result<(), ViewSystemExecutionError>

Ui shown when the user selects a view of this class.

Source

fn extra_title_bar_ui( &self, _ctx: &ViewerContext<'_>, _ui: &mut Ui, _state: &mut dyn ViewState, _space_origin: &EntityPath, _view_id: ViewId, ) -> Result<(), ViewSystemExecutionError>

Additional UI displayed in the tab title bar, between the “maximize” and “help” buttons.

Note: this is a right-to-left layout.

Source

fn handle_component_drop( &self, _ctx: &ViewerContext<'_>, _view_id: ViewId, _component_paths: &[ComponentPath], _released: bool, ) -> DragAndDropFeedback

Handle components being dragged over a view of this class.

This is the component-drop counterpart to the generic entity-drop handling done by the viewport. The viewport calls this for every view tile hovered by a Components payload, then uses the returned DragAndDropFeedback to drive the cursor and drop-target frame — just like it does for entities. Implementors only decide acceptability and, when released is true, perform the actual mutation.

The default implementation ignores components (most views don’t accept them).

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§