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