@@ -23,6 +23,7 @@ pub struct LogViewerApp {
23
23
start_open_path : Arc < Mutex < Option < PathBuf > > > ,
24
24
last_filename : Arc < Mutex < Option < PathBuf > > > ,
25
25
show_last_filename : bool ,
26
+ track_item_align : Option < Align > ,
26
27
27
28
#[ serde( skip) ]
28
29
should_scroll : bool ,
@@ -38,6 +39,7 @@ impl Default for LogViewerApp {
38
39
start_open_path : Default :: default ( ) ,
39
40
loading_status : Default :: default ( ) ,
40
41
last_filename : Default :: default ( ) ,
42
+ track_item_align : Default :: default ( ) ,
41
43
should_scroll : Default :: default ( ) ,
42
44
show_last_filename : true ,
43
45
}
@@ -103,7 +105,7 @@ impl LogViewerApp {
103
105
( true , Some ( data) ) => {
104
106
self . should_scroll = false ;
105
107
if let Some ( selected_row) = data. selected_row {
106
- table_builder. scroll_to_row ( selected_row, Some ( Align :: Center ) )
108
+ table_builder. scroll_to_row ( selected_row, self . track_item_align )
107
109
} else {
108
110
table_builder
109
111
}
@@ -344,6 +346,22 @@ impl LogViewerApp {
344
346
fn ui_options ( & mut self , ui : & mut egui:: Ui ) {
345
347
ui. collapsing ( "Options" , |ui| {
346
348
ui. checkbox ( & mut self . show_last_filename , "Show last filename" ) ;
349
+
350
+ ui. horizontal ( |ui| {
351
+ ui. label ( "Item align:" ) ;
352
+ self . should_scroll |= ui
353
+ . radio_value ( & mut self . track_item_align , Some ( Align :: Min ) , "Top" )
354
+ . clicked ( ) ;
355
+ self . should_scroll |= ui
356
+ . radio_value ( & mut self . track_item_align , Some ( Align :: Center ) , "Center" )
357
+ . clicked ( ) ;
358
+ self . should_scroll |= ui
359
+ . radio_value ( & mut self . track_item_align , Some ( Align :: Max ) , "Bottom" )
360
+ . clicked ( ) ;
361
+ self . should_scroll |= ui
362
+ . radio_value ( & mut self . track_item_align , None , "None (Bring into view)" )
363
+ . clicked ( ) ;
364
+ } ) ;
347
365
} ) ;
348
366
}
349
367
0 commit comments