re_space_view_text_box/
view_part_system.rs1use re_arrow_store::LatestAtQuery;
2use re_query::{query_entity_with_primary, QueryError};
3use re_types::Loggable as _;
4use re_viewer_context::{
5 ArchetypeDefinition, SpaceViewSystemExecutionError, ViewContextCollection, ViewPartSystem,
6 ViewQuery, ViewerContext,
7};
8
9#[derive(Debug, Clone)]
12pub struct TextBoxEntry {
13 pub body: String,
14}
15
16#[derive(Default)]
18pub struct TextBoxSystem {
19 pub text_entries: Vec<TextBoxEntry>,
20}
21
22impl ViewPartSystem for TextBoxSystem {
23 fn archetype(&self) -> ArchetypeDefinition {
24 vec1::vec1![re_components::TextBox::name()]
25 }
26
27 fn execute(
28 &mut self,
29 ctx: &mut ViewerContext<'_>,
30 query: &ViewQuery<'_>,
31 _view_ctx: &ViewContextCollection,
32 ) -> Result<Vec<re_renderer::QueueableDrawData>, SpaceViewSystemExecutionError> {
33 let store = &ctx.store_db.entity_db.data_store;
34
35 for (ent_path, props) in query.iter_entities() {
36 if !props.visible {
37 continue;
38 }
39
40 let query = LatestAtQuery::new(query.timeline, query.latest_at);
41 match query_entity_with_primary::<re_components::TextBox>(store, &query, ent_path, &[])
42 .and_then(|ent_view| {
43 for text_entry in ent_view.iter_primary()?.flatten() {
44 let re_components::TextBox { body } = text_entry;
45 self.text_entries.push(TextBoxEntry { body });
46 }
47 Ok(())
48 }) {
49 Ok(_) | Err(QueryError::PrimaryNotFound) => {}
50 Err(_) => {
51 re_log::warn_once!("text-box query failed for {ent_path:?}");
52 }
53 }
54 }
55 Ok(Vec::new())
56 }
57
58 fn as_any(&self) -> &dyn std::any::Any {
59 self
60 }
61}