use crate::brain::mission_control::TimeWindow;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum McPanel {
#[default]
Inbox,
Analytics,
Activity,
Schedule,
}
#[derive(Debug, Clone)]
pub struct McState {
pub focused_panel: McPanel,
pub selected_index: usize,
pub scroll_offset: u16,
pub detail_open: bool,
pub activity: Vec<crate::brain::mission_control::McActivity>,
pub schedule: Vec<crate::brain::mission_control::McScheduleItem>,
pub analytics: crate::brain::mission_control::McAnalytics,
pub analytics_window: TimeWindow,
}
impl Default for McState {
fn default() -> Self {
Self {
focused_panel: McPanel::default(),
selected_index: 0,
scroll_offset: 0,
detail_open: false,
activity: Vec::new(),
schedule: Vec::new(),
analytics: crate::brain::mission_control::McAnalytics::default(),
analytics_window: TimeWindow::Month,
}
}
}
impl McState {
pub fn reset_focus(&mut self) {
self.focused_panel = McPanel::default();
self.selected_index = 0;
self.scroll_offset = 0;
}
pub fn focus_next(&mut self) {
self.focused_panel = match self.focused_panel {
McPanel::Inbox => McPanel::Analytics,
McPanel::Analytics => McPanel::Activity,
McPanel::Activity => McPanel::Schedule,
McPanel::Schedule => McPanel::Inbox,
};
self.selected_index = 0;
self.scroll_offset = 0;
}
pub fn focus_prev(&mut self) {
self.focused_panel = match self.focused_panel {
McPanel::Inbox => McPanel::Schedule,
McPanel::Analytics => McPanel::Inbox,
McPanel::Activity => McPanel::Analytics,
McPanel::Schedule => McPanel::Activity,
};
self.selected_index = 0;
self.scroll_offset = 0;
}
}