|
1 | 1 | use crate::app::EguiApp; |
2 | 2 | use egui::text::LayoutJob; |
3 | 3 | use egui::{ScrollArea, TextStyle}; |
4 | | -use java_asm_server::ui::{AppContainer, FileEntry, FileInfo, RawDirInfo}; |
5 | | -use java_asm_server::AsmServer; |
6 | | -use std::ops::Deref; |
| 4 | +use java_asm_server::ui::{AppContainer, FileEntry, FileInfo, OpenFileMessage, RawDirInfo, UIMessage}; |
7 | 5 |
|
8 | 6 | pub fn render_dir(ui: &mut egui::Ui, app: &mut EguiApp) { |
9 | | - let server_app = &app.server_app; |
10 | | - let mut server_app_left = server_app.left().lock(); |
11 | | - let entries = &mut server_app_left.root_node.visible_items(); |
| 7 | + let server_app = &app.ui_app; |
| 8 | + let mut left = server_app.left().lock(); |
| 9 | + let entries = &mut left.root_node.visible_items(); |
12 | 10 | let server = app.server.lock(); |
13 | | - if let Some(server) = server.deref() { |
14 | | - let row_height = ui.spacing().interact_size.y; |
15 | | - ScrollArea::vertical().auto_shrink(false) |
16 | | - .show_rows(ui, row_height, entries.len(), |ui, range| { |
17 | | - for i in range { |
18 | | - let entry = &mut entries[i]; |
19 | | - match entry { |
20 | | - FileEntry::Dir(raw_dir) => { |
21 | | - render_dir_raw(ui, raw_dir); |
22 | | - } |
23 | | - FileEntry::File(file_info) => { |
24 | | - render_file(ui, file_info, server, server_app); |
25 | | - } |
| 11 | + if server.is_none() { return; } |
| 12 | + let row_height = ui.spacing().interact_size.y; |
| 13 | + ScrollArea::vertical().auto_shrink(false) |
| 14 | + .show_rows(ui, row_height, entries.len(), |ui, range| { |
| 15 | + for i in range { |
| 16 | + let entry = &mut entries[i]; |
| 17 | + match entry { |
| 18 | + FileEntry::Dir(raw_dir) => { |
| 19 | + render_dir_raw(ui, raw_dir); |
| 20 | + } |
| 21 | + FileEntry::File(file_info) => { |
| 22 | + render_file(ui, file_info, server_app); |
26 | 23 | } |
27 | 24 | } |
28 | | - }); |
29 | | - } |
| 25 | + } |
| 26 | + }); |
30 | 27 | } |
31 | 28 |
|
32 | 29 | fn render_file( |
33 | | - ui: &mut egui::Ui, file_info: &mut FileInfo, |
34 | | - server: &AsmServer, app: &AppContainer, |
| 30 | + ui: &mut egui::Ui, file_info: &mut FileInfo, app: &AppContainer, |
35 | 31 | ) { |
36 | 32 | let FileInfo { title, file_key, level } = file_info; |
37 | 33 | ui.horizontal(|ui| { |
38 | 34 | ui.add_space((*level as f32) * 12.0); |
39 | 35 | let layout_job = layout_string(ui, title.to_string()); |
40 | 36 | let label = ui.selectable_label(false, layout_job); |
41 | 37 | if label.clicked() { |
42 | | - server.switch_or_open(file_key, app); |
| 38 | + let message = UIMessage::OpenFile( |
| 39 | + OpenFileMessage { |
| 40 | + path: file_key.clone(), |
| 41 | + } |
| 42 | + ); |
| 43 | + app.send_message(message); |
43 | 44 | } |
44 | 45 | }); |
45 | 46 | } |
|
0 commit comments