pub mod data_harvester;
use data_harvester::{processes, temperature};
use std::time::Instant;
pub mod data_farmer;
use data_farmer::*;
use crate::{canvas, constants, utils::error::Result};
mod process_killer;
#[derive(Debug, Clone, Copy)]
pub enum WidgetPosition {
Cpu,
Mem,
Disk,
Temp,
Network,
Process,
ProcessSearch,
}
#[derive(Debug)]
pub enum ScrollDirection {
// UP means scrolling up --- this usually DECREMENTS
UP,
// DOWN means scrolling down --- this usually INCREMENTS
DOWN,
}
/// AppScrollWidgetState deals with fields for a scrollable app's current state.
#[derive(Default)]
pub struct AppScrollWidgetState {
pub current_scroll_position: u64,
pub previous_scroll_position: u64,
}
pub struct AppScrollState {
pub scroll_direction: ScrollDirection,
pub process_scroll_state: AppScrollWidgetState,
pub disk_scroll_state: AppScrollWidgetState,
pub temp_scroll_state: AppScrollWidgetState,
pub cpu_scroll_state: AppScrollWidgetState,
}
impl Default for AppScrollState {
fn default() -> Self {
AppScrollState {
scroll_direction: ScrollDirection::DOWN,
process_scroll_state: AppScrollWidgetState::default(),
disk_scroll_state: AppScrollWidgetState::default(),
temp_scroll_state: AppScrollWidgetState::default(),
cpu_scroll_state: AppScrollWidgetState::default(),
}
}
}
/// AppSearchState deals with generic searching (I might do this in the future).
pub struct AppSearchState {
pub is_enabled: bool,
current_search_query: String,
current_regex: Option<std::result::Result<regex::Regex, regex::Error>>,
current_cursor_position: usize,
pub is_blank_search: bool,
pub is_invalid_search: bool,
}
impl Default for AppSearchState {
fn default() -> Self {
AppSearchState {
is_enabled: false,
current_search_query: String::default(),
current_regex: None,
current_cursor_position: 0,
is_invalid_search: false,
is_blank_search: true,
}
}
}
impl AppSearchState {
pub fn is_invalid_or_blank_search(&self) -> bool {
self.is_blank_search || self.is_invalid_search
}
}
/// ProcessSearchState only deals with process' search's current settings and state.
pub struct ProcessSearchState {
pub search_state: AppSearchState,
pub is_searching_with_pid: bool,
pub is_ignoring_case: bool,
pub is_searching_whole_word: bool,
pub is_searching_with_regex: bool,
}
impl Default for ProcessSearchState {
fn default() -> Self {
ProcessSearchState {
search_state: AppSearchState::default(),
is_searching_with_pid: false,
is_ignoring_case: true,
is_searching_whole_word: false,
is_searching_with_regex: false,
}
}
}
impl ProcessSearchState {
pub fn toggle_ignore_case(&mut self) {
self.is_ignoring_case = !self.is_ignoring_case;
}
pub fn toggle_search_whole_word(&mut self) {
self.is_searching_whole_word = !self.is_searching_whole_word;
}
pub fn toggle_search_regex(&mut self) {
self.is_searching_with_regex = !self.is_searching_with_regex;
}
}
#[derive(Default)]
pub struct AppDeleteDialogState {
pub is_showing_dd: bool,
pub is_on_yes: bool, // Defaults to "No"
}
pub enum AppHelpCategory {
General,
Process,
Search,
}