Disable more options when project config is loaded

This commit is contained in:
Luke Street 2024-01-21 23:58:10 -07:00
parent 197d1247a8
commit 02f521a528
2 changed files with 47 additions and 11 deletions

View File

@ -25,7 +25,8 @@ use crate::{
views::{ views::{
appearance::{appearance_window, Appearance}, appearance::{appearance_window, Appearance},
config::{ config::{
config_ui, diff_options_window, project_window, ConfigViewState, DEFAULT_WATCH_PATTERNS, config_ui, diff_options_window, project_window, ConfigViewState, CONFIG_DISABLED_TEXT,
DEFAULT_WATCH_PATTERNS,
}, },
data_diff::data_diff_ui, data_diff::data_diff_ui,
debug::debug_window, debug::debug_window,
@ -486,9 +487,7 @@ impl eframe::App for App {
"Reverse function order (-inline deferred)", "Reverse function order (-inline deferred)",
), ),
) )
.on_disabled_hover_text( .on_disabled_hover_text(CONFIG_DISABLED_TEXT);
"Option disabled because it's set by the project configuration file.",
);
ui.checkbox( ui.checkbox(
&mut diff_state.symbol_state.show_hidden_symbols, &mut diff_state.symbol_state.show_hidden_symbols,
"Show hidden symbols", "Show hidden symbols",

View File

@ -518,6 +518,9 @@ fn format_path(path: &Option<PathBuf>, appearance: &Appearance) -> RichText {
RichText::new(text).color(color).family(FontFamily::Monospace) RichText::new(text).color(color).family(FontFamily::Monospace)
} }
pub const CONFIG_DISABLED_TEXT: &str =
"Option disabled because it's set by the project configuration file.";
fn pick_folder_ui( fn pick_folder_ui(
ui: &mut egui::Ui, ui: &mut egui::Ui,
dir: &Option<PathBuf>, dir: &Option<PathBuf>,
@ -530,6 +533,7 @@ fn pick_folder_ui(
subheading(ui, label, appearance); subheading(ui, label, appearance);
ui.link(HELP_ICON).on_hover_ui(tooltip); ui.link(HELP_ICON).on_hover_ui(tooltip);
ui.add_enabled(enabled, egui::Button::new("Select")) ui.add_enabled(enabled, egui::Button::new("Select"))
.on_disabled_hover_text(CONFIG_DISABLED_TEXT)
}); });
ui.label(format_path(dir, appearance)); ui.label(format_path(dir, appearance));
response.inner response.inner
@ -620,7 +624,14 @@ fn split_obj_config_ui(
}); });
}); });
let mut custom_make_str = config.custom_make.clone().unwrap_or_default(); let mut custom_make_str = config.custom_make.clone().unwrap_or_default();
if ui.text_edit_singleline(&mut custom_make_str).changed() { if ui
.add_enabled(
config.project_config_info.is_none(),
egui::TextEdit::singleline(&mut custom_make_str),
)
.on_disabled_hover_text(CONFIG_DISABLED_TEXT)
.changed()
{
if custom_make_str.is_empty() { if custom_make_str.is_empty() {
config.custom_make = None; config.custom_make = None;
} else { } else {
@ -675,7 +686,12 @@ fn split_obj_config_ui(
FileDialogResult::TargetDir, FileDialogResult::TargetDir,
); );
} }
ui.checkbox(&mut config.build_target, "Build target objects").on_hover_ui(|ui| { ui.add_enabled(
config.project_config_info.is_none(),
egui::Checkbox::new(&mut config.build_target, "Build target objects"),
)
.on_disabled_hover_text(CONFIG_DISABLED_TEXT)
.on_hover_ui(|ui| {
let mut job = LayoutJob::default(); let mut job = LayoutJob::default();
job.append( job.append(
"Tells the build system to produce the target object.\n", "Tells the build system to produce the target object.\n",
@ -726,7 +742,12 @@ fn split_obj_config_ui(
FileDialogResult::BaseDir, FileDialogResult::BaseDir,
); );
} }
ui.checkbox(&mut config.build_base, "Build base objects").on_hover_ui(|ui| { ui.add_enabled(
config.project_config_info.is_none(),
egui::Checkbox::new(&mut config.build_base, "Build base objects"),
)
.on_disabled_hover_text(CONFIG_DISABLED_TEXT)
.on_hover_ui(|ui| {
let mut job = LayoutJob::default(); let mut job = LayoutJob::default();
job.append( job.append(
"Tells the build system to produce the base object.\n", "Tells the build system to produce the base object.\n",
@ -769,7 +790,11 @@ fn split_obj_config_ui(
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.label(RichText::new("File patterns").color(appearance.text_color)); ui.label(RichText::new("File patterns").color(appearance.text_color));
if ui.button("Reset").clicked() { if ui
.add_enabled(config.project_config_info.is_none(), egui::Button::new("Reset"))
.on_disabled_hover_text(CONFIG_DISABLED_TEXT)
.clicked()
{
config.watch_patterns = config.watch_patterns =
DEFAULT_WATCH_PATTERNS.iter().map(|s| Glob::new(s).unwrap()).collect(); DEFAULT_WATCH_PATTERNS.iter().map(|s| Glob::new(s).unwrap()).collect();
config.watcher_change = true; config.watcher_change = true;
@ -783,7 +808,11 @@ fn split_obj_config_ui(
.color(appearance.text_color) .color(appearance.text_color)
.family(FontFamily::Monospace), .family(FontFamily::Monospace),
); );
if ui.small_button("-").clicked() { if ui
.add_enabled(config.project_config_info.is_none(), egui::Button::new("-").small())
.on_disabled_hover_text(CONFIG_DISABLED_TEXT)
.clicked()
{
remove_at = Some(idx); remove_at = Some(idx);
} }
}); });
@ -793,8 +822,16 @@ fn split_obj_config_ui(
config.watcher_change = true; config.watcher_change = true;
} }
ui.horizontal(|ui| { ui.horizontal(|ui| {
egui::TextEdit::singleline(&mut state.watch_pattern_text).desired_width(100.0).show(ui); ui.add_enabled(
if ui.small_button("+").clicked() { config.project_config_info.is_none(),
egui::TextEdit::singleline(&mut state.watch_pattern_text).desired_width(100.0),
)
.on_disabled_hover_text(CONFIG_DISABLED_TEXT);
if ui
.add_enabled(config.project_config_info.is_none(), egui::Button::new("+").small())
.on_disabled_hover_text(CONFIG_DISABLED_TEXT)
.clicked()
{
if let Ok(glob) = Glob::new(&state.watch_pattern_text) { if let Ok(glob) = Glob::new(&state.watch_pattern_text) {
config.watch_patterns.push(glob); config.watch_patterns.push(glob);
config.watcher_change = true; config.watcher_change = true;