pub mod data_core;
pub mod ui;
pub mod analysis;
pub mod utils;
pub use polars::prelude::{DataFrame, Series};
#[derive(Debug, PartialEq, Clone, Copy)]
pub enum AppScreen {
Loading,
StartMenu,
LoadData,
StatisticsView,
FilterView,
ExportScreen,
SaveState,
LoadState,
Error,
Exit,
Help,
}
impl AppScreen {
pub fn get_screen_name(&self) -> &'static str {
match self {
AppScreen::Loading => "@Loading",
AppScreen::StartMenu => "@Start Menu",
AppScreen::LoadData => "@Load Data",
AppScreen::StatisticsView => "@Statistics",
AppScreen::FilterView => "@Filter",
AppScreen::ExportScreen => "@Export",
AppScreen::SaveState => "@Save",
AppScreen::LoadState => "@Load",
AppScreen::Error => "@Error",
AppScreen::Exit => "@Exit",
AppScreen::Help => "@Help",
}
}
}
#[derive(Debug, PartialEq)]
pub enum InputMode {
Normal,
EditingColumnForHistogram,
EditingColumnForBarChart,
EditingFilter,
EditingExportPath,
EditingColumnForAnomaly,
EditingThresholdForAnomaly,
EditingColumnsForClustering,
EditingKForClustering,
EditingColumnsForCorrelation, EditingFilterColumn,
EditingFilterCondition,
EditingSavePath,
EditingLoadPath,
}
use crate::ui::screens::start_menu::StartMenu;
use crate::ui::screens::statistics_screen::StatisticsScreen;
use crate::ui::screens::filter_view_screen::FilterScreen;
use crate::ui::screens::save_screen::SaveScreen;
use crate::ui::screens::load_state_screen::LoadStateScreen;
use crate::utils::config::Settings;
use crate::ui::components::file_browser::FileBrowser;
use crate::data_core::workspace::Workspace;
use tokio::task::JoinHandle;
use anyhow::Result;
pub struct AppState {
pub start_menu: StartMenu,
pub statistics_screen: StatisticsScreen,
pub filter_screen: FilterScreen,
pub save_screen: SaveScreen,
pub load_state_screen: LoadStateScreen,
pub file_browser: FileBrowser,
pub workspace: Workspace,
pub current_screen: AppScreen,
pub status_message: String,
pub input_mode: InputMode,
pub last_screen: Option<AppScreen>,
pub settings: Settings,
pub loading_task: Option<JoinHandle<Result<DataFrame>>>,
pub needs_redraw: bool, }
impl AppState {
pub fn new(settings: Settings) -> Self {
AppState {
start_menu: StartMenu::new(),
statistics_screen: StatisticsScreen::new(&settings),
filter_screen: FilterScreen::new(&settings),
save_screen: SaveScreen::new(),
load_state_screen: LoadStateScreen::new(),
file_browser: FileBrowser::new(),
workspace: Workspace::new(),
current_screen: AppScreen::StartMenu,
status_message: String::new(),
input_mode: InputMode::Normal,
last_screen: None,
settings,
loading_task: None,
needs_redraw: true, }
}
}