use teksilo_core::widget_id::WidgetId;
use teksilo_core::widget_tree::WidgetTree;
pub(crate) fn displayed_texts(tree: &mut WidgetTree, root: WidgetId) -> Vec<String> {
use teksilo_core::accesskit::Role;
fn collect(tree: &WidgetTree, id: WidgetId, out: &mut Vec<WidgetId>) {
out.push(id);
for c in tree.children(id) {
collect(tree, c, out);
}
}
let mut ids = Vec::new();
for c in tree.children(root) {
collect(tree, c, &mut ids);
}
let update = tree.sync_accessibility();
ids.iter()
.filter_map(|id| {
let target = teksilo_core::accessibility::widget_id_to_node_id(*id);
update
.nodes
.iter()
.find(|(nid, _)| *nid == target)
.filter(|(_, n)| {
matches!(
n.role(),
Role::TextInput | Role::DateInput | Role::TimeInput
)
})
.and_then(|(_, n)| n.value().map(str::to_string))
})
.collect()
}
pub(crate) fn displayed_text(tree: &mut WidgetTree, root: WidgetId) -> Option<String> {
displayed_texts(tree, root).into_iter().next()
}