From ff6969d41cf546cd41ebb4b453e32bfb8a02e4a0 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Thu, 2 Nov 2023 21:41:35 -0700 Subject: [PATCH] Rearrange menus --- src-tauri/src/main.rs | 72 ++++++------------------- src-tauri/src/menu.rs | 119 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+), 55 deletions(-) create mode 100644 src-tauri/src/menu.rs diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index a4ae88ca..528450fb 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -24,12 +24,13 @@ use std::io::Write; use std::process::exit; #[cfg(target_os = "macos")] use tauri::TitleBarStyle; -use tauri::{AppHandle, Menu, MenuItem, RunEvent, State, Submenu, Window, WindowUrl, Wry}; +use tauri::{AppHandle, Menu, RunEvent, State, Submenu, Window, WindowUrl, Wry}; use tauri::{CustomMenuItem, Manager, WindowEvent}; use tauri_plugin_window_state::{StateFlags, WindowExt}; use tokio::sync::Mutex; use window_ext::TrafficLightWindowExt; +mod menu; mod models; mod plugin; mod render; @@ -750,70 +751,31 @@ fn is_dev() -> bool { } fn create_window(handle: &AppHandle, url: Option<&str>) -> Window { - let default_menu = Menu::os_default("Yaak".to_string().as_str()); - let mut test_menu = Menu::new() - .add_item( - CustomMenuItem::new("send_request".to_string(), "Send Request") - .accelerator("CmdOrCtrl+r"), - ) - .add_item( - CustomMenuItem::new("zoom_reset".to_string(), "Zoom to Actual Size") - .accelerator("CmdOrCtrl+0"), - ) - .add_item( - CustomMenuItem::new("zoom_in".to_string(), "Zoom In").accelerator("CmdOrCtrl+Plus"), - ) - .add_item( - CustomMenuItem::new("zoom_out".to_string(), "Zoom Out").accelerator("CmdOrCtrl+-"), - ) - .add_item( - CustomMenuItem::new("toggle_sidebar".to_string(), "Toggle Sidebar") - .accelerator("CmdOrCtrl+b"), - ) - .add_item( - CustomMenuItem::new("focus_url".to_string(), "Focus URL").accelerator("CmdOrCtrl+l"), - ) - .add_item( - CustomMenuItem::new("new_request".to_string(), "New Request") - .accelerator("CmdOrCtrl+n"), - ) - .add_item( - CustomMenuItem::new("toggle_settings".to_string(), "Toggle Settings") - .accelerator("CmdOrCtrl+,"), - ) - .add_item( - CustomMenuItem::new("duplicate_request".to_string(), "Duplicate Request") - .accelerator("CmdOrCtrl+d"), - ) - .add_item( - CustomMenuItem::new("focus_sidebar".to_string(), "Focus Sidebar") - .accelerator("CmdOrCtrl+1"), - ) - .add_item(CustomMenuItem::new("new_window".to_string(), "New Window")); + let mut app_menu = menu::os_default("Yaak".to_string().as_str()); if is_dev() { - test_menu = test_menu - .add_native_item(MenuItem::Separator) - .add_item( - CustomMenuItem::new("refresh".to_string(), "Refresh") - .accelerator("CmdOrCtrl + Shift + r"), - ) - .add_item( - CustomMenuItem::new("toggle_devtools".to_string(), "Open Devtools") - .accelerator("CmdOrCtrl + Option + i"), - ); + let submenu = Submenu::new( + "Developer", + Menu::new() + .add_item( + CustomMenuItem::new("refresh".to_string(), "Refresh") + .accelerator("CmdOrCtrl + Shift + r"), + ) + .add_item( + CustomMenuItem::new("toggle_devtools".to_string(), "Open Devtools") + .accelerator("CmdOrCtrl + Option + i"), + ), + ); + app_menu = app_menu.add_submenu(submenu); } - let submenu = Submenu::new("Test Menu", test_menu); - let window_num = handle.windows().len(); let window_id = format!("wnd_{}", window_num); - let menu = default_menu.add_submenu(submenu); let mut win_builder = tauri::WindowBuilder::new( handle, window_id, WindowUrl::App(url.unwrap_or_default().into()), ) - .menu(menu) + .menu(app_menu) .fullscreen(false) .resizable(true) .inner_size(1100.0, 600.0) diff --git a/src-tauri/src/menu.rs b/src-tauri/src/menu.rs new file mode 100644 index 00000000..e56a1213 --- /dev/null +++ b/src-tauri/src/menu.rs @@ -0,0 +1,119 @@ +use tauri::{AboutMetadata, CustomMenuItem, Menu, MenuItem, Submenu}; + +pub fn os_default(#[allow(unused)] app_name: &str) -> Menu { + let mut menu = Menu::new(); + #[cfg(target_os = "macos")] + { + menu = menu.add_submenu(Submenu::new( + app_name, + Menu::new() + .add_native_item(MenuItem::About( + app_name.to_string(), + AboutMetadata::default(), + )) + .add_native_item(MenuItem::Separator) + .add_native_item(MenuItem::Services) + .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(); + file_menu = file_menu.add_native_item(MenuItem::CloseWindow); + #[cfg(not(target_os = "macos"))] + { + file_menu = file_menu.add_native_item(MenuItem::Quit); + } + menu = menu.add_submenu(Submenu::new("File", file_menu)); + + #[cfg(not(target_os = "linux"))] + let mut edit_menu = Menu::new(); + #[cfg(target_os = "macos")] + { + edit_menu = edit_menu.add_native_item(MenuItem::Undo); + edit_menu = edit_menu.add_native_item(MenuItem::Redo); + edit_menu = edit_menu.add_native_item(MenuItem::Separator); + } + #[cfg(not(target_os = "linux"))] + { + edit_menu = edit_menu.add_native_item(MenuItem::Cut); + edit_menu = edit_menu.add_native_item(MenuItem::Copy); + edit_menu = edit_menu.add_native_item(MenuItem::Paste); + } + #[cfg(target_os = "macos")] + { + edit_menu = edit_menu.add_native_item(MenuItem::SelectAll); + } + #[cfg(not(target_os = "linux"))] + { + menu = menu.add_submenu(Submenu::new("Edit", edit_menu)); + } + let mut view_menu = Menu::new(); + #[cfg(target_os = "macos")] + { + view_menu = view_menu + .add_native_item(MenuItem::EnterFullScreen) + .add_native_item(MenuItem::Separator); + } + view_menu = view_menu + .add_item( + CustomMenuItem::new("zoom_reset".to_string(), "Zoom to Actual Size") + .accelerator("CmdOrCtrl+0"), + ) + .add_item( + CustomMenuItem::new("zoom_in".to_string(), "Zoom In").accelerator("CmdOrCtrl+Plus"), + ) + .add_item( + CustomMenuItem::new("zoom_out".to_string(), "Zoom Out").accelerator("CmdOrCtrl+-"), + ) + .add_native_item(MenuItem::Separator) + .add_item( + CustomMenuItem::new("toggle_sidebar".to_string(), "Toggle Sidebar") + .accelerator("CmdOrCtrl+b"), + ) + .add_item( + CustomMenuItem::new("focus_sidebar".to_string(), "Focus Sidebar") + .accelerator("CmdOrCtrl+1"), + ) + .add_item( + CustomMenuItem::new("toggle_settings".to_string(), "Toggle Settings") + .accelerator("CmdOrCtrl+,"), + ) + .add_item( + CustomMenuItem::new("focus_url".to_string(), "Focus URL").accelerator("CmdOrCtrl+l"), + ); + menu = menu.add_submenu(Submenu::new("View", view_menu)); + + let mut window_menu = Menu::new(); + window_menu = window_menu.add_native_item(MenuItem::Minimize); + #[cfg(target_os = "macos")] + { + window_menu = window_menu.add_native_item(MenuItem::Zoom); + window_menu = window_menu.add_native_item(MenuItem::Separator); + } + window_menu = window_menu.add_native_item(MenuItem::CloseWindow); + menu = menu.add_submenu(Submenu::new("Window", window_menu)); + + menu = menu.add_submenu(Submenu::new( + "Workspace", + Menu::new() + .add_item( + CustomMenuItem::new("send_request".to_string(), "Send Request") + .accelerator("CmdOrCtrl+r"), + ) + .add_item( + CustomMenuItem::new("new_request".to_string(), "New Request") + .accelerator("CmdOrCtrl+n"), + ) + .add_item( + CustomMenuItem::new("duplicate_request".to_string(), "Duplicate Request") + .accelerator("CmdOrCtrl+d"), + ), + )); + + menu +}