diff --git a/src/calcifer.rs b/src/calcifer.rs index dc24da2..4802b99 100644 --- a/src/calcifer.rs +++ b/src/calcifer.rs @@ -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 = 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); } diff --git a/src/main.rs b/src/main.rs index 0799653..8aae48f 100644 --- a/src/main.rs +++ b/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 = 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; diff --git a/src/tools/confirm.rs b/src/tools/confirm.rs index 99dcbd1..61387b2 100644 --- a/src/tools/confirm.rs +++ b/src/tools/confirm.rs @@ -4,7 +4,7 @@ use eframe::egui; pub struct ConfirmWindow { pub visible: bool, pub proceed: bool, - prompt: String, + pub prompt: String, id: String, }