From 540629100ce53adcf72de7bd2887209b6370cf0f Mon Sep 17 00:00:00 2001 From: Dane Johnson Date: Wed, 11 May 2022 16:36:53 -0500 Subject: [PATCH] Use node edit dialog to change names of nodes --- board-builder-impl-egui/src/main.rs | 65 +++++++++++++++++++--------- board.zip | Bin 512739 -> 512748 bytes src/lib.rs | 2 +- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/board-builder-impl-egui/src/main.rs b/board-builder-impl-egui/src/main.rs index 5668c7b..0c7724b 100644 --- a/board-builder-impl-egui/src/main.rs +++ b/board-builder-impl-egui/src/main.rs @@ -5,7 +5,7 @@ use image::DynamicImage; use rfd::FileDialog; -use board_builder::{ Board, CoordTransformer, read_board_from_file, write_board_to_file }; +use board_builder::{ Board, Node, CoordTransformer, read_board_from_file, write_board_to_file }; use std::path::Path; use std::collections::HashSet; @@ -25,6 +25,7 @@ struct BoardBuilderApp { edit_mode: EditMode, selected_node: Option, create_node_dialog: CreateNodeDialog, + edit_node_dialog: EditNodeDialog, edit_labels_dialog: EditLabelsDialog, } @@ -131,6 +132,7 @@ impl eframe::App for BoardBuilderApp { } }); } + self.edit_node_dialog.ui(ctx); self.edit_labels_dialog.ui(ctx); } } @@ -194,7 +196,12 @@ impl BoardBuilderApp { match (btn, self.edit_mode) { (Primary, Nodes) => self.create_node_dialog.show(x, y), (Primary, Edges) => self.select_edge(x, y), - (Secondary, Nodes) => self.delete_node(x, y), + (Secondary, Nodes) => { + let board = Rc::clone(&self.board); + if let Some(id) = self.board.borrow().nearest_node(x, y) { + self.edit_node_dialog.show(id, board); + } + }, _ => {}, } } @@ -247,6 +254,41 @@ impl CreateNodeDialog { } } +#[derive(Default)] +struct EditNodeDialog { + open: bool, + id: usize, + node: Node, + board: Rc>, +} + +impl EditNodeDialog { + fn show(&mut self, id: usize, board: Rc>) { + self.open = true; + self.id = id; + self.board = board; + self.node = self.board.borrow().nodes.get(&self.id).unwrap().clone(); + } + + fn ui(&mut self, ctx: &Context) { + if !self.open { return } + Window::new("Edit Node") + .collapsible(false) + .show(ctx, |ui| { + let mut board = self.board.borrow_mut(); + ui.text_edit_singleline(&mut self.node.name); + if ui.button("Ok").clicked() { + board.nodes.insert(self.id, self.node.clone()); + self.open = false; + } + if ui.button("Cancel").clicked() { + self.open = false + } + }); + } +} + + #[derive(Default)] struct EditLabelsDialog { open: bool, @@ -359,22 +401,3 @@ impl StringDialog { } } } - -// #[derive(Default)] -// struct EditNodeDialog { -// open: bool, -// name: String, -// id: usize, -// labels: HashMap, -// } - -// impl EditNodeDialog { -// fn show(&mut self, id: usize, board: &Board) { -// self.open = true; -// let node = board.nodes.get(&id).unwrap(); - -// self.id = id; -// self.name = node.name.clone(); -// self.labels = node.labels.clone(); -// } -// } diff --git a/board.zip b/board.zip index a15919de5228e42e60b2384bf5c1f41004703e03..ccb078e2bcc403e2b5977934b1a6f0fd6d9496b0 100644 GIT binary patch delta 1311 zcmV+)1>pMQr6262AAe9w0|XQR000O8ldP*$xn%+Re*^#k6b=9Y3IG5AXL4b1XfA4V zZ*F~8ZExE)5dJHMJ`)4)cznw@w!fj`zIW<$JdapW^P&U48HVh}(WYbXOm`^`Q@)=-%y*(|^rs{Uwh5b-I7MA206L zpXVQrhiMGE(?hS0^Jd*3@Uy9ue*{zAt{4MT6Fj6RvSl7D*oH>C3aWc zUvY@v;&GRd;%1v3|DXhr0Qe|Mtq+Wjm_appt$@rK)EI>xz+}`{;V`XowKFaX)B;JM zYM_0FHd>>z?thGo{2D{LAiw8h*QH9KnnIP!Xigak(w@;kS#Qa>jP`5za(xq~+qz0> z@Cuwl<{g<(_SS-D3m>BWL$e=Sc_t0sn=SG5chOff(yK82pAHu&E zy#&)hLaEl0C+W|K#IjTpGvLcOBnwvVoI$mq2Gx{8t+Sw1W?cDn6$za@pPF#?b!8tZ zz&FT+D1T&W8+5aEtRrh&DR@0@xnyp^GY!>MY@9x`(pf?pEb0q~KSx#Df?{z3QmFha z1G3sD`WhKL)d6gjUut&RSR?5S>ySI(psBdd&Kx6+4zMt$Sy zqot=)#o8Y}g0@9(CCFpXf!n@Y>f&-x`L&8Sqi zN`Gc$9Ly)T2>gPQ%fn_r#KS`7LN&(3lFu3yq0L$EH1K#Ux;d{WjcVE&ODGwi_|5~< zIg|WTAp1`opBFWP;0dR^Pz|i91_@at$U})v=~SAz-ZAWSF*VyMTqV7+{Ir_s26Otd zm)v}1C9VF9BfD`w-q!=ZIX+fmCvSb$k$)yqQY|_fPs`GRsRk4a@4O^vC1LjBsi$R# zu0L;Y!q6Y43qzt$dDQMoP}oOp4ddpe&N;1FVHx=MI3DW|YJ;s>5DiFViRZ1s*>sgP z?snuziv1c#~w z1&68x2DhpN2f)n%?AMa&IbSq0000000000 V0001_fv1(V0c-b2SCDKTv# zB-YKB!|(4f-RaW(1>Pz?0l+Jajkl z!@I*U-mcbn;qrccI2G?7A4St2HsOq{8{u~sT;Z;4vlPHxqj z2qi885P0U*CDuv(YF3p&HMQ(cn)EjYRSRHdBs`ZYp-3p9bOoK`rCBv+(!5Nsl4Tcc zAMVGwT7L}4kEzU%H6tKYnCwbXuohjFtmnL-s#$Y!83~r;mik#B;c^UDuztx4!R=qwh%hanF(x>C5I%F z>3`K(aL9%7<|ZtQS_>zjYJZihk6i3#JGqD=q9MH~spkS(fo2nFsX2{y(#E3Yg0*#+ zs+OvZ2|q9s!j4-c(AHF%5?H>M=kS)(!5rR zT6!}qw{ssHLy8Hc&M-!z^e8FEH21slp>v$BKt&ULH`bY_!>_8SvimZp0XO!7A`?1e}B@# zD&RX}_DH`u^kH!$Faj$vvQwmUJXX3A8USsJA=i6<+|BE&z7aysMqJP_!V{i#hM!F0 z^$oWS8}Gl_j8I<#vMju+4N$tZAON;S!}2B5kE<7aW#?j?_g4+8GOTgZDwS?5(K*_d zOwL(Uyj3b$@=cik`DqPJ-ZAXx_%kH97lZ%W?H5AVUZlc{%A~}Z=)+<^y$fGfuTQ)N zW)o_$te3~f?@&tv1QY-O00;n%se`iwhqD9$hqD9%hqD9&hqD9(hqD9)hqD9*x3dHX qz|9GcsjE~MlC|J=mweI(F9MFKm#xwV908t}%F+iM242z!0000~b!}z< diff --git a/src/lib.rs b/src/lib.rs index e856c6d..3645c1f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,7 @@ use serde::{ Serialize, Deserialize }; use std::collections::{ HashMap, HashSet }; -#[derive(Serialize, Deserialize, Debug, Default)] +#[derive(Serialize, Deserialize, Debug, Default, Clone)] #[serde(default)] pub struct Node { pub x: f32,