use std::fmt::Display;
use xlui::*;
struct TD {
name: String,
}
impl TD {
fn new(name: impl ToString) -> TD {
TD { name: name.to_string() }
}
fn on_scroll(&self, layout: &mut LayoutKind) {
println!("{} {}", "onscroll", self.name);
let name: &mut Label = layout.get_widget(&"item_id".to_string()).unwrap();
name.set_text(&self.name);
}
}
impl Display for TD {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(&self.name)
}
}
fn main() {
XlUiApp::new().run().unwrap();
}
struct XlUiApp {
status: String,
count: i32,
list_view: ListView<TD>,
}
impl XlUiApp {
pub fn new() -> Self {
let mut data = vec![];
for i in 0..5 {
data.push(TD::new((i + 1).to_string()));
}
Self {
status: "".to_string(),
count: 0,
list_view: ListView::new(data).with_size(280.0, 300.0).with_item_height(38.0),
}
}
fn list_changed(&mut self, _: &mut Ui) {
}
fn list_add(&mut self, _: &mut Button, _: &mut Ui) {
println!("add list item");
self.list_view.push(TD::new(self.count));
self.count += 1;
}
fn list_delete(&mut self, _: &mut Button, _: &mut Ui) {
let current = self.list_view.current_index().unwrap();
self.list_view.remove(current);
}
}
impl App for XlUiApp {
fn draw(&mut self, ui: &mut Ui) {
ui.horizontal(|ui| {
ui.button("添加").set_callback(Self::list_add);
ui.button("删除").set_callback(Self::list_delete);
});
self.list_view.set_callback(Self::list_changed);
self.list_view.on_scrolling(TD::on_scroll);
self.list_view.set_item_widget(|ui, datum| {
ui.image("logo.jpg", (30.0, 30.0));
ui.vertical(|ui| {
ui.add(Label::new(datum.to_string()).with_id("item_id"));
ui.horizontal(|ui| {
ui.label("00:00");
ui.label("200");
ui.label("HTTP/1.1");
ui.label("10 KB");
ui.label("10 KB");
});
});
});
self.list_view.show(ui);
}
fn update(&mut self, ui: &mut Ui) {
self.list_view.update(ui);
}
fn window_attributes(&self) -> WindowAttribute {
WindowAttribute {
inner_size: (300, 330).into(),
..Default::default()
}
}
}