From e844a5f005c4e33e8f2a66ac45c1ced79fbdbaf3 Mon Sep 17 00:00:00 2001 From: Dane Johnson Date: Thu, 28 Apr 2022 08:53:53 -0500 Subject: [PATCH] Convert to a procedural style (more in keeping with fltk framework) --- src/main.rs | 110 +++++++++++++++++++--------------------------------- 1 file changed, 40 insertions(+), 70 deletions(-) diff --git a/src/main.rs b/src/main.rs index d3a68a8..923e26b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,15 +8,7 @@ use std::cell::RefCell; use std::rc::Rc; use std::collections::HashMap; -struct BoardApp { - app: app::App, - win: window::Window, - image: Rc>>, - board: Rc>, -} - type Id = usize; - #[derive(Serialize, Deserialize, Debug)] struct Node { pub x: f32, @@ -25,13 +17,11 @@ struct Node { pub name: String, pub edges: Vec, } - #[derive(Serialize, Deserialize, Debug)] struct Board { nodes: HashMap, image: Option, } - impl Board { pub fn new() -> Self { let nodes = HashMap::new(); @@ -40,69 +30,49 @@ impl Board { } } -impl BoardApp { - pub fn new() -> Self { - let app = app::App::default(); - let mut win = window::Window::default() - .with_size(400, 300); - let mut flex = group::Flex::default() - .size_of_parent(); - flex.set_type(group::FlexType::Column); - - // Board - let board = Rc::new(RefCell::new(Board::new())); - let menu = Rc::clone(&board); - - // Menu - let mut menubar = menu::MenuBar::default(); - menubar.add("File/New" , Shortcut::None, menu::MenuFlag::Normal, menu_cb); - menubar.add("File/Open..." , Shortcut::None, menu::MenuFlag::Normal, menu_cb); - menubar.add("File/Open Image..." , Shortcut::None, menu::MenuFlag::Normal, menu_cb); - menubar.add("File/Save As ..." , Shortcut::None, menu::MenuFlag::Normal, move |_| { println!("{}", serde_json::to_string(menu.as_ref()).unwrap()); }); - menubar.add("Edit/Edit Nodes" , Shortcut::None, menu::MenuFlag::Normal, menu_cb); - menubar.add("Edit/Edit Edges" , Shortcut::None, menu::MenuFlag::Normal, menu_cb); - flex.set_size(&mut menubar, 40); - - // Canvas - let image = Rc::new(RefCell::new(Option::::None)); - let bg_image = Rc::clone(&image); - let mut frame = frame::Frame::default(); - frame.draw(move |f| { - let mut image = bg_image.borrow_mut(); - if let Some(image) = image.as_mut() { - image.scale(f.w(), f.h(), true, true); - image.draw(f.x(), f.y(), f.w(), f.h()); - } - }); - - flex.end(); - win.end(); - win.make_resizable(true); - - BoardApp { app, win, image, board } - } - - pub fn show(&mut self) { - self.win.show(); - } - - pub fn run(&mut self) { - self.app.run().unwrap(); - } - - pub fn load_image(&mut self, path: &str) { - self.board.borrow_mut().image = Some(path.to_string()); - self.image.replace(image::SharedImage::load(path).ok()); - } -} - fn menu_cb(m: &mut impl MenuExt) { todo!(); } fn main() { - let mut app = BoardApp::new(); - app.show(); - app.load_image("risk.png"); - app.run(); + let app = app::App::default(); + let mut win = window::Window::default() + .with_size(400, 300); + let mut flex = group::Flex::default() + .size_of_parent(); + flex.set_type(group::FlexType::Column); + + // Board + let board = Rc::new(RefCell::new(Board::new())); + let menu = Rc::clone(&board); + + // Menu + let mut menubar = menu::MenuBar::default(); + menubar.add("File/New" , Shortcut::None, menu::MenuFlag::Normal, menu_cb); + menubar.add("File/Open..." , Shortcut::None, menu::MenuFlag::Normal, menu_cb); + menubar.add("File/Open Image..." , Shortcut::None, menu::MenuFlag::Normal, menu_cb); + menubar.add("File/Save As ..." , Shortcut::None, menu::MenuFlag::Normal, move |_| { println!("{}", serde_json::to_string(menu.as_ref()).unwrap()); }); + menubar.add("Edit/Edit Nodes" , Shortcut::None, menu::MenuFlag::Normal, menu_cb); + menubar.add("Edit/Edit Edges" , Shortcut::None, menu::MenuFlag::Normal, menu_cb); + flex.set_size(&mut menubar, 40); + + // Canvas + let image = Rc::new(RefCell::new(Option::::None)); + let bg_image = Rc::clone(&image); + let mut frame = frame::Frame::default(); + frame.draw(move |f| { + let mut image = bg_image.borrow_mut(); + if let Some(image) = image.as_mut() { + image.scale(f.w(), f.h(), true, true); + image.draw(f.x(), f.y(), f.w(), f.h()); + } + }); + + flex.end(); + + win.end(); + win.make_resizable(true); + win.show(); + + app.run().unwrap(); }