From eb1049567088e5ae77f406c753d10427e4b16305 Mon Sep 17 00:00:00 2001 From: Reinout Meliesie Date: Fri, 31 Jan 2025 17:56:30 +0100 Subject: [PATCH] Introduce view_switcher, header_bar, bin UI macros --- src/ui/application_header_bar.rs | 17 ++++------------- src/ui/utility.rs | 30 ++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/ui/application_header_bar.rs b/src/ui/application_header_bar.rs index 56b3b84..1460b8c 100644 --- a/src/ui/application_header_bar.rs +++ b/src/ui/application_header_bar.rs @@ -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 for ApplicationHeaderBar { fn get_widget ( & self ) -> & HeaderBar { & self . widget } } - -fn create_collection_view_switcher ( stack : & ViewStack ) -> ViewSwitcher { - ViewSwitcher :: builder () - . policy (Wide) - . stack (stack) - . build () -} diff --git a/src/ui/utility.rs b/src/ui/utility.rs index e4726bc..928dc54 100644 --- a/src/ui/utility.rs +++ b/src/ui/utility.rs @@ -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 , } ;