use super::SettingsUI;
use par_term_config::Theme;
use par_term_config::{BackgroundMode, CursorStyle, TabBarMode};
pub fn show(ui: &mut egui::Ui, settings: &mut SettingsUI, changes_this_frame: &mut bool) {
ui.horizontal_wrapped(|ui| {
ui.spacing_mut().item_spacing.x = 16.0;
ui.horizontal(|ui| {
ui.label("Font:");
let response = ui.add(
egui::TextEdit::singleline(&mut settings.temp_font_family)
.desired_width(120.0)
.hint_text("JetBrains Mono"),
);
if response.changed() {
settings.font_pending_changes = true;
}
});
ui.separator();
ui.horizontal(|ui| {
ui.label("Size:");
if ui
.add(egui::Slider::new(&mut settings.temp_font_size, 6.0..=48.0).show_value(true))
.changed()
{
settings.font_pending_changes = true;
}
});
ui.separator();
ui.horizontal(|ui| {
ui.label("Theme:");
let available = Theme::available_themes();
let mut selected = settings.config.theme.clone();
egui::ComboBox::from_id_salt("quick_theme_select")
.width(120.0)
.selected_text(selected.clone())
.show_ui(ui, |ui| {
for theme in &available {
ui.selectable_value(&mut selected, theme.to_string(), *theme);
}
});
if selected != settings.config.theme {
settings.config.theme = selected;
settings.has_changes = true;
*changes_this_frame = true;
}
});
});
ui.horizontal_wrapped(|ui| {
ui.spacing_mut().item_spacing.x = 16.0;
ui.horizontal(|ui| {
ui.label("Opacity:");
if ui
.add(egui::Slider::new(
&mut settings.config.window_opacity,
0.1..=1.0,
))
.changed()
{
settings.has_changes = true;
*changes_this_frame = true;
}
});
ui.separator();
ui.horizontal(|ui| {
ui.label("Cursor:");
let current = settings.config.cursor_style;
if ui
.selectable_label(current == CursorStyle::Block, "Block")
.clicked()
{
settings.config.cursor_style = CursorStyle::Block;
settings.has_changes = true;
*changes_this_frame = true;
}
if ui
.selectable_label(current == CursorStyle::Beam, "Beam")
.clicked()
{
settings.config.cursor_style = CursorStyle::Beam;
settings.has_changes = true;
*changes_this_frame = true;
}
if ui
.selectable_label(current == CursorStyle::Underline, "Line")
.clicked()
{
settings.config.cursor_style = CursorStyle::Underline;
settings.has_changes = true;
*changes_this_frame = true;
}
});
ui.separator();
if ui
.checkbox(&mut settings.config.cursor_blink, "Blink")
.changed()
{
settings.has_changes = true;
*changes_this_frame = true;
}
});
ui.horizontal_wrapped(|ui| {
ui.spacing_mut().item_spacing.x = 16.0;
ui.horizontal(|ui| {
ui.label("Tab bar:");
let current = match settings.config.tab_bar_mode {
TabBarMode::Always => 0,
TabBarMode::WhenMultiple => 1,
TabBarMode::Never => 2,
};
let mut selected = current;
egui::ComboBox::from_id_salt("quick_tab_bar_mode")
.width(100.0)
.selected_text(match current {
0 => "Always",
1 => "Multiple",
2 => "Never",
_ => "Unknown",
})
.show_ui(ui, |ui| {
ui.selectable_value(&mut selected, 0, "Always");
ui.selectable_value(&mut selected, 1, "When multiple");
ui.selectable_value(&mut selected, 2, "Never");
});
if selected != current {
settings.config.tab_bar_mode = match selected {
0 => TabBarMode::Always,
1 => TabBarMode::WhenMultiple,
2 => TabBarMode::Never,
_ => TabBarMode::WhenMultiple,
};
settings.has_changes = true;
*changes_this_frame = true;
}
});
ui.separator();
ui.horizontal(|ui| {
ui.label("Background:");
let current = match settings.config.background_mode {
BackgroundMode::Default => 0,
BackgroundMode::Color => 1,
BackgroundMode::Image => 2,
};
let mut selected = current;
egui::ComboBox::from_id_salt("quick_bg_mode")
.width(80.0)
.selected_text(match current {
0 => "Default",
1 => "Color",
2 => "Image",
_ => "Unknown",
})
.show_ui(ui, |ui| {
ui.selectable_value(&mut selected, 0, "Default");
ui.selectable_value(&mut selected, 1, "Color");
ui.selectable_value(&mut selected, 2, "Image");
});
if selected != current {
settings.config.background_mode = match selected {
0 => BackgroundMode::Default,
1 => BackgroundMode::Color,
2 => BackgroundMode::Image,
_ => BackgroundMode::Default,
};
settings.has_changes = true;
*changes_this_frame = true;
}
});
ui.separator();
if ui
.checkbox(
&mut settings.config.shader.custom_shader_enabled,
"BG Shader",
)
.on_hover_text("Enable background shader effect")
.changed()
{
settings.has_changes = true;
*changes_this_frame = true;
}
ui.separator();
if ui
.checkbox(
&mut settings.config.shader.cursor_shader_enabled,
"Cursor Shader",
)
.on_hover_text("Enable cursor shader effect")
.changed()
{
settings.has_changes = true;
*changes_this_frame = true;
}
if settings.font_pending_changes {
ui.separator();
if ui.button("Apply Font").clicked() {
settings.apply_font_changes();
settings.has_changes = true;
*changes_this_frame = true;
}
ui.colored_label(egui::Color32::YELLOW, "(pending)");
}
});
}