use crate::types::StatusBarPosition;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
pub struct StatusBarConfig {
#[serde(default = "default_status_bar_enabled")]
pub status_bar_enabled: bool,
#[serde(default)]
pub status_bar_position: StatusBarPosition,
#[serde(default = "default_status_bar_height")]
pub status_bar_height: f32,
#[serde(default = "default_status_bar_bg_color")]
pub status_bar_bg_color: [u8; 3],
#[serde(default = "default_status_bar_bg_alpha")]
pub status_bar_bg_alpha: f32,
#[serde(default = "default_status_bar_fg_color")]
pub status_bar_fg_color: [u8; 3],
#[serde(default)]
pub status_bar_font: String,
#[serde(default = "default_status_bar_font_size")]
pub status_bar_font_size: f32,
#[serde(default = "default_status_bar_separator")]
pub status_bar_separator: String,
#[serde(default = "default_status_bar_auto_hide_fullscreen")]
pub status_bar_auto_hide_fullscreen: bool,
#[serde(default = "default_status_bar_auto_hide_mouse_inactive")]
pub status_bar_auto_hide_mouse_inactive: bool,
#[serde(default = "default_status_bar_mouse_inactive_timeout")]
pub status_bar_mouse_inactive_timeout: f32,
#[serde(default = "default_status_bar_system_poll_interval")]
pub status_bar_system_poll_interval: f32,
#[serde(default = "default_status_bar_git_poll_interval")]
pub status_bar_git_poll_interval: f32,
#[serde(default = "default_status_bar_time_format")]
pub status_bar_time_format: String,
#[serde(default = "default_status_bar_git_show_status")]
pub status_bar_git_show_status: bool,
#[serde(default = "crate::status_bar::default_widgets")]
pub status_bar_widgets: Vec<crate::status_bar::StatusBarWidgetConfig>,
}
fn default_status_bar_enabled() -> bool {
false
}
fn default_status_bar_height() -> f32 {
22.0
}
fn default_status_bar_bg_color() -> [u8; 3] {
[30, 30, 30]
}
fn default_status_bar_bg_alpha() -> f32 {
0.95
}
fn default_status_bar_fg_color() -> [u8; 3] {
[200, 200, 200]
}
fn default_status_bar_font_size() -> f32 {
12.0
}
fn default_status_bar_separator() -> String {
" \u{2502} ".to_string() }
fn default_status_bar_auto_hide_fullscreen() -> bool {
true
}
fn default_status_bar_auto_hide_mouse_inactive() -> bool {
false
}
fn default_status_bar_mouse_inactive_timeout() -> f32 {
3.0
}
fn default_status_bar_system_poll_interval() -> f32 {
2.0
}
fn default_status_bar_git_poll_interval() -> f32 {
5.0
}
fn default_status_bar_time_format() -> String {
"%H:%M:%S".to_string()
}
fn default_status_bar_git_show_status() -> bool {
true
}
impl Default for StatusBarConfig {
fn default() -> Self {
Self {
status_bar_enabled: default_status_bar_enabled(),
status_bar_position: StatusBarPosition::default(),
status_bar_height: default_status_bar_height(),
status_bar_bg_color: default_status_bar_bg_color(),
status_bar_bg_alpha: default_status_bar_bg_alpha(),
status_bar_fg_color: default_status_bar_fg_color(),
status_bar_font: String::new(),
status_bar_font_size: default_status_bar_font_size(),
status_bar_separator: default_status_bar_separator(),
status_bar_auto_hide_fullscreen: default_status_bar_auto_hide_fullscreen(),
status_bar_auto_hide_mouse_inactive: default_status_bar_auto_hide_mouse_inactive(),
status_bar_mouse_inactive_timeout: default_status_bar_mouse_inactive_timeout(),
status_bar_system_poll_interval: default_status_bar_system_poll_interval(),
status_bar_git_poll_interval: default_status_bar_git_poll_interval(),
status_bar_time_format: default_status_bar_time_format(),
status_bar_git_show_status: default_status_bar_git_show_status(),
status_bar_widgets: crate::status_bar::default_widgets(),
}
}
}