-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain.rs
108 lines (89 loc) · 3.15 KB
/
main.rs
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
#![allow(unused_imports, unused_variables, dead_code, unused_mut)]
mod cmd;
mod engine;
mod ipc;
mod menu;
mod project;
use crate::menu::handle_menu_event;
use crate::project::ProjectManager;
use env_logger::Env;
use log::info;
use std::sync::Arc;
use tauri::{AboutMetadata, CustomMenuItem, Menu, MenuItem, Submenu, Wry};
#[tokio::main]
async fn main() {
env_logger::init_from_env(Env::default().default_filter_or("debug"));
info!("initializing typstudio");
let project_manager = Arc::new(ProjectManager::<Wry>::new());
if let Ok(watcher) = ProjectManager::init_watcher(project_manager.clone()) {
project_manager.set_watcher(watcher);
}
tauri::Builder::default()
// .menu(build_menu())
// .on_menu_event(handle_menu_event)
.manage(project_manager)
.invoke_handler(tauri::generate_handler![
cmd::greet,
ipc::commands::fs_list_dir,
ipc::commands::fs_read_file_binary,
ipc::commands::fs_read_file_text,
ipc::commands::fs_create_file,
ipc::commands::fs_write_file_binary,
ipc::commands::fs_write_file_text,
ipc::commands::load_project_from_path,
ipc::commands::typst_compile_doc,
ipc::commands::typst_render,
ipc::commands::typst_autocomplete,
ipc::commands::typst_slot_update,
ipc::commands::export_pdf,
ipc::commands::clipboard_paste
])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
fn build_menu() -> Menu {
let application_menu = Submenu::new(
"typster",
Menu::new()
.add_native_item(MenuItem::About(
String::from("typster"),
AboutMetadata::new(),
))
.add_native_item(MenuItem::Separator)
.add_native_item(MenuItem::Hide)
.add_native_item(MenuItem::HideOthers)
.add_native_item(MenuItem::ShowAll)
.add_native_item(MenuItem::Separator)
.add_native_item(MenuItem::Quit),
);
let mut file_menu = Menu::new()
.add_item(
CustomMenuItem::new("file_open_project", "Open Project"),
)
.add_submenu(Submenu::new(
"Export",
Menu::new().add_item(
CustomMenuItem::new("file_export_pdf", "Export PDF"),
),
));
#[cfg(not(target_os = "macos"))]
{
file_menu = file_menu.add_native_item(MenuItem::Quit);
}
let file_submenu = Submenu::new("File", file_menu);
let edit_submenu = Submenu::new("Edit", Menu::new());
let view_submenu = Submenu::new(
"View",
Menu::new().add_item(CustomMenuItem::new("view_toggle_preview", "Toggle Preview")),
);
let mut menu = Menu::new();
#[cfg(target_os = "macos")]
{
menu = menu.add_submenu(application_menu)
}
menu.add_submenu(file_submenu)
.add_submenu(edit_submenu)
.add_submenu(view_submenu)
}