improved tree widget and separatated "FileTree" implementation out into separate src file

This commit is contained in:
2026-08-03 23:02:09 +01:00
parent 8d28bf39f8
commit 43e9d6942c
6 changed files with 185 additions and 292 deletions
+18 -15
View File
@@ -22,7 +22,7 @@ use tiles::PanelFactory;
use tiles::documentation::Documentation;
use tiles::editor::Editor;
use tiles::io_devices::framebuffer::FrameBufferUi;
use zxq5_egui::context_tree::{ContextTree, NewFileTree};
use zxq5_egui::tree::{MenuTree, TreeEvent, file::FileTree};
pub mod appearance;
mod controller;
@@ -44,7 +44,7 @@ pub struct DamnSimpleUI {
show_process_manager: bool,
process_manager: ProcessManager,
file_tree: ContextTree<Action, NewFileTree>,
file_tree: MenuTree<Action, FileTree>,
}
impl eframe::App for DamnSimpleUI {
@@ -74,13 +74,17 @@ impl eframe::App for DamnSimpleUI {
});
Panel::left("left_panel").resizable(true).show(ui, |ui| {
let inner_res = self.file_tree.ui(ui);
let response = self.file_tree.ui(ui);
let Some(event) = response.inner else {
return;
};
if let Some(event) = inner_res.inner {
// match event {
// ContextTreeEvent::Clicked(node) => self.perform_action(Action::OpenFile(node)),
// ContextTreeEvent::ContextAction(action, node) => self.perform_action(action),
// }
match event {
TreeEvent::ContextAction(action, _tree) => self.perform_action(action),
TreeEvent::Clicked(tree) => {
let filename = tree.filename().to_owned();
self.perform_action(Action::OpenFile(filename));
}
}
});
@@ -147,16 +151,15 @@ impl DamnSimpleUI {
show_process_manager: true,
process_manager: ProcessManager::new(),
file_tree: ContextTree::new(
NewFileTree::build(&std::env::current_dir().unwrap()),
|ui, node| match node {
NewFileTree::Leaf { filename } => ui
file_tree: MenuTree::new()
.root(Some(FileTree::build(&std::env::current_dir().unwrap())))
.ctx(|ui, node| match node {
FileTree::File { path: filename } => ui
.button("Open Binary")
.clicked()
.then_some(Action::LoadBinary(DataSource::File(filename.clone()))),
NewFileTree::Branch { .. } => None,
},
),
FileTree::Directory { .. } => None,
}),
}
}