Expand description
Message dialogs, file and folder dialogs, notifications.
The DIALOG service provides custom and modal native dialogs.
use zng::prelude::*;
Button! {
child = Text!("Info, Warn, Error");
on_click = async_hn!(|_| {
DIALOG.info("Info", "Information message.").wait_rsp().await;
DIALOG.warn("Warn", "Warning message.").wait_rsp().await;
DIALOG.error("Error", "Error message.").wait_rsp().await;
});
// dialog::native_dialogs = true;
}The example above shows 3 custom dialogs in sequence, info, warn and error. If dialog::native_dialogs = true is uncommented
the example shows 3 native dialogs.
Custom dialogs modal widgets, rendered in the window content, instantiated using the Dialog! widget.
use zng::prelude::*;
let r = DIALOG
.custom(dialog::Dialog! {
style_fn = dialog::WarnStyle!();
title = Text!(l10n!("save-dlg.title", "Save File?"));
content = SelectableText!(l10n!(
"save-dlg.msg",
"Save file? All unsaved changes will be lost."
));
responses = vec![
dialog::Response::cancel(),
dialog::Response::new("discard", l10n!("save-dlg.discard", "Discard")),
dialog::Response::new("save", l10n!("save-dlg.save", "Save")),
];
})
.wait_rsp()
.await;
if r.name == "save" {
// save
}The example above creates a custom dialog based on the warning dialog (WarnStyle!), it uses custom responses that are
identified by name.
Some of the dialogs provided are native by default (and only native on this release), the example below shows a native save file dialog:
use zng::prelude::*;
let mut f = dialog::FileDialogFilters::default();
f.push_filter("Text Files", ["txt", "md"]);
f.push_filter("Text File", ["txt"]);
f.push_filter("Markdown File", ["md"]);
f.push_filter("All Files", ["*"]);
let filters = f;
let r = DIALOG
.save_file("Save Text", "last/save/dir", "last-name.txt", filters)
.wait_rsp()
.await
.into_path();
if let Ok(Some(path)) = r {
std::fs::write(path, "contents".as_bytes()).unwrap();
}§Local Notifications
The service can also insert notifications in the system notification list.
use zng::prelude::*;
let mut note = dialog::Notification::new("Test", "Test notification.");
// optional *dismiss actions*
note.push_action("action-1", "Action 1");
note.push_action("action-2", "Action 2");
// optional system cleanup timeout suggestion.
note.timeout = Some(3.hours());
// as explicit var to support updates
let note = var(note);
// insert the notification
let r = DIALOG.notification(note.clone());
// set a handler in case the notification is responded.
r.on_rsp(hn!(|a| {
println!("Notification response: {:?}", a.value);
}))
.perm();
// await for an explicit response up to 10 minutes.
task::with_deadline(r.wait_done(), 10.minutes()).await;
if r.is_waiting() {
// update the notification with a close request.
note.set(dialog::Notification::close());
}The example above inserts a notification with two dismiss actions and sets a handler in case the notification is ever responded.
Note that the notification is a variable, it can be updated and closed. Also note that care is taken to not keep awaiting for a response forever, notifications are not intrusive like other dialogs, users may never respond, the operating system may also ignore the timeout suggestion.
§Full API
See zng_wgt_dialog for the full view API.
Modules§
- backdrop
- Modal dialog parent widget that fills the window.
Structs§
- AskStyle
WQuestion style.- Confirm
Style WConfirmation style.- DIALOG
- Dialog service.
- Default
Style WDialog default style.- Dialog
WA modal dialog overlay container.- Dialog
Button Args - Arguments for
button_fn. - Dialog
Kind - Dialog kind options.
- Error
Style WDialog error style.- File
Dialog Filters - File dialog filters builder.
- Info
Style WDialog info style.- Notification
- Defines a local notification item.
- Notification
Action - Define a response of a
Notification. - Response
- Dialog response.
- Responses
- Response labels.
- Warn
Style WDialog warn style.
Enums§
- File
Dialog Response - Response to a message dialog.
- Notification
Response - Response to a notification dialog.
Functions§
- ask_
style_ fn PExtends or replaces theAskStyle!.- confirm_
style_ fn PExtends or replaces theConfirmStyle!.- error_
style_ fn PExtends or replaces theErrorStyle!.- info_
style_ fn PExtends or replaces theInfoStyle!.- native_
dialogs PDefines what native dialogs are used by dialogs opened on the context.- warn_
style_ fn PExtends or replaces theWarnStyle!.