use eframe::egui::{self, RichText}; use crate::{application::Application, APP_NAME}; pub fn draw_sidebar(ctx: &egui::Context, app: &mut Application) { egui::SidePanel::left("left_panel") .exact_width(230.) .show(ctx, |ui| { ui.add_space(6.0); ui.heading(APP_NAME); ui.add_space(12.0); let id = ui.make_persistent_id("GerberContainer"); egui::collapsing_header::CollapsingState::load_with_default_open(ui.ctx(), id, true) .show_header(ui, |ui| { ui.horizontal_centered(|ui| { ui.image(app.resources.icons().gerber_file.clone()); ui.label( RichText::new("Gerber") .extra_letter_spacing(1.2) .size(17.) .strong(), ); }); }) .body(|ui| { for (key, (name, _)) in app.gerbers.iter() { ui.selectable_value( &mut app.selection, key.to_string(), RichText::new(name).size(11.), ); } }); let id = ui.make_persistent_id("ExcellonContainer"); egui::collapsing_header::CollapsingState::load_with_default_open(ui.ctx(), id, true) .show_header(ui, |ui| { ui.horizontal_centered(|ui| { ui.image(app.resources.icons().excellon_file.clone()); ui.label( RichText::new("Excellon") .extra_letter_spacing(1.2) .size(17.) .strong(), ); }); }) .body(|ui| { for (key, (name, _)) in app.excellons.iter() { ui.selectable_value(&mut app.selection, key.to_string(), name); } }); let id = ui.make_persistent_id("GeometryContainer"); egui::collapsing_header::CollapsingState::load_with_default_open(ui.ctx(), id, true) .show_header(ui, |ui| { ui.horizontal_centered(|ui| { ui.image(app.resources.icons().geometry_file.clone()); ui.label( RichText::new("Geometry") .extra_letter_spacing(1.2) .size(17.) .strong(), ); }); }) .body(|ui| { for (key, _) in app.outlines.iter() { ui.selectable_value(&mut app.selection, key.to_string(), key); } }); // allocate rest of the container let (id, rect) = ui.allocate_space(ui.available_size()); let response = ui.interact(rect, id, egui::Sense::click_and_drag()); if response.clicked() { app.selection = "".into(); } }); }