Merge pull request #1175 from EkardNT/sandbox-exit
Allow Sandbox applications to exit.
This commit is contained in:
commit
7ab584ce96
5 changed files with 116 additions and 0 deletions
|
|
@ -71,6 +71,7 @@ members = [
|
||||||
"examples/custom_widget",
|
"examples/custom_widget",
|
||||||
"examples/download_progress",
|
"examples/download_progress",
|
||||||
"examples/events",
|
"examples/events",
|
||||||
|
"examples/exit",
|
||||||
"examples/game_of_life",
|
"examples/game_of_life",
|
||||||
"examples/geometry",
|
"examples/geometry",
|
||||||
"examples/integration_opengl",
|
"examples/integration_opengl",
|
||||||
|
|
|
||||||
8
examples/exit/Cargo.toml
Normal file
8
examples/exit/Cargo.toml
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
[package]
|
||||||
|
name = "exit"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
iced = { path = "../.." }
|
||||||
12
examples/exit/README.md
Normal file
12
examples/exit/README.md
Normal file
|
|
@ -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
|
||||||
84
examples/exit/src/main.rs
Normal file
84
examples/exit/src/main.rs
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
use iced::{
|
||||||
|
button, Alignment, Button, Column, Container, Element, Length, 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> {
|
||||||
|
let content = if self.show_confirm {
|
||||||
|
Column::new()
|
||||||
|
.spacing(10)
|
||||||
|
.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"),
|
||||||
|
)
|
||||||
|
.padding([10, 20])
|
||||||
|
.on_press(Message::Confirm),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Column::new()
|
||||||
|
.spacing(10)
|
||||||
|
.align_items(Alignment::Center)
|
||||||
|
.push(Text::new("Click the button to exit"))
|
||||||
|
.push(
|
||||||
|
Button::new(&mut self.exit_button, Text::new("Exit"))
|
||||||
|
.padding([10, 20])
|
||||||
|
.on_press(Message::Exit),
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
Container::new(content)
|
||||||
|
.width(Length::Fill)
|
||||||
|
.height(Length::Fill)
|
||||||
|
.padding(20)
|
||||||
|
.center_x()
|
||||||
|
.center_y()
|
||||||
|
.into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -131,6 +131,13 @@ pub trait Sandbox {
|
||||||
1.0
|
1.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns whether the [`Sandbox`] should be terminated.
|
||||||
|
///
|
||||||
|
/// By default, it returns `false`.
|
||||||
|
fn should_exit(&self) -> bool {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
/// Runs the [`Sandbox`].
|
/// Runs the [`Sandbox`].
|
||||||
///
|
///
|
||||||
/// On native platforms, this method will take control of the current thread
|
/// On native platforms, this method will take control of the current thread
|
||||||
|
|
@ -182,4 +189,8 @@ where
|
||||||
fn scale_factor(&self) -> f64 {
|
fn scale_factor(&self) -> f64 {
|
||||||
T::scale_factor(self)
|
T::scale_factor(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn should_exit(&self) -> bool {
|
||||||
|
T::should_exit(self)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue