working focus

This commit is contained in:
filipriec_vm
2026-01-11 16:03:04 +01:00
parent e3e2d64b2a
commit 1044003179
6 changed files with 138 additions and 2 deletions

View File

@@ -0,0 +1,57 @@
extern crate alloc;
use tui_orchestrator::focus::{FocusBuilder, FocusId, FocusManager, Focusable};
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
enum FormElement {
Username,
Password,
RememberMe,
Submit,
}
struct FormPage {
username: alloc::string::String,
password: alloc::string::String,
remember: bool,
}
impl Focusable<FormElement> for FormPage {
fn focus_targets(&self) -> alloc::vec::Vec<FormElement> {
alloc::vec![
FormElement::Username,
FormElement::Password,
FormElement::RememberMe,
FormElement::Submit,
]
}
}
fn main() {
let form = FormPage {
username: alloc::string::String::new(),
password: alloc::string::String::new(),
remember: false,
};
let mut focus_manager = FocusManager::new();
focus_manager.set_targets(form.focus_targets());
println!("Current focus: {:?}", focus_manager.current());
focus_manager.next();
println!("After next: {:?}", focus_manager.current());
focus_manager.last();
println!("After last: {:?}", focus_manager.current());
println!("Is first: {}", focus_manager.is_first());
println!("Is last: {}", focus_manager.is_last());
println!("\n--- FocusBuilder Demo ---");
let builder = FocusBuilder::new()
.target(FormElement::Username)
.target(FormElement::Password)
.target(FormElement::Submit);
let targets = builder.build();
println!("Built targets: {:?}", targets);
}