diff --git a/prototypes/ptth_quic_client_gui/src/main.rs b/prototypes/ptth_quic_client_gui/src/main.rs index 5fc5f10..0c01e2a 100644 --- a/prototypes/ptth_quic_client_gui/src/main.rs +++ b/prototypes/ptth_quic_client_gui/src/main.rs @@ -37,6 +37,7 @@ struct Opt { enum Message { OpenPort (usize), ClosePort (usize), + AddPort, } struct GuiClient <'a> { @@ -145,10 +146,12 @@ fn main () -> anyhow::Result <()> { col.set_size (&mut row, 30); } + let mut ports_col = Flex::default ().column (); + let ports = (0..3) .map (|i| { let mut gui = GuiPort::new (fltk_tx, i); - col.set_size (&mut gui.row, 30); + ports_col.set_size (&mut gui.row, 30); Port { gui, @@ -156,7 +159,11 @@ fn main () -> anyhow::Result <()> { } }).collect (); + ports_col.end (); + let mut but_add_port = Button::default ().with_label ("+"); + but_add_port.set_trigger (CallbackTrigger::Release); + but_add_port.emit (fltk_tx, Message::AddPort); col.set_size (&mut but_add_port, 30); col.end (); @@ -208,6 +215,20 @@ fn main () -> anyhow::Result <()> { Some (Message::ClosePort (port_idx)) => { gui_client.close_port (port_idx)?; }, + Some (Message::AddPort) => { + let mut gui = GuiPort::new (fltk_tx, gui_client.ports.len ()); + ports_col.add (&gui.row); + ports_col.set_size (&mut gui.row, 30); + + let port = Port { + gui, + forwarding_instance: None, + }; + + gui_client.ports.push (port); + ports_col.recalc (); + ports_col.redraw (); + }, None => (), } }