working focus
This commit is contained in:
57
examples/focus_advanced.rs
Normal file
57
examples/focus_advanced.rs
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user