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
impl ViewportBlueprint
sourcepub fn try_from_db(
blueprint_db: &EntityDb,
query: &LatestAtQuery,
tree_action_sender: Sender<TreeAction>
) -> Self
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.
sourcepub fn is_invalid(&self) -> bool
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.
pub fn space_view_ids(&self) -> impl Iterator<Item = &SpaceViewId> + '_
pub fn view(&self, space_view: &SpaceViewId) -> Option<&SpaceViewBlueprint>
pub fn container( &self, container_id: &ContainerId ) -> Option<&ContainerBlueprint>
pub fn space_view_mut( &mut self, space_view_id: &SpaceViewId ) -> Option<&mut SpaceViewBlueprint>
pub fn remove_space_view( &self, space_view_id: &SpaceViewId, ctx: &ViewerContext<'_> )
sourcepub fn duplicate_space_view(
&self,
space_view_id: &SpaceViewId,
ctx: &ViewerContext<'_>
) -> Option<SpaceViewId>
pub fn duplicate_space_view( &self, space_view_id: &SpaceViewId, ctx: &ViewerContext<'_> ) -> Option<SpaceViewId>
Duplicates a space view and its entity property overrides.
sourcepub fn is_item_valid(
&self,
store_context: &StoreContext<'_>,
item: &Item
) -> bool
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.
fn send_tree_action(&self, action: TreeAction)
pub fn mark_user_interaction(&self, ctx: &ViewerContext<'_>)
sourcepub fn spawn_heuristic_space_views(&self, ctx: &ViewerContext<'_>)
pub fn spawn_heuristic_space_views(&self, ctx: &ViewerContext<'_>)
Spawns new space views if enabled.
sourcepub fn add_space_views(
&self,
space_views: impl Iterator<Item = SpaceViewBlueprint>,
ctx: &ViewerContext<'_>,
parent_container: Option<ContainerId>,
position_in_parent: Option<usize>
) -> Vec<SpaceViewId>
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.
sourcepub fn contents_iter(&self) -> impl Iterator<Item = Contents> + '_
pub fn contents_iter(&self) -> impl Iterator<Item = Contents> + '_
Returns an iterator over all the contents (space views and containers) in the viewport.
sourcepub fn visit_contents(
&self,
visitor: &mut impl FnMut(&Contents, &SmallVec<[ContainerId; 4]>)
)
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.
sourcepub fn visit_contents_in_container(
&self,
container_id: &ContainerId,
visitor: &mut impl FnMut(&Contents, &SmallVec<[ContainerId; 4]>)
)
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 argumentvisitor
’s second argument contains the hierarchy leading to the visited contents, from (and including) the container passed in argument
fn visit_contents_in_container_impl( &self, container_id: &ContainerId, hierarchy: &mut SmallVec<[ContainerId; 4]>, visitor: &mut impl FnMut(&Contents, &SmallVec<[ContainerId; 4]>) )
sourcepub fn find_contents_by(
&self,
predicate: &impl Fn(&Contents) -> bool
) -> Option<Contents>
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.
sourcepub fn find_contents_in_container_by(
&self,
predicate: &impl Fn(&Contents) -> bool,
container_id: &ContainerId
) -> Option<Contents>
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.
sourcepub fn is_contents_in_container(
&self,
contents: &Contents,
container_id: &ContainerId
) -> bool
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.
sourcepub fn find_parent_and_position_index(
&self,
contents: &Contents
) -> Option<(ContainerId, usize)>
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.
fn find_parent_and_position_index_impl( &self, contents: &Contents, container_id: &ContainerId ) -> Option<(ContainerId, usize)>
sourcepub fn add_container(
&self,
kind: ContainerKind,
parent_container: Option<ContainerId>
)
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.
sourcepub fn remove_contents(&self, contents: Contents)
pub fn remove_contents(&self, contents: Contents)
Recursively remove a container or a space view.
sourcepub fn move_contents(
&self,
contents: Contents,
target_container: ContainerId,
target_position_in_container: usize
)
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.
sourcepub fn move_contents_to_new_container(
&self,
contents: Vec<Contents>,
new_container_kind: ContainerKind,
target_container: ContainerId,
target_position_in_container: usize
)
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.
sourcepub fn focus_tab(&self, space_view_id: SpaceViewId)
pub fn focus_tab(&self, space_view_id: SpaceViewId)
Make sure the tab corresponding to this space view is focused.
sourcepub fn set_container_kind(&self, container_id: ContainerId, kind: ContainerKind)
pub fn set_container_kind(&self, container_id: ContainerId, kind: ContainerKind)
Set the kind of the provided container.
sourcepub fn simplify_container(
&self,
container_id: &ContainerId,
simplification_options: SimplificationOptions
)
pub fn simplify_container( &self, container_id: &ContainerId, simplification_options: SimplificationOptions )
Simplify the container tree with the provided options.
sourcepub fn make_all_children_same_size(&self, container_id: &ContainerId)
pub fn make_all_children_same_size(&self, container_id: &ContainerId)
Make all children of the given container the same size.
sourcepub fn is_contents_visible(&self, contents: &Contents) -> bool
pub fn is_contents_visible(&self, contents: &Contents) -> bool
Check the visibility of the provided content.
This function may be called from UI code.
sourcepub fn set_content_visibility(
&self,
ctx: &ViewerContext<'_>,
contents: &Contents,
visible: bool
)
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.
pub fn space_views_containing_entity_path( &self, ctx: &ViewerContext<'_>, path: &EntityPath ) -> Vec<SpaceViewId>
pub fn set_auto_layout(&self, value: bool, ctx: &ViewerContext<'_>)
pub fn auto_layout(&self) -> bool
pub fn set_auto_space_views(&self, value: bool, ctx: &ViewerContext<'_>)
pub fn auto_space_views(&self) -> bool
pub fn set_maximized( &self, space_view_id: Option<SpaceViewId>, ctx: &ViewerContext<'_> )
sourcepub fn save_tree_as_containers(
&self,
tree: &Tree<SpaceViewId>,
ctx: &ViewerContext<'_>
)
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§
impl !Freeze for ViewportBlueprint
impl !RefUnwindSafe for ViewportBlueprint
impl Send for ViewportBlueprint
impl Sync for ViewportBlueprint
impl Unpin for ViewportBlueprint
impl !UnwindSafe for ViewportBlueprint
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moresource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request