iced_widget/pane_grid/
controls.rs

1use crate::container;
2use crate::core::{self, Element};
3
4/// The controls of a [`Pane`].
5///
6/// [`Pane`]: super::Pane
7pub struct Controls<
8    'a,
9    Message,
10    Theme = crate::Theme,
11    Renderer = crate::Renderer,
12> where
13    Theme: container::Catalog,
14    Renderer: core::Renderer,
15{
16    pub(super) full: Element<'a, Message, Theme, Renderer>,
17    pub(super) compact: Option<Element<'a, Message, Theme, Renderer>>,
18}
19
20impl<'a, Message, Theme, Renderer> Controls<'a, Message, Theme, Renderer>
21where
22    Theme: container::Catalog,
23    Renderer: core::Renderer,
24{
25    /// Creates a new [`Controls`] with the given content.
26    pub fn new(
27        content: impl Into<Element<'a, Message, Theme, Renderer>>,
28    ) -> Self {
29        Self {
30            full: content.into(),
31            compact: None,
32        }
33    }
34
35    /// Creates a new [`Controls`] with a full and compact variant.
36    /// If there is not enough room to show the full variant without overlap,
37    /// then the compact variant will be shown instead.
38    pub fn dynamic(
39        full: impl Into<Element<'a, Message, Theme, Renderer>>,
40        compact: impl Into<Element<'a, Message, Theme, Renderer>>,
41    ) -> Self {
42        Self {
43            full: full.into(),
44            compact: Some(compact.into()),
45        }
46    }
47}
48
49impl<'a, Message, Theme, Renderer> From<Element<'a, Message, Theme, Renderer>>
50    for Controls<'a, Message, Theme, Renderer>
51where
52    Theme: container::Catalog,
53    Renderer: core::Renderer,
54{
55    fn from(value: Element<'a, Message, Theme, Renderer>) -> Self {
56        Self::new(value)
57    }
58}