Skip to main content

iced_widget_kit/
helpers.rs

1#[cfg(feature = "expander")]
2use {crate::expander::Expander, iced_core::Element};
3
4#[cfg(feature = "ribbon")]
5use {
6    crate::ribbon::{self, Group, Ribbon},
7    iced_widget::{button, svg, text},
8};
9
10#[cfg(feature = "selector_bar")]
11use crate::selector_bar::{
12    self, SelectorBar,
13    item::{self, Item as SelectorBarItem},
14};
15
16/// Creates a new [`Ribbon`] which the provided [`Group`]s.
17#[cfg(feature = "ribbon")]
18#[must_use]
19pub fn ribbon<'a, Id, Message, Theme, Renderer>(
20    groups: impl IntoIterator<Item = Group<'a, Id, Message, Theme, Renderer>>,
21) -> Ribbon<'a, Id, Message, Theme, Renderer>
22where
23    Id: Clone + Eq,
24    Message: 'a + Clone,
25    Theme: 'a + ribbon::Catalog + button::Catalog + svg::Catalog + text::Catalog,
26    <Theme as text::Catalog>::Class<'a>: From<text::StyleFn<'a, Theme>>,
27    Renderer: 'a + iced_core::Renderer + iced_core::svg::Renderer + iced_core::text::Renderer,
28    <Renderer as iced_core::text::Renderer>::Font: From<iced_core::Font>,
29    <Renderer as iced_core::text::Renderer>::Paragraph: Clone,
30{
31    Ribbon::new(groups)
32}
33
34/// Creates a new [`SelectorBar`] which the provided [`Item`](crate::selector_bar::item::Item)s.
35///
36/// # Example
37/// ```ignore
38/// #[derive(Clone)]
39/// enum Message {
40///    TabSelected(u32),
41/// }
42///
43/// fn view(&self) -> Element<'_, Message, Theme> {
44///     let tabs = (0..5).map(|i| item(i, text!("Tab {}", i + 1)));
45///     selector_bar(tabs, self.selected_tab, Message::TabSelected).into()
46/// }
47/// ```
48#[cfg(feature = "selector_bar")]
49#[must_use]
50pub fn selector_bar<'a, Id, Message, Theme, Renderer>(
51    items: impl IntoIterator<Item = SelectorBarItem<'a, Id, Message, Theme, Renderer>>,
52    selected_id: Id,
53    on_select: impl Fn(Id) -> Message + 'a,
54) -> SelectorBar<'a, Id, Message, Theme, Renderer>
55where
56    Id: Eq,
57    Theme: selector_bar::Catalog + item::Catalog,
58{
59    SelectorBar::new(items, selected_id, on_select)
60}
61
62/// Creates a new [`Expander`] from the provided header and content.
63///
64/// # Example
65/// ```ignore
66/// enum Message {
67///     ExpanderPressed,
68/// }
69///
70/// let mut expander = expander(
71///     button("Header").on_press(Message::ExpanderPressed),
72///     column!["Item 1", "Item 2", "Item 3"],
73///     self.is_expanded,
74/// );
75/// ```
76#[cfg(feature = "expander")]
77#[must_use]
78pub fn expander<'a, H, C, Message, Theme, Renderer>(
79    header: H,
80    content: C,
81    is_expanded: bool,
82) -> Expander<'a, Message, Theme, Renderer>
83where
84    H: Into<Element<'a, Message, Theme, Renderer>>,
85    C: Into<Element<'a, Message, Theme, Renderer>>,
86{
87    Expander::new(header, content, is_expanded)
88}