mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-17 18:01:26 +08:00
Merge pull request #1194 from BombaxCeiba/TrayIconImpl
任务栏图标支持 开始长草 和 全部停止
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
using System.Windows.Threading;
|
||||
@@ -21,20 +22,22 @@ namespace MeoAsstGui
|
||||
public class Bootstrapper : Bootstrapper<RootViewModel>
|
||||
{
|
||||
private static TrayIcon _trayIconInSettingsViewModel;
|
||||
private static bool _isTrayIconInSettingsViewModelSet = false;
|
||||
public static void SetTrayIconInSettingsViewModel(TrayIcon trayIcon)
|
||||
|
||||
private static readonly FieldInfo _settingsViewModelIContainerFiled =
|
||||
typeof(SettingsViewModel).GetField("_container", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
/// <summary>
|
||||
/// 应当只能是SettingsViewModel在构造时调用这个函数。用反射拿_container只是为了不额外修改SettingsViewModel的定义,
|
||||
/// 并顺便检查传入的SettingsViewModel中的_container不为空(即不是随便new出来的一个SettingsViewModel)
|
||||
/// </summary>
|
||||
/// <param name="settingsViewModel">SettingsViewModel的this</param>
|
||||
internal static void SetTrayIconInSettingsViewModel(SettingsViewModel settingsViewModel)
|
||||
{
|
||||
if (!_isTrayIconInSettingsViewModelSet)
|
||||
var container = (IContainer)_settingsViewModelIContainerFiled.GetValue(settingsViewModel);
|
||||
if (container != null)
|
||||
{
|
||||
_trayIconInSettingsViewModel = trayIcon;
|
||||
_isTrayIconInSettingsViewModelSet = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 什么,SettingsViewModel会重复初始化。我相信后人的智慧。
|
||||
throw new System.InvalidOperationException(
|
||||
"不可重复对源自SettingsViewModel的trayIcon引用赋值,它会在SettingsViewModel初始化时被初始化。");
|
||||
_trayIconInSettingsViewModel = container.Get<TrayIcon>();
|
||||
}
|
||||
//TODO:出现不符合要求的settingsViewModel应当Log一下,等一个有缘人
|
||||
}
|
||||
|
||||
// 初始化些啥自己加
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace MeoAsstGui
|
||||
public partial class TrayIcon
|
||||
{
|
||||
private NotifyIcon notifyIcon = new NotifyIcon();
|
||||
private TaskQueueViewModel taskQueueViewModel;
|
||||
private WindowState ws; //记录窗体状态
|
||||
private bool _isMinimizeToTaskbar = false;
|
||||
|
||||
@@ -41,15 +42,23 @@ namespace MeoAsstGui
|
||||
MenuItem showMenu = new System.Windows.Forms.MenuItem("打开 MAA");
|
||||
showMenu.Click += App_show;
|
||||
// 不知道怎么调用 TaskQueue.LinkStart, 等一个有缘的大佬来写(
|
||||
//MenuItem startMenu = new System.Windows.Forms.MenuItem("开始长草");
|
||||
//startMenu.Click += StartTask;
|
||||
//MenuItem stopMenu = new System.Windows.Forms.MenuItem("全部停止");
|
||||
//stopMenu.Click += StopTask;
|
||||
MenuItem startMenu = new System.Windows.Forms.MenuItem("开始长草");
|
||||
startMenu.Click += StartTask;
|
||||
MenuItem stopMenu = new System.Windows.Forms.MenuItem("全部停止");
|
||||
stopMenu.Click += StopTask;
|
||||
MenuItem exitMenu = new System.Windows.Forms.MenuItem("退出");
|
||||
exitMenu.Click += App_exit;
|
||||
System.Windows.Forms.MenuItem[] menuItems = new MenuItem[] { showMenu, exitMenu };
|
||||
System.Windows.Forms.MenuItem[] menuItems = new MenuItem[] { showMenu, startMenu, stopMenu, exitMenu };
|
||||
this.notifyIcon.ContextMenu = new System.Windows.Forms.ContextMenu(menuItems);
|
||||
}
|
||||
/// <summary>
|
||||
/// 只应该在TaskQueueViewModel的构造函数中调用这个函数,不要传入一个随便new出来的TaskQueueViewModel
|
||||
/// </summary>
|
||||
/// <param name="taskQueueViewModel">一个 不是 随便new出来的TaskQueueViewModel</param>
|
||||
public void SetTaskQueueViewModel(TaskQueueViewModel taskQueueViewModel)
|
||||
{
|
||||
this.taskQueueViewModel = taskQueueViewModel;
|
||||
}
|
||||
|
||||
private void MainWindow_StateChanged(object sender, EventArgs e)
|
||||
{
|
||||
@@ -83,15 +92,16 @@ namespace MeoAsstGui
|
||||
}
|
||||
}
|
||||
|
||||
//private void StartTask(object sender, EventArgs e)
|
||||
//{
|
||||
// 不知道怎么调用 TaskQueue.LinkStart, 等一个有缘的大佬来写(
|
||||
//}
|
||||
private void StartTask(object sender, EventArgs e)
|
||||
{
|
||||
//taskQueueViewModel意外为null了是不是也可以考虑Log一下
|
||||
taskQueueViewModel?.LinkStart();
|
||||
}
|
||||
|
||||
//private void StopTask(object sender, EventArgs e)
|
||||
//{
|
||||
// 不知道怎么调用 TaskQueue.Stop, 等一个有缘的大佬来写(
|
||||
//}
|
||||
private void StopTask(object sender, EventArgs e)
|
||||
{
|
||||
taskQueueViewModel?.Stop();
|
||||
}
|
||||
|
||||
private void App_exit(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace MeoAsstGui
|
||||
var trayObj = _container.Get<TrayIcon>();
|
||||
trayObj.SetVisible(UseTray);
|
||||
trayObj.SetMinimizeToTaskbar(MinimizeToTray);
|
||||
Bootstrapper.SetTrayIconInSettingsViewModel(trayObj);
|
||||
Bootstrapper.SetTrayIconInSettingsViewModel(this);
|
||||
}
|
||||
|
||||
private List<string> _listTitle = new List<string>();
|
||||
|
||||
@@ -66,6 +66,8 @@ namespace MeoAsstGui
|
||||
LogItemViewModels = new ObservableCollection<LogItemViewModel>();
|
||||
InitializeItems();
|
||||
InitTimer();
|
||||
var trayIcon = _container.Get<TrayIcon>();
|
||||
trayIcon.SetTaskQueueViewModel(this);
|
||||
}
|
||||
|
||||
//public void ShowButton()
|
||||
|
||||
Reference in New Issue
Block a user