use oxiforge::prelude::*;
#[derive(Debug)]
pub struct ObjPageWidgets {
pub card_container: Obj<'static>,
}
pub fn create_obj_page(screen: &Screen) -> Result<ObjPageWidgets, WidgetError> {
screen.bg_color(0x0A0A0A);
screen.remove_scrollable();
let card_container = Obj::new(screen)?;
card_container.width(280);
card_container.height(160);
card_container.align(Align::TopMid, 0, 10);
let card_container_inline = {
let mut b = StyleBuilder::new();
b.bg_color_hex(0x1E1E2E);
b.border_color_hex(0x333366);
b.border_width(1);
b.pad_all(8_i32);
b.radius(10);
b.build()
};
card_container.add_style(&card_container_inline, Selector::DEFAULT);
card_container.remove_scrollable();
let _w1 = Label::new(&card_container)?;
_w1.text("Card Title");
_w1.align(Align::TopLeft, 0, 0);
let _w1_inline = {
let mut b = StyleBuilder::new();
b.text_color_hex(0xFFFFFF);
b.build()
};
_w1.add_style(&_w1_inline, Selector::DEFAULT);
core::mem::forget(_w1);
let _w2 = Label::new(&card_container)?;
_w2.text("Card body content");
_w2.align(Align::LeftMid, 0, 0);
let _w2_inline = {
let mut b = StyleBuilder::new();
b.text_color_hex(0xAAAAAA);
b.build()
};
_w2.add_style(&_w2_inline, Selector::DEFAULT);
core::mem::forget(_w2);
let _w3 = Obj::new(screen)?;
_w3.width(280);
_w3.height(60);
_w3.align(Align::BottomMid, 0, -10);
let _w3_inline = {
let mut b = StyleBuilder::new();
b.bg_color_hex(0x1A1A2E);
b.border_width(0);
b.pad_all(4_i32);
b.build()
};
_w3.add_style(&_w3_inline, Selector::DEFAULT);
_w3.set_layout(Layout::Flex);
_w3.set_flex_flow(FlexFlow::Row);
_w3.set_flex_align(FlexAlign::SpaceBetween, FlexAlign::Center, FlexAlign::Start);
let _w4 = Label::new(&_w3)?;
_w4.text("Left");
let _w4_inline = {
let mut b = StyleBuilder::new();
b.text_color_hex(0x888888);
b.build()
};
_w4.add_style(&_w4_inline, Selector::DEFAULT);
core::mem::forget(_w4);
let _w5 = Label::new(&_w3)?;
_w5.text("Right");
let _w5_inline = {
let mut b = StyleBuilder::new();
b.text_color_hex(0x888888);
b.build()
};
_w5.add_style(&_w5_inline, Selector::DEFAULT);
core::mem::forget(_w5);
core::mem::forget(_w3);
Ok(ObjPageWidgets { card_container })
}
#[test]
fn test_obj_page_creation_succeeds() {
let screen = super::common::fresh_screen();
let widgets = create_obj_page(&screen).expect("create_obj_page must succeed");
super::common::pump();
assert!(!widgets.card_container.lv_handle().is_null(), "card_container handle must be non-null");
let screen_child_count = unsafe { super::common::child_count_raw(super::common::as_raw(&screen)) };
assert_eq!(screen_child_count, 2, "screen must have 2 children (card_container and flex row)");
let container_children = widgets.card_container.get_child_count();
assert_eq!(container_children, 2, "card_container must have 2 label children");
let flex_row = unsafe { super::common::get_child_raw(super::common::as_raw(&screen), 1) };
assert!(!flex_row.is_null(), "flex row (_w3) must exist as second screen child");
let flex_children = unsafe { super::common::child_count_raw(flex_row) };
assert_eq!(flex_children, 2, "flex row must have 2 children (Left, Right labels)");
core::mem::forget(widgets);
}