diff --git a/examples/focus_advanced.rs b/examples/focus_advanced.rs index dd8e676..045cd7f 100644 --- a/examples/focus_advanced.rs +++ b/examples/focus_advanced.rs @@ -1,6 +1,6 @@ extern crate alloc; -use tui_orchestrator::focus::{FocusBuilder, FocusId, FocusManager, Focusable}; +use tui_orchestrator::focus::{FocusId, FocusManager, Focusable}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] enum FormElement { @@ -10,6 +10,8 @@ enum FormElement { Submit, } +impl FocusId for FormElement {} + struct FormPage { username: alloc::string::String, password: alloc::string::String, @@ -46,12 +48,4 @@ fn main() { 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); } diff --git a/examples/focus_example.rs b/examples/focus_example.rs index 67720be..babad39 100644 --- a/examples/focus_example.rs +++ b/examples/focus_example.rs @@ -1,6 +1,6 @@ extern crate alloc; -use tui_orchestrator::focus::{FocusManager, Focusable}; +use tui_orchestrator::focus::{FocusId, FocusManager, Focusable}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] enum FormElement { @@ -11,6 +11,8 @@ enum FormElement { Cancel, } +impl FocusId for FormElement {} + #[allow(dead_code)] struct LoginForm { username: String, diff --git a/src/component/mod.rs b/src/component/mod.rs index 2f84b0e..75abb59 100644 --- a/src/component/mod.rs +++ b/src/component/mod.rs @@ -1,5 +1,3 @@ -// path_from_the_root: src/component/mod.rs - pub mod action; pub mod error; pub mod r#trait; diff --git a/src/component/trait.rs b/src/component/trait.rs index c047215..58dc2e8 100644 --- a/src/component/trait.rs +++ b/src/component/trait.rs @@ -1,11 +1,10 @@ -// path_from_the_root: src/component/trait.rs - use super::error::ComponentError; use crate::focus::FocusId; +use crate::input::Action; pub trait Component { type Focus: FocusId; - type Action: core::fmt::Debug + Clone; + type Action: Action; type Event: Clone + core::fmt::Debug; fn targets(&self) -> &[Self::Focus]; diff --git a/tests/component_tests.rs b/tests/component_tests.rs index f9a17ba..9abfe15 100644 --- a/tests/component_tests.rs +++ b/tests/component_tests.rs @@ -1,6 +1,7 @@ extern crate alloc; use tui_orchestrator::component::{Component, ComponentAction}; +use tui_orchestrator::focus::FocusId; #[derive(Debug, Clone, PartialEq, Eq, Hash)] enum TestFocus { @@ -9,6 +10,8 @@ enum TestFocus { ButtonC, } +impl FocusId for TestFocus {} + #[derive(Debug, Clone)] enum TestEvent { ButtonCPressed, diff --git a/tests/focus.rs b/tests/focus.rs index 4da24f4..610d541 100644 --- a/tests/focus.rs +++ b/tests/focus.rs @@ -1,6 +1,6 @@ extern crate alloc; -use tui_orchestrator::focus::{FocusError, FocusManager, Focusable}; +use tui_orchestrator::focus::{FocusError, FocusId, FocusManager, Focusable}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] #[allow(dead_code)] @@ -11,6 +11,8 @@ enum TestId { Dialog, } +impl FocusId for TestId {} + #[test] fn test_focus_id_trait() { let id1 = TestId::Button("save"); @@ -253,31 +255,3 @@ fn test_focusable_trait() { let targets = component.focus_targets(); assert_eq!(targets.len(), 3); } - -#[test] -fn test_usize_focus_id() { - let mut manager: FocusManager = FocusManager::new(); - - manager.set_targets(vec![0, 1, 2, 3]); - assert_eq!(manager.current(), Some(&0)); - - manager.next(); - assert_eq!(manager.current(), Some(&1)); - - manager.set_focus(3).unwrap(); - assert_eq!(manager.current(), Some(&3)); -} - -#[test] -fn test_string_focus_id() { - let mut manager: FocusManager<&str> = FocusManager::new(); - - manager.set_targets(vec!["input1", "input2", "button_save"]); - assert_eq!(manager.current(), Some(&"input1")); - - manager.next(); - assert_eq!(manager.current(), Some(&"input2")); - - manager.set_focus("button_save").unwrap(); - assert_eq!(manager.current(), Some(&"button_save")); -}