notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

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 }