confirm exit if unsaved
This commit is contained in:
parent
fee92f29a8
commit
e7dae3f939
|
@ -30,11 +30,13 @@ impl Calcifer {
|
|||
ui.separator();
|
||||
self.terminal_visible = self.toggle(ui, self.terminal_visible, "🖵");
|
||||
ui.separator();
|
||||
self.search_menu.visible = self.toggle(ui, self.search_menu.visible, "🔍");
|
||||
ui.separator();
|
||||
self.settings_menu.visible = self.toggle(ui, self.settings_menu.visible, "⚙");
|
||||
ui.separator();
|
||||
self.shortcuts_menu.visible = self.toggle(ui, self.shortcuts_menu.visible, "⌨");
|
||||
ui.separator();
|
||||
self.profiler_visible = self.toggle(ui, self.profiler_visible, "🗠");
|
||||
self.profiler_visible = self.toggle(ui, self.profiler_visible, "⚡");
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -79,6 +81,9 @@ impl Calcifer {
|
|||
ui.label("");
|
||||
|
||||
ui.horizontal(|ui| {
|
||||
if ui.add(egui::Button::new("⟳")).clicked() {
|
||||
self.command_history = vec![];
|
||||
}
|
||||
ui.style_mut().visuals.extreme_bg_color = bg_color;
|
||||
let Self { command, .. } = self;
|
||||
ui.colored_label(command_color.clone(), tools::format_path(&env::current_dir().expect("Could not find Shell Environnment")));
|
||||
|
@ -182,12 +187,12 @@ impl Calcifer {
|
|||
let lines = current_tab.code.chars().filter(|&c| c == '\n').count() + 1;
|
||||
let mut override_cursor : Option<CCursorRange> = None;
|
||||
|
||||
if !self.search.result_selected {
|
||||
if !self.search_menu.result_selected {
|
||||
override_cursor = Some(CCursorRange::two(
|
||||
CCursor::new(self.search.get_cursor_start()),
|
||||
CCursor::new(self.search.get_cursor_end()),
|
||||
CCursor::new(self.search_menu.get_cursor_start()),
|
||||
CCursor::new(self.search_menu.get_cursor_end()),
|
||||
));
|
||||
self.search.result_selected = true;
|
||||
self.search_menu.result_selected = true;
|
||||
}
|
||||
|
||||
CodeEditor::default().id_source("code editor")
|
||||
|
@ -200,8 +205,8 @@ impl Calcifer {
|
|||
}
|
||||
|
||||
pub fn draw_windows(&mut self, ctx: &egui::Context) {
|
||||
if self.search.visible {
|
||||
self.search.show(ctx, &mut self.tabs, &mut self.selected_tab);
|
||||
if self.search_menu.visible {
|
||||
self.search_menu.show(ctx, &mut self.tabs, &mut self.selected_tab);
|
||||
}
|
||||
if self.close_tab_confirm.visible {
|
||||
self.close_tab_confirm.show(ctx);
|
||||
|
@ -209,6 +214,15 @@ impl Calcifer {
|
|||
if self.refresh_confirm.visible {
|
||||
self.refresh_confirm.show(ctx);
|
||||
}
|
||||
if self.exit_confirm.visible {
|
||||
self.exit_confirm.show(ctx);
|
||||
}
|
||||
if self.exit_confirm.proceed {
|
||||
for tab in self.tabs.iter_mut() {
|
||||
tab.saved = true;
|
||||
}
|
||||
egui::Context::send_viewport_cmd(ctx, egui::ViewportCommand::Close);
|
||||
}
|
||||
if self.shortcuts_menu.visible {
|
||||
self.shortcuts_menu.show(ctx);
|
||||
}
|
||||
|
|
28
src/main.rs
28
src/main.rs
|
@ -80,8 +80,9 @@ struct Calcifer {
|
|||
close_tab_confirm: tools::confirm::ConfirmWindow,
|
||||
tab_to_close: usize,
|
||||
refresh_confirm: tools::confirm::ConfirmWindow,
|
||||
exit_confirm: tools::confirm::ConfirmWindow,
|
||||
|
||||
search: tools::search::SearchWindow,
|
||||
search_menu: tools::search::SearchWindow,
|
||||
settings_menu: tools::settings::SettingsWindow,
|
||||
shortcuts_menu: tools::shortcuts::ShortcutsWindow,
|
||||
|
||||
|
@ -109,8 +110,9 @@ impl Default for Calcifer {
|
|||
close_tab_confirm: tools::confirm::ConfirmWindow::new("You have some unsaved changes, Do you still want to close this document ?", "Confirm Close"),
|
||||
tab_to_close: 0,
|
||||
refresh_confirm: tools::confirm::ConfirmWindow::new("You have some unsaved changes, Do you still want to refresh this document ?", "Confirm Refresh"),
|
||||
exit_confirm: tools::confirm::ConfirmWindow::new("", "Confirm Exit"),
|
||||
|
||||
search: tools::search::SearchWindow::default(),
|
||||
search_menu: tools::search::SearchWindow::default(),
|
||||
settings_menu: tools::settings::SettingsWindow::new(DEFAULT_THEMES[0]),
|
||||
shortcuts_menu: tools::shortcuts::ShortcutsWindow::new(),
|
||||
|
||||
|
@ -172,8 +174,26 @@ impl eframe::App for Calcifer {
|
|||
}
|
||||
|
||||
if ctx.input( |i| i.key_pressed(egui::Key::F) && i.modifiers.ctrl) {
|
||||
self.search.visible = !self.search.visible.clone();
|
||||
self.search.initialized = !self.search.visible.clone();
|
||||
self.search_menu.visible = !self.search_menu.visible.clone();
|
||||
self.search_menu.initialized = !self.search_menu.visible.clone();
|
||||
}
|
||||
|
||||
if ctx.input(|i| i.viewport().close_requested()) {
|
||||
let mut unsaved_tabs : Vec<usize> = vec![];
|
||||
for (index, tab) in self.tabs.iter().enumerate() {
|
||||
if !tab.saved {
|
||||
unsaved_tabs.push(index);
|
||||
}
|
||||
}
|
||||
if unsaved_tabs.len() > 0 {
|
||||
let mut unsaved_tabs_names : String = "".to_string();
|
||||
for index in unsaved_tabs.iter() {
|
||||
unsaved_tabs_names.push_str(&self.tabs[*index].get_name());
|
||||
}
|
||||
egui::Context::send_viewport_cmd(ctx, egui::ViewportCommand::CancelClose);
|
||||
self.exit_confirm.prompt = format!("You have some unsaved changes :\n{}\nDo you still want to exit ?", unsaved_tabs_names);
|
||||
self.exit_confirm.ask();
|
||||
}
|
||||
}
|
||||
|
||||
self.time_watch[0] = watch.elapsed().as_micros() as f32 / 1000.0;
|
||||
|
|
|
@ -4,7 +4,7 @@ use eframe::egui;
|
|||
pub struct ConfirmWindow {
|
||||
pub visible: bool,
|
||||
pub proceed: bool,
|
||||
prompt: String,
|
||||
pub prompt: String,
|
||||
id: String,
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue