feat: move "add category" to the top

this makes everything symmetrical
This commit is contained in:
electria 2026-06-25 17:18:00 -07:00
commit 05ee2fc381
Signed by: electria
SSH key fingerprint: SHA256:8LlB3ucPbBHqozqkhsNbaV5oG3SlzzqUj8FZDL6IPQs

View file

@ -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<Message> {