52 lines
1.2 KiB
Rust
52 lines
1.2 KiB
Rust
extern crate alloc;
|
|
|
|
use tui_orchestrator::focus::{FocusId, FocusManager, Focusable};
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
|
enum FormElement {
|
|
Username,
|
|
Password,
|
|
RememberMe,
|
|
Submit,
|
|
}
|
|
|
|
impl FocusId for FormElement {}
|
|
|
|
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());
|
|
}
|