1use std::ffi::CString;
4
5#[repr(C)]
6pub enum DialogStyle {
7 Info,
8 Warning,
9 Error,
10 Question,
11}
12
13#[repr(C)]
14pub enum DialogButtons {
15 Ok,
16 OkCancel,
17 YesNo,
18 Quit,
19}
20
21#[repr(C)]
22#[derive(PartialEq)]
23pub enum DialogSelection {
24 Ok,
25 Cancel,
26 Yes,
27 No,
28 Quit,
29 None,
30 Error,
31}
32
33mod ffi {
34 use crate::{DialogButtons, DialogSelection, DialogStyle};
35 use std::os::raw::*;
36
37 extern "C" {
38 pub fn boxerShow(
39 message: *const c_char,
40 title: *const c_char,
41 style: DialogStyle,
42 buttons: DialogButtons,
43 ) -> DialogSelection;
44 }
45}
46
47pub fn show_dialog(
48 message: &str,
49 title: &str,
50 style: DialogStyle,
51 buttons: DialogButtons,
52) -> DialogSelection {
53 let c_message = CString::new(message).expect("No nul bytes in parameter message");
54 let c_title = CString::new(title).expect("No nul bytes in parameter title");
55 unsafe { ffi::boxerShow(c_message.as_ptr(), c_title.as_ptr(), style, buttons) }
56}