summaryrefslogtreecommitdiffstats
path: root/toolkit/crashreporter/client/app/src/ui/model/window.rs
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/crashreporter/client/app/src/ui/model/window.rs')
-rw-r--r--toolkit/crashreporter/client/app/src/ui/model/window.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/toolkit/crashreporter/client/app/src/ui/model/window.rs b/toolkit/crashreporter/client/app/src/ui/model/window.rs
new file mode 100644
index 0000000000..b56071ca19
--- /dev/null
+++ b/toolkit/crashreporter/client/app/src/ui/model/window.rs
@@ -0,0 +1,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);
+ }
+}