re_viewport 0.16.0

The central viewport panel of the Rerun viewer.
Documentation
use re_space_view::SpaceViewBlueprint;
use re_types::SpaceViewClassIdentifier;
use re_ui::Icon;
use re_viewer_context::{ContainerId, Item, RecommendedSpaceView};

use crate::context_menu::{ContextMenuAction, ContextMenuContext};

/// Add a space view of the specific class
pub(crate) struct AddSpaceViewAction {
    pub icon: &'static Icon,
    pub id: SpaceViewClassIdentifier,
}

impl ContextMenuAction for AddSpaceViewAction {
    fn supports_item(&self, _ctx: &ContextMenuContext<'_>, item: &Item) -> bool {
        matches!(item, Item::Container(_))
    }

    fn icon(&self) -> Option<&'static re_ui::Icon> {
        Some(self.icon)
    }

    fn label(&self, ctx: &ContextMenuContext<'_>) -> String {
        ctx.viewer_context
            .space_view_class_registry
            .get_class_or_log_error(&self.id)
            .display_name()
            .to_owned()
    }

    fn process_container(&self, ctx: &ContextMenuContext<'_>, container_id: &ContainerId) {
        let space_view = SpaceViewBlueprint::new(self.id, RecommendedSpaceView::root());

        ctx.viewport_blueprint.add_space_views(
            std::iter::once(space_view),
            ctx.viewer_context,
            Some(*container_id),
            None,
        );
        ctx.viewport_blueprint
            .mark_user_interaction(ctx.viewer_context);
    }
}