use std::collections::{HashMap, HashSet};
use std::path::PathBuf;
use crate::utils::ToastSlot;
use super::modes::SpaceMenuKind;
#[derive(Default)]
pub struct SearchState {
pub query: String,
pub active: bool,
}
#[derive(Default)]
pub struct ViewerFindState {
pub query: String,
pub active: bool,
pub committed: bool,
pub ranges: Vec<(usize, usize)>,
pub current: usize,
pub last_sync_token: Option<u64>,
pub pending_scroll: bool,
}
#[derive(Default)]
pub struct ThemeState {
pub selector_visible: bool,
pub selector_index: usize,
pub before_selector: Option<String>,
pub override_name: Option<String>,
}
#[derive(Default)]
pub struct ToastState {
pub slots: Vec<ToastSlot>,
pub consumed_per_operation: HashMap<String, usize>,
}
#[derive(Default)]
pub struct OpenMenuState {
pub visible: bool,
pub path: Option<String>,
pub can_terminal: bool,
pub selected_index: usize,
}
#[derive(Default)]
pub struct LensMenuState {
pub visible: bool,
pub paths: Vec<String>,
pub exclude_lens_name: Option<String>,
pub selected_index: usize,
pub name_input: Option<String>,
}
#[derive(Default)]
pub struct QAMenuState {
pub visible: bool,
pub selected_index: usize,
pub kind: Option<SpaceMenuKind>,
}
#[derive(Default)]
pub struct EnhancePolicyMenuState {
pub visible: bool,
pub path: Option<String>,
pub selected_index: usize,
}
#[derive(Default)]
pub struct LensConfirmState {
pub rename_input: Option<(String, String)>,
pub delete_visible: bool,
pub delete_lens_name: Option<String>,
pub delete_selected: usize,
}
#[derive(Default)]
pub struct FileDeleteConfirmState {
pub visible: bool,
pub rel_path: Option<String>,
pub bulk_paths: Option<Vec<String>>,
pub selected_index: usize,
}
#[derive(Debug, Default)]
pub struct MultiselectState {
pub active: bool,
pub selected: HashSet<String>,
pub bulk_menu_visible: bool,
pub bulk_menu_selected: usize,
pub bulk_menu_zahir_row: bool,
}
impl MultiselectState {
pub fn clear(&mut self) {
self.active = false;
self.selected.clear();
self.bulk_menu_visible = false;
self.bulk_menu_selected = 0;
self.bulk_menu_zahir_row = false;
}
}
#[derive(Clone, Debug, Default)]
pub struct CtrlChordState {
pub pending: bool,
pub menu_visible: bool,
pub started: Option<std::time::Instant>,
}
impl CtrlChordState {
#[must_use]
pub fn is_active(&self) -> bool {
self.pending || self.menu_visible
}
}
#[derive(Default)]
pub struct UblxSwitchPickerState {
pub visible: bool,
pub selected_index: usize,
pub roots: Vec<PathBuf>,
}
#[derive(Default)]
pub struct ViewerChrome {
pub help_visible: bool,
pub help_tab: u8,
pub viewer_fullscreen: bool,
pub ctrl_chord: CtrlChordState,
pub ublx_switch: UblxSwitchPickerState,
}
#[derive(Debug, Clone)]
pub struct StartupPromptState {
pub phase: StartupPromptPhase,
}
#[derive(Debug, Clone)]
pub enum StartupPromptPhase {
RootChoice {
selected_index: usize,
roots: Vec<PathBuf>,
},
PreviousSettings { selected_index: usize },
Enhance { selected_index: usize },
}