re_test_viewport 0.34.0

A viewport used for tests
Documentation
use re_chunk::EntityPath;
use re_log_types::example_components::MyPoint;
use re_sdk_types::Archetype as _;
use re_ui::Help;
use re_viewer_context::external::re_chunk_store::external::re_chunk;
use re_viewer_context::{
    IdentifiedViewSystem, ViewClass, ViewSpawnHeuristics, ViewState, ViewerContext,
    VisualizerExecutionOutput, VisualizerQueryInfo, VisualizerSystem, suggest_view_for_each_entity,
};

#[derive(Default)]
pub struct TestView;

#[derive(re_byte_size::SizeBytes)]
pub struct TestViewState;

impl ViewState for TestViewState {
    fn as_any(&self) -> &dyn std::any::Any {
        self
    }

    fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
        self
    }

    fn heap_size_bytes(&self) -> u64 {
        re_viewer_context::SizeBytes::heap_size_bytes(self)
    }
}

#[derive(Default)]
pub struct TestSystem;

impl VisualizerSystem for TestSystem {
    fn visualizer_query_info(
        &self,
        _app_options: &re_viewer_context::AppOptions,
    ) -> re_viewer_context::VisualizerQueryInfo {
        VisualizerQueryInfo::single_required_component::<MyPoint>(
            &re_log_types::example_components::MyPoints::descriptor_points(),
            &re_log_types::example_components::MyPoints::all_components(),
        )
    }

    fn execute(
        &self,
        _ctx: &re_viewer_context::ViewContext<'_>,
        _query: &re_viewer_context::ViewQuery<'_>,
        _context_systems: &re_viewer_context::ViewContextCollection,
    ) -> Result<VisualizerExecutionOutput, re_viewer_context::ViewSystemExecutionError> {
        Ok(VisualizerExecutionOutput::default())
    }
}

impl IdentifiedViewSystem for TestSystem {
    fn identifier() -> re_viewer_context::ViewSystemIdentifier {
        re_viewer_context::external::re_string_interner::intern_static!(
            re_viewer_context::ViewSystemIdentifier,
            "Test"
        )
    }
}

impl ViewClass for TestView {
    fn identifier() -> re_sdk_types::ViewClassIdentifier
    where
        Self: Sized,
    {
        "TestView".into()
    }

    fn display_name(&self) -> &'static str {
        "Test view"
    }

    fn help(&self, _os: egui::os::OperatingSystem) -> re_ui::Help {
        Help::new("Test view").markdown("Only used in tests.")
    }

    fn on_register(
        &self,
        system_registry: &mut re_viewer_context::ViewSystemRegistrator<'_>,
    ) -> Result<(), re_viewer_context::ViewClassRegistryError> {
        system_registry.register_visualizer::<TestSystem>()?;

        system_registry
            .register_fallback_provider(MyPoint::partial_descriptor().component, |_ctx| {
                MyPoint::new(0.0, 0.0)
            });

        Ok(())
    }

    fn new_state(&self) -> Box<dyn re_viewer_context::ViewState> {
        Box::new(TestViewState {})
    }

    fn layout_priority(&self) -> re_viewer_context::ViewClassLayoutPriority {
        re_viewer_context::ViewClassLayoutPriority::Low
    }

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

    fn ui(
        &self,
        _ctx: &ViewerContext<'_>,
        _missing_chunk_reporter: &re_viewer_context::MissingChunkReporter,
        ui: &mut egui::Ui,
        _state: &mut dyn re_viewer_context::ViewState,
        _query: &re_viewer_context::ViewQuery<'_>,
        _system_output: re_viewer_context::SystemExecutionOutput,
    ) -> Result<(), re_viewer_context::ViewSystemExecutionError> {
        ui.label("Test view");
        Ok(())
    }
}