From ce70725b60f47aacad64edee6a938c4dee9de871 Mon Sep 17 00:00:00 2001 From: Reinout Meliesie Date: Tue, 4 Feb 2025 15:02:58 +0100 Subject: [PATCH] UI macro syntax now differentiates at-properties from arguments --- src/ui/application_header_bar.rs | 2 +- src/ui/collatable_container/collated_grid.rs | 26 ++++---- .../collation_menu/mod.rs | 20 +++--- .../collation_menu/sort_button.rs | 32 +++++----- src/ui/collatable_container/mod.rs | 8 +-- src/ui/collection_view_stack.rs | 4 +- src/ui/mod.rs | 6 +- src/ui/utility.rs | 62 +++++++++---------- 8 files changed, 80 insertions(+), 80 deletions(-) diff --git a/src/ui/application_header_bar.rs b/src/ui/application_header_bar.rs index 1460b8c..87108f6 100644 --- a/src/ui/application_header_bar.rs +++ b/src/ui/application_header_bar.rs @@ -9,7 +9,7 @@ pub struct ApplicationHeaderBar { widget : HeaderBar } impl ApplicationHeaderBar { pub fn new ( collection_view_stack : & CollectionViewStack ) -> Self { let widget = header_bar ! ( - view_switcher ! ( @ policy : Wide , collection_view_stack . get_widget () ) , + view_switcher ! ( @ policy : Wide ; collection_view_stack . get_widget () ) , ) ; Self { widget } } diff --git a/src/ui/collatable_container/collated_grid.rs b/src/ui/collatable_container/collated_grid.rs index 4150bd7..5fca71f 100644 --- a/src/ui/collatable_container/collated_grid.rs +++ b/src/ui/collatable_container/collated_grid.rs @@ -25,9 +25,9 @@ pub struct CollatedSeriesGrid { impl CollatedFilmsGrid { pub fn new ( films : Vec , sorting : FilmsSorting ) -> Self { let grid_widget = flow_box ! ( - @ orientation : Horizontal , - @ homogeneous : true , - @ selection_mode : SelectionMode :: None , + @ orientation : Horizontal ; + @ homogeneous : true ; + @ selection_mode : SelectionMode :: None ; ) ; let film_widget_pairs = RefCell :: new ( vec ! () ) ; @@ -78,9 +78,9 @@ impl CollatedFilmsGrid { impl CollatedSeriesGrid { pub fn new ( series : Vec , sorting : SeriesSorting ) -> Self { let grid_widget = flow_box ! ( - @ orientation : Horizontal , - @ homogeneous : true , - @ selection_mode : SelectionMode :: None , + @ orientation : Horizontal ; + @ homogeneous : true ; + @ selection_mode : SelectionMode :: None ; ) ; let series_widget_pairs = RefCell :: new ( vec ! () ) ; @@ -178,7 +178,7 @@ fn create_collection_item ( container . append ( & Label :: builder () . label (name) - . attributes ( & pango_attributes ! ( @ scale : SCALE_LARGE , @ weight : Bold , ) ) + . attributes ( & pango_attributes ! ( @ scale : SCALE_LARGE ; @ weight : Bold ; ) ) . justify ( Justification :: Center ) . wrap (true) . max_width_chars (1) // Not the actual limit, used instead to wrap more aggressively @@ -203,18 +203,18 @@ fn create_collection_item ( fn create_film_details ( film : & Film ) -> Box { g_box ! ( - @ orientation : Horizontal , - @ halign : Center , - @ spacing : 20 , + @ orientation : Horizontal ; + @ halign : Center ; + @ spacing : 20 ; label ! ( film . release_date . as_str () ) , label ! ( format ! ( "{}m" , film . runtime_minutes ) . as_str () ) , ) } fn create_series_details ( series : & Series ) -> Box { g_box ! ( - @ orientation : Horizontal , - @ halign : Center , - @ spacing : 20 , + @ orientation : Horizontal ; + @ halign : Center ; + @ spacing : 20 ; // TODO label ! ("????") , ) diff --git a/src/ui/collatable_container/collation_menu/mod.rs b/src/ui/collatable_container/collation_menu/mod.rs index 6673be3..760edd2 100644 --- a/src/ui/collatable_container/collation_menu/mod.rs +++ b/src/ui/collatable_container/collation_menu/mod.rs @@ -20,11 +20,11 @@ impl FilmCollationMenu { let film_sort_button = FilmSortButton :: new (on_sort) ; let widget = g_box ! ( - @ orientation : Horizontal , - @ halign : Center , - @ spacing : 20 , - @ widget_name : "film-collation-menu" , - @ css_classes : [ "toolbar" ] , + @ orientation : Horizontal ; + @ halign : Center ; + @ spacing : 20 ; + @ widget_name : "film-collation-menu" ; + @ css_classes : [ "toolbar" ] ; * film_sort_button . get_widget () , ) ; @@ -36,11 +36,11 @@ impl SeriesCollationMenu { let series_sort_button = SeriesSortButton :: new (on_sort) ; let widget = g_box ! ( - @ orientation : Horizontal , - @ halign : Center , - @ spacing : 20 , - @ widget_name : "series-collation-menu" , - @ css_classes : [ "toolbar" ] , + @ orientation : Horizontal ; + @ halign : Center ; + @ spacing : 20 ; + @ widget_name : "series-collation-menu" ; + @ css_classes : [ "toolbar" ] ; * series_sort_button . get_widget () , ) ; diff --git a/src/ui/collatable_container/collation_menu/sort_button.rs b/src/ui/collatable_container/collation_menu/sort_button.rs index 69c4acf..7c58bd4 100644 --- a/src/ui/collatable_container/collation_menu/sort_button.rs +++ b/src/ui/collatable_container/collation_menu/sort_button.rs @@ -32,28 +32,28 @@ impl FilmSortButton { let widget = split_button ! ( @ popover : popover ! ( - @ css_classes : [ "menu" ] , + @ css_classes : [ "menu" ] ; list_box ! ( @ connect_row_activated : move | _ , row | { on_film_sort_activated ( row , previous_sorting , & on_sort , sort_icons ) ; - } , + } ; g_box ! ( - @ orientation : Horizontal , @ spacing : 20 , - label ! ( @ hexpand : true , @ halign : Start , "Name" ) , + @ orientation : Horizontal ; @ spacing : 20 ; + label ! ( @ hexpand : true ; @ halign : Start ; "Name" ) , sort_icons [0] , ) , g_box ! ( - @ orientation : Horizontal , @ spacing : 20 , - label ! ( @ hexpand : true , @ halign : Start , "Release date" ) , + @ orientation : Horizontal ; @ spacing : 20 ; + label ! ( @ hexpand : true ; @ halign : Start ; "Release date" ) , sort_icons [1] , ) , g_box ! ( - @ orientation : Horizontal , @ spacing : 20 , - label ! ( @ hexpand : true , @ halign : Start , "Runtime" ) , + @ orientation : Horizontal ; @ spacing : 20 ; + label ! ( @ hexpand : true ; @ halign : Start ; "Runtime" ) , sort_icons [2] , ) , ) , - ) , + ) ; label ! ("Sort") , ) ; @@ -71,23 +71,23 @@ impl SeriesSortButton { let widget = split_button ! ( @ popover : popover ! ( - @ css_classes : [ "menu" ] , + @ css_classes : [ "menu" ] ; list_box ! ( @ connect_row_activated : move | _ , row | { on_series_sort_activated ( row , previous_sorting , & on_sort , sort_icons ) ; - } , + } ; g_box ! ( - @ orientation : Horizontal , @ spacing : 20 , - label ! ( @ hexpand : true , @ halign : Start , "Name" ) , + @ orientation : Horizontal ; @ spacing : 20 ; + label ! ( @ hexpand : true ; @ halign : Start ; "Name" ) , sort_icons [0] , ) , g_box ! ( - @ orientation : Horizontal , @ spacing : 20 , - label ! ( @ hexpand : true , @ halign : Start , "First release date" ) , + @ orientation : Horizontal ; @ spacing : 20 ; + label ! ( @ hexpand : true ; @ halign : Start ; "First release date" ) , sort_icons [1] , ) , ) , - ) , + ) ; label ! ("Sort") , ) ; diff --git a/src/ui/collatable_container/mod.rs b/src/ui/collatable_container/mod.rs index 0c0e1f9..c70b5b4 100644 --- a/src/ui/collatable_container/mod.rs +++ b/src/ui/collatable_container/mod.rs @@ -70,10 +70,10 @@ impl CollatableFilmsContainer { collated_grid . set_sorting (sorting) ) ; let widget = g_box ! ( - @ orientation : Vertical , + @ orientation : Vertical ; * film_collation_menu . get_widget () , scrolled_window ! ( - @ propagate_natural_height : true , + @ propagate_natural_height : true ; vertically_filling ! ( * collated_grid . get_widget () ) , ) , ) ; @@ -94,10 +94,10 @@ impl CollatableSeriesContainer { } ) ; let widget = g_box ! ( - @ orientation : Vertical , + @ orientation : Vertical ; * series_collation_menu . get_widget () , scrolled_window ! ( - @ propagate_natural_height : true , + @ propagate_natural_height : true ; vertically_filling ! ( * collated_grid . get_widget () ) , ) , ) ; diff --git a/src/ui/collection_view_stack.rs b/src/ui/collection_view_stack.rs index c3610e5..af0666c 100644 --- a/src/ui/collection_view_stack.rs +++ b/src/ui/collection_view_stack.rs @@ -12,8 +12,8 @@ impl CollectionViewStack { series_container : & CollatableSeriesContainer , ) -> Self { let widget = view_stack ! ( - "Films" , "camera-video-symbolic" , films_container . get_widget () , - "Series" , "video-display-symbolic" , series_container . get_widget () , + ( "Films" , "camera-video-symbolic" , films_container . get_widget () ) , + ( "Series" , "video-display-symbolic" , series_container . get_widget () ) , ) ; Self { widget } diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 4877a7e..8d27a8d 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -37,10 +37,10 @@ impl UI { let header_bar = ApplicationHeaderBar :: new ( & switch_component ) ; let window = application_window ! ( - @ application : application , - @ title : "Zoödex" , + @ application : application ; + @ title : "Zoödex" ; g_box ! ( - @ orientation : Vertical , + @ orientation : Vertical ; * header_bar . get_widget () , * switch_component . get_widget () , ) , diff --git a/src/ui/utility.rs b/src/ui/utility.rs index 45d76bb..1276a6b 100644 --- a/src/ui/utility.rs +++ b/src/ui/utility.rs @@ -1,8 +1,8 @@ macro_rules ! label { ( - $ ( @ hexpand : $ hexpand : expr , ) ? - $ ( @ vexpand : $ vexpand : expr , ) ? - $ ( @ halign : $ halign : expr , ) ? - $ ( @ valign : $ valign : expr , ) ? + $ ( @ hexpand : $ hexpand : expr ;) ? + $ ( @ vexpand : $ vexpand : expr ; ) ? + $ ( @ halign : $ halign : expr ; ) ? + $ ( @ valign : $ valign : expr ; ) ? $ label : expr $ (,) ? ) => { { let label = gtk4 :: Label :: builder () . build () ; @@ -15,15 +15,15 @@ macro_rules ! label { ( } } } macro_rules ! g_box { ( - $ ( @ orientation : $ orientation : expr , ) ? - $ ( @ halign : $ halign : expr , ) ? - $ ( @ valign : $ valign : expr , ) ? - $ ( @ spacing : $ spacing : expr , ) ? - $ ( @ margin_top : $ margin_top : expr , ) ? - $ ( @ margin_bottom : $ margin_bottom : expr , ) ? - $ ( @ widget_name : $ widget_name : expr , ) ? - $ ( @ css_classes : $ css_classes : expr , ) ? - $ ( $ child : expr ) , + $ (,) ? + $ ( @ orientation : $ orientation : expr ; ) ? + $ ( @ halign : $ halign : expr ; ) ? + $ ( @ valign : $ valign : expr ; ) ? + $ ( @ spacing : $ spacing : expr ; ) ? + $ ( @ margin_top : $ margin_top : expr ; ) ? + $ ( @ margin_bottom : $ margin_bottom : expr ; ) ? + $ ( @ widget_name : $ widget_name : expr ; ) ? + $ ( @ css_classes : $ css_classes : expr ; ) ? + $ ( $ child : expr ) , * $ (,) ? ) => { { let container = gtk4 :: Box :: builder () . build () ; $ ( container . set_orientation ( $ orientation ) ; ) ? @@ -39,7 +39,7 @@ macro_rules ! g_box { ( } } } macro_rules ! view_stack { ( - $ ( $ title : expr , $ icon : expr , $ widget : expr , ) * + $ ( ( $ title : expr , $ icon : expr , $ widget : expr $ (,) ? ) ) , * $ (,) ? ) => { { let container = libadwaita :: ViewStack :: new () ; $ ( container . add_titled_with_icon ( $ widget , None , $ title , $ icon ) ; ) * @@ -47,17 +47,17 @@ macro_rules ! view_stack { ( } } } macro_rules ! list_box { ( - $ ( @ connect_row_activated : $ connect_row_activated : expr , ) ? - $ ( $ child : expr ) , + $ (,) ? + $ ( @ connect_row_activated : $ connect_row_activated : expr ; ) ? + $ ( $ child : expr ) , * $ (,) ? ) => { { let container = gtk4 :: ListBox :: new () ; $ ( container . connect_row_activated ( $ connect_row_activated ) ; ) ? - $ ( container . append ( & $ child ) ; ) + + $ ( container . append ( & $ child ) ; ) * container } } } macro_rules ! split_button { ( - $ ( @ popover : $ popover : expr , ) ? + $ ( @ popover : $ popover : expr ; ) ? $ child : expr $ (,) ? ) => { { let widget = libadwaita :: SplitButton :: new () ; @@ -67,7 +67,7 @@ macro_rules ! split_button { ( } } } macro_rules ! popover { ( - $ ( @ css_classes : $ css_classes : expr , ) ? + $ ( @ css_classes : $ css_classes : expr ; ) ? $ child : expr $ (,) ? ) => { { let widget = gtk4 :: Popover :: new () ; @@ -81,7 +81,7 @@ macro_rules ! icon { ( $ icon_name : expr ) => { } } macro_rules ! scrolled_window { ( - $ ( @ propagate_natural_height : $ propagate_natural_height : expr , ) ? + $ ( @ propagate_natural_height : $ propagate_natural_height : expr ; ) ? $ child : expr $ (,) ? ) => { { let widget = gtk4 :: ScrolledWindow :: new () ; @@ -91,9 +91,9 @@ macro_rules ! scrolled_window { ( } } } macro_rules ! flow_box { ( - $ ( @ orientation : $ orientation : expr , ) ? - $ ( @ homogeneous : $ homogeneous : expr , ) ? - $ ( @ selection_mode : $ selection_mode : expr , ) ? + $ ( @ orientation : $ orientation : expr ; ) ? + $ ( @ homogeneous : $ homogeneous : expr ; ) ? + $ ( @ selection_mode : $ selection_mode : expr ; ) ? ) => { { let widget = gtk4 :: FlowBox :: new () ; $ ( widget . set_orientation ( $ orientation ) ; ) ? @@ -103,7 +103,7 @@ macro_rules ! flow_box { ( } } } macro_rules ! view_switcher { ( - $ ( @ policy : $ policy : expr , ) ? + $ ( @ policy : $ policy : expr ; ) ? $ stack : expr $ (,) ? ) => { { let widget = libadwaita :: ViewSwitcher :: new () ; @@ -118,15 +118,15 @@ macro_rules ! header_bar { ( $ title_widget : expr $ (,) ? ) => { { widget } } } -macro_rules ! bin { ( $ ( @ vexpand : $ vexpand : expr ) ? $ (,) ? ) => { { +macro_rules ! bin { ( $ ( @ vexpand : $ vexpand : expr ; ) ? ) => { { let widget = libadwaita :: Bin :: new () ; $ ( widget . set_vexpand ( $ vexpand ) ; ) ? widget } } } macro_rules ! application_window { ( - @ application : $ application : expr , - @ title : $ title : expr , + @ application : $ application : expr ; + @ title : $ title : expr ; $ content : expr $ (,) ? ) => { { use libadwaita :: prelude :: * ; @@ -139,15 +139,15 @@ macro_rules ! application_window { ( macro_rules ! vertically_filling { ( $ child : expr ) => { g_box ! ( - @ orientation : gtk4 :: Orientation :: Vertical , + @ orientation : gtk4 :: Orientation :: Vertical ; $ child , - bin ! ( @ vexpand : true ) , + bin ! ( @ vexpand : true ; ) , ) } } macro_rules ! pango_attributes { ( - $ ( @ scale : $ scale : expr , ) ? - $ ( @ weight : $ weight : expr , ) ? + $ ( @ scale : $ scale : expr ; ) ? + $ ( @ weight : $ weight : expr ; ) ? ) => { { let attributes = gtk4 :: pango :: AttrList :: new () ; # [ allow (unused_mut) ] let mut font_description = gtk4 :: pango :: FontDescription :: new () ;