diff options
author | Andrew Jeffery <dev@jeffas.io> | 2020-11-24 21:39:02 +0000 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2020-11-25 15:54:47 +0200 |
commit | daee4e46de0cdfe220cff11fdf686ab2afac2c9c (patch) | |
tree | a841954bbb9f6f23a57e9624390fc65fe814bd71 /src/components | |
parent | 92c12d3526d5fdf4a4eaaf49f91ecd718074cb06 (diff) |
Allow configuration of the sidebar divider
This adds the config option listing.sidebar_divider to set the character
used to show the divider (defaults to ' ') along with the corresponding
theme in mail.sidebar_divider which defaults to the default theme.
Diffstat (limited to 'src/components')
-rw-r--r-- | src/components/contacts/contact_list.rs | 37 | ||||
-rw-r--r-- | src/components/mail/listing.rs | 44 |
2 files changed, 40 insertions, 41 deletions
diff --git a/src/components/contacts/contact_list.rs b/src/components/contacts/contact_list.rs index e6e016a0..cdcb277d 100644 --- a/src/components/contacts/contact_list.rs +++ b/src/components/contacts/contact_list.rs @@ -54,7 +54,10 @@ pub struct ContactList { mode: ViewMode, dirty: bool, - show_divider: bool, + + sidebar_divider: char, + sidebar_divider_theme: ThemeAttribute, + menu_visibility: bool, movement: Option<PageMovement>, cmd_buf: String, @@ -98,7 +101,8 @@ impl ContactList { cmd_buf: String::with_capacity(8), view: None, ratio: 90, - show_divider: false, + sidebar_divider: context.settings.listing.sidebar_divider, + sidebar_divider_theme: conf::value(context, "mail.sidebar_divider"), menu_visibility: true, id: ComponentId::new_v4(), } @@ -239,13 +243,11 @@ impl ContactList { change_colors(grid, area, fg_color, bg_color); } - fn draw_menu(&mut self, grid: &mut CellBuffer, mut area: Area, context: &mut Context) { + fn draw_menu(&mut self, grid: &mut CellBuffer, area: Area, context: &mut Context) { if !self.is_dirty() { return; } clear_area(grid, area, self.theme_default); - /* visually divide menu and listing */ - area = (area.0, pos_dec(area.1, (1, 0))); let upper_left = upper_left!(area); let bottom_right = bottom_right!(area); self.dirty = false; @@ -580,19 +582,12 @@ impl Component for ContactList { }; let mid = get_x(bottom_right) - right_component_width; if self.dirty && mid != get_x(upper_left) { - if self.show_divider { - for i in get_y(upper_left)..=get_y(bottom_right) { - grid[(mid, i)] - .set_ch(VERT_BOUNDARY) - .set_fg(self.theme_default.fg) - .set_bg(self.theme_default.bg); - } - } else { - for i in get_y(upper_left)..=get_y(bottom_right) { - grid[(mid, i)] - .set_fg(self.theme_default.fg) - .set_bg(self.theme_default.bg); - } + for i in get_y(upper_left)..=get_y(bottom_right) { + grid[(mid, i)] + .set_ch(self.sidebar_divider) + .set_fg(self.sidebar_divider_theme.fg) + .set_bg(self.sidebar_divider_theme.bg) + .set_attrs(self.sidebar_divider_theme.attrs); } context .dirty_areas @@ -604,7 +599,11 @@ impl Component for ContactList { } else if right_component_width == 0 { self.draw_menu(grid, area, context); } else { - self.draw_menu(grid, (upper_left, (mid, get_y(bottom_right))), context); + self.draw_menu( + grid, + (upper_left, (mid.saturating_sub(1), get_y(bottom_right))), + context, + ); self.draw_list(grid, (set_x(upper_left, mid + 1), bottom_right), context); } self.dirty = false; diff --git a/src/components/mail/listing.rs b/src/components/mail/listing.rs index 2ed7d410..debcdf4b 100644 --- a/src/components/mail/listing.rs +++ b/src/components/mail/listing.rs @@ -481,7 +481,9 @@ pub struct Listing { id: ComponentId, theme_default: ThemeAttribute, - show_divider: bool, + sidebar_divider: char, + sidebar_divider_theme: ThemeAttribute, + menu_visibility: bool, cmd_buf: String, /// This is the width of the right container to the entire width. @@ -539,21 +541,12 @@ impl Component for Listing { }; let mid = get_x(bottom_right) - right_component_width; if self.dirty && mid != get_x(upper_left) { - if self.show_divider { - for i in get_y(upper_left)..=get_y(bottom_right) { - grid[(mid, i)] - .set_ch(VERT_BOUNDARY) - .set_fg(self.theme_default.fg) - .set_bg(self.theme_default.bg) - .set_attrs(self.theme_default.attrs); - } - } else { - for i in get_y(upper_left)..=get_y(bottom_right) { - grid[(mid, i)] - .set_fg(self.theme_default.fg) - .set_bg(self.theme_default.bg) - .set_attrs(self.theme_default.attrs); - } + for i in get_y(upper_left)..=get_y(bottom_right) { + grid[(mid, i)] + .set_ch(self.sidebar_divider) + .set_fg(self.sidebar_divider_theme.fg) + .set_bg(self.sidebar_divider_theme.bg) + .set_attrs(self.sidebar_divider_theme.attrs); } context .dirty_areas @@ -579,7 +572,11 @@ impl Component for Listing { } else if right_component_width == 0 { self.draw_menu(grid, area, context); } else { - self.draw_menu(grid, (upper_left, (mid, get_y(bottom_right))), context); + self.draw_menu( + grid, + (upper_left, (mid.saturating_sub(1), get_y(bottom_right))), + context, + ); if context.is_online(account_hash).is_err() { match self.component { ListingComponent::Offline(_) => {} @@ -1435,8 +1432,9 @@ impl Listing { } }) .collect(); + let first_account_hash = account_entries[0].hash; let mut ret = Listing { - component: Offline(OfflineListing::new((account_entries[0].hash, 0))), + component: Offline(OfflineListing::new((first_account_hash, 0))), accounts: account_entries, status: None, visible: true, @@ -1446,7 +1444,10 @@ impl Listing { startup_checks_rate: RateLimit::new(2, 1000, context.job_executor.clone()), theme_default: conf::value(context, "theme_default"), id: ComponentId::new_v4(), - show_divider: false, + sidebar_divider: *account_settings!( + context[first_account_hash].listing.sidebar_divider + ), + sidebar_divider_theme: conf::value(context, "mail.sidebar_divider"), menu_visibility: true, ratio: 90, menu_width: WidgetWidth::Unset, @@ -1457,13 +1458,11 @@ impl Listing { ret } - fn draw_menu(&mut self, grid: &mut CellBuffer, mut area: Area, context: &mut Context) { + fn draw_menu(&mut self, grid: &mut CellBuffer, area: Area, context: &mut Context) { if !self.is_dirty() { return; } clear_area(grid, area, self.theme_default); - /* visually divide menu and listing */ - area = (area.0, pos_dec(area.1, (1, 0))); let upper_left = upper_left!(area); let bottom_right = bottom_right!(area); self.dirty = false; @@ -1770,6 +1769,7 @@ impl Listing { /* Set to dummy */ self.component = Offline(OfflineListing::new((account_hash, 0))); } + self.sidebar_divider = *account_settings!(context[account_hash].listing.sidebar_divider); self.status = None; self.set_dirty(true); context |