Refine code
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
using System.Reflection;
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using Shadowsocks.View;
|
||||
|
||||
namespace Shadowsocks.Controller.Hotkeys
|
||||
{
|
||||
public class HotkeyCallbacks
|
||||
{
|
||||
public static HotkeyCallbacks Instance { get; private set; }
|
||||
|
||||
public static void InitInstance(ShadowsocksController controller)
|
||||
{
|
||||
@@ -17,6 +17,23 @@ namespace Shadowsocks.Controller.Hotkeys
|
||||
Instance = new HotkeyCallbacks(controller);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create hotkey callback handler delegate based on callback name
|
||||
/// </summary>
|
||||
/// <param name="methodname"></param>
|
||||
/// <returns></returns>
|
||||
public static Delegate GetCallback(string methodname)
|
||||
{
|
||||
if (methodname.IsNullOrEmpty()) throw new ArgumentException(nameof(methodname));
|
||||
MethodInfo dynMethod = typeof(HotkeyCallbacks).GetMethod(methodname,
|
||||
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.IgnoreCase);
|
||||
return dynMethod == null ? null : Delegate.CreateDelegate(typeof(HotKeys.HotKeyCallBackHandler), Instance, dynMethod);
|
||||
}
|
||||
|
||||
#region Singleton
|
||||
|
||||
private static HotkeyCallbacks Instance { get; set; }
|
||||
|
||||
private readonly ShadowsocksController _controller;
|
||||
|
||||
private HotkeyCallbacks(ShadowsocksController controller)
|
||||
@@ -24,6 +41,8 @@ namespace Shadowsocks.Controller.Hotkeys
|
||||
_controller = controller;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Callbacks
|
||||
|
||||
private void SwitchSystemProxyCallback()
|
||||
|
||||
@@ -82,7 +82,7 @@ namespace Shadowsocks
|
||||
#endif
|
||||
_controller = new ShadowsocksController();
|
||||
_viewController = new MenuViewController(_controller);
|
||||
HotKeys.Init();
|
||||
HotKeys.Init(_controller);
|
||||
_controller.Start();
|
||||
Application.Run();
|
||||
}
|
||||
|
||||
@@ -270,7 +270,7 @@ namespace Shadowsocks.View
|
||||
var labelName = rawName + "Label";
|
||||
var callbackName = rawName + "Callback";
|
||||
|
||||
var callback = GetDelegateViaMethodName(callbackName);
|
||||
var callback = HotkeyCallbacks.GetCallback(callbackName);
|
||||
if (callback == null)
|
||||
{
|
||||
throw new Exception($"{callbackName} not found");
|
||||
@@ -302,20 +302,6 @@ namespace Shadowsocks.View
|
||||
return fi == null ? null : fi.GetValue(obj);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create hotkey callback handler delegate based on callback name
|
||||
/// </summary>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="methodname"></param>
|
||||
/// <returns></returns>
|
||||
private Delegate GetDelegateViaMethodName(string methodname)
|
||||
{
|
||||
if (methodname.IsNullOrEmpty()) throw new ArgumentException(nameof(methodname));
|
||||
MethodInfo dynMethod = typeof(HotkeyCallbacks).GetMethod(methodname,
|
||||
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.IgnoreCase);
|
||||
return dynMethod == null ? null : Delegate.CreateDelegate(typeof(HotKeys.HotKeyCallBackHandler), HotkeyCallbacks.Instance, dynMethod);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user