1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
pub mod file;
mod help;
mod setting;
mod test;

use tauri::{
    api::dialog::{MessageDialogButtons, MessageDialogKind},
    Menu,
    WindowMenuEvent,
};

pub fn display_dialog(
    kind: MessageDialogKind,
    buttons: MessageDialogButtons,
    title: &str,
    msg: &str,
    handler: impl Fn(bool) + Send + 'static,
) {
    let dialog = tauri::api::dialog::MessageDialogBuilder::new(title, msg)
        .kind(kind)
        .buttons(buttons);
    dialog.show(handler);
}

#[macro_export]
macro_rules! create_menu {
    ($($module:ident),*) => {
        pub fn init_menu() -> Menu {
            Menu::with_items([
                $(  $module::new().into(), )*
            ])
        }

        pub fn event_handler(event: WindowMenuEvent) {
            $(
                if event.menu_item_id().starts_with(stringify!($module)) {
                    $module::event_handler(event);
                    return;
                }
            )+
                else {
                    println!("unknown menu event: {:?}", event.menu_item_id());
                }
        }
    };
}

create_menu!(file, setting, help);