[Add] Split Focus From UI

This commit is contained in:
Alex Emmet 2026-02-05 10:31:40 +01:00
commit a81f80b191
4 changed files with 68 additions and 64 deletions

54
src/terms/focus.rs Normal file
View file

@ -0,0 +1,54 @@
use crate::terms::consent_state::ConsentState;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum Focus {
Eula,
Tos,
Pp,
Cancel,
Continue,
ContinueAll,
}
impl Focus {
pub fn next(&mut self, state: ConsentState) {
*self = match self {
Focus::Eula => Focus::Tos,
Focus::Tos => Focus::Pp,
Focus::Pp => Focus::Cancel,
Focus::Cancel => {
if state.can_continue() {
Focus::Continue
} else {
Focus::Eula
}
}
Focus::Continue => {
if state.can_continue_all() {
Focus::ContinueAll
} else {
Focus::Eula
}
}
Focus::ContinueAll => Focus::Eula,
};
}
pub fn prev(&mut self, state: ConsentState) {
*self = match self {
Focus::Eula => {
if state.can_continue_all() {
Focus::ContinueAll
} else if state.can_continue() {
Focus::Continue
} else {
Focus::Cancel
}
}
Focus::Tos => Focus::Eula,
Focus::Pp => Focus::Tos,
Focus::Cancel => Focus::Pp,
Focus::Continue => Focus::Cancel,
Focus::ContinueAll => Focus::Continue,
};
}
}