lib.rs (1450B)
1 use crate::ui::{edge_ui, node_ui}; 2 use egui::{Pos2, Rect}; 3 use jsoncanvas::JsonCanvas; 4 use notedeck::{AppContext, AppResponse}; 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 render(&mut self, _ctx: &mut AppContext<'_>, ui: &mut egui::Ui) -> AppResponse { 32 if !self.loaded { 33 self.scene_rect = ui.available_rect_before_wrap(); 34 self.loaded = true; 35 } 36 37 egui::Scene::new().show(ui, &mut self.scene_rect, |ui| { 38 // render nodes 39 for (_node_id, node) in self.canvas.get_nodes().iter() { 40 let _resp = node_ui(ui, node); 41 } 42 43 // render edges 44 for (_edge_id, edge) in self.canvas.get_edges().iter() { 45 let _resp = edge_ui(ui, self.canvas.get_nodes(), edge); 46 } 47 }); 48 49 AppResponse::none() 50 } 51 } 52 53 fn demo_canvas() -> JsonCanvas { 54 let demo_json: String = include_str!("../demo.canvas").to_string(); 55 56 let canvas: JsonCanvas = demo_json.parse().unwrap_or_else(|_| JsonCanvas::default()); 57 canvas 58 }