use crate::app::TextEditor; use eframe::egui; fn render_shortcuts_content(ui: &mut egui::Ui) { ui.vertical_centered(|ui| { ui.label(egui::RichText::new("Navigation").size(18.0).strong()); ui.label(egui::RichText::new("Ctrl + N: New").size(14.0)); ui.label(egui::RichText::new("Ctrl + O: Open").size(14.0)); ui.label(egui::RichText::new("Ctrl + S: Save").size(14.0)); ui.label(egui::RichText::new("Ctrl + Shift + S: Save As").size(14.0)); ui.label(egui::RichText::new("Ctrl + T: New Tab").size(14.0)); ui.label(egui::RichText::new("Ctrl + Tab: Next Tab").size(14.0)); ui.label(egui::RichText::new("Ctrl + Shift + Tab: Last Tab").size(14.0)); ui.add_space(16.0); ui.separator(); ui.label(egui::RichText::new("Editing").size(18.0).strong()); ui.label(egui::RichText::new("Ctrl + Z: Undo").size(14.0)); ui.label(egui::RichText::new("Ctrl + Shift + Z: Redo").size(14.0)); ui.label(egui::RichText::new("Ctrl + X: Cut").size(14.0)); ui.label(egui::RichText::new("Ctrl + C: Copy").size(14.0)); ui.label(egui::RichText::new("Ctrl + V: Paste").size(14.0)); ui.label(egui::RichText::new("Ctrl + A: Select All").size(14.0)); ui.label(egui::RichText::new("Ctrl + D: Delete Line").size(14.0)); ui.add_space(16.0); ui.separator(); ui.label(egui::RichText::new("Views").size(18.0).strong()); ui.label(egui::RichText::new("Ctrl + L: Toggle Line Numbers").size(14.0)); ui.label( egui::RichText::new("Ctrl + Shift + L: Change Line Number Side").size(14.0), ); ui.label(egui::RichText::new("Ctrl + K: Toggle Word Wrap").size(14.0)); ui.label(egui::RichText::new("Ctrl + H: Toggle Auto Hide Toolbar").size(14.0)); ui.label(egui::RichText::new("Ctrl + P: Preferences").size(14.0)); ui.label(egui::RichText::new("Ctrl + =/-: Increase/Decrease Font Size").size(14.0)); ui.label(egui::RichText::new("Ctrl + Shift + =/-: Zoom In/Out").size(14.0)); // ui.label( // egui::RichText::new("Ctrl + Shift + .: Toggle Vim Mode") // .size(14.0) // ); // ui.label( // egui::RichText::new("Ctrl + .: Toggle Vim Mode") // .size(14.0) // ); ui.add_space(12.0); }); } pub(crate) fn shortcuts_window(app: &mut TextEditor, ctx: &egui::Context) { let visuals = &ctx.style().visuals; let screen_rect = ctx.screen_rect(); // Calculate appropriate window size that always fits nicely in the main window let window_width = (screen_rect.width() * 0.6).min(400.0).max(300.0); let window_height = (screen_rect.height() * 0.7).min(500.0).max(250.0); egui::Window::new("Shortcuts") .collapsible(false) .resizable(false) .anchor(egui::Align2::CENTER_CENTER, egui::Vec2::ZERO) .fixed_size([window_width, window_height]) .frame(egui::Frame { fill: visuals.window_fill, stroke: visuals.window_stroke, corner_radius: egui::CornerRadius::same(8), shadow: visuals.window_shadow, inner_margin: egui::Margin::same(16), outer_margin: egui::Margin::same(0), }) .show(ctx, |ui| { ui.vertical(|ui| { // Scrollable content area let available_height = ui.available_height() - 40.0; // Reserve space for close button ui.allocate_ui_with_layout( [ui.available_width(), available_height].into(), egui::Layout::top_down(egui::Align::Center), |ui| { egui::ScrollArea::vertical() .auto_shrink([false; 2]) .show(ui, |ui| { render_shortcuts_content(ui); }); }, ); // Fixed close button at bottom ui.vertical_centered(|ui| { ui.add_space(8.0); let visuals = ui.visuals(); let close_button = egui::Button::new("Close") .fill(visuals.widgets.inactive.bg_fill) .stroke(visuals.widgets.inactive.bg_stroke); if ui.add(close_button).clicked() { app.show_shortcuts = false; } }); }); }); }