@@ -7,6 +7,7 @@ pub(super) struct SidebarWidgets<'a> {
77 pub ( super ) cluster_menu_button : & ' a gtk:: MenuButton ,
88 pub ( super ) namespace_menu_button : & ' a gtk:: MenuButton ,
99 pub ( super ) resource_list : & ' a gtk:: ListBox ,
10+ pub ( super ) favorite_object_list : & ' a gtk:: ListBox ,
1011}
1112
1213pub ( super ) fn build_sidebar ( widgets : SidebarWidgets < ' _ > ) -> adw:: NavigationPage {
@@ -29,10 +30,69 @@ pub(super) fn build_sidebar(widgets: SidebarWidgets<'_>) -> adw::NavigationPage
2930
3031 container. append ( & namespace_group) ;
3132
32- let resources_group = gtk:: Box :: new ( gtk:: Orientation :: Vertical , 8 ) ;
33- resources_group. append ( & section_title ( & tr ( "Resources" ) ) ) ;
34- resources_group. append ( widgets. resource_list ) ;
35- container. append ( & resources_group) ;
33+ let resources_page = gtk:: Box :: new ( gtk:: Orientation :: Vertical , 8 ) ;
34+ resources_page. append ( widgets. resource_list ) ;
35+
36+ let favorites_page = gtk:: Box :: new ( gtk:: Orientation :: Vertical , 8 ) ;
37+ favorites_page. append ( widgets. favorite_object_list ) ;
38+
39+ let sidebar_stack = gtk:: Stack :: builder ( )
40+ . hhomogeneous ( false )
41+ . vhomogeneous ( false )
42+ . build ( ) ;
43+ sidebar_stack. add_named ( & resources_page, Some ( "resources" ) ) ;
44+ sidebar_stack. add_named ( & favorites_page, Some ( "favorites" ) ) ;
45+
46+ let toggle_box = gtk:: Box :: new ( gtk:: Orientation :: Horizontal , 4 ) ;
47+ let resources_toggle = gtk:: ToggleButton :: builder ( )
48+ . icon_name ( "view-list-symbolic" )
49+ . tooltip_text ( tr ( "Resources" ) )
50+ . hexpand ( true )
51+ . active ( true )
52+ . css_classes ( [ "flat" ] )
53+ . build ( ) ;
54+ let favorites_toggle = gtk:: ToggleButton :: builder ( )
55+ . icon_name ( "aetheris-object-favorite-symbolic" )
56+ . tooltip_text ( tr ( "Favorites" ) )
57+ . hexpand ( true )
58+ . css_classes ( [ "flat" ] )
59+ . build ( ) ;
60+ toggle_box. append ( & resources_toggle) ;
61+ toggle_box. append ( & favorites_toggle) ;
62+
63+ resources_toggle. connect_clicked ( {
64+ let resources_toggle = resources_toggle. clone ( ) ;
65+ move |_| resources_toggle. set_active ( true )
66+ } ) ;
67+ resources_toggle. connect_toggled ( {
68+ let favorites_toggle = favorites_toggle. clone ( ) ;
69+ let sidebar_stack = sidebar_stack. clone ( ) ;
70+ move |button| {
71+ if button. is_active ( ) {
72+ favorites_toggle. set_active ( false ) ;
73+ sidebar_stack. set_visible_child_name ( "resources" ) ;
74+ }
75+ }
76+ } ) ;
77+ favorites_toggle. connect_clicked ( {
78+ let favorites_toggle = favorites_toggle. clone ( ) ;
79+ move |_| favorites_toggle. set_active ( true )
80+ } ) ;
81+ favorites_toggle. connect_toggled ( {
82+ let resources_toggle = resources_toggle. clone ( ) ;
83+ let sidebar_stack = sidebar_stack. clone ( ) ;
84+ move |button| {
85+ if button. is_active ( ) {
86+ resources_toggle. set_active ( false ) ;
87+ sidebar_stack. set_visible_child_name ( "favorites" ) ;
88+ }
89+ }
90+ } ) ;
91+
92+ let objects_group = gtk:: Box :: new ( gtk:: Orientation :: Vertical , 8 ) ;
93+ objects_group. append ( & toggle_box) ;
94+ objects_group. append ( & sidebar_stack) ;
95+ container. append ( & objects_group) ;
3696
3797 let scrolled = gtk:: ScrolledWindow :: builder ( )
3898 . vexpand ( true )
@@ -50,6 +110,7 @@ pub(super) struct ContentWidgets<'a> {
50110 pub ( super ) sidebar_toggle_button : & ' a gtk:: ToggleButton ,
51111 pub ( super ) detail_back_button : & ' a gtk:: Button ,
52112 pub ( super ) delete_button : & ' a gtk:: Button ,
113+ pub ( super ) favorite_button : & ' a gtk:: Button ,
53114 pub ( super ) create_yaml_button : & ' a gtk:: Button ,
54115 pub ( super ) refresh_button : & ' a gtk:: Button ,
55116 pub ( super ) terminal_button : & ' a gtk:: Button ,
@@ -101,6 +162,7 @@ pub(super) fn build_content(widgets: ContentWidgets<'_>) -> adw::NavigationPage
101162 detail_actions. set_valign ( gtk:: Align :: Center ) ;
102163 detail_actions. set_halign ( gtk:: Align :: End ) ;
103164 detail_actions. append ( widgets. terminal_button ) ;
165+ detail_actions. append ( widgets. favorite_button ) ;
104166 detail_actions. append ( widgets. delete_button ) ;
105167 header. pack_end ( & detail_actions) ;
106168 toolbar. add_top_bar ( & header) ;
0 commit comments