summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorLibravatar Drake Tetreault <ekardnt@ekardnt.com>2021-12-29 09:31:43 -0800
committerLibravatar Drake Tetreault <ekardnt@ekardnt.com>2021-12-29 09:34:37 -0800
commit8a70d10401eb1277718a19f47ff1e2a5c4c7564b (patch)
tree3f9735bbddef9e293e78fc2452b9896752975c9a /examples
parent5466d6a11d0a4bee01e954b7c727b3fd67cea02a (diff)
downloadiced-8a70d10401eb1277718a19f47ff1e2a5c4c7564b.tar.gz
iced-8a70d10401eb1277718a19f47ff1e2a5c4c7564b.tar.bz2
iced-8a70d10401eb1277718a19f47ff1e2a5c4c7564b.zip
Allow Sandbox applications to exit.
Diffstat (limited to 'examples')
-rw-r--r--examples/exit/Cargo.toml8
-rw-r--r--examples/exit/README.md12
-rw-r--r--examples/exit/src/main.rs75
3 files changed, 95 insertions, 0 deletions
diff --git a/examples/exit/Cargo.toml b/examples/exit/Cargo.toml
new file mode 100644
index 00000000..34d0789a
--- /dev/null
+++ b/examples/exit/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "exit"
+version = "0.1.0"
+edition = "2021"
+publish = false
+
+[dependencies]
+iced = { path = "../.." }
diff --git a/examples/exit/README.md b/examples/exit/README.md
new file mode 100644
index 00000000..969c9182
--- /dev/null
+++ b/examples/exit/README.md
@@ -0,0 +1,12 @@
+## Exit
+
+How to exit an application based on user input.
+
+The __[`main`]__ file contains all the code of the example.
+
+You can run it with `cargo run`:
+```
+cargo run --package exit
+```
+
+[`main`]: src/main.rs
diff --git a/examples/exit/src/main.rs b/examples/exit/src/main.rs
new file mode 100644
index 00000000..c3a190d8
--- /dev/null
+++ b/examples/exit/src/main.rs
@@ -0,0 +1,75 @@
+use iced::{
+ button, Alignment, Button, Column, Element, Sandbox, Settings, Text,
+};
+
+pub fn main() -> iced::Result {
+ Exit::run(Settings::default())
+}
+
+#[derive(Default)]
+struct Exit {
+ show_confirm: bool,
+ exit: bool,
+ confirm_button: button::State,
+ exit_button: button::State,
+}
+
+#[derive(Debug, Clone, Copy)]
+enum Message {
+ Confirm,
+ Exit,
+}
+
+impl Sandbox for Exit {
+ type Message = Message;
+
+ fn new() -> Self {
+ Self::default()
+ }
+
+ fn title(&self) -> String {
+ String::from("Exit - Iced")
+ }
+
+ fn should_exit(&self) -> bool {
+ self.exit
+ }
+
+ fn update(&mut self, message: Message) {
+ match message {
+ Message::Confirm => {
+ self.exit = true;
+ }
+ Message::Exit => {
+ self.show_confirm = true;
+ }
+ }
+ }
+
+ fn view(&mut self) -> Element<Message> {
+ if self.show_confirm {
+ Column::new()
+ .padding(20)
+ .align_items(Alignment::Center)
+ .push(Text::new("Are you sure you want to exit?"))
+ .push(
+ Button::new(
+ &mut self.confirm_button,
+ Text::new("Yes, exit now"),
+ )
+ .on_press(Message::Confirm),
+ )
+ .into()
+ } else {
+ Column::new()
+ .padding(20)
+ .align_items(Alignment::Center)
+ .push(Text::new("Click the button to exit"))
+ .push(
+ Button::new(&mut self.exit_button, Text::new("Exit"))
+ .on_press(Message::Exit),
+ )
+ .into()
+ }
+ }
+}