Consider stretch/weight settings advanced and hide them with a toggle

Signed-off-by: Mohammad AlSaleh <CE.Mohammad.AlSaleh@gmail.com>
This commit is contained in:
Mohammad AlSaleh 2024-01-10 01:38:13 +03:00 committed by Jeremy Soller
parent 59804dc8ab
commit 4ec3e5b2f3
2 changed files with 55 additions and 26 deletions

View file

@ -11,6 +11,7 @@ dark = Dark
light = Light
syntax-dark = Syntax dark
syntax-light = Syntax light
advanced-font-settings = Advanced Font Settings
default-font = Default font
default-font-stretch = Default font stretch
default-font-weight = Default font weight

View file

@ -14,7 +14,7 @@ use cosmic::{
futures::SinkExt,
keyboard::{Event as KeyEvent, KeyCode, Modifiers},
subscription::{self, Subscription},
window, Event, Length, Point,
window, Event, Length, Point, Padding,
},
style,
widget::{self, segmented_button},
@ -159,6 +159,7 @@ pub enum Message {
TermEventTx(mpsc::Sender<(segmented_button::Entity, TermEvent)>),
Todo(&'static str),
ToggleContextPage(ContextPage),
ShowAdvancedFontSettings(bool),
WindowClose,
WindowNew,
ZoomIn,
@ -204,6 +205,7 @@ pub struct App {
context_page: ContextPage,
term_event_tx_opt: Option<mpsc::Sender<(segmented_button::Entity, TermEvent)>>,
term_config: TermConfig,
show_advanced_font_settings: bool,
}
impl App {
@ -346,7 +348,40 @@ impl App {
.zoom_steps
.iter()
.position(|zoom_step| zoom_step == &self.config.font_size_zoom_step_mul_100);
widget::settings::view_column(vec![widget::settings::view_section(fl!("appearance"))
let advanced_font_settings = || {
let section = widget::settings::view_section("")
.add(
widget::settings::item::builder(fl!("default-font-stretch")).control(
widget::dropdown(&self.curr_font_stretch_names, font_stretch_selected, |index| {
Message::DefaultFontStretch(index)
}),
),
)
.add(
widget::settings::item::builder(fl!("default-font-weight")).control(
widget::dropdown(&self.curr_font_weight_names, font_weight_selected, |index| {
Message::DefaultFontWeight(index)
}),
),
)
.add(
widget::settings::item::builder(fl!("default-bold-font-weight")).control(
widget::dropdown(&self.curr_font_weight_names, bold_font_weight_selected, |index| {
Message::DefaultBoldFontWeight(index)
}),
),
);
let padding = Padding {
top: 0.0,
bottom: 0.0,
left: 12.0,
right: 12.0,
};
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,
@ -381,6 +416,16 @@ impl App {
|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());
}
let settings_view = settings_view
.add(
widget::settings::item::builder(fl!("default-font-size")).control(
widget::dropdown(&self.font_size_names, font_size_selected, |index| {
@ -395,33 +440,12 @@ impl App {
}),
),
)
.add(
widget::settings::item::builder(fl!("default-font-stretch")).control(
widget::dropdown(&self.curr_font_stretch_names, font_stretch_selected, |index| {
Message::DefaultFontStretch(index)
}),
),
)
.add(
widget::settings::item::builder(fl!("default-font-weight")).control(
widget::dropdown(&self.curr_font_weight_names, font_weight_selected, |index| {
Message::DefaultFontWeight(index)
}),
),
)
.add(
widget::settings::item::builder(fl!("default-bold-font-weight")).control(
widget::dropdown(&self.curr_font_weight_names, bold_font_weight_selected, |index| {
Message::DefaultBoldFontWeight(index)
}),
),
)
.add(
widget::settings::item::builder(fl!("show-headerbar"))
.toggler(self.config.show_headerbar, Message::ShowHeaderBar),
)
.into()])
.into()
);
widget::settings::view_column(vec![settings_view.into()]).into()
}
}
@ -570,6 +594,7 @@ impl Application for App {
context_page: ContextPage::Settings,
term_config: flags.term_config,
term_event_tx_opt: None,
show_advanced_font_settings: false,
};
app.set_curr_font_weights_and_stretches();
@ -870,6 +895,9 @@ impl Application for App {
}
self.set_context_title(context_page.title());
}
Message::ShowAdvancedFontSettings(show) => {
self.show_advanced_font_settings = show;
},
Message::WindowClose => {
return window::close(window::Id::MAIN);
}