@@ -379,6 +379,8 @@ pub fn settings_page(config: Config) -> Element<'static, Message> {
379379 aliases_item ( config. aliases . clone ( ) , & theme) ,
380380 settings_hint_text ( theme. clone ( ) , "Modes" ) ,
381381 modes_item ( config. modes . clone ( ) , & theme) ,
382+ settings_hint_text ( theme. clone ( ) , "Search Directories" ) ,
383+ search_dirs_item ( & theme, config. search_dirs . clone ( ) ) ,
382384 Row :: from_iter ( [
383385 savebutton ( theme. clone ( ) ) ,
384386 default_button ( theme. clone ( ) ) ,
@@ -561,6 +563,47 @@ fn aliases_item(aliases: HashMap<String, String>, theme: &Theme) -> Element<'sta
561563 . into ( )
562564}
563565
566+ fn search_dirs_item ( theme : & Theme , search_dirs : Vec < String > ) -> Element < ' static , Message > {
567+ let theme_clone = theme. clone ( ) ;
568+ let search_dirs = search_dirs. clone ( ) ;
569+ Column :: from_iter ( [
570+ container (
571+ Column :: from_iter ( search_dirs. iter ( ) . map ( |dir| {
572+ let theme_clone_2 = theme. clone ( ) ;
573+ let directory = dir. clone ( ) ;
574+ container (
575+ Row :: from_iter ( [
576+ dir_picker_button ( directory, dir, theme_clone. clone ( ) ) . into ( ) ,
577+ Button :: new ( "Delete" )
578+ . on_press ( Message :: SetConfig ( SetConfigFields :: SearchDirs (
579+ Editable :: Delete ( dir. clone ( ) ) ,
580+ ) ) )
581+ . style ( move |_, _| delete_button_style ( & theme_clone_2) )
582+ . into ( ) ,
583+ ] )
584+ . spacing ( 10 )
585+ . align_y ( Alignment :: Center ) ,
586+ )
587+ . width ( Length :: Fill )
588+ . align_x ( Alignment :: Center )
589+ . into ( )
590+ } ) )
591+ . spacing ( 10 ) ,
592+ )
593+ . height ( Length :: Fill )
594+ . width ( Length :: Fill )
595+ . align_x ( Alignment :: Center )
596+ . align_y ( Alignment :: Center )
597+ . into ( ) ,
598+ dir_adder_button ( "+" , theme. to_owned ( ) ) . into ( ) ,
599+ ] )
600+ . spacing ( 10 )
601+ . height ( Length :: Fill )
602+ . width ( Length :: Fill )
603+ . align_x ( Alignment :: Center )
604+ . into ( )
605+ }
606+
564607fn text_input_cell ( text : String , theme : & Theme , placeholder : & str ) -> TextInput < ' static , Message > {
565608 text_input ( placeholder, & text)
566609 . font ( theme. font ( ) )
@@ -631,3 +674,50 @@ fn modes_item(modes: HashMap<String, String>, theme: &Theme) -> Element<'static,
631674 . align_x ( Alignment :: Center )
632675 . into ( )
633676}
677+
678+ fn dir_picker_button ( directory : String , dir : & str , theme : Theme ) -> Button < ' static , Message > {
679+ let home = std:: env:: var ( "HOME" ) . unwrap_or ( "/" . to_string ( ) ) ;
680+ Button :: new ( Text :: new ( dir. to_owned ( ) . replace ( & home, "~" ) ) )
681+ . on_press_with ( move || {
682+ let msg = rfd:: FileDialog :: new ( )
683+ . set_directory ( home. clone ( ) )
684+ . set_can_create_directories ( false )
685+ . pick_folder ( )
686+ . map ( |path| {
687+ let new = path. to_str ( ) . unwrap_or ( "" ) . to_string ( ) ;
688+ Message :: SetConfig ( SetConfigFields :: SearchDirs ( Editable :: Update {
689+ old : directory. clone ( ) ,
690+ new,
691+ } ) )
692+ } )
693+ . unwrap_or ( Message :: SetConfig ( SetConfigFields :: SearchDirs (
694+ Editable :: Update {
695+ old : directory. clone ( ) ,
696+ new : directory. clone ( ) ,
697+ } ,
698+ ) ) ) ;
699+
700+ msg
701+ } )
702+ . style ( move |_, _| settings_add_button_style ( & theme. clone ( ) ) )
703+ }
704+
705+ fn dir_adder_button ( dir : & str , theme : Theme ) -> Button < ' static , Message > {
706+ Button :: new ( Text :: new ( dir. to_owned ( ) ) )
707+ . on_press_with ( move || {
708+ let msg = rfd:: FileDialog :: new ( )
709+ . set_directory ( std:: env:: var ( "HOME" ) . unwrap_or ( "/" . to_string ( ) ) )
710+ . set_can_create_directories ( false )
711+ . pick_folder ( )
712+ . map ( |path| {
713+ let new = path. to_str ( ) . unwrap_or ( "" ) . to_string ( ) ;
714+ Message :: SetConfig ( SetConfigFields :: SearchDirs ( Editable :: Create ( new) ) )
715+ } )
716+ . unwrap_or ( Message :: SetConfig ( SetConfigFields :: SearchDirs (
717+ Editable :: Create ( String :: new ( ) ) ,
718+ ) ) ) ;
719+
720+ msg
721+ } )
722+ . style ( move |_, _| settings_add_button_style ( & theme. clone ( ) ) )
723+ }
0 commit comments