feat: MultiSelect support for segmented buttons

This commit is contained in:
Michael Aaron Murphy 2023-01-06 16:18:25 +01:00 committed by Michael Murphy
parent b1cbcfaf5b
commit 8988b25b6a
9 changed files with 263 additions and 112 deletions

View file

@ -1,15 +1,20 @@
// Copyright 2022 System76 <info@system76.com>
// SPDX-License-Identifier: MPL-2.0
use super::{HorizontalSegmentedButton, SegmentedButton, State, VerticalSegmentedButton};
use super::{
state::Selectable, HorizontalSegmentedButton, SegmentedButton, State, VerticalSegmentedButton,
};
/// Appears as a collection of tabs for developing a tabbed interface.
///
/// The data for the widget comes from a [`State`] that is maintained the application.
#[must_use]
pub fn horizontal_view_switcher<Message, Data>(
state: &State<Data>,
) -> HorizontalSegmentedButton<Message, crate::Renderer> {
pub fn horizontal_view_switcher<Selection, Message, Data>(
state: &State<Selection, Data>,
) -> HorizontalSegmentedButton<Selection, Message, crate::Renderer>
where
Selection: Selectable,
{
SegmentedButton::new(&state.inner)
.button_padding([16, 0, 16, 0])
.button_height(48)
@ -21,9 +26,12 @@ pub fn horizontal_view_switcher<Message, Data>(
///
/// The data for the widget comes from a [`State`] that is maintained the application.
#[must_use]
pub fn horizontal_segmented_selection<Message, Data>(
state: &State<Data>,
) -> HorizontalSegmentedButton<Message, crate::Renderer> {
pub fn horizontal_segmented_selection<Selection, Message, Data>(
state: &State<Selection, Data>,
) -> HorizontalSegmentedButton<Selection, Message, crate::Renderer>
where
Selection: Selectable,
{
SegmentedButton::new(&state.inner)
.button_padding([16, 0, 16, 0])
.button_height(32)
@ -35,9 +43,12 @@ pub fn horizontal_segmented_selection<Message, Data>(
///
/// The data for the widget comes from a [`State`] that is maintained the application.
#[must_use]
pub fn vertical_segmented_selection<Message, Data>(
state: &State<Data>,
) -> VerticalSegmentedButton<Message, crate::Renderer> {
pub fn vertical_segmented_selection<Selection, Message, Data>(
state: &State<Selection, Data>,
) -> VerticalSegmentedButton<Selection, Message, crate::Renderer>
where
Selection: Selectable,
{
SegmentedButton::new(&state.inner)
.button_padding([16, 0, 16, 0])
.button_height(32)
@ -49,9 +60,12 @@ pub fn vertical_segmented_selection<Message, Data>(
///
/// The data for the widget comes from a [`State`] that is maintained the application.
#[must_use]
pub fn vertical_view_switcher<Message, Data>(
state: &State<Data>,
) -> VerticalSegmentedButton<Message, crate::Renderer> {
pub fn vertical_view_switcher<Selection, Message, Data>(
state: &State<Selection, Data>,
) -> VerticalSegmentedButton<Selection, Message, crate::Renderer>
where
Selection: Selectable,
{
SegmentedButton::new(&state.inner)
.button_padding([16, 0, 16, 0])
.button_height(48)