From 05ee2fc38194f763805f9316b410dda4a93a9247 Mon Sep 17 00:00:00 2001 From: electria Date: Thu, 25 Jun 2026 17:18:00 -0700 Subject: [PATCH] feat: move "add category" to the top this makes everything symmetrical --- src/main.rs | 146 +++++++++++++++++++++++++++------------------------- 1 file changed, 76 insertions(+), 70 deletions(-) diff --git a/src/main.rs b/src/main.rs index 5233af4..82b846d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -64,78 +64,84 @@ impl State { state } fn view(&self) -> Element<'_, Message, Theme, Renderer> { - widget::row(self.table.iter().enumerate().map(|(i_category, category)| { - widget::column([ - widget::row([ - widget::text_input("category", &category.header) - .on_input(move |new_value| Message::CategoryChanged { - i_category, - new_value, - }) - .size(30) - .into(), - widget::button("X") - .style(widget::button::danger) - .on_press(Message::RemoveCategory { i_category }) - .height(50) + widget::column([ + widget::button("add category") + .on_press(Message::AddCategory) + .into(), + widget::row(self.table.iter().enumerate().map(|(i_category, category)| { + widget::column([ + widget::row([ + widget::text_input("category", &category.header) + .on_input(move |new_value| Message::CategoryChanged { + i_category, + new_value, + }) + .size(30) + .into(), + widget::button("X") + .style(widget::button::danger) + .on_press(Message::RemoveCategory { i_category }) + .height(50) + .into(), + ]) + .align_y(Vertical::Center) + .into(), + widget::scrollable(widget::column(category.elements.iter().enumerate().map( + |(i_element, element)| { + widget::row([ + widget::text_input("content", &element) + .on_input(move |new_value| Message::ElementChanged { + i_category, + i_element, + new_value, + }) + .into(), + widget::button("←") + .on_press_maybe(if i_category > 0 { + Some(Message::MoveElement { + i_category, + i_element, + target_category: i_category - 1, + }) + } else { + None + }) + .into(), + widget::button("→") + .on_press_maybe(if i_category < self.table.len() - 1 { + Some(Message::MoveElement { + i_category, + i_element, + target_category: i_category + 1, + }) + } else { + None + }) + .into(), + widget::button("X") + .style(widget::button::warning) + .on_press(Message::RemoveElement { + i_category, + i_element, + }) + .into(), + ]) + .into() + }, + ))) + .into(), + widget::button("add element") + .on_press(Message::AddElement { i_category }) .into(), ]) - .align_y(Vertical::Center) - .into(), - widget::scrollable(widget::column(category.elements.iter().enumerate().map( - |(i_element, element)| { - widget::row([ - widget::text_input("content", &element) - .on_input(move |new_value| Message::ElementChanged { - i_category, - i_element, - new_value, - }) - .into(), - widget::button("←") - .on_press_maybe(if i_category > 0 { - Some(Message::MoveElement { - i_category, - i_element, - target_category: i_category - 1, - }) - } else { - None - }) - .into(), - widget::button("→") - .on_press_maybe(if i_category < self.table.len() - 1 { - Some(Message::MoveElement { - i_category, - i_element, - target_category: i_category + 1, - }) - } else { - None - }) - .into(), - widget::button("X") - .style(widget::button::warning) - .on_press(Message::RemoveElement { - i_category, - i_element, - }) - .into(), - ]) - .into() - }, - ))) - .into(), - widget::button("add element") - .on_press(Message::AddElement { i_category }) - .into(), - ]) - .align_x(Horizontal::Center) - .into() - })) - .push(widget::button("add category").on_press(Message::AddCategory)) - .spacing(15) - .padding(15) + .align_x(Horizontal::Center) + .into() + })) + .spacing(15) + .padding(15) + .into(), + ]) + .align_x(Horizontal::Center) .into() } fn update(&mut self, message: Message) -> Task {