Skip to content

Commit

Permalink
improve menu (#69)
Browse files Browse the repository at this point in the history
* improve menu

* fmt

* fmt
  • Loading branch information
JonasKruckenberg committed Feb 3, 2023
1 parent 3db979e commit 9232366
Show file tree
Hide file tree
Showing 4 changed files with 132 additions and 11 deletions.
5 changes: 5 additions & 0 deletions .changes/better-menu.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"elk-native": minor
---

Added menu items to open Privacy Policy and License.
10 changes: 2 additions & 8 deletions src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,12 @@ edition = "2021"
rust-version = "1.59"

[build-dependencies]
tauri-build = { version = "1.2.1", features = [ ] }
tauri-build = { version = "1.2.1", features = [] }

[dependencies]
serde_json = "1.0"
serde = { version = "1.0", features = [ "derive" ] }
tauri = { version = "1.2.4", features = [
"shell-open",
"updater",
"window-maximize",
"window-start-dragging",
"window-unmaximize"
] }
tauri = { version = "1.2.4", features = ["shell-open", "updater", "window-maximize", "window-start-dragging", "window-unmaximize"] }
tauri-plugin-log = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "dev", features = [ "colored" ] }
tauri-plugin-store = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "dev" }
tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "dev" }
Expand Down
12 changes: 9 additions & 3 deletions src-tauri/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
windows_subsystem = "windows"
)]

mod menu;

use env_logger::filter::Builder as FilterBuilder;
use log::LevelFilter;
use tauri::Menu;
#[cfg(debug_assertions)]
use tauri_plugin_log::fern::colors::ColoredLevelConfig;
use tauri_plugin_log::{Builder as LogPluginBuilder, LogTarget};
Expand Down Expand Up @@ -35,8 +36,13 @@ fn main() {
tauri::Builder::default()
.plugin(log_plugin)
.plugin(StorePluginBuilder::default().build())
.plugin(WindowStateBuilder::default().with_state_flags(StateFlags::SIZE | StateFlags::POSITION | StateFlags::MAXIMIZED).build())
.menu(Menu::os_default("Elk"))
.plugin(
WindowStateBuilder::default()
.with_state_flags(StateFlags::SIZE | StateFlags::POSITION | StateFlags::MAXIMIZED)
.build(),
)
.menu(menu::init("Elk"))
.on_menu_event(menu::handle_menu_event)
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
116 changes: 116 additions & 0 deletions src-tauri/src/menu.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
use tauri::{api::shell::open, CustomMenuItem, Manager, Menu, Runtime, Submenu, WindowMenuEvent};

const ELK_NATIVE_LICENSE: &str = "https://github.com/elk-zone/elk-native/blob/main/LICENSE";
const ELK_PRIVACY_POLICY_URL: &str = "https://docs.elk.zone/docs/privacy/";

#[cfg(target_os = "windows")]
pub fn init(app_name: &str) -> Menu {
use tauri::MenuItem;

let file_menu = Menu::new()
.add_native_item(MenuItem::CloseWindow)
.add_native_item(MenuItem::Quit);

let edit_menu = Menu::new()
.add_native_item(MenuItem::Cut)
.add_native_item(MenuItem::Copy)
.add_native_item(MenuItem::Paste);

let window_menu = Menu::new()
.add_native_item(MenuItem::Minimize)
.add_native_item(MenuItem::CloseWindow);

let help_menu = Menu::new()
.add_item(CustomMenuItem::new("open-license", "View License"))
.add_item(CustomMenuItem::new("open-privacy-policy", "Privacy Policy"));

Menu::new()
.add_submenu(Submenu::new("File", file_menu))
.add_submenu(Submenu::new("Edit", edit_menu))
.add_submenu(Submenu::new("Window", window_menu))
.add_submenu(Submenu::new("Help", help_menu))
}

#[cfg(target_os = "linux")]
pub fn init(app_name: &str) -> Menu {
use tauri::MenuItem;

let file_menu = Menu::new()
.add_native_item(MenuItem::CloseWindow)
.add_native_item(MenuItem::Quit);

let window_menu = Menu::new()
.add_native_item(MenuItem::Minimize)
.add_native_item(MenuItem::CloseWindow);

let help_menu = Menu::new()
.add_item(CustomMenuItem::new("open-license", "View License"))
.add_item(CustomMenuItem::new("open-privacy-policy", "Privacy Policy"));

Menu::new()
.add_submenu(Submenu::new("File", file_menu))
.add_submenu(Submenu::new("Window", window_menu))
.add_submenu(Submenu::new("Help", help_menu))
}

#[cfg(target_os = "macos")]
pub fn init(app_name: &str) -> Menu {
use tauri::{AboutMetadata, MenuItem};

let app_menu = 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 file_menu = Menu::new().add_native_item(MenuItem::CloseWindow);

let edit_menu = Menu::new()
.add_native_item(MenuItem::Undo)
.add_native_item(MenuItem::Redo)
.add_native_item(MenuItem::Separator)
.add_native_item(MenuItem::Cut)
.add_native_item(MenuItem::Copy)
.add_native_item(MenuItem::Paste)
.add_native_item(MenuItem::SelectAll);

let view_menu = Menu::new().add_native_item(MenuItem::EnterFullScreen);

let window_menu = Menu::new()
.add_native_item(MenuItem::Minimize)
.add_native_item(MenuItem::Zoom)
.add_native_item(MenuItem::Separator)
.add_native_item(MenuItem::CloseWindow);

let help_menu = Menu::new()
.add_item(CustomMenuItem::new("open-license", "View License"))
.add_item(CustomMenuItem::new("open-privacy-policy", "Privacy Policy"));

Menu::new()
.add_submenu(Submenu::new(app_name, app_menu))
.add_submenu(Submenu::new("File", file_menu))
.add_submenu(Submenu::new("Edit", edit_menu))
.add_submenu(Submenu::new("View", view_menu))
.add_submenu(Submenu::new("Window", window_menu))
.add_submenu(Submenu::new("Help", help_menu))
}

pub fn handle_menu_event<R: Runtime>(event: WindowMenuEvent<R>) {
match event.menu_item_id() {
"open-license" => {
open(&event.window().shell_scope(), ELK_NATIVE_LICENSE, None).unwrap();
}
"open-privacy-policy" => {
open(&event.window().shell_scope(), ELK_PRIVACY_POLICY_URL, None).unwrap();
}
_ => {}
}
}

0 comments on commit 9232366

Please sign in to comment.