11use crate :: app:: EguiApp ;
22use egui:: text:: LayoutJob ;
33use egui:: { ScrollArea , TextStyle } ;
4- use java_asm_server:: ui:: { Content , FileEntry , FileInfo , RawDirInfo , Tab } ;
4+ use java_asm_server:: ui:: { AppContainer , FileEntry , FileInfo , RawDirInfo } ;
55use java_asm_server:: AsmServer ;
66use std:: ops:: Deref ;
7- use std:: sync:: Arc ;
87
98pub fn render_dir ( ui : & mut egui:: Ui , app : & mut EguiApp ) {
109 let server_app = & app. server_app ;
1110 let mut server_app_left = server_app. left ( ) . lock ( ) ;
12- let mut server_app_content = server_app. content ( ) . lock ( ) ;
1311 let entries = & mut server_app_left. root_node . visible_items ( ) ;
1412 let server = app. server . lock ( ) ;
1513 if let Some ( server) = server. deref ( ) {
16- let content = & mut server_app_content;
1714 let row_height = ui. spacing ( ) . interact_size . y ;
1815 ScrollArea :: vertical ( ) . auto_shrink ( false )
1916 . show_rows ( ui, row_height, entries. len ( ) , |ui, range| {
@@ -24,7 +21,7 @@ pub fn render_dir(ui: &mut egui::Ui, app: &mut EguiApp) {
2421 render_dir_raw ( ui, raw_dir) ;
2522 }
2623 FileEntry :: File ( file_info) => {
27- render_file ( ui, file_info, server, content ) ;
24+ render_file ( ui, file_info, server, server_app ) ;
2825 }
2926 }
3027 }
@@ -34,31 +31,15 @@ pub fn render_dir(ui: &mut egui::Ui, app: &mut EguiApp) {
3431
3532fn render_file (
3633 ui : & mut egui:: Ui , file_info : & mut FileInfo ,
37- server : & AsmServer , content : & mut Content ,
34+ server : & AsmServer , app : & AppContainer ,
3835) {
3936 let FileInfo { title, file_key, level } = file_info;
4037 ui. horizontal ( |ui| {
4138 ui. add_space ( ( * level as f32 ) * 12.0 ) ;
4239 let layout_job = layout_string ( ui, title. to_string ( ) ) ;
4340 let label = ui. selectable_label ( false , layout_job) ;
4441 if label. clicked ( ) {
45- let existed_tab = content. opened_tabs . iter ( ) . position ( |tab| tab. file_key == * file_key) ;
46- if let Some ( existed_tab) = existed_tab {
47- content. current = Some ( existed_tab) ;
48- return ;
49- }
50- let smali = server. read_content ( file_key) ;
51- if let Some ( smali) = smali {
52- let current_tab = Tab {
53- selected : false ,
54- file_key : Arc :: clone ( file_key) ,
55- title : Arc :: clone ( title) ,
56- content : smali,
57- } ;
58- let current = content. opened_tabs . len ( ) ;
59- content. opened_tabs . push ( current_tab) ;
60- content. current = Some ( current) ;
61- }
42+ server. switch_or_open ( file_key, app) ;
6243 }
6344 } ) ;
6445}
0 commit comments