diff --git a/board.zip b/board.zip index bc4d9b8..12a1a27 100644 Binary files a/board.zip and b/board.zip differ diff --git a/src/main.rs b/src/main.rs index 66c5295..e5b6ec4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -107,7 +107,45 @@ impl Board { } } -//////////////////// Node Create/Edit Dialogs //////////////////// +//////////////////// Auxilary Dialogs //////////////////// +fn add_remove_labels_dialog() { + let mut state = STATE.get().lock().unwrap(); + let mut win = window::Window::default() + .with_size(300, 200) + .center_of_parent(); + let flex = group::Flex::default() + .size_of_parent() + .center_of_parent(); + let mut label_key_browser = browser::HoldBrowser::default(); + for key in state.board.labels.keys() { + label_key_browser.add(key); + } + let mut label_value_browser = browser::HoldBrowser::default(); + label_key_browser.set_callback({ + let labels = state.board.labels.clone(); + move |k| { + label_value_browser.clear(); + match k.selected_text() { + Some(key) => { + for val in &labels[&key] { + label_value_browser.add(&val); + } + } + None => {} + } + } + }); + + flex.end(); + win.end(); + win.make_resizable(true); + win.make_modal(true); + win.show(); + while win.shown() { + app::wait(); + } +} + fn node_create_dialog(pos_x: f32, pos_y: f32) { let mut win = window::Window::default() .with_size(100, 100) @@ -330,14 +368,15 @@ fn main() { } ar.finish().ok(); }); - menubar.add("Edit/Edit Nodes", Shortcut::None, menu::MenuFlag::Normal, move |_| { + menubar.add("Edit/Edit Nodes", Shortcut::None, menu::MenuFlag::Normal, |_| { let mut state = STATE.get().lock().unwrap(); state.edit_mode = EditMode::Node; }); - menubar.add("Edit/Edit Edges", Shortcut::None, menu::MenuFlag::Normal, move |_| { + menubar.add("Edit/Edit Edges", Shortcut::None, menu::MenuFlag::Normal, |_| { let mut state = STATE.get().lock().unwrap(); state.edit_mode = EditMode::Edge; }); + menubar.add("Edit/Edit Labels", Shortcut::None, menu::MenuFlag::Normal, |_| add_remove_labels_dialog()); flex.set_size(&menubar, 40);