Skip to main content

iced_widget/pane_grid/
controls.rs

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