feat(spin_button): when value is min/maxed, disable decrease/increase button

This commit is contained in:
vacenty 2026-01-21 14:08:25 +01:00 committed by GitHub
parent 097c76f0e5
commit 689f25be53
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -181,20 +181,22 @@ fn make_button<'a, T, Message>(
spin_button: &SpinButton<'a, T, Message>, spin_button: &SpinButton<'a, T, Message>,
icon: &'static str, icon: &'static str,
#[cfg(feature = "a11y")] name: String, #[cfg(feature = "a11y")] name: String,
operation: fn(T, T, T, T) -> T, operation: Option<fn(T, T, T, T) -> T>,
) -> Element<'a, Message> ) -> Element<'a, Message>
where where
Message: Clone + 'static, Message: Clone + 'static,
T: Copy + Sub<Output = T> + Add<Output = T> + PartialOrd, T: Copy + Sub<Output = T> + Add<Output = T> + PartialOrd,
{ {
let mut button = icon::from_name(icon) let mut button = icon::from_name(icon).apply(button::icon);
.apply(button::icon)
.on_press((spin_button.on_press)(operation( if let Some(f) = operation {
button = button.on_press((spin_button.on_press)(f(
spin_button.value, spin_button.value,
spin_button.step, spin_button.step,
spin_button.min, spin_button.min,
spin_button.max, spin_button.max,
))); )))
};
#[cfg(feature = "a11y")] #[cfg(feature = "a11y")]
{ {
@ -214,14 +216,20 @@ where
"list-remove-symbolic", "list-remove-symbolic",
#[cfg(feature = "a11y")] #[cfg(feature = "a11y")]
[&spin_button.name, " decrease"].concat(), [&spin_button.name, " decrease"].concat(),
decrement, match spin_button.value == spin_button.min {
true => None,
false => Some(decrement),
},
); );
let increment_button = make_button( let increment_button = make_button(
&spin_button, &spin_button,
"list-add-symbolic", "list-add-symbolic",
#[cfg(feature = "a11y")] #[cfg(feature = "a11y")]
[&spin_button.name, " increase"].concat(), [&spin_button.name, " increase"].concat(),
increment, match spin_button.value == spin_button.max {
true => None,
false => Some(increment),
},
); );
let label = text::body(spin_button.label) let label = text::body(spin_button.label)
.apply(container) .apply(container)
@ -248,14 +256,20 @@ where
"list-remove-symbolic", "list-remove-symbolic",
#[cfg(feature = "a11y")] #[cfg(feature = "a11y")]
[&spin_button.label, " decrease"].concat(), [&spin_button.label, " decrease"].concat(),
decrement, match spin_button.value == spin_button.min {
true => None,
false => Some(decrement),
},
); );
let increment_button = make_button( let increment_button = make_button(
&spin_button, &spin_button,
"list-add-symbolic", "list-add-symbolic",
#[cfg(feature = "a11y")] #[cfg(feature = "a11y")]
[&spin_button.label, " increase"].concat(), [&spin_button.label, " increase"].concat(),
increment, match spin_button.value == spin_button.max {
true => None,
false => Some(increment),
},
); );
let label = text::body(spin_button.label) let label = text::body(spin_button.label)