Files
doux-copy/seq/src/state/ui.rs
2026-01-20 03:08:37 +01:00

45 lines
1018 B
Rust

use std::time::{Duration, Instant};
use crate::state::Modal;
pub struct UiState {
pub status_message: Option<String>,
pub flash_until: Option<Instant>,
pub modal: Modal,
pub doc_topic: usize,
pub doc_scroll: usize,
}
impl Default for UiState {
fn default() -> Self {
Self {
status_message: None,
flash_until: None,
modal: Modal::None,
doc_topic: 0,
doc_scroll: 0,
}
}
}
impl UiState {
pub fn flash(&mut self, msg: &str, duration_ms: u64) {
self.status_message = Some(msg.to_string());
self.flash_until = Some(Instant::now() + Duration::from_millis(duration_ms));
}
pub fn set_status(&mut self, msg: String) {
self.status_message = Some(msg);
}
pub fn clear_status(&mut self) {
self.status_message = None;
}
pub fn is_flashing(&self) -> bool {
self.flash_until
.map(|t| Instant::now() < t)
.unwrap_or(false)
}
}