diff options
Diffstat (limited to 'src/ui/style.rs')
-rw-r--r-- | src/ui/style.rs | 556 |
1 files changed, 278 insertions, 278 deletions
diff --git a/src/ui/style.rs b/src/ui/style.rs index 747fd176..772cba05 100644 --- a/src/ui/style.rs +++ b/src/ui/style.rs @@ -4,15 +4,15 @@ use anyhow::Result; use asyncgit::{DiffLineType, StatusItemType}; use ron::{ - de::from_bytes, - ser::{to_string_pretty, PrettyConfig}, + de::from_bytes, + ser::{to_string_pretty, PrettyConfig}, }; use serde::{Deserialize, Serialize}; use std::{ - fs::{self, File}, - io::{Read, Write}, - path::PathBuf, - rc::Rc, + fs::{self, File}, + io::{Read, Write}, + path::PathBuf, + rc::Rc, }; use tui::style::{Color, Modifier, Style}; @@ -20,309 +20,309 @@ pub type SharedTheme = Rc<Theme>; #[derive(Serialize, Deserialize, Debug)] pub struct Theme { - selected_tab: Color, - #[serde(with = "Color")] - command_fg: Color, - #[serde(with = "Color")] - selection_bg: Color, - #[serde(with = "Color")] - cmdbar_extra_lines_bg: Color, - #[serde(with = "Color")] - disabled_fg: Color, - #[serde(with = "Color")] - diff_line_add: Color, - #[serde(with = "Color")] - diff_line_delete: Color, - #[serde(with = "Color")] - diff_file_added: Color, - #[serde(with = "Color")] - diff_file_removed: Color, - #[serde(with = "Color")] - diff_file_moved: Color, - #[serde(with = "Color")] - diff_file_modified: Color, - #[serde(with = "Color")] - commit_hash: Color, - #[serde(with = "Color")] - commit_time: Color, - #[serde(with = "Color")] - commit_author: Color, - #[serde(with = "Color")] - danger_fg: Color, - #[serde(with = "Color")] - push_gauge_bg: Color, - #[serde(with = "Color")] - push_gauge_fg: Color, + selected_tab: Color, + #[serde(with = "Color")] + command_fg: Color, + #[serde(with = "Color")] + selection_bg: Color, + #[serde(with = "Color")] + cmdbar_extra_lines_bg: Color, + #[serde(with = "Color")] + disabled_fg: Color, + #[serde(with = "Color")] + diff_line_add: Color, + #[serde(with = "Color")] + diff_line_delete: Color, + #[serde(with = "Color")] + diff_file_added: Color, + #[serde(with = "Color")] + diff_file_removed: Color, + #[serde(with = "Color")] + diff_file_moved: Color, + #[serde(with = "Color")] + diff_file_modified: Color, + #[serde(with = "Color")] + commit_hash: Color, + #[serde(with = "Color")] + commit_time: Color, + #[serde(with = "Color")] + commit_author: Color, + #[serde(with = "Color")] + danger_fg: Color, + #[serde(with = "Color")] + push_gauge_bg: Color, + #[serde(with = "Color")] + push_gauge_fg: Color, } impl Theme { - pub fn scroll_bar_pos(&self) -> Style { - Style::default().fg(self.selection_bg) - } + pub fn scroll_bar_pos(&self) -> Style { + Style::default().fg(self.selection_bg) + } - pub fn block(&self, focus: bool) -> Style { - if focus { - Style::default() - } else { - Style::default().fg(self.disabled_fg) - } - } + pub fn block(&self, focus: bool) -> Style { + if focus { + Style::default() + } else { + Style::default().fg(self.disabled_fg) + } + } - pub fn title(&self, focused: bool) -> Style { - if focused { - Style::default().add_modifier(Modifier::BOLD) - } else { - Style::default().fg(self.disabled_fg) - } - } + pub fn title(&self, focused: bool) -> Style { + if focused { + Style::default().add_modifier(Modifier::BOLD) + } else { + Style::default().fg(self.disabled_fg) + } + } - pub fn branch(&self, selected: bool, head: bool) -> Style { - let branch = if head { - Style::default().add_modifier(Modifier::BOLD) - } else { - Style::default() - }; + pub fn branch(&self, selected: bool, head: bool) -> Style { + let branch = if head { + Style::default().add_modifier(Modifier::BOLD) + } else { + Style::default() + }; - if selected { - branch.patch(Style::default().bg(self.selection_bg)) - } else { - branch - } - } + if selected { + branch.patch(Style::default().bg(self.selection_bg)) + } else { + branch + } + } - pub fn tab(&self, selected: bool) -> Style { - if selected { - self.text(true, false) - .fg(self.selected_tab) - .add_modifier(Modifier::UNDERLINED) - } else { - self.text(false, false) - } - } + pub fn tab(&self, selected: bool) -> Style { + if selected { + self.text(true, false) + .fg(self.selected_tab) + .add_modifier(Modifier::UNDERLINED) + } else { + self.text(false, false) + } + } - pub fn tags(&self, selected: bool) -> Style { - Style::default() - .fg(self.selected_tab) - .add_modifier(Modifier::BOLD) - .bg(if selected { - self.selection_bg - } else { - Color::Reset - }) - } + pub fn tags(&self, selected: bool) -> Style { + Style::default() + .fg(self.selected_tab) + .add_modifier(Modifier::BOLD) + .bg(if selected { + self.selection_bg + } else { + Color::Reset + }) + } - pub fn text(&self, enabled: bool, selected: bool) -> Style { - match (enabled, selected) { - (false, _) => Style::default().fg(self.disabled_fg), - (true, false) => Style::default(), - (true, true) => Style::default() - .fg(self.command_fg) - .bg(self.selection_bg), - } - } + pub fn text(&self, enabled: bool, selected: bool) -> Style { + match (enabled, selected) { + (false, _) => Style::default().fg(self.disabled_fg), + (true, false) => Style::default(), + (true, true) => Style::default() + .fg(self.command_fg) + .bg(self.selection_bg), + } + } - pub fn item(&self, typ: StatusItemType, selected: bool) -> Style { - let style = match typ { - StatusItemType::New => { - Style::default().fg(self.diff_file_added) - } - StatusItemType::Modified => { - Style::default().fg(self.diff_file_modified) - } - StatusItemType::Deleted => { - Style::default().fg(self.diff_file_removed) - } - StatusItemType::Renamed => { - Style::default().fg(self.diff_file_moved) - } - StatusItemType::Conflicted => Style::default() - .fg(self.diff_file_modified) - .add_modifier(Modifier::BOLD), - StatusItemType::Typechange => Style::default(), - }; + pub fn item(&self, typ: StatusItemType, selected: bool) -> Style { + let style = match typ { + StatusItemType::New => { + Style::default().fg(self.diff_file_added) + } + StatusItemType::Modified => { + Style::default().fg(self.diff_file_modified) + } + StatusItemType::Deleted => { + Style::default().fg(self.diff_file_removed) + } + StatusItemType::Renamed => { + Style::default().fg(self.diff_file_moved) + } + StatusItemType::Conflicted => Style::default() + .fg(self.diff_file_modified) + .add_modifier(Modifier::BOLD), + StatusItemType::Typechange => Style::default(), + }; - self.apply_select(style, selected) - } + self.apply_select(style, selected) + } - pub fn file_tree_item( - &self, - is_folder: bool, - selected: bool, - ) -> Style { - let style = if is_folder { - Style::default() - } else { - Style::default().fg(self.diff_file_modified) - }; + pub fn file_tree_item( + &self, + is_folder: bool, + selected: bool, + ) -> Style { + let style = if is_folder { + Style::default() + } else { + Style::default().fg(self.diff_file_modified) + }; - self.apply_select(style, selected) - } + self.apply_select(style, selected) + } - fn apply_select(&self, style: Style, selected: bool) -> Style { - if selected { - style.bg(self.selection_bg) - } else { - style - } - } + fn apply_select(&self, style: Style, selected: bool) -> Style { + if selected { + style.bg(self.selection_bg) + } else { + style + } + } - pub fn option(&self, on: bool) -> Style { - if on { - Style::default().fg(self.diff_line_add) - } else { - Style::default().fg(self.diff_line_delete) - } - } + pub fn option(&self, on: bool) -> Style { + if on { + Style::default().fg(self.diff_line_add) + } else { + Style::default().fg(self.diff_line_delete) + } + } - pub fn diff_hunk_marker(&self, selected: bool) -> Style { - if selected { - Style::default().bg(self.selection_bg) - } else { - Style::default().fg(self.disabled_fg) - } - } + pub fn diff_hunk_marker(&self, selected: bool) -> Style { + if selected { + Style::default().bg(self.selection_bg) + } else { + Style::default().fg(self.disabled_fg) + } + } - pub fn diff_line( - &self, - typ: DiffLineType, - selected: bool, - ) -> Style { - let style = match typ { - DiffLineType::Add => { - Style::default().fg(self.diff_line_add) - } - DiffLineType::Delete => { - Style::default().fg(self.diff_line_delete) - } - DiffLineType::Header => Style::default() - .fg(self.disabled_fg) - .add_modifier(Modifier::BOLD), - DiffLineType::None => Style::default().fg(if selected { - self.command_fg - } else { - Color::Reset - }), - }; + pub fn diff_line( + &self, + typ: DiffLineType, + selected: bool, + ) -> Style { + let style = match typ { + DiffLineType::Add => { + Style::default().fg(self.diff_line_add) + } + DiffLineType::Delete => { + Style::default().fg(self.diff_line_delete) + } + DiffLineType::Header => Style::default() + .fg(self.disabled_fg) + .add_modifier(Modifier::BOLD), + DiffLineType::None => Style::default().fg(if selected { + self.command_fg + } else { + Color::Reset + }), + }; - self.apply_select(style, selected) - } + self.apply_select(style, selected) + } - pub fn text_danger(&self) -> Style { - Style::default().fg(self.danger_fg) - } + pub fn text_danger(&self) -> Style { + Style::default().fg(self.danger_fg) + } - pub fn commandbar(&self, enabled: bool, line: usize) -> Style { - if enabled { - Style::default().fg(self.command_fg) - } else { - Style::default().fg(self.disabled_fg) - } - .bg(if line == 0 { - self.selection_bg - } else { - self.cmdbar_extra_lines_bg - }) - } + pub fn commandbar(&self, enabled: bool, line: usize) -> Style { + if enabled { + Style::default().fg(self.command_fg) + } else { + Style::default().fg(self.disabled_fg) + } + .bg(if line == 0 { + self.selection_bg + } else { + self.cmdbar_extra_lines_bg + }) + } - pub fn commit_hash(&self, selected: bool) -> Style { - self.apply_select( - Style::default().fg(self.commit_hash), - selected, - ) - } - pub fn commit_time(&self, selected: bool) -> Style { - self.apply_select( - Style::default().fg(self.commit_time), - selected, - ) - } - pub fn commit_author(&self, selected: bool) -> Style { - self.apply_select( - Style::default().fg(self.commit_author), - selected, - ) - } + pub fn commit_hash(&self, selected: bool) -> Style { + self.apply_select( + Style::default().fg(self.commit_hash), + selected, + ) + } + pub fn commit_time(&self, selected: bool) -> Style { + self.apply_select( + Style::default().fg(self.commit_time), + selected, + ) + } + pub fn commit_author(&self, selected: bool) -> Style { + self.apply_select( + Style::default().fg(self.commit_author), + selected, + ) + } - pub fn commit_hash_in_blame( - &self, - is_blamed_commit: bool, - ) -> Style { - if is_blamed_commit { - Style::default() - .fg(self.commit_hash) - .add_modifier(Modifier::BOLD) - } else { - Style::default().fg(self.commit_hash) - } - } + pub fn commit_hash_in_blame( + &self, + is_blamed_commit: bool, + ) -> Style { + if is_blamed_commit { + Style::default() + .fg(self.commit_hash) + .add_modifier(Modifier::BOLD) + } else { + Style::default().fg(self.commit_hash) + } + } - pub fn push_gauge(&self) -> Style { - Style::default() - .fg(self.push_gauge_fg) - .bg(self.push_gauge_bg) - } + pub fn push_gauge(&self) -> Style { + Style::default() + .fg(self.push_gauge_fg) + .bg(self.push_gauge_bg) + } - // This will only be called when theme.ron doesn't already exists - fn save(&self, theme_file: PathBuf) -> Result<()> { - let mut file = File::create(theme_file)?; - let data = to_string_pretty(self, PrettyConfig::default())?; - file.write_all(data.as_bytes())?; - Ok(()) - } + // This will only be called when theme.ron doesn't already exists + fn save(&self, theme_file: PathBuf) -> Result<()> { + let mut file = File::create(theme_file)?; + let data = to_string_pretty(self, PrettyConfig::default())?; + file.write_all(data.as_bytes())?; + Ok(()) + } - fn read_file(theme_file: PathBuf) -> Result<Self> { - let mut f = File::open(theme_file)?; - let mut buffer = Vec::new(); - f.read_to_end(&mut buffer)?; - Ok(from_bytes(&buffer)?) - } + fn read_file(theme_file: PathBuf) -> Result<Self> { + let mut f = File::open(theme_file)?; + let mut buffer = Vec::new(); + f.read_to_end(&mut buffer)?; + Ok(from_bytes(&buffer)?) + } - pub fn init(file: PathBuf) -> Result<Self> { - if file.exists() { - match Self::read_file(file.clone()) { - Err(e) => { - let config_path = file.clone(); - let config_path_old = - format!("{}.old", file.to_string_lossy()); - fs::rename( - config_path.clone(), - config_path_old.clone(), - )?; + pub fn init(file: PathBuf) -> Result<Self> { + if file.exists() { + match Self::read_file(file.clone()) { + Err(e) => { + let config_path = file.clone(); + let config_path_old = + format!("{}.old", file.to_string_lossy()); + fs::rename( + config_path.clone(), + config_path_old.clone(), + )?; - Self::default().save(file)?; + Self::default().save(file)?; - Err(anyhow::anyhow!("{}\n Old file was renamed to {:?}.\n Defaults loaded and saved as {:?}", + Err(anyhow::anyhow!("{}\n Old file was renamed to {:?}.\n Defaults loaded and saved as {:?}", e,config_path_old,config_path.to_string_lossy())) - } - Ok(res) => Ok(res), - } - } else { - Self::default().save(file)?; - Ok(Self::default()) - } - } + } + Ok(res) => Ok(res), + } + } else { + Self::default().save(file)?; + Ok(Self::default()) + } + } } impl Default for Theme { - fn default() -> Self { - Self { - selected_tab: Color::Reset, - command_fg: Color::White, - selection_bg: Color::Blue, - cmdbar_extra_lines_bg: Color::Blue, - disabled_fg: Color::DarkGray, - diff_line_add: Color::Green, - diff_line_delete: Color::Red, - diff_file_added: Color::LightGreen, - diff_file_removed: Color::LightRed, - diff_file_moved: Color::LightMagenta, - diff_file_modified: Color::Yellow, - commit_hash: Color::Magenta, - commit_time: Color::LightCyan, - commit_author: Color::Green, - danger_fg: Color::Red, - push_gauge_bg: Color::Blue, - push_gauge_fg: Color::Reset, - } - } + fn default() -> Self { + Self { + selected_tab: Color::Reset, + command_fg: Color::White, + selection_bg: Color::Blue, + cmdbar_extra_lines_bg: Color::Blue, + disabled_fg: Color::DarkGray, + diff_line_add: Color::Green, + diff_line_delete: Color::Red, + diff_file_added: Color::LightGreen, + diff_file_removed: Color::LightRed, + diff_file_moved: Color::LightMagenta, + diff_file_modified: Color::Yellow, + commit_hash: Color::Magenta, + commit_time: Color::LightCyan, + commit_author: Color::Green, + danger_fg: Color::Red, + push_gauge_bg: Color::Blue, + push_gauge_fg: Color::Reset, + } + } } |