From c2ddacbcaf0bd54a25fb635e449c2ccf633099c2 Mon Sep 17 00:00:00 2001 From: crumblingstatue Date: Wed, 16 Oct 2024 16:50:43 +0200 Subject: [PATCH] top_menu: Add button to add new layout and switch to it --- src/gui/top_menu/view.rs | 8 +++++++- src/gui/windows/layouts_window.rs | 10 +++------- src/meta.rs | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/gui/top_menu/view.rs b/src/gui/top_menu/view.rs index df06d99..09a1082 100644 --- a/src/gui/top_menu/view.rs +++ b/src/gui/top_menu/view.rs @@ -1,5 +1,5 @@ use { - crate::{app::App, gui::Gui}, + crate::{app::App, gui::Gui, meta::LayoutMapExt}, egui::Button, }; @@ -11,6 +11,12 @@ pub fn ui(ui: &mut egui::Ui, gui: &mut Gui, app: &mut App) { ui.close_menu(); } } + ui.separator(); + if ui.button("➕ Add new layout").clicked() { + app.hex_ui.current_layout = app.meta_state.meta.layouts.add_new_default(); + gui.win.layouts.open.set(true); + ui.close_menu(); + } }); ui.menu_button("Ruler", |ui| { ui.checkbox(&mut app.hex_ui.ruler.enabled, "enabled"); diff --git a/src/gui/windows/layouts_window.rs b/src/gui/windows/layouts_window.rs index 5237945..0ead4c3 100644 --- a/src/gui/windows/layouts_window.rs +++ b/src/gui/windows/layouts_window.rs @@ -2,8 +2,7 @@ use { super::{WinCtx, WindowOpen}, crate::{ app::App, - layout::{default_margin, Layout}, - meta::{LayoutKey, MetaLow, NamedView, ViewKey, ViewMap}, + meta::{LayoutKey, LayoutMapExt as _, MetaLow, NamedView, ViewKey, ViewMap}, view::{HexData, View, ViewKind}, }, slotmap::Key, @@ -16,6 +15,7 @@ pub struct LayoutsWindow { swap_a: ViewKey, edit_name: bool, } + impl super::Window for LayoutsWindow { fn ui(&mut self, WinCtx { ui, gui, app, .. }: WinCtx) { if self.open.just_now() { @@ -173,11 +173,7 @@ impl super::Window for LayoutsWindow { } ui.separator(); if ui.button("New layout").clicked() { - let key = app.meta_state.meta.layouts.insert(Layout { - name: "New layout".into(), - view_grid: Vec::new(), - margin: default_margin(), - }); + let key = app.meta_state.meta.layouts.add_new_default(); self.selected = key; App::switch_layout(&mut app.hex_ui, &app.meta_state.meta, key); } diff --git a/src/meta.rs b/src/meta.rs index 91125aa..48e7d45 100644 --- a/src/meta.rs +++ b/src/meta.rs @@ -28,6 +28,20 @@ pub type LayoutMap = SlotMap; pub type ScriptMap = SlotMap; pub type Bookmarks = Vec; +pub trait LayoutMapExt { + fn add_new_default(&mut self) -> LayoutKey; +} + +impl LayoutMapExt for LayoutMap { + fn add_new_default(&mut self) -> LayoutKey { + self.insert(Layout { + name: "New layout".into(), + view_grid: Vec::new(), + margin: crate::layout::default_margin(), + }) + } +} + /// A bookmark for an offset in a file #[derive(Serialize, Deserialize, Clone)] pub struct Bookmark {