58 lines
1.5 KiB
Rust
58 lines
1.5 KiB
Rust
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);
|
|
}
|