use eframe::{egui, NativeOptions};
use egui::{CentralPanel, CollapsingHeader, Id, Ui};
use egui_dnd::dnd;
pub fn main() -> eframe::Result<()> {
let mut items: Vec<String> = vec![
"alfred".to_string(),
"bernhard".to_string(),
"christian".to_string(),
];
eframe::run_ui_native(
"DnD with CollapsingHeader Example",
NativeOptions::default(),
move |ui, _frame| {
CentralPanel::default().show_inside(ui, |ui| {
if ui.button("Add Item").clicked() {
items.push(format!("new item {}", items.len()).to_string());
}
ui.horizontal(|ui| {
for i in 1..=3 {
ui.vertical(|ui| {
ui.label(format!("List {i}"));
list(ui, Id::new("dnd").with(i), &mut items);
});
}
});
});
},
)
}
fn list(ui: &mut Ui, dnd_id: Id, items: &mut [String]) {
dnd(ui, dnd_id)
.with_animation_time(1.0)
.show_vec(items, |ui, item, handle, state| {
ui.horizontal(|ui| {
handle.ui(ui, |ui| {
if state.dragged {
ui.label("dragging");
} else {
ui.label("drag");
}
});
CollapsingHeader::new((*item).clone()).show_unindented(ui, |ui| {
for i in 1..=5 {
ui.label(format!("{i} {item}"));
}
});
});
});
}