From 5bb5e0990166e4258639b9fbe6f9a7e91228d8f9 Mon Sep 17 00:00:00 2001 From: Dane Johnson Date: Tue, 10 May 2022 14:24:34 -0500 Subject: [PATCH] Add nodes from egui --- board-builder-impl-egui/src/main.rs | 60 ++++++++++++++++++++++++++++ board.zip | Bin 511999 -> 512026 bytes 2 files changed, 60 insertions(+) diff --git a/board-builder-impl-egui/src/main.rs b/board-builder-impl-egui/src/main.rs index ea13c4b..0d0f4d0 100644 --- a/board-builder-impl-egui/src/main.rs +++ b/board-builder-impl-egui/src/main.rs @@ -20,8 +20,10 @@ struct BoardBuilderApp { texture: Option, image: Option, edit_mode: EditMode, + create_node_dialog: CreateNodeDialog, } +#[derive(Clone, Copy)] enum EditMode { Nodes, Edges, @@ -92,8 +94,35 @@ impl eframe::App for BoardBuilderApp { image.paint_at(ui, response.rect); let view = View(response.rect); self.draw_board(&painter, view); + if let Some(pos) = response.interact_pointer_pos() { + let btn = if response.clicked() { + PointerButton::Primary + } else if response.secondary_clicked() { + PointerButton::Secondary + } else { + PointerButton::Middle + }; + let (x, y) = view.to_coords(pos); + self.dispatch_click(btn, x, y); + } } }); + if self.create_node_dialog.open { + Window::new("Create Node") + .collapsible(false) + .show(ctx, |ui| { + ui.label("Name:"); + ui.text_edit_singleline(&mut self.create_node_dialog.name); + if ui.button("Add").clicked() { + self.create_node_dialog.close(); + self.board.add_node( + self.create_node_dialog.x, + self.create_node_dialog.y, + self.create_node_dialog.name.clone(), + ) + } + }); + } } } @@ -142,10 +171,41 @@ impl BoardBuilderApp { } } } + + fn dispatch_click(&mut self, btn: PointerButton, x: f32, y: f32) { + use EditMode::*; + use PointerButton::*; + match (btn, self.edit_mode) { + (Primary, Nodes) => self.create_node_dialog.show(x, y), + _ => {}, + } + } } +#[derive(Clone, Copy)] struct View(Rect); impl CoordTransformer for View { fn origin(&self) -> Pos2 { self.0.min } fn extremes(&self) -> Pos2 { self.0.max } } + +#[derive(Default)] +struct CreateNodeDialog { + open: bool, + name: String, + x: f32, + y: f32, +} + +impl CreateNodeDialog { + fn show(&mut self, x: f32, y: f32) { + self.open = true; + self.x = x; + self.y = y; + self.name = String::new(); + } + + fn close(&mut self) { + self.open = false; + } +} diff --git a/board.zip b/board.zip index 0e7ee8a84828f58e56ec82d3f6c3595bb456d2c0..fa3c9bf6f111ce96c7465d36d9af4f3ae76f3303 100644 GIT binary patch delta 565 zcmexAUw+mC`T78FW)=|!1_lm>kF!>VY>rluSj))3kjKKnzy%adFG?)P(90^$&#Rq$ zI_rsnfNTBIi%~pPQ{wiXZb>XNo^WP@>j|gMsePTw&1)uz|9wAEHaaLL<1|Os!ozEK zZMO?Z&yO`<@Rxm8LHoAv8TGyYz9`zgIX5pR)N*_ z%g-_NYvky;cWhG7%HCxwzkEBn(Ds+?oX>N=`ZDc$W?;8JY{tC@N)Kn8&|;PhJ`%ub zJi&9_l4Uc$Uw4Qs%Uo zIx49=4tidqtjk(YKIwj*Sf7#08ok-WO>nJg#!S;7Es=*aORn8~xKST zC#4)kwcGw|axOXe{@-u2U1{Z#xjrYF+I)|@ss$^kUam^h<~=DLmeSVzdE?jRRnJr{ zJ!ei_kT%1|>$v^pI=0{U%G3jnaz1F9rQ;o>x@46{@rL)$WAttIz1-r}%fy_L!pY0A z%u=&=-g2|%x2s}LUOt@U+p5(SpT4Zu5)L`Ir&O^{{(#o(Ne)5lrU51eP0VZ1v1E|6lIdY&Da9svBf`?UZ7 delta 538 zcmbQWK>q)H`T78FW)=|!1_lm>TN0~6e5d>sn#9P!pv1z!zy%adFG?)P(90^$&#S$3 z+V8c20NaD`m3#X7Y`*=t7R&GS#^I5YSVybkG8Y#2qTU@V-}eOv-CokPtZRzKPow{5 zY9`&gx3kW9+WaSX*6uzy`6;iZtW!Cd0M(&*@nMQkd5Vv}P$ zd1qREzSx$xLg!+F@^d){HphjIS!(>Om*;GHBWo$&{C4$$sn+4Cj;dO13%-Re5}1$| z()m87!?gXZV}=HA3fIz<`Y8W-mu3V_*9uRZ`|3>%?>W;zgFCWG@-yFc2}fFQoBg6G zKIW(1uChYGT%V-SS98*4y6GKwVx+2}I8|fg@~4$EwoW?lIM?xAR%#S5=g z3C;Pu_iOIam50NUOlQ7NX4?6{!SWPO-0uB{<#|?43Y9W6uRL9D|JC?U_9Jo6>3S`C zd=K~PRq@R>(qF6LTRlJg-jZcfHZ!hI{JL$cy_BMqZF%L(T&X>t-Mi+8Wqtl}{@wos z`(6L8zq$QZ969ouA2PN-WCUR*AZ7+)79eH?Vz%uM8QBk<Fdt3Yct)Fn11^_ TyA0#5=|6xJTh)1XV59>8!Rhqv