Merge branch 'master' of https://github.com/shadowsocks/shadowsocks-windows.git into dev_proxy
# Conflicts: # shadowsocks-csharp/Controller/Service/TCPRelay.cs # shadowsocks-csharp/Controller/ShadowsocksController.cs # shadowsocks-csharp/View/MenuViewController.cs
This commit is contained in:
Executable → Regular
+68
-6
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using ZXing;
|
||||
@@ -25,6 +26,8 @@ namespace Shadowsocks.View
|
||||
private UpdateChecker updateChecker;
|
||||
|
||||
private NotifyIcon _notifyIcon;
|
||||
private Bitmap icon_baseBitmap;
|
||||
private Icon icon_base, icon_in, icon_out, icon_both, targetIcon;
|
||||
private ContextMenu contextMenu1;
|
||||
|
||||
private bool _isFirstRun;
|
||||
@@ -46,6 +49,7 @@ namespace Shadowsocks.View
|
||||
private MenuItem editOnlinePACItem;
|
||||
private MenuItem autoCheckUpdatesToggleItem;
|
||||
private MenuItem proxyItem;
|
||||
private MenuItem VerboseLoggingToggleItem;
|
||||
private ConfigForm configForm;
|
||||
private ProxyForm proxyForm;
|
||||
private List<LogForm> logForms = new List<LogForm>();
|
||||
@@ -63,6 +67,7 @@ namespace Shadowsocks.View
|
||||
controller.PACFileReadyToOpen += controller_FileReadyToOpen;
|
||||
controller.UserRuleFileReadyToOpen += controller_FileReadyToOpen;
|
||||
controller.ShareOverLANStatusChanged += controller_ShareOverLANStatusChanged;
|
||||
controller.VerboseLoggingStatusChanged += controller_VerboseLoggingStatusChanged;
|
||||
controller.EnableGlobalChanged += controller_EnableGlobalChanged;
|
||||
controller.Errored += controller_Errored;
|
||||
controller.UpdatePACFromGFWListCompleted += controller_UpdatePACFromGFWListCompleted;
|
||||
@@ -76,6 +81,7 @@ namespace Shadowsocks.View
|
||||
_notifyIcon.MouseClick += notifyIcon1_Click;
|
||||
_notifyIcon.MouseDoubleClick += notifyIcon1_DoubleClick;
|
||||
_notifyIcon.BalloonTipClosed += _notifyIcon_BalloonTipClosed;
|
||||
controller.TrafficChanged += controller_TrafficChanged;
|
||||
|
||||
this.updateChecker = new UpdateChecker();
|
||||
updateChecker.CheckUpdateCompleted += updateChecker_CheckUpdateCompleted;
|
||||
@@ -96,6 +102,32 @@ namespace Shadowsocks.View
|
||||
}
|
||||
}
|
||||
|
||||
private void controller_TrafficChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (icon_baseBitmap == null)
|
||||
return;
|
||||
|
||||
Icon newIcon;
|
||||
|
||||
bool hasInbound = controller.traffic.Last.inboundIncreasement > 0;
|
||||
bool hasOutbound = controller.traffic.Last.outboundIncreasement > 0;
|
||||
|
||||
if (hasInbound && hasOutbound)
|
||||
newIcon = icon_both;
|
||||
else if (hasInbound)
|
||||
newIcon = icon_in;
|
||||
else if (hasOutbound)
|
||||
newIcon = icon_out;
|
||||
else
|
||||
newIcon = icon_base;
|
||||
|
||||
if (newIcon != this.targetIcon)
|
||||
{
|
||||
this.targetIcon = newIcon;
|
||||
_notifyIcon.Icon = newIcon;
|
||||
}
|
||||
}
|
||||
|
||||
void controller_Errored(object sender, System.IO.ErrorEventArgs e)
|
||||
{
|
||||
MessageBox.Show(e.GetException().ToString(), String.Format(I18N.GetString("Shadowsocks Error: {0}"), e.GetException().Message));
|
||||
@@ -107,26 +139,32 @@ namespace Shadowsocks.View
|
||||
Graphics graphics = Graphics.FromHwnd(IntPtr.Zero);
|
||||
dpi = (int)graphics.DpiX;
|
||||
graphics.Dispose();
|
||||
Bitmap icon = null;
|
||||
icon_baseBitmap = null;
|
||||
if (dpi < 97)
|
||||
{
|
||||
// dpi = 96;
|
||||
icon = Resources.ss16;
|
||||
icon_baseBitmap = Resources.ss16;
|
||||
}
|
||||
else if (dpi < 121)
|
||||
{
|
||||
// dpi = 120;
|
||||
icon = Resources.ss20;
|
||||
icon_baseBitmap = Resources.ss20;
|
||||
}
|
||||
else
|
||||
{
|
||||
icon = Resources.ss24;
|
||||
icon_baseBitmap = Resources.ss24;
|
||||
}
|
||||
Configuration config = controller.GetConfigurationCopy();
|
||||
bool enabled = config.enabled;
|
||||
bool global = config.global;
|
||||
icon = getTrayIconByState(icon, enabled, global);
|
||||
_notifyIcon.Icon = Icon.FromHandle(icon.GetHicon());
|
||||
icon_baseBitmap = getTrayIconByState(icon_baseBitmap, enabled, global);
|
||||
|
||||
icon_base = Icon.FromHandle(icon_baseBitmap.GetHicon());
|
||||
targetIcon = icon_base;
|
||||
icon_in = Icon.FromHandle(AddBitmapOverlay(icon_baseBitmap, Resources.ssIn24).GetHicon());
|
||||
icon_out = Icon.FromHandle(AddBitmapOverlay(icon_baseBitmap, Resources.ssOut24).GetHicon());
|
||||
icon_both = Icon.FromHandle(AddBitmapOverlay(icon_baseBitmap, Resources.ssIn24, Resources.ssOut24).GetHicon());
|
||||
_notifyIcon.Icon = targetIcon;
|
||||
|
||||
string serverInfo = null;
|
||||
if (controller.GetCurrentStrategy() != null)
|
||||
@@ -179,6 +217,19 @@ namespace Shadowsocks.View
|
||||
return iconCopy;
|
||||
}
|
||||
|
||||
private Bitmap AddBitmapOverlay(Bitmap original, params Bitmap[] overlays)
|
||||
{
|
||||
Bitmap bitmap = new Bitmap(original.Width, original.Height, PixelFormat.Format64bppArgb);
|
||||
Graphics canvas = Graphics.FromImage(bitmap);
|
||||
canvas.DrawImage(original, new Point(0, 0));
|
||||
foreach (Bitmap overlay in overlays)
|
||||
{
|
||||
canvas.DrawImage(new Bitmap(overlay, original.Size), new Point(0, 0));
|
||||
}
|
||||
canvas.Save();
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
private MenuItem CreateMenuItem(string text, EventHandler click)
|
||||
{
|
||||
return new MenuItem(I18N.GetString(text), click);
|
||||
@@ -219,6 +270,7 @@ namespace Shadowsocks.View
|
||||
this.ShareOverLANItem = CreateMenuItem("Allow Clients from LAN", new EventHandler(this.ShareOverLANItem_Click)),
|
||||
new MenuItem("-"),
|
||||
CreateMenuItem("Show Logs...", new EventHandler(this.ShowLogItem_Click)),
|
||||
this.VerboseLoggingToggleItem = CreateMenuItem( "Verbose Logging", new EventHandler(this.VerboseLoggingToggleItem_Click) ),
|
||||
CreateMenuGroup("Updates...", new MenuItem[] {
|
||||
CreateMenuItem("Check for Updates...", new EventHandler(this.checkUpdatesItem_Click)),
|
||||
new MenuItem("-"),
|
||||
@@ -247,6 +299,10 @@ namespace Shadowsocks.View
|
||||
ShareOverLANItem.Checked = controller.GetConfigurationCopy().shareOverLan;
|
||||
}
|
||||
|
||||
void controller_VerboseLoggingStatusChanged(object sender, EventArgs e) {
|
||||
VerboseLoggingToggleItem.Checked = controller.GetConfigurationCopy().isVerboseLogging;
|
||||
}
|
||||
|
||||
void controller_EnableGlobalChanged(object sender, EventArgs e)
|
||||
{
|
||||
globalModeItem.Checked = controller.GetConfigurationCopy().global;
|
||||
@@ -323,6 +379,7 @@ namespace Shadowsocks.View
|
||||
globalModeItem.Checked = config.global;
|
||||
PACModeItem.Checked = !config.global;
|
||||
ShareOverLANItem.Checked = config.shareOverLan;
|
||||
VerboseLoggingToggleItem.Checked = config.isVerboseLogging;
|
||||
AutoStartupItem.Checked = AutoStartup.Check();
|
||||
onlinePACItem.Checked = onlinePACItem.Enabled && config.useOnlinePac;
|
||||
localPACItem.Checked = !onlinePACItem.Checked;
|
||||
@@ -550,6 +607,11 @@ namespace Shadowsocks.View
|
||||
logForms.Add(f);
|
||||
}
|
||||
|
||||
private void VerboseLoggingToggleItem_Click( object sender, EventArgs e ) {
|
||||
VerboseLoggingToggleItem.Checked = ! VerboseLoggingToggleItem.Checked;
|
||||
controller.ToggleVerboseLogging( VerboseLoggingToggleItem.Checked );
|
||||
}
|
||||
|
||||
private void StatisticsConfigItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
StatisticsStrategyConfigurationForm form = new StatisticsStrategyConfigurationForm(controller);
|
||||
|
||||
Reference in New Issue
Block a user