summaryrefslogtreecommitdiffstats
path: root/toolkit/crashreporter/client/app/src/ui/model/window.rs
blob: b56071ca19917a7f05fb6d04fbd36a3c1872cf8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

use super::{Element, ElementBuilder, TypedElement};
use crate::data::Event;

/// A window.
#[derive(Debug, Default)]
pub struct Window {
    pub title: String,
    /// The window content is the first element.
    pub content: Option<Box<Element>>,
    /// Logical child windows.
    pub children: Vec<TypedElement<Self>>,
    pub modal: bool,
    pub close: Option<Event<()>>,
}

impl ElementBuilder<Window> {
    /// Set the window title.
    pub fn title(&mut self, s: impl Into<String>) {
        self.element_type.title = s.into();
    }

    /// Set whether the window is modal (blocking interaction with other windows when displayed).
    pub fn modal(&mut self, value: bool) {
        self.element_type.modal = value;
    }

    /// Register an event to close the window.
    pub fn close_when(&mut self, event: &Event<()>) {
        self.element_type.close = Some(event.clone());
    }

    /// Add a window as a logical child of this one.
    ///
    /// Logical children are always displayed above their parents.
    pub fn child_window(&mut self, window: TypedElement<Window>) {
        self.element_type.children.push(window);
    }

    pub fn add_child(&mut self, child: Element) {
        Self::single_child(&mut self.element_type.content, child);
    }
}