From 1f3d2772b8bb033add005f65c2c98ff33a60e3ca Mon Sep 17 00:00:00 2001 From: Vika Date: Wed, 19 Feb 2025 21:21:18 +0300 Subject: post_editor: initialize as Grid to simplify code Now we are setting the grid positions as part of the macro. While having a counter would be neat, we can go without it and just set all positions statically. (I wonder if the XML could've let us set columns in rows while ensuring nothing overlaps. Probably not.) --- src/components/post_editor.rs | 94 +++++++++---------------------------------- 1 file changed, 20 insertions(+), 74 deletions(-) (limited to 'src/components') diff --git a/src/components/post_editor.rs b/src/components/post_editor.rs index 7bc23b3..189c031 100644 --- a/src/components/post_editor.rs +++ b/src/components/post_editor.rs @@ -86,7 +86,7 @@ pub(crate) struct PostEditor { #[do_not_track] tags: relm4::factory::FactoryVecDeque, visibility: Visibility, - #[do_not_track] wide_layout: gtk::GridLayout, + #[do_not_track] narrow_layout: gtk::BoxLayout, #[cfg(feature = "smart-summary")] #[do_not_track] smart_summary: Controller, @@ -137,20 +137,21 @@ impl Component for Post gtk::ScrolledWindow { #[name = "content"] - gtk::Box { + gtk::Grid { set_orientation: gtk::Orientation::Vertical, - set_spacing: 5, + set_column_homogeneous: false, + set_row_spacing: 10, set_margin_all: 5, #[name = "name_label"] - gtk::Label { + attach[0, 0, 1, 1] = >k::Label { set_markup: &gettext("Name"), set_margin_horizontal: 10, set_halign: gtk::Align::Start, set_valign: gtk::Align::Center, }, #[name = "name_field"] - gtk::Entry { + attach[1, 0, 1, 1] = >k::Entry { set_hexpand: true, set_buffer: &model.name_buffer, #[track = "model.changed(Self::sending())"] @@ -158,14 +159,14 @@ impl Component for Post }, #[name = "summary_label"] - gtk::Label { + attach[0, 1, 1, 1] = >k::Label { set_markup: &gettext("Summary"), set_margin_horizontal: 10, set_halign: gtk::Align::Start, set_valign: gtk::Align::Center, }, #[name = "summary_field"] - gtk::Box { + attach[1, 1, 1, 1] = >k::Box { set_orientation: gtk::Orientation::Horizontal, add_css_class: "linked", @@ -178,14 +179,14 @@ impl Component for Post }, #[name = "tag_label"] - gtk::Label { + attach[0, 2, 1, 1] = >k::Label { set_markup: &gettext("Tags"), set_margin_horizontal: 10, set_halign: gtk::Align::Start, set_valign: gtk::Align::Center, }, #[name = "tag_holder"] - gtk::Box { + attach[1, 2, 1, 1] = >k::Box { set_hexpand: true, set_orientation: gtk::Orientation::Vertical, set_spacing: 5, @@ -211,10 +212,10 @@ impl Component for Post }, }, - model.tags.widget(), + attach[1, 3, 1, 1] = model.tags.widget(), #[name = "content_label"] - gtk::Label { + attach[0, 4, 1, 1] = >k::Label { set_markup: &gettext("Content"), set_halign: gtk::Align::Start, set_valign: gtk::Align::Start, @@ -223,7 +224,7 @@ impl Component for Post }, #[name = "content_textarea_wrapper"] - gtk::ScrolledWindow { + attach[1, 4, 1, 1] = >k::ScrolledWindow { set_vexpand: true, set_height_request: 200, #[name = "content_textarea"] @@ -248,7 +249,7 @@ impl Component for Post }, #[name = "misc_prop_wrapper"] - gtk::Box { + attach[0, 5, 2, 1] = >k::Box { set_hexpand: true, gtk::FlowBox { @@ -308,17 +309,12 @@ impl Component for Post // change some properties along the way. add_breakpoint = adw::Breakpoint::new( adw::BreakpointCondition::new_length( - adw::BreakpointConditionLengthType::MinWidth, + adw::BreakpointConditionLengthType::MaxWidth, 512.0, adw::LengthUnit::Px ) ) { - add_setter: (&content, "layout_manager", Some(&model.wide_layout.to_value())), - add_setter: (&name_label, "halign", Some(>k::Align::End.to_value())), - add_setter: (&summary_label, "halign", Some(>k::Align::End.to_value())), - add_setter: (&tag_label, "halign", Some(>k::Align::End.to_value())), - add_setter: (&content_label, "halign", Some(>k::Align::End.to_value())), - add_setter: (&pending_tag_entry, "hexpand", Some(&false.to_value())), + add_setter: (&content, "layout_manager", Some(&model.narrow_layout.to_value())), }, } @@ -359,7 +355,10 @@ impl Component for Post ), visibility: Visibility::Public, - wide_layout: gtk::GridLayout::new(), + narrow_layout: gtk::BoxLayout::builder() + .orientation(gtk::Orientation::Vertical) + .spacing(5) + .build(), #[cfg(feature = "smart-summary")] smart_summary: crate::components::SmartSummaryButton::builder() @@ -406,59 +405,6 @@ impl Component for Post model.visibility = post.visibility; } - let prev_layout = widgets.content.layout_manager().unwrap(); - let layout = &model.wide_layout; - widgets.content.set_layout_manager(Some(layout.clone())); - layout.set_column_homogeneous(false); - layout.set_row_spacing(10); - - enum Row<'a> { - TwoColumn(&'a gtk::Label, &'a gtk::Widget), - Span(&'a gtk::Widget), - SecondColumn(&'a gtk::Widget) - } - - for (row, content) in [ - Row::TwoColumn(&widgets.name_label, widgets.name_field.upcast_ref::()), - Row::TwoColumn(&widgets.summary_label, widgets.summary_field.upcast_ref::()), - Row::TwoColumn(&widgets.tag_label, widgets.tag_holder.upcast_ref::()), - Row::SecondColumn(model.tags.widget().upcast_ref::()), - Row::TwoColumn(&widgets.content_label, widgets.content_textarea_wrapper.upcast_ref::()), - Row::Span(widgets.misc_prop_wrapper.upcast_ref::()), - ].into_iter().enumerate() { - match content { - Row::TwoColumn(label, field) => { - let label_layout = layout.layout_child(label) - .downcast::() - .unwrap(); - label_layout.set_row(row as i32); - label_layout.set_column(0); - - let field_layout = layout.layout_child(field) - .downcast::() - .unwrap(); - field_layout.set_row(row as i32); - field_layout.set_column(1); - }, - Row::Span(widget) => { - let widget_layout = layout.layout_child(widget) - .downcast::() - .unwrap(); - widget_layout.set_row(row as i32); - widget_layout.set_column_span(2); - }, - Row::SecondColumn(widget) => { - let widget_layout = layout.layout_child(widget) - .downcast::() - .unwrap(); - widget_layout.set_row(row as i32); - widget_layout.set_column(1); - } - } - } - - widgets.content.set_layout_manager(Some(prev_layout)); - ComponentParts { model, widgets } } -- cgit 1.4.1