fix ui widget alignment, remove add row button, add timer for search request

This commit is contained in:
2026-07-27 01:52:24 +02:00
parent 7ba312528f
commit 153ba18d1c
3 changed files with 40 additions and 42 deletions
+35 -19
View File
@@ -9,34 +9,34 @@ slint::include_modules!();
fn main() -> Result<(), Box<dyn Error>> {
let ui = AppWindow::new()?;
let ui_weak = ui.as_weak();
let items = Rc::new(VecModel::<StandardListViewItem>::from(Vec::new()));
let items_clone = items.clone();
ui.on_request_text_input(move |text| {
println!("User input: {}", text);
let response = rutracker::search(&text);
if let Some(ui) = ui_weak.upgrade() {
println!("User input: {}", text);
let now = std::time::Instant::now();
let new_items: Vec<StandardListViewItem> = match response {
Ok(softwares) => softwares
.into_iter()
.map(|s| StandardListViewItem::from(s.title.as_str()))
.collect(),
let response = rutracker::search(&text);
Err(e) => vec![StandardListViewItem::from(format!("Error: {}", e).as_str())],
};
let elapsed_time = now.elapsed();
println!("Search took {} seconds", elapsed_time.as_secs());
items_clone.set_vec(new_items);
});
let new_items: Vec<StandardListViewItem> = match response {
Ok(softwares) => softwares
.into_iter()
.map(|s| StandardListViewItem::from(s.title.as_str()))
.collect(),
let table_model = Rc::new(VecModel::from(Vec::<ModelRc<StandardListViewItem>>::new()));
let items_clone = items.clone();
Err(e) => vec![StandardListViewItem::from(format!("Error: {}", e).as_str())],
};
ui.set_table_data(table_model.clone().into());
ui.on_add_row({
move || {
for item in items_clone.iter() {
table_model.push(ModelRc::new(VecModel::from_slice(&[item.clone()])));
}
items_clone.set_vec(new_items);
let table_model = Rc::new(VecModel::from(Vec::<ModelRc<StandardListViewItem>>::new()));
ui.set_table_data(table_model.clone().into());
add_rows(&items_clone, &table_model);
}
});
@@ -44,3 +44,19 @@ fn main() -> Result<(), Box<dyn Error>> {
Ok(())
}
fn add_rows(
items: &Rc<VecModel<StandardListViewItem>>,
table_model: &Rc<VecModel<ModelRc<StandardListViewItem>>>,
) {
for item in items.iter() {
let row = Rc::new(VecModel::from(vec![
item.clone(),
StandardListViewItem::from("placeholder column 1"),
StandardListViewItem::from("placeholder column 2"),
StandardListViewItem::from("placeholder column 3"),
]));
table_model.push(ModelRc::from(row.clone()));
}
}