Skip to content

Commit

Permalink
Generate archetype field info (opt-in for a single type so far) and u…
Browse files Browse the repository at this point in the history
…se it in blueprint property ui (#6413)

### What

* Part of  #6237
* I think the "only" part left now is to use this for all blueprint
properties
       *  the tricky bit here is that this is dependent on  #4194

This creates an tight nit & generic coupling from our type definitions
to the ui! This is to be used in all blueprint properties, so far used
on `PlotLegend` only.
<img width="320" alt="image"
src="https://github.com/rerun-io/rerun/assets/1220815/405b6ecc-2db1-4ad5-9b3c-aad96c8ad074">

Drawbacks:
* lower snake case because that's what our fields look like - we could
change that easily but there's some value to that because that's what
all SDKs use as field names. Very much open for discussion!
* some parts of the doc strings might be weird outside of the context of
the ui, but I can live with that

Future stuff:
* we could very very easily now also add reference doc links in there
via some linking mechanism (viewer could choose depending on preference
or source sdk)

### Checklist
* [x] I have read and agree to [Contributor
Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and
the [Code of
Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)
* [x] I've included a screenshot or gif (if applicable)
* [x] I have tested the web demo (if applicable):
* Using examples from latest `main` build:
[rerun.io/viewer](https://rerun.io/viewer/pr/6413?manifest_url=https://app.rerun.io/version/main/examples_manifest.json)
* Using full set of examples from `nightly` build:
[rerun.io/viewer](https://rerun.io/viewer/pr/6413?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json)
* [x] The PR title and labels are set such as to maximize their
usefulness for the next release's CHANGELOG
* [x] If applicable, add a new check to the [release
checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)!

- [PR Build Summary](https://build.rerun.io/pr/6413)
- [Recent benchmark results](https://build.rerun.io/graphs/crates.html)
- [Wasm size tracking](https://build.rerun.io/graphs/sizes.html)

To run all checks from `main`, comment on the PR with `@rerun-bot
full-check`.
  • Loading branch information
Wumpf committed May 23, 2024
1 parent be84090 commit 2c20040
Show file tree
Hide file tree
Showing 56 changed files with 618 additions and 204 deletions.
1 change: 1 addition & 0 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4643,6 +4643,7 @@ dependencies = [
name = "re_space_view"
version = "0.17.0-alpha.2"
dependencies = [
"ahash",
"egui",
"re_data_store",
"re_entity_db",
Expand Down
4 changes: 4 additions & 0 deletions crates/re_log_types/src/example_components.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ impl re_types_core::Archetype for MyPoints {
"example.MyPoints".into()
}

fn display_name() -> &'static str {
"MyPoints"
}

fn required_components() -> ::std::borrow::Cow<'static, [re_types_core::ComponentName]> {
vec![MyPoint::name()].into()
}
Expand Down
1 change: 1 addition & 0 deletions crates/re_space_view/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ re_ui.workspace = true
re_viewer_context.workspace = true
re_viewport_blueprint.workspace = true

ahash.workspace = true
egui.workspace = true
54 changes: 35 additions & 19 deletions crates/re_space_view/src/view_property_ui.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use ahash::HashMap;
use re_types_core::Archetype;
use re_ui::list_item;
use re_viewer_context::{SpaceViewId, ViewerContext};
Expand All @@ -22,34 +23,49 @@ pub fn view_property_ui<A: Archetype>(
component_names.iter().copied(),
);

let field_info_per_component: HashMap<_, _> = A::field_infos()
.map(|field_infos| {
field_infos
.iter()
.cloned()
.map(|field_info| (field_info.component_name, field_info))
.collect()
})
.unwrap_or_default();

let sub_prop_ui = |re_ui: &re_ui::ReUi, ui: &mut egui::Ui| {
for component_name in component_names.as_ref() {
if component_name.is_indicator_component() {
continue;
}

list_item::ListItem::new(re_ui)
let field_info = field_info_per_component.get(component_name);
let display_name =
field_info.map_or_else(|| component_name.short_name(), |info| info.display_name);

let list_item_response = list_item::ListItem::new(re_ui)
.interactive(false)
.show_flat(
ui,
// TODO(andreas): Note that we loose the archetype's field name here, instead we label the item with the component name.
list_item::PropertyContent::new(component_name.short_name()).value_fn(
|_, ui, _| {
ctx.component_ui_registry.edit_ui(
ctx,
ui,
re_viewer_context::UiLayout::List,
blueprint_query,
blueprint_db,
&blueprint_path,
&blueprint_path,
component_results.get_or_empty(*component_name),
component_name,
&0.into(),
);
},
),
list_item::PropertyContent::new(display_name).value_fn(|_, ui, _| {
ctx.component_ui_registry.edit_ui(
ctx,
ui,
re_viewer_context::UiLayout::List,
blueprint_query,
blueprint_db,
&blueprint_path,
&blueprint_path,
component_results.get_or_empty(*component_name),
component_name,
&0.into(),
);
}),
);

if let Some(tooltip) = field_info.map(|info| info.documentation) {
list_item_response.on_hover_text(tooltip);
}
}
};

Expand All @@ -59,7 +75,7 @@ pub fn view_property_ui<A: Archetype>(
ui,
A::name().full_name(),
true,
list_item::LabelContent::new(A::name().short_name()),
list_item::LabelContent::new(A::display_name()),
sub_prop_ui,
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ namespace rerun.blueprint.archetypes;
table PlotLegend (
"attr.rerun.scope": "blueprint",
"attr.rust.derive": "Default",
"attr.rust.generate_field_info",
"attr.python.aliases": "blueprint_components.Corner2D"
) {
// --- Optional ---
Expand Down
3 changes: 3 additions & 0 deletions crates/re_types/definitions/rust/attributes.fbs
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,6 @@ attribute "attr.rust.override_crate";
/// an object of kind `Blueprint` with `attr.rust.override_crate=re_viewport`, the final
/// object will be generated in `crates/re_viewport/src/blueprint`.
attribute "attr.rust.serde_type";

/// Specify on an archetype to opt-in into generating `ArchetypeFieldInfo` for all fields.
attribute "attr.rust.generate_field_info";
5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/annotation_context.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/arrows2d.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/arrows3d.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/asset3d.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/bar_chart.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/boxes2d.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/boxes3d.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/depth_image.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/disconnected_space.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/image.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/line_strips2d.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/line_strips3d.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/mesh3d.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/pinhole.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/points2d.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/points3d.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/scalar.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/segmentation_image.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/series_line.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/series_point.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/tensor.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/text_document.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions crates/re_types/src/archetypes/text_log.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 2c20040

Please sign in to comment.