summaryrefslogtreecommitdiff
path: root/schist_desktop_gui/src/gui/components/navigation/navigation_find.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2026-02-07 11:52:08 +0000
committerJoe Carstairs <me@joeac.net>2026-02-07 12:02:27 +0000
commit1664e741ad35ce52a01788c34029f0b2ea477e32 (patch)
treedd6bd7c83a7e834c75815a786d67b5188cdd1f48 /schist_desktop_gui/src/gui/components/navigation/navigation_find.rs
parent179878d12ba10ac242da2044f4c6dfe4d4829e59 (diff)
task-001: can navigate file screen options with keyboard
Diffstat (limited to 'schist_desktop_gui/src/gui/components/navigation/navigation_find.rs')
-rw-r--r--schist_desktop_gui/src/gui/components/navigation/navigation_find.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/schist_desktop_gui/src/gui/components/navigation/navigation_find.rs b/schist_desktop_gui/src/gui/components/navigation/navigation_find.rs
new file mode 100644
index 0000000..79c8ab0
--- /dev/null
+++ b/schist_desktop_gui/src/gui/components/navigation/navigation_find.rs
@@ -0,0 +1,16 @@
+impl<'a, TOption> super::Navigation<TOption>
+where
+ TOption: Clone + PartialEq + 'a,
+{
+ pub fn find<P>(&self, pred: P) -> Option<TOption>
+ where
+ P: Fn(&TOption) -> bool,
+ {
+ self.options_before_active
+ .iter()
+ .find(|o| pred(o))
+ .cloned()
+ .or_else(|| self.active_option.clone().filter(|o| pred(o)))
+ .or_else(|| self.options_after_active.iter().find(|o| pred(o)).cloned())
+ }
+}