pub struct ViewportBlueprint {
    pub space_views: BTreeMap<SpaceViewId, SpaceViewBlueprint>,
    pub containers: BTreeMap<ContainerId, ContainerBlueprint>,
    pub root_container: ContainerId,
    pub tree: Tree<SpaceViewId>,
    pub maximized: Option<SpaceViewId>,
    auto_layout: AtomicBool,
    auto_space_views: AtomicBool,
    past_viewer_recommendations: IntSet<ViewerRecommendationHash>,
    tree_action_sender: Sender<TreeAction>,
}
Expand description

Describes the layout and contents of the Viewport Panel.

Fields§

§space_views: BTreeMap<SpaceViewId, SpaceViewBlueprint>

Where the space views are stored.

Not a hashmap in order to preserve the order of the space views.

§containers: BTreeMap<ContainerId, ContainerBlueprint>

All the containers found in the viewport.

§root_container: ContainerId

The root container.

§tree: Tree<SpaceViewId>

The layouts of all the space views.

§maximized: Option<SpaceViewId>

Show one tab as maximized?

§auto_layout: AtomicBool

Whether the viewport layout is determined automatically.

Set to false the first time the user messes around with the viewport blueprint. Note: we use a mutex here because writes needs to be effective immediately during the frame.

§auto_space_views: AtomicBool

Whether space views should be created automatically.

Note: we use a mutex here because writes needs to be effective immediately during the frame.

§past_viewer_recommendations: IntSet<ViewerRecommendationHash>

Hashes of all recommended space views the viewer has already added and that should not be added again.

§tree_action_sender: Sender<TreeAction>

Channel to pass Blueprint mutation messages back to the Viewport.

Implementations§

source§

impl ViewportBlueprint

source

pub fn try_from_db( blueprint_db: &EntityDb, query: &LatestAtQuery, tree_action_sender: Sender<TreeAction> ) -> Self

Attempt to load a SpaceViewBlueprint from the blueprint store.

source

pub fn is_invalid(&self) -> bool

Determine whether all views in a blueprint are invalid.

This most commonly happens due to a change in struct definition that breaks the definition of a serde-field, which means all views will become invalid.

Note: the invalid check is used to potentially reset the blueprint, so we take the conservative stance that if any view is still usable we will still treat the blueprint as valid and show it.

source

pub fn space_view_ids(&self) -> impl Iterator<Item = &SpaceViewId> + '_

source

pub fn view(&self, space_view: &SpaceViewId) -> Option<&SpaceViewBlueprint>

source

pub fn container( &self, container_id: &ContainerId ) -> Option<&ContainerBlueprint>

source

pub fn space_view_mut( &mut self, space_view_id: &SpaceViewId ) -> Option<&mut SpaceViewBlueprint>

source

pub fn remove_space_view( &self, space_view_id: &SpaceViewId, ctx: &ViewerContext<'_> )

source

pub fn duplicate_space_view( &self, space_view_id: &SpaceViewId, ctx: &ViewerContext<'_> ) -> Option<SpaceViewId>

Duplicates a space view and its entity property overrides.

source

pub fn is_item_valid( &self, store_context: &StoreContext<'_>, item: &Item ) -> bool

If false, the item is referring to data that is not present in this blueprint.

TODO(#5742): note that Item::DataResult with entity path set to the space origin or some of its descendent are always considered valid.

source

fn send_tree_action(&self, action: TreeAction)

source

pub fn mark_user_interaction(&self, ctx: &ViewerContext<'_>)

source

pub fn spawn_heuristic_space_views(&self, ctx: &ViewerContext<'_>)

Spawns new space views if enabled.

source

pub fn add_space_views( &self, space_views: impl Iterator<Item = SpaceViewBlueprint>, ctx: &ViewerContext<'_>, parent_container: Option<ContainerId>, position_in_parent: Option<usize> ) -> Vec<SpaceViewId>

Add a set of space views to the viewport.

The space view is added to the root container, or, if provided, to a given parent container. The list of created space view IDs is returned.

Note that this doesn’t focus the corresponding tab. Use Self::focus_tab with the returned ID if needed.

source

pub fn contents_iter(&self) -> impl Iterator<Item = Contents> + '_

Returns an iterator over all the contents (space views and containers) in the viewport.

source

pub fn visit_contents( &self, visitor: &mut impl FnMut(&Contents, &SmallVec<[ContainerId; 4]>) )

Walk the entire Contents tree, starting from the root container.

See Self::visit_contents_in_container for details.

source

pub fn visit_contents_in_container( &self, container_id: &ContainerId, visitor: &mut impl FnMut(&Contents, &SmallVec<[ContainerId; 4]>) )

Walk the subtree defined by the provided container id and call visitor for each Contents.

Note:

  • visitor is first called for the container passed in argument
  • visitor’s second argument contains the hierarchy leading to the visited contents, from (and including) the container passed in argument
source

fn visit_contents_in_container_impl( &self, container_id: &ContainerId, hierarchy: &mut SmallVec<[ContainerId; 4]>, visitor: &mut impl FnMut(&Contents, &SmallVec<[ContainerId; 4]>) )

source

pub fn find_contents_by( &self, predicate: &impl Fn(&Contents) -> bool ) -> Option<Contents>

Given a predicate, finds the (first) matching contents by recursively walking from the root container.

source

pub fn find_contents_in_container_by( &self, predicate: &impl Fn(&Contents) -> bool, container_id: &ContainerId ) -> Option<Contents>

Given a predicate, finds the (first) matching contents by recursively walking from the given container.

source

pub fn is_contents_in_container( &self, contents: &Contents, container_id: &ContainerId ) -> bool

Checks if some content is (directly or indirectly) contained in the given container.

source

pub fn find_parent_and_position_index( &self, contents: &Contents ) -> Option<(ContainerId, usize)>

Given a container or a space view, find its enclosing container and its position within it.

source

fn find_parent_and_position_index_impl( &self, contents: &Contents, container_id: &ContainerId ) -> Option<(ContainerId, usize)>

source

pub fn add_container( &self, kind: ContainerKind, parent_container: Option<ContainerId> )

Add a container of the provided kind.

The container is added to the root container or, if provided, to the given parent container.

source

pub fn remove_contents(&self, contents: Contents)

Recursively remove a container or a space view.

source

pub fn move_contents( &self, contents: Contents, target_container: ContainerId, target_position_in_container: usize )

Move the contents container or space view to the specified target container and position.

source

pub fn move_contents_to_new_container( &self, contents: Vec<Contents>, new_container_kind: ContainerKind, target_container: ContainerId, target_position_in_container: usize )

Move some Contents to a newly created container of the given kind.

source

pub fn focus_tab(&self, space_view_id: SpaceViewId)

Make sure the tab corresponding to this space view is focused.

source

pub fn set_container_kind(&self, container_id: ContainerId, kind: ContainerKind)

Set the kind of the provided container.

source

pub fn simplify_container( &self, container_id: &ContainerId, simplification_options: SimplificationOptions )

Simplify the container tree with the provided options.

source

pub fn make_all_children_same_size(&self, container_id: &ContainerId)

Make all children of the given container the same size.

source

pub fn is_contents_visible(&self, contents: &Contents) -> bool

Check the visibility of the provided content.

This function may be called from UI code.

source

pub fn set_content_visibility( &self, ctx: &ViewerContext<'_>, contents: &Contents, visible: bool )

Sets the visibility for the provided content.

This function may be called from UI code.

source

pub fn space_views_containing_entity_path( &self, ctx: &ViewerContext<'_>, path: &EntityPath ) -> Vec<SpaceViewId>

source

pub fn set_auto_layout(&self, value: bool, ctx: &ViewerContext<'_>)

source

pub fn auto_layout(&self) -> bool

source

pub fn set_auto_space_views(&self, value: bool, ctx: &ViewerContext<'_>)

source

pub fn auto_space_views(&self) -> bool

source

pub fn set_maximized( &self, space_view_id: Option<SpaceViewId>, ctx: &ViewerContext<'_> )

source

pub fn save_tree_as_containers( &self, tree: &Tree<SpaceViewId>, ctx: &ViewerContext<'_> )

Save the current state of the viewport to the blueprint store. This should only be called if the tree was edited.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Az for T

source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

source§

fn cast_from(src: Src) -> Dst

Casts the value.
source§

impl<T> CheckedAs for T

source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

source§

fn lossy_into(self) -> Dst

Performs the conversion.
source§

impl<T> OverflowingAs for T

source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> SaturatingAs for T

source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> To for T
where T: ?Sized,

§

fn to<T>(self) -> T
where Self: Into<T>,

Converts to T by calling Into<T>::into.
§

fn try_to<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Tries to convert to T by calling TryInto<T>::try_into.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> UnwrappedAs for T

source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> WrappingAs for T

source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
§

impl<T> Ungil for T
where T: Send,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,