lib.rs (1492B)
1 use crate::ui::{edge_ui, node_ui}; 2 use egui::{Pos2, Rect}; 3 use jsoncanvas::JsonCanvas; 4 use notedeck::{AppAction, AppContext}; 5 6 mod ui; 7 8 pub struct Notebook { 9 canvas: JsonCanvas, 10 scene_rect: Rect, 11 loaded: bool, 12 } 13 14 impl Notebook { 15 pub fn new() -> Self { 16 Notebook::default() 17 } 18 } 19 20 impl Default for Notebook { 21 fn default() -> Self { 22 Notebook { 23 canvas: demo_canvas(), 24 scene_rect: Rect::from_min_max(Pos2::ZERO, Pos2::ZERO), 25 loaded: false, 26 } 27 } 28 } 29 30 impl notedeck::App for Notebook { 31 fn update(&mut self, _ctx: &mut AppContext<'_>, ui: &mut egui::Ui) -> Option<AppAction> { 32 //let app_action: Option<AppAction> = None; 33 34 if !self.loaded { 35 self.scene_rect = ui.available_rect_before_wrap(); 36 self.loaded = true; 37 } 38 39 egui::Scene::new().show(ui, &mut self.scene_rect, |ui| { 40 // render nodes 41 for (_node_id, node) in self.canvas.get_nodes().iter() { 42 let _resp = node_ui(ui, node); 43 } 44 45 // render edges 46 for (_edge_id, edge) in self.canvas.get_edges().iter() { 47 let _resp = edge_ui(ui, self.canvas.get_nodes(), edge); 48 } 49 }); 50 51 None 52 } 53 } 54 55 fn demo_canvas() -> JsonCanvas { 56 let demo_json: String = include_str!("../demo.canvas").to_string(); 57 58 let canvas: JsonCanvas = demo_json.parse().unwrap_or_else(|_| JsonCanvas::default()); 59 canvas 60 }