implement window events
This commit is contained in:
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Runtime.Serialization.Json;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace shadowsocks_csharp
|
||||
{
|
||||
@@ -14,6 +15,17 @@ namespace shadowsocks_csharp
|
||||
public int local_port;
|
||||
public string password;
|
||||
|
||||
[NonSerialized]
|
||||
public bool isDefault;
|
||||
|
||||
private static void assert(bool condition)
|
||||
{
|
||||
if(!condition)
|
||||
{
|
||||
throw new Exception("assertion failure");
|
||||
}
|
||||
}
|
||||
|
||||
public static Config Load()
|
||||
{
|
||||
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Config));
|
||||
@@ -22,17 +34,24 @@ namespace shadowsocks_csharp
|
||||
using (FileStream fs = File.OpenRead(@"config.json"))
|
||||
{
|
||||
Config config = ser.ReadObject(fs) as Config;
|
||||
assert(!string.IsNullOrEmpty(config.server));
|
||||
assert(!string.IsNullOrEmpty(config.password));
|
||||
assert(config.local_port > 0);
|
||||
assert(config.server_port > 0);
|
||||
config.isDefault = false;
|
||||
return config;
|
||||
}
|
||||
}
|
||||
catch (IOException)
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
return new Config
|
||||
{
|
||||
server = "127.0.0.1",
|
||||
server_port = 8388,
|
||||
local_port = 1081,
|
||||
password = "barfoo!"
|
||||
password = "barfoo!",
|
||||
isDefault = true
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+27
-7
@@ -45,7 +45,9 @@
|
||||
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
|
||||
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.ConfigItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.QuitItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.contextMenuStrip1.SuspendLayout();
|
||||
@@ -175,7 +177,7 @@
|
||||
this.button2.TabIndex = 1;
|
||||
this.button2.Text = "Cancel";
|
||||
this.button2.UseVisualStyleBackColor = true;
|
||||
this.button2.Click += new System.EventHandler(this.button2_Click);
|
||||
this.button2.Click += new System.EventHandler(this.cancelButton_Click);
|
||||
//
|
||||
// button1
|
||||
//
|
||||
@@ -186,39 +188,54 @@
|
||||
this.button1.TabIndex = 0;
|
||||
this.button1.Text = "OK";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||
this.button1.Click += new System.EventHandler(this.OKButton_Click);
|
||||
//
|
||||
// notifyIcon1
|
||||
//
|
||||
this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;
|
||||
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
|
||||
this.notifyIcon1.Text = "notifyIcon1";
|
||||
this.notifyIcon1.Text = "shadowsocks";
|
||||
this.notifyIcon1.Visible = true;
|
||||
this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);
|
||||
//
|
||||
// contextMenuStrip1
|
||||
//
|
||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.ConfigItem,
|
||||
this.aboutToolStripMenuItem,
|
||||
this.toolStripSeparator2,
|
||||
this.QuitItem});
|
||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||
this.contextMenuStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
|
||||
this.contextMenuStrip1.ShowImageMargin = false;
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(86, 48);
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(111, 76);
|
||||
//
|
||||
// ConfigItem
|
||||
//
|
||||
this.ConfigItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
this.ConfigItem.Name = "ConfigItem";
|
||||
this.ConfigItem.Size = new System.Drawing.Size(85, 22);
|
||||
this.ConfigItem.Size = new System.Drawing.Size(110, 22);
|
||||
this.ConfigItem.Text = "Config";
|
||||
this.ConfigItem.Click += new System.EventHandler(this.Config_Click);
|
||||
//
|
||||
// aboutToolStripMenuItem
|
||||
//
|
||||
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
|
||||
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(110, 22);
|
||||
this.aboutToolStripMenuItem.Text = "About";
|
||||
this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
|
||||
//
|
||||
// QuitItem
|
||||
//
|
||||
this.QuitItem.Name = "QuitItem";
|
||||
this.QuitItem.Size = new System.Drawing.Size(85, 22);
|
||||
this.QuitItem.Size = new System.Drawing.Size(110, 22);
|
||||
this.QuitItem.Text = "Quit";
|
||||
this.QuitItem.Click += new System.EventHandler(this.Quit_Click);
|
||||
//
|
||||
// toolStripSeparator2
|
||||
//
|
||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(107, 6);
|
||||
//
|
||||
// Form1
|
||||
//
|
||||
this.AcceptButton = this.button1;
|
||||
@@ -233,6 +250,7 @@
|
||||
this.Name = "Form1";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "Shadowsocks";
|
||||
this.Load += new System.EventHandler(this.Form1_Load);
|
||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed);
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
@@ -261,6 +279,8 @@
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem ConfigItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem QuitItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace shadowsocks_csharp
|
||||
{
|
||||
@@ -16,14 +17,36 @@ namespace shadowsocks_csharp
|
||||
public Form1()
|
||||
{
|
||||
config = Config.Load();
|
||||
reload(config);
|
||||
InitializeComponent();
|
||||
configToTextBox();
|
||||
}
|
||||
|
||||
private void showWindow()
|
||||
{
|
||||
this.Opacity = 1;
|
||||
this.Show();
|
||||
}
|
||||
|
||||
private void configToTextBox()
|
||||
{
|
||||
textBox1.Text = config.server;
|
||||
textBox2.Text = config.server_port.ToString();
|
||||
textBox3.Text = config.password;
|
||||
textBox4.Text = config.local_port.ToString();
|
||||
}
|
||||
|
||||
private void Form1_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!config.isDefault)
|
||||
{
|
||||
this.Opacity = 0;
|
||||
reload(config); BeginInvoke(new MethodInvoker(delegate
|
||||
{
|
||||
this.Hide();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
private void reload(Config config)
|
||||
{
|
||||
if (local != null)
|
||||
@@ -37,22 +60,45 @@ namespace shadowsocks_csharp
|
||||
|
||||
private void Config_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
showWindow();
|
||||
}
|
||||
|
||||
private void Quit_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
private void OKButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
reload(Config.Load());
|
||||
try
|
||||
{
|
||||
Config config = new Config
|
||||
{
|
||||
server = textBox1.Text,
|
||||
server_port = int.Parse(textBox2.Text),
|
||||
password = textBox3.Text,
|
||||
local_port = int.Parse(textBox4.Text),
|
||||
isDefault = false
|
||||
};
|
||||
Config.Save(config);
|
||||
this.config = config;
|
||||
reload(config);
|
||||
this.Hide();
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
MessageBox.Show("there is format problem");
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
MessageBox.Show("there is some problem with parameters");
|
||||
}
|
||||
}
|
||||
|
||||
private void button2_Click(object sender, EventArgs e)
|
||||
private void cancelButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
this.Hide();
|
||||
configToTextBox();
|
||||
}
|
||||
|
||||
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
|
||||
@@ -60,5 +106,15 @@ namespace shadowsocks_csharp
|
||||
local.Stop();
|
||||
}
|
||||
|
||||
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
Process.Start("https://github.com/clowwindy/shadowsocks-csharp");
|
||||
}
|
||||
|
||||
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
showWindow();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<ProductVersion>9.0.21022</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>shadowsocks_csharp</RootNamespace>
|
||||
<AssemblyName>shadowsocks-csharp</AssemblyName>
|
||||
|
||||
Reference in New Issue
Block a user