Skip to content

Commit

Permalink
文件夹展开测试
Browse files Browse the repository at this point in the history
  • Loading branch information
TC999 committed Dec 10, 2024
1 parent 212afab commit 30a1452
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions src/ui.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ pub struct AppDataCleaner {
previous_logging_state: bool, // 记录上一次日志启用状态
ignored_folders: HashSet<String>, // 忽略文件夹集合
move_module: move_module::MoveModule, // 移动模块实例
expanded_folders: HashSet<String>, // 用于记录哪些文件夹是展开状态
}

impl Default for AppDataCleaner {
Expand All @@ -42,6 +43,7 @@ impl Default for AppDataCleaner {
previous_logging_state: false, // 初始时假定日志系统未启用
ignored_folders: ignore::load_ignored_folders(),
move_module: Default::default(),
expanded_folders: HashSet::new(),
}
}
}
Expand All @@ -67,6 +69,69 @@ impl AppDataCleaner {

ctx.set_fonts(fonts);
}
fn render_folder(&mut self, ui: &mut egui::Ui, folder: &str, size: u64, depth: usize) {
let indent = " ".repeat(depth); // 缩进
let base_path = utils::get_appdata_dir(&self.selected_appdata_folder);

ui.horizontal(|ui| {
if let Some(base_path) = &base_path {
let full_path = base_path.join(folder);
if full_path.is_dir() {
let triangle = if self.expanded_folders.contains(folder) {
"▼"
} else {
"▶"
};

if ui.button(triangle).clicked() {
if self.expanded_folders.contains(folder) {
self.expanded_folders.remove(folder);
} else {
self.expanded_folders.insert(folder.to_string());
}
}
} else {
ui.label(" ");
}
}

ui.label(format!("{indent}{folder}"));
ui.label(utils::format_size(size));

// 操作按钮
if ui.button("彻底删除").clicked() {
self.confirm_delete = Some((folder.to_string(), false));
}
if ui.button("忽略").clicked() {
self.ignored_folders.insert(folder.to_string());
ignore::save_ignored_folders(&self.ignored_folders);
logger::log_info(&format!("文件夹 '{}' 已被忽略", folder));
}
if ui.button("打开").clicked() {
if let Some(base_path) = utils::get_appdata_dir(&self.selected_appdata_folder) {
let full_path = base_path.join(folder);
if let Err(err) = open::open_folder(&full_path) {
logger::log_error(&format!("无法打开文件夹: {}", err));
}
}
}
});

// 递归显示子文件夹
if self.expanded_folders.contains(folder) {
if let Some(base_path) = &base_path {
let full_path = base_path.join(folder);
if let Ok(entries) = full_path.read_dir() {
for entry in entries.filter_map(Result::ok) {
if entry.path().is_dir() {
let child_folder = entry.file_name().to_string_lossy().to_string();
self.render_folder(ui, &child_folder, 0, depth + 1);
}
}
}
}
}
}
}

impl eframe::App for AppDataCleaner {
Expand Down

0 comments on commit 30a1452

Please sign in to comment.