From ff6ad163d60504b85b759c6c69b44d4f6325740f Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 31 Jan 2024 10:29:35 -0700 Subject: [PATCH] Settings re-org --- i18n/en/cosmic_term.ftl | 36 ++++++---- src/main.rs | 154 ++++++++++++++++++++++------------------ 2 files changed, 105 insertions(+), 85 deletions(-) diff --git a/i18n/en/cosmic_term.ftl b/i18n/en/cosmic_term.ftl index 76badf6..31de374 100644 --- a/i18n/en/cosmic_term.ftl +++ b/i18n/en/cosmic_term.ftl @@ -2,7 +2,6 @@ ## Settings settings = Settings -focus-follow-mouse = Focus Follow Mouse ### Appearance appearance = Appearance @@ -10,17 +9,29 @@ theme = Theme match-desktop = Match desktop dark = Dark light = Light -syntax-dark = Syntax dark -syntax-light = Syntax light +syntax-dark = Color scheme dark +syntax-light = Color scheme light +default-zoom-step = Zoom steps + +### Font +font = Font advanced-font-settings = Advanced Font Settings -default-font = Default font -default-font-stretch = Default font stretch -default-font-weight = Default font weight -default-dim-font-weight = Default dim font weight -default-bold-font-weight = Default bold font weight -use-bright-bold = Use bright colors with bold text -default-font-size = Default font size -default-zoom-step = Default zoom step +default-font = Font +default-font-size = Font size +default-font-stretch = Font stretch +default-font-weight = Normal font weight +default-dim-font-weight = Dim font weight +default-bold-font-weight = Bold font weight +use-bright-bold = Make bold text brighter + +### Splits +splits = Splits +focus-follow-mouse = Typing focus follows mouse + +### Advanced +advanced = Advanced +show-headerbar = Show header +show-header-description = Reveal the header from the right-click menu. # Find find-placeholder = Find... @@ -54,6 +65,3 @@ split-horizontal = Split horizontal split-vertical = Split vertical pane-toggle-maximize = Toggle maximized menu-settings = Settings... - -# Context menu -show-headerbar = Show header bar diff --git a/src/main.rs b/src/main.rs index f1a5c4f..bffa23b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -525,6 +525,67 @@ impl App { .iter() .position(|zoom_step| zoom_step == &self.config.font_size_zoom_step_mul_100); + let appearance_section = widget::settings::view_section(fl!("appearance")) + .add( + widget::settings::item::builder(fl!("theme")).control(widget::dropdown( + &self.app_themes, + Some(app_theme_selected), + move |index| { + Message::AppTheme(match index { + 1 => AppTheme::Dark, + 2 => AppTheme::Light, + _ => AppTheme::System, + }) + }, + )), + ) + .add( + //TODO: rename to color-scheme-dark? + widget::settings::item::builder(fl!("syntax-dark")).control(widget::dropdown( + &self.theme_names, + dark_selected, + move |index| Message::SyntaxTheme(index, true), + )), + ) + .add( + //TODO: rename to color-scheme-light? + widget::settings::item::builder(fl!("syntax-light")).control(widget::dropdown( + &self.theme_names, + light_selected, + move |index| Message::SyntaxTheme(index, false), + )), + ) + .add( + widget::settings::item::builder(fl!("default-zoom-step")).control( + widget::dropdown(&self.zoom_step_names, zoom_step_selected, |index| { + Message::DefaultZoomStep(index) + }), + ), + ); + //TODO: background opacity + + let mut font_section = widget::settings::view_section(fl!("font")) + .add( + widget::settings::item::builder(fl!("default-font")).control(widget::dropdown( + &self.font_names, + font_selected, + |index| Message::DefaultFont(index), + )), + ) + .add( + widget::settings::item::builder(fl!("default-font-size")).control( + widget::dropdown(&self.font_size_names, font_size_selected, |index| { + Message::DefaultFontSize(index) + }), + ), + ) + .add( + widget::settings::item::builder(fl!("advanced-font-settings")).toggler( + self.show_advanced_font_settings, + Message::ShowAdvancedFontSettings, + ), + ); + let advanced_font_settings = || { let section = widget::settings::view_section("") .add( @@ -562,6 +623,10 @@ impl App { |index| Message::DefaultBoldFontWeight(index), ), ), + ) + .add( + widget::settings::item::builder(fl!("use-bright-bold")) + .toggler(self.config.use_bright_bold, Message::UseBrightBold), ); let padding = Padding { top: 0.0, @@ -572,81 +637,28 @@ impl App { widget::container(section).padding(padding) }; - let mut settings_view = widget::settings::view_section(fl!("appearance")) - .add( - widget::settings::item::builder(fl!("theme")).control(widget::dropdown( - &self.app_themes, - Some(app_theme_selected), - move |index| { - Message::AppTheme(match index { - 1 => AppTheme::Dark, - 2 => AppTheme::Light, - _ => AppTheme::System, - }) - }, - )), - ) - .add( - widget::settings::item::builder(fl!("syntax-dark")).control(widget::dropdown( - &self.theme_names, - dark_selected, - move |index| Message::SyntaxTheme(index, true), - )), - ) - .add( - widget::settings::item::builder(fl!("syntax-light")).control(widget::dropdown( - &self.theme_names, - light_selected, - move |index| Message::SyntaxTheme(index, false), - )), - ) - .add( - widget::settings::item::builder(fl!("default-font")).control(widget::dropdown( - &self.font_names, - font_selected, - |index| Message::DefaultFont(index), - )), - ) - .add( - widget::settings::item::builder(fl!("advanced-font-settings")).toggler( - self.show_advanced_font_settings, - Message::ShowAdvancedFontSettings, - ), - ); - if self.show_advanced_font_settings { - settings_view = settings_view.add(advanced_font_settings()); + font_section = font_section.add(advanced_font_settings()); } - let settings_view = settings_view - .add( - widget::settings::item::builder(fl!("use-bright-bold")) - .toggler(self.config.use_bright_bold, Message::UseBrightBold), - ) - .add( - widget::settings::item::builder(fl!("default-font-size")).control( - widget::dropdown(&self.font_size_names, font_size_selected, |index| { - Message::DefaultFontSize(index) - }), - ), - ) - .add( - widget::settings::item::builder(fl!("default-zoom-step")).control( - widget::dropdown(&self.zoom_step_names, zoom_step_selected, |index| { - Message::DefaultZoomStep(index) - }), - ), - ) - .add( - widget::settings::item::builder(fl!("show-headerbar")) - .toggler(self.config.show_headerbar, Message::ShowHeaderBar), - ) - .add( - widget::settings::item::builder(fl!("focus-follow-mouse")) - .toggler(self.config.focus_follow_mouse, Message::FocusFollowMouse), - ); + let splits_section = widget::settings::view_section(fl!("splits")).add( + widget::settings::item::builder(fl!("focus-follow-mouse")) + .toggler(self.config.focus_follow_mouse, Message::FocusFollowMouse), + ); - widget::settings::view_column(vec![settings_view.into()]).into() + let advanced_section = widget::settings::view_section(fl!("advanced")).add( + widget::settings::item::builder(fl!("show-headerbar")) + .description(fl!("show-header-description")) + .toggler(self.config.show_headerbar, Message::ShowHeaderBar), + ); + + widget::settings::view_column(vec![ + appearance_section.into(), + font_section.into(), + splits_section.into(), + advanced_section.into(), + ]) + .into() } fn create_and_focus_new_terminal(&mut self, pane: pane_grid::Pane) {