use patina::{ layout::TableCell, prelude::*, ui::{UIControlMsg, UIHandle}, widget, }; struct TableWindow { root: widget::PlainGroup, } impl TableWindow { fn new(uih: &mut UIHandle) -> Self { let mut group = widget::PlainGroup::new_table(uih); group.extend( vec![ Box::new( widget::Label::new_with_text(uih, "r1c1").with_table_cell(TableCell::new(0, 0)), ) as Box>, Box::new( widget::Label::new_with_text(uih, "r2c1").with_table_cell(TableCell::new(0, 1)), ), ] .into_iter(), ); Self { root: group } } } impl Component for TableWindow { type ParentMsg = UIControlMsg; type Msg = (); fn process(&mut self, _msg: Self::Msg) -> Vec { vec![UIControlMsg::Terminate] } } impl WindowComponent for TableWindow { fn map_window_event(&self, we: patina::window::WindowEvent) -> Option { match we { patina::window::WindowEvent::CloseRequested => Some(()), _ => None, } } type RootWidget = widget::PlainGroup; fn root_widget(&self) -> &Self::RootWidget { &self.root } fn root_widget_mut(&mut self) -> &mut Self::RootWidget { &mut self.root } } fn main() { patina::ui::make_opinionated_ui(TableWindow::new).run(); }