Introduce view_switcher, header_bar, bin UI macros

This commit is contained in:
Reinout Meliesie 2025-01-31 17:56:30 +01:00
parent a845c0c1fa
commit eb10495670
Signed by: zedfrigg
GPG key ID: 3AFCC06481308BC6
2 changed files with 30 additions and 17 deletions

View file

@ -1,6 +1,6 @@
use libadwaita :: { * , ViewSwitcherPolicy :: * } ;
use crate :: ui :: { collection_view_stack :: * , component :: * } ;
use crate :: ui :: { collection_view_stack :: * , component :: * , utility :: * } ;
@ -8,11 +8,9 @@ pub struct ApplicationHeaderBar { widget : HeaderBar }
impl ApplicationHeaderBar {
pub fn new ( collection_view_stack : & CollectionViewStack ) -> Self {
let widget = HeaderBar :: builder ()
. title_widget ( & create_collection_view_switcher (
collection_view_stack . get_widget () ) )
. build () ;
let widget = header_bar ! (
view_switcher ! ( @ policy : Wide , collection_view_stack . get_widget () ) ,
) ;
Self { widget }
}
}
@ -20,10 +18,3 @@ impl ApplicationHeaderBar {
impl Component <HeaderBar> for ApplicationHeaderBar {
fn get_widget ( & self ) -> & HeaderBar { & self . widget }
}
fn create_collection_view_switcher ( stack : & ViewStack ) -> ViewSwitcher {
ViewSwitcher :: builder ()
. policy (Wide)
. stack (stack)
. build ()
}

View file

@ -102,14 +102,33 @@ macro_rules ! flow_box { (
widget
} } }
macro_rules ! view_switcher { (
$ ( @ policy : $ policy : expr , ) ?
$ stack : expr $ (,) ?
) => { {
let widget = libadwaita :: ViewSwitcher :: new () ;
$ ( widget . set_policy ( $ policy ) ; ) ?
widget . set_stack ( Some ( & $ stack ) ) ;
widget
} } }
macro_rules ! header_bar { ( $ title_widget : expr $ (,) ? ) => { {
let widget = libadwaita :: HeaderBar :: new () ;
widget . set_title_widget ( Some ( & $ title_widget ) ) ;
widget
} } }
macro_rules ! bin { ( $ ( @ vexpand : $ vexpand : expr ) ? $ (,) ? ) => { {
let widget = libadwaita :: Bin :: new () ;
$ ( widget . set_vexpand ( $ vexpand ) ; ) ?
widget
} } }
macro_rules ! vertically_filling { ( $ child : expr ) => {
g_box ! (
@ orientation : gtk4 :: Orientation :: Vertical ,
$ child ,
libadwaita :: Bin :: builder ()
. css_name ("filler")
. vexpand (true)
. build () ,
bin ! ( @ vexpand : true ) ,
)
} }
@ -125,5 +144,8 @@ pub (crate) use {
icon ,
scrolled_window ,
flow_box ,
view_switcher ,
header_bar ,
bin ,
vertically_filling ,
} ;