feat: moving elements

This commit is contained in:
electria 2026-06-25 14:48:55 -07:00
commit ad2e15605e
Signed by: electria
SSH key fingerprint: SHA256:8LlB3ucPbBHqozqkhsNbaV5oG3SlzzqUj8FZDL6IPQs

View file

@ -32,6 +32,11 @@ enum Message {
i_category: usize, i_category: usize,
i_element: usize, i_element: usize,
}, },
MoveElement {
i_category: usize,
i_element: usize,
target_category: usize,
},
ElementChanged { ElementChanged {
i_category: usize, i_category: usize,
i_element: usize, i_element: usize,
@ -83,6 +88,28 @@ impl State {
new_value, new_value,
}) })
.into(), .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") widget::button("X")
.style(widget::button::warning) .style(widget::button::warning)
.on_press(Message::RemoveElement { .on_press(Message::RemoveElement {
@ -129,6 +156,16 @@ impl State {
} => { } => {
self.table[i_category].elements.remove(i_element); self.table[i_category].elements.remove(i_element);
} }
Message::MoveElement {
i_category,
i_element,
target_category,
} => {
let moved_element = self.table[i_category].elements.remove(i_element);
self.table[target_category].elements.reverse();
self.table[target_category].elements.push(moved_element);
self.table[target_category].elements.reverse();
}
Message::ElementChanged { Message::ElementChanged {
i_category, i_category,
i_element, i_element,