[feat] tray powerplan items and seperators

This commit is contained in:
Purp1e
2025-03-27 00:58:18 +08:00
parent 27439593b4
commit 21cdc7c32d
6 changed files with 162 additions and 86 deletions

View File

@@ -1,31 +1,126 @@
use tauri::{
menu::{Menu, MenuItem},
menu::{CheckMenuItem, Menu, MenuItem, PredefinedMenuItem},
tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent},
Emitter, Manager, Runtime,
Emitter, Listener, Manager, Runtime,
};
use crate::tool::powerplan::PowerPlanMode;
pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
// 托盘菜单项目
let launch_ww_i = MenuItem::with_id(app, "launch_ww", "启动国际服", true, None::<&str>)?;
let launch_pw_i = MenuItem::with_id(app, "launch_pw", "启动国服", true, None::<&str>)?;
let kill_game_i = MenuItem::with_id(app, "kill_game", "关闭CS2", true, None::<&str>)?;
let kill_steam_i = MenuItem::with_id(app, "kill_steam", "关闭Steam", true, None::<&str>)?;
let show_i = MenuItem::with_id(app, "show", "显示主界面", true, None::<&str>)?;
let quit_i = MenuItem::with_id(app, "quit", "退出", true, None::<&str>)?;
let separator = &PredefinedMenuItem::separator(app).unwrap();
let show_i = &MenuItem::with_id(app, "show", "显示主界面", true, None::<&str>)?;
let quit_i = &MenuItem::with_id(app, "quit", "退出", true, None::<&str>)?;
let kill_game_i = &MenuItem::with_id(app, "kill_game", "关闭CS2", true, None::<&str>)?;
let kill_steam_i = &MenuItem::with_id(app, "kill_steam", "关闭Steam", true, None::<&str>)?;
let launch_ww_i = &MenuItem::with_id(app, "launch_ww", "启动国际服", true, None::<&str>)?;
let launch_pw_i = &MenuItem::with_id(app, "launch_pw", "启动国服", true, None::<&str>)?;
let power_plan_extreme = CheckMenuItem::with_id(
app,
"power_plan_extreme",
"卓越性能",
true,
false,
None::<&str>,
)?;
let power_plan_high =
CheckMenuItem::with_id(app, "power_plan_high", "高性能", true, false, None::<&str>)?;
let power_plan_balanced = CheckMenuItem::with_id(
app,
"power_plan_balanced",
"平衡",
true,
false,
None::<&str>,
)?;
let power_plan_powersave = CheckMenuItem::with_id(
app,
"power_plan_powersave",
"节能",
true,
false,
None::<&str>,
)?;
let current_launch_option = MenuItem::with_id(
app,
"current_launch_option",
"启动项档位",
true,
None::<&str>,
)?;
// 创建托盘菜单
let menu = Menu::with_items(
app,
&[
&launch_ww_i,
&launch_pw_i,
&kill_game_i,
&kill_steam_i,
&show_i,
&quit_i,
&power_plan_extreme,
&power_plan_high,
&power_plan_balanced,
&power_plan_powersave,
separator,
&current_launch_option,
launch_ww_i,
launch_pw_i,
separator,
kill_game_i,
kill_steam_i,
separator,
show_i,
quit_i,
],
)?;
let _ = app.listen("tray://get_powerplan", move |event| {
if let Ok(payload) = event.payload().parse::<i32>() {
match payload {
x if x == PowerPlanMode::Other as i32 => {
let _ = power_plan_powersave.set_checked(false);
let _ = power_plan_balanced.set_checked(false);
let _ = power_plan_high.set_checked(false);
let _ = power_plan_extreme.set_checked(false);
}
x if x == PowerPlanMode::PowerSaving as i32 => {
let _ = power_plan_powersave.set_checked(true);
let _ = power_plan_balanced.set_checked(false);
let _ = power_plan_high.set_checked(false);
let _ = power_plan_extreme.set_checked(false);
}
x if x == PowerPlanMode::Balanced as i32 => {
let _ = power_plan_powersave.set_checked(false);
let _ = power_plan_balanced.set_checked(true);
let _ = power_plan_high.set_checked(false);
let _ = power_plan_extreme.set_checked(false);
}
x if x == PowerPlanMode::HighPerformance as i32 => {
let _ = power_plan_powersave.set_checked(false);
let _ = power_plan_balanced.set_checked(false);
let _ = power_plan_high.set_checked(true);
let _ = power_plan_extreme.set_checked(false);
}
x if x == PowerPlanMode::Extreme as i32 => {
let _ = power_plan_powersave.set_checked(false);
let _ = power_plan_balanced.set_checked(false);
let _ = power_plan_high.set_checked(false);
let _ = power_plan_extreme.set_checked(true);
}
_ => {}
}
}
});
let _ = app.listen("tray://get_current_launch_option", move |event| {
let payload = event.payload();
if payload != "" {
let _ = current_launch_option.set_text("启动项档位 ".to_string() + payload);
}
});
let _ = TrayIconBuilder::with_id("tray")
.icon(app.default_window_icon().unwrap().clone())
.menu(&menu)
@@ -52,7 +147,25 @@ pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
"kill_steam" => {
let _ = app.emit("tray://kill_steam", None::<()>);
}
// Add more events here
"power_plan_extreme" => {
let _ = app.emit("tray://set_powerplan", PowerPlanMode::Extreme as i32);
// let _ = power_plan_extreme.set_checked(true);
}
"power_plan_high" => {
let _ = app.emit(
"tray://set_powerplan",
PowerPlanMode::HighPerformance as i32,
);
// let _ = power_plan_high.set_checked(true);
}
"power_plan_balanced" => {
let _ = app.emit("tray://set_powerplan", PowerPlanMode::Balanced as i32);
// let _ = power_plan_balanced.set_checked(true);
}
"power_plan_powersave" => {
let _ = app.emit("tray://set_powerplan", PowerPlanMode::PowerSaving as i32);
// let _ = power_plan_powersave.set_checked(true);
}
_ => {}
})
.on_tray_icon_event(|tray, event| {
@@ -73,68 +186,3 @@ pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
Ok(())
}
// Tray Menu
// let quit = CustomMenuItem::new("quit".to_string(), "Quit");
// let hide = CustomMenuItem::new("hide".to_string(), "Hide");
// let tray_menu = SystemTrayMenu::new() // insert the menu items here
// .add_item(hide)
// .add_item(quit);
// .add_native_item(SystemTrayMenuItem::Separator)
// let toggle = MenuItemBuilder::with_id("toggle", "Toggle").build(app)?;
// let menu = MenuBuilder::new(app).items(&[&toggle]).build()?;
// Setup Tray
// let tray = tauri::tray::TrayIconBuilder::with_id("my-tray").build(app)?;
// let _ = TrayIconBuilder::new()
// .menu(&menu)
// .on_menu_event(move |_, event| {
// match event.id().as_ref() {
// "toggle" => {
// println!("toggle clicked");
// }
// _ => (),
// }
// // match event {
// // SystemTrayEvent::LeftClick { position: _, size: _, .. } => {
// // let window = app.get_window("main").unwrap();
// // window.show().unwrap();
// // window.set_focus().unwrap();
// // // thread::sleep(Duration::from_millis(100));
// // // window.set_always_on_top(false).unwrap();
// // println!("system tray received a left click");
// // }
// // SystemTrayEvent::RightClick { position: _, size: _, .. } => {
// // // let window = app.get_window("main").unwrap();
// // // window.hide().unwrap();
// // println!("system tray received a right click");
// // }
// // SystemTrayEvent::DoubleClick { position: _, size: _, .. } => {
// // println!("system tray received a double click");
// // }
// // SystemTrayEvent::MenuItemClick { id, .. } =>
// // match id.as_str() {
// // "quit" => {
// // std::process::exit(0);
// // }
// // "hide" => {
// // let window = app.get_window("main").unwrap();
// // window.hide().unwrap();
// // }
// // _ => {}
// // }
// // _ => {}
// // }
// })
// .on_tray_icon_event(|tray, event| {
// if event.click_type == ClickType::Left {
// let app = tray.app_handle();
// if let Some(webview_window) = app.get_webview_window("main") {
// let _ = webview_window.show();
// let _ = webview_window.set_focus();
// }
// }
// })
// .build(app)
// .unwrap();