Struct rerun::external::re_viewer_context::ComponentUiRegistry
source · pub struct ComponentUiRegistry {
fallback_ui: Box<dyn Fn(&ViewerContext<'_>, &mut Ui, UiLayout, &LatestAtQuery, &EntityDb, &EntityPath, Option<RowId>, &(dyn Array + 'static)) + Sync + Send>,
legacy_display_component_uis: BTreeMap<ComponentName, Box<dyn Fn(&ViewerContext<'_>, &mut Ui, UiLayout, &LatestAtQuery, &EntityDb, &EntityPath, Option<RowId>, &(dyn Array + 'static)) + Sync + Send>>,
component_singleline_edit_or_view: BTreeMap<ComponentName, Box<dyn Fn(&ViewerContext<'_>, &mut Ui, &(dyn Array + 'static), EditOrView) -> Option<Box<dyn Array>> + Sync + Send>>,
component_multiline_edit_or_view: BTreeMap<ComponentName, Box<dyn Fn(&ViewerContext<'_>, &mut Ui, &(dyn Array + 'static), EditOrView) -> Option<Box<dyn Array>> + Sync + Send>>,
}
Expand description
How to display components in a Ui.
Fields§
§fallback_ui: Box<dyn Fn(&ViewerContext<'_>, &mut Ui, UiLayout, &LatestAtQuery, &EntityDb, &EntityPath, Option<RowId>, &(dyn Array + 'static)) + Sync + Send>
§legacy_display_component_uis: BTreeMap<ComponentName, Box<dyn Fn(&ViewerContext<'_>, &mut Ui, UiLayout, &LatestAtQuery, &EntityDb, &EntityPath, Option<RowId>, &(dyn Array + 'static)) + Sync + Send>>
§component_singleline_edit_or_view: BTreeMap<ComponentName, Box<dyn Fn(&ViewerContext<'_>, &mut Ui, &(dyn Array + 'static), EditOrView) -> Option<Box<dyn Array>> + Sync + Send>>
§component_multiline_edit_or_view: BTreeMap<ComponentName, Box<dyn Fn(&ViewerContext<'_>, &mut Ui, &(dyn Array + 'static), EditOrView) -> Option<Box<dyn Array>> + Sync + Send>>
Implementations§
source§impl ComponentUiRegistry
impl ComponentUiRegistry
pub fn new( fallback_ui: Box<dyn Fn(&ViewerContext<'_>, &mut Ui, UiLayout, &LatestAtQuery, &EntityDb, &EntityPath, Option<RowId>, &(dyn Array + 'static)) + Sync + Send> ) -> ComponentUiRegistry
sourcepub fn add_legacy_display_ui(
&mut self,
name: ComponentName,
callback: Box<dyn Fn(&ViewerContext<'_>, &mut Ui, UiLayout, &LatestAtQuery, &EntityDb, &EntityPath, Option<RowId>, &(dyn Array + 'static)) + Sync + Send>
)
pub fn add_legacy_display_ui( &mut self, name: ComponentName, callback: Box<dyn Fn(&ViewerContext<'_>, &mut Ui, UiLayout, &LatestAtQuery, &EntityDb, &EntityPath, Option<RowId>, &(dyn Array + 'static)) + Sync + Send> )
Registers how to show a given component in the UI.
If the component has already a display UI registered, the new callback replaces the old one.
sourcepub fn add_singleline_edit_or_view<C>(
&mut self,
callback: impl Fn(&ViewerContext<'_>, &mut Ui, &mut MaybeMutRef<'_, C>) -> Response + Send + Sync + 'static
)where
C: Component,
pub fn add_singleline_edit_or_view<C>(
&mut self,
callback: impl Fn(&ViewerContext<'_>, &mut Ui, &mut MaybeMutRef<'_, C>) -> Response + Send + Sync + 'static
)where
C: Component,
Registers how to view, and maybe edit, a given component in the UI in a single list item line.
If the component already has a singleline editor registered, the new callback replaces the old one.
Typed editors do not handle absence of a value as well as lists of values and will be skipped in these cases. (This means that there must always be at least a fallback value available.)
The value is only updated if the editor callback returns a egui::Response::changed
.
On the flip side, this means that even if the data has not changed it may be written back to the store.
This can be relevant for transitioning from a fallback or default value to a custom value even if they are equal.
Design principles for writing editors:
- This is the value column function for a
re_ui::list_item::PropertyContent
, behave accordingly!- Unless you introduce hierarchy yourself, use
re_ui::list_item::ListItem::show_flat
.
- Unless you introduce hierarchy yourself, use
- Don’t show a tooltip, this is solved at a higher level.
- Try not to assume context of the component beyond its inherent semantics
(e.g. if you get a
Color
you can’t assume whether it’s a background color or a point color) - The returned
egui::Response
should be for the widget that has the tooltip, not any pop-up content.- Make sure that changes are propagated via
egui::Response::mark_changed
if necessary.
- Make sure that changes are propagated via
sourcepub fn add_multiline_edit_or_view<C>(
&mut self,
callback: impl Fn(&ViewerContext<'_>, &mut Ui, &mut MaybeMutRef<'_, C>) -> Response + Send + Sync + 'static
)where
C: Component,
pub fn add_multiline_edit_or_view<C>(
&mut self,
callback: impl Fn(&ViewerContext<'_>, &mut Ui, &mut MaybeMutRef<'_, C>) -> Response + Send + Sync + 'static
)where
C: Component,
Registers how to view, and maybe edit, a given component in the UI with multiple list items.
If the component already has a singleline editor registered, the new callback replaces the old one.
Typed editors do not handle absence of a value as well as lists of values and will be skipped in these cases. (This means that there must always be at least a fallback value available.)
The value is only updated if the editor callback returns a egui::Response::changed
.
On the flip side, this means that even if the data has not changed it may be written back to the store.
This can be relevant for transitioning from a fallback or default value to a custom value even if they are equal.
Design principles for writing editors:
- This is the content function for hierarchical
re_ui::list_item::ListItem
, behave accordingly! - Try not to assume context of the component beyond its inherent semantics
(e.g. if you get a
Color
you can’t assume whether it’s a background color or a point color) - The returned
egui::Response
should be for the widget that has the tooltip, not any pop-up content.- Make sure that changes are propagated via
egui::Response::mark_changed
if necessary.
- Make sure that changes are propagated via
sourcepub fn registered_ui_types(&self, name: ComponentName) -> ComponentUiTypes
pub fn registered_ui_types(&self, name: ComponentName) -> ComponentUiTypes
Queries which UI types are registered for a component.
Note that there’s always a fallback display UI.
sourcepub fn ui(
&self,
ctx: &ViewerContext<'_>,
ui: &mut Ui,
ui_layout: UiLayout,
query: &LatestAtQuery,
db: &EntityDb,
entity_path: &EntityPath,
component_name: ComponentName,
unit: &UnitChunkShared,
instance: &Instance
)
pub fn ui( &self, ctx: &ViewerContext<'_>, ui: &mut Ui, ui_layout: UiLayout, query: &LatestAtQuery, db: &EntityDb, entity_path: &EntityPath, component_name: ComponentName, unit: &UnitChunkShared, instance: &Instance )
Show a UI for a component instance.
Has a fallback to show an info text if the instance is not specific,
but in these cases LatestAtComponentResults::data_ui
should be used instead!
sourcepub fn ui_raw(
&self,
ctx: &ViewerContext<'_>,
ui: &mut Ui,
ui_layout: UiLayout,
query: &LatestAtQuery,
db: &EntityDb,
entity_path: &EntityPath,
component_name: ComponentName,
row_id: Option<RowId>,
component_raw: &(dyn Array + 'static)
)
pub fn ui_raw( &self, ctx: &ViewerContext<'_>, ui: &mut Ui, ui_layout: UiLayout, query: &LatestAtQuery, db: &EntityDb, entity_path: &EntityPath, component_name: ComponentName, row_id: Option<RowId>, component_raw: &(dyn Array + 'static) )
Show a UI for a single raw component.
sourcepub fn multiline_edit_ui(
&self,
ctx: &QueryContext<'_>,
ui: &mut Ui,
origin_db: &EntityDb,
blueprint_write_path: &EntityPath,
component_name: ComponentName,
row_id: Option<RowId>,
component_array: Option<&(dyn Array + 'static)>,
fallback_provider: &dyn ComponentFallbackProvider
)
pub fn multiline_edit_ui( &self, ctx: &QueryContext<'_>, ui: &mut Ui, origin_db: &EntityDb, blueprint_write_path: &EntityPath, component_name: ComponentName, row_id: Option<RowId>, component_array: Option<&(dyn Array + 'static)>, fallback_provider: &dyn ComponentFallbackProvider )
Show a multi-line editor for this instance of this component.
Changes will be written to the blueprint store at the given override path.
Any change is expected to be effective next frame and passed in via the component_query_result
parameter.
(Otherwise, this method is agnostic to where the component data is stored.)
sourcepub fn singleline_edit_ui(
&self,
ctx: &QueryContext<'_>,
ui: &mut Ui,
origin_db: &EntityDb,
blueprint_write_path: &EntityPath,
component_name: ComponentName,
row_id: Option<RowId>,
component_query_result: Option<&(dyn Array + 'static)>,
fallback_provider: &dyn ComponentFallbackProvider
)
pub fn singleline_edit_ui( &self, ctx: &QueryContext<'_>, ui: &mut Ui, origin_db: &EntityDb, blueprint_write_path: &EntityPath, component_name: ComponentName, row_id: Option<RowId>, component_query_result: Option<&(dyn Array + 'static)>, fallback_provider: &dyn ComponentFallbackProvider )
Show a single-line editor for this instance of this component.
Changes will be written to the blueprint store at the given override path.
Any change is expected to be effective next frame and passed in via the component_query_result
parameter.
(Otherwise, this method is agnostic to where the component data is stored.)
pub fn edit_ui_raw( &self, ctx: &QueryContext<'_>, ui: &mut Ui, origin_db: &EntityDb, blueprint_write_path: &EntityPath, component_name: ComponentName, row_id: Option<RowId>, component_raw: &(dyn Array + 'static), allow_multiline: bool )
sourcepub fn try_show_edit_ui(
&self,
ctx: &ViewerContext<'_>,
ui: &mut Ui,
raw_current_value: &(dyn Array + 'static),
blueprint_write_path: &EntityPath,
component_name: ComponentName,
allow_multiline: bool
) -> bool
pub fn try_show_edit_ui( &self, ctx: &ViewerContext<'_>, ui: &mut Ui, raw_current_value: &(dyn Array + 'static), blueprint_write_path: &EntityPath, component_name: ComponentName, allow_multiline: bool ) -> bool
Tries to show a UI for editing a component.
Returns true
if the passed component is a single value and has a registered
editor for multiline or singleline editing respectively.
Auto Trait Implementations§
impl Freeze for ComponentUiRegistry
impl !RefUnwindSafe for ComponentUiRegistry
impl Send for ComponentUiRegistry
impl Sync for ComponentUiRegistry
impl Unpin for ComponentUiRegistry
impl !UnwindSafe for ComponentUiRegistry
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