From cec6f79e7e908c411a6aca24a5d89cc300aef42a Mon Sep 17 00:00:00 2001 From: kimw <1@kimwong.me> Date: Wed, 19 Aug 2015 21:52:16 +0800 Subject: [PATCH 1/2] improved `log viewer`: 1. add `clean log` feature 2. add `change font` feature 3. add `wrap text` feature 4. add `top most` feature --- shadowsocks-csharp/Data/cn.txt | 11 ++ shadowsocks-csharp/View/LogForm.Designer.cs | 170 +++++++++++++++++++++------- shadowsocks-csharp/View/LogForm.cs | 58 ++++++++-- 3 files changed, 186 insertions(+), 53 deletions(-) diff --git a/shadowsocks-csharp/Data/cn.txt b/shadowsocks-csharp/Data/cn.txt index b4217a85..81022f99 100644 --- a/shadowsocks-csharp/Data/cn.txt +++ b/shadowsocks-csharp/Data/cn.txt @@ -45,6 +45,17 @@ New server=未配置的服务器 Move &Up=上移(&U) Move D&own=下移(&O) +# Log Form + +&File=文件(&F) +&Open Location=在资源管理器中打开(&O) +E&xit=退出(&X) +&Clean logs=清空(&C) +&Font=字体(&F) +&Wrap text=自动换行(&W) +&Top most=置顶(&T) +Log Viewer=日志查看器 + # QRCode Form QRCode=二维码 diff --git a/shadowsocks-csharp/View/LogForm.Designer.cs b/shadowsocks-csharp/View/LogForm.Designer.cs index 7eb921ed..d0913d16 100644 --- a/shadowsocks-csharp/View/LogForm.Designer.cs +++ b/shadowsocks-csharp/View/LogForm.Designer.cs @@ -29,29 +29,37 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - this.textBox1 = new System.Windows.Forms.TextBox(); + this.LogMessageTextBox = new System.Windows.Forms.TextBox(); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components); - this.menuItem1 = new System.Windows.Forms.MenuItem(); - this.menuItem2 = new System.Windows.Forms.MenuItem(); - this.menuItem4 = new System.Windows.Forms.MenuItem(); + this.FileMenuItem = new System.Windows.Forms.MenuItem(); + this.OpenLocationMenuItem = new System.Windows.Forms.MenuItem(); + this.ExitMenuItem = new System.Windows.Forms.MenuItem(); + this.panel1 = new System.Windows.Forms.Panel(); + this.ChangeFontButton = new System.Windows.Forms.Button(); + this.CleanLogsButton = new System.Windows.Forms.Button(); + this.WrapTextCheckBox = new System.Windows.Forms.CheckBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.TopMostCheckBox = new System.Windows.Forms.CheckBox(); + this.panel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); this.SuspendLayout(); // - // textBox1 - // - this.textBox1.BackColor = System.Drawing.Color.Black; - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox1.ForeColor = System.Drawing.Color.White; - this.textBox1.Location = new System.Drawing.Point(0, 0); - this.textBox1.MaxLength = 2147483647; - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.textBox1.Size = new System.Drawing.Size(547, 382); - this.textBox1.TabIndex = 0; - this.textBox1.WordWrap = false; + // LogMessageTextBox + // + this.LogMessageTextBox.BackColor = System.Drawing.Color.Black; + this.LogMessageTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogMessageTextBox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LogMessageTextBox.ForeColor = System.Drawing.Color.White; + this.LogMessageTextBox.Location = new System.Drawing.Point(3, 43); + this.LogMessageTextBox.MaxLength = 2147483647; + this.LogMessageTextBox.Multiline = true; + this.LogMessageTextBox.Name = "LogMessageTextBox"; + this.LogMessageTextBox.ReadOnly = true; + this.LogMessageTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.LogMessageTextBox.Size = new System.Drawing.Size(541, 307); + this.LogMessageTextBox.TabIndex = 0; + this.LogMessageTextBox.WordWrap = false; // // contextMenuStrip1 // @@ -61,34 +69,103 @@ // mainMenu1 // this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.menuItem1}); + this.FileMenuItem}); + // + // FileMenuItem + // + this.FileMenuItem.Index = 0; + this.FileMenuItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.OpenLocationMenuItem, + this.ExitMenuItem}); + this.FileMenuItem.Text = "&File"; + // + // OpenLocationMenuItem + // + this.OpenLocationMenuItem.Index = 0; + this.OpenLocationMenuItem.Text = "&Open Location"; + this.OpenLocationMenuItem.Click += new System.EventHandler(this.OpenLocationMenuItem_Click); + // + // ExitMenuItem + // + this.ExitMenuItem.Index = 1; + this.ExitMenuItem.Text = "E&xit"; + this.ExitMenuItem.Click += new System.EventHandler(this.ExitMenuItem_Click); + // + // panel1 + // + this.panel1.Controls.Add(this.TopMostCheckBox); + this.panel1.Controls.Add(this.ChangeFontButton); + this.panel1.Controls.Add(this.CleanLogsButton); + this.panel1.Controls.Add(this.WrapTextCheckBox); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(3, 3); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(541, 34); + this.panel1.TabIndex = 1; + // + // ChangeFontButton + // + this.ChangeFontButton.Location = new System.Drawing.Point(107, 4); + this.ChangeFontButton.Name = "ChangeFontButton"; + this.ChangeFontButton.Size = new System.Drawing.Size(75, 23); + this.ChangeFontButton.TabIndex = 2; + this.ChangeFontButton.Text = "&Font"; + this.ChangeFontButton.UseVisualStyleBackColor = true; + this.ChangeFontButton.Click += new System.EventHandler(this.ChangeFontButton_Click); + // + // CleanLogsButton + // + this.CleanLogsButton.Location = new System.Drawing.Point(9, 4); + this.CleanLogsButton.Name = "CleanLogsButton"; + this.CleanLogsButton.Size = new System.Drawing.Size(75, 23); + this.CleanLogsButton.TabIndex = 1; + this.CleanLogsButton.Text = "&Clean logs"; + this.CleanLogsButton.UseVisualStyleBackColor = true; + this.CleanLogsButton.Click += new System.EventHandler(this.CleanLogsButton_Click); // - // menuItem1 + // WrapTextCheckBox // - this.menuItem1.Index = 0; - this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.menuItem2, - this.menuItem4}); - this.menuItem1.Text = "&File"; + this.WrapTextCheckBox.AutoSize = true; + this.WrapTextCheckBox.Location = new System.Drawing.Point(209, 9); + this.WrapTextCheckBox.Name = "WrapTextCheckBox"; + this.WrapTextCheckBox.Size = new System.Drawing.Size(78, 16); + this.WrapTextCheckBox.TabIndex = 0; + this.WrapTextCheckBox.Text = "&Wrap text"; + this.WrapTextCheckBox.UseVisualStyleBackColor = true; + this.WrapTextCheckBox.CheckedChanged += new System.EventHandler(this.WrapTextCheckBox_CheckedChanged); // - // menuItem2 + // tableLayoutPanel1 // - this.menuItem2.Index = 0; - this.menuItem2.Text = "&Open Location"; - this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click); + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.LogMessageTextBox, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(547, 353); + this.tableLayoutPanel1.TabIndex = 2; // - // menuItem4 + // TopMostCheckBox // - this.menuItem4.Index = 1; - this.menuItem4.Text = "E&xit"; - this.menuItem4.Click += new System.EventHandler(this.menuItem4_Click); + this.TopMostCheckBox.AutoSize = true; + this.TopMostCheckBox.Location = new System.Drawing.Point(311, 9); + this.TopMostCheckBox.Name = "TopMostCheckBox"; + this.TopMostCheckBox.Size = new System.Drawing.Size(72, 16); + this.TopMostCheckBox.TabIndex = 3; + this.TopMostCheckBox.Text = "&Top most"; + this.TopMostCheckBox.UseVisualStyleBackColor = true; + this.TopMostCheckBox.CheckedChanged += new System.EventHandler(this.TopMostCheckBox_CheckedChanged); // // LogForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(547, 382); - this.Controls.Add(this.textBox1); + this.ClientSize = new System.Drawing.Size(547, 353); + this.Controls.Add(this.tableLayoutPanel1); this.Menu = this.mainMenu1; this.Name = "LogForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; @@ -96,18 +173,27 @@ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LogForm_FormClosing); this.Load += new System.EventHandler(this.LogForm_Load); this.Shown += new System.EventHandler(this.LogForm_Shown); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); this.ResumeLayout(false); - this.PerformLayout(); } #endregion - private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox LogMessageTextBox; private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; private System.Windows.Forms.MainMenu mainMenu1; - private System.Windows.Forms.MenuItem menuItem1; - private System.Windows.Forms.MenuItem menuItem2; - private System.Windows.Forms.MenuItem menuItem4; + private System.Windows.Forms.MenuItem FileMenuItem; + private System.Windows.Forms.MenuItem OpenLocationMenuItem; + private System.Windows.Forms.MenuItem ExitMenuItem; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.CheckBox WrapTextCheckBox; + private System.Windows.Forms.Button CleanLogsButton; + private System.Windows.Forms.Button ChangeFontButton; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.CheckBox TopMostCheckBox; } } \ No newline at end of file diff --git a/shadowsocks-csharp/View/LogForm.cs b/shadowsocks-csharp/View/LogForm.cs index bdb9ad5c..c01c9c6b 100644 --- a/shadowsocks-csharp/View/LogForm.cs +++ b/shadowsocks-csharp/View/LogForm.cs @@ -1,4 +1,5 @@ -using Shadowsocks.Properties; +using Shadowsocks.Controller; +using Shadowsocks.Properties; using System; using System.Collections.Generic; using System.ComponentModel; @@ -23,6 +24,20 @@ namespace Shadowsocks.View this.filename = filename; InitializeComponent(); this.Icon = Icon.FromHandle(Resources.ssw128.GetHicon()); + + UpdateTexts(); + } + + private void UpdateTexts() + { + FileMenuItem.Text = I18N.GetString("&File"); + OpenLocationMenuItem.Text = I18N.GetString("&Open Location"); + ExitMenuItem.Text = I18N.GetString("E&xit"); + CleanLogsButton.Text = I18N.GetString("&Clean logs"); + ChangeFontButton.Text = I18N.GetString("&Font"); + WrapTextCheckBox.Text = I18N.GetString("&Wrap text"); + TopMostCheckBox.Text = I18N.GetString("&Top most"); + this.Text = I18N.GetString("Log Viewer"); } private void Timer_Tick(object sender, EventArgs e) @@ -43,9 +58,9 @@ namespace Shadowsocks.View string line = ""; while ((line = reader.ReadLine()) != null) - textBox1.AppendText(line + "\r\n"); + LogMessageTextBox.AppendText(line + "\r\n"); - textBox1.ScrollToCaret(); + LogMessageTextBox.ScrollToCaret(); lastOffset = reader.BaseStream.Position; } @@ -63,12 +78,12 @@ namespace Shadowsocks.View while ((line = reader.ReadLine()) != null) { changed = true; - textBox1.AppendText(line + "\r\n"); + LogMessageTextBox.AppendText(line + "\r\n"); } if (changed) { - textBox1.ScrollToCaret(); + LogMessageTextBox.ScrollToCaret(); } lastOffset = reader.BaseStream.Position; @@ -89,25 +104,46 @@ namespace Shadowsocks.View timer.Stop(); } - private void menuItem2_Click(object sender, EventArgs e) + private void OpenLocationMenuItem_Click(object sender, EventArgs e) { string argument = @"/select, " + filename; System.Diagnostics.Process.Start("explorer.exe", argument); } - private void menuItem3_Click(object sender, EventArgs e) + private void ExitMenuItem_Click(object sender, EventArgs e) { + this.Close(); + } + private void LogForm_Shown(object sender, EventArgs e) + { + LogMessageTextBox.ScrollToCaret(); } - private void menuItem4_Click(object sender, EventArgs e) + private void WrapTextCheckBox_CheckedChanged(object sender, EventArgs e) { - this.Close(); + LogMessageTextBox.WordWrap = WrapTextCheckBox.Checked; + LogMessageTextBox.ScrollToCaret(); } - private void LogForm_Shown(object sender, EventArgs e) + private void CleanLogsButton_Click(object sender, EventArgs e) + { + LogMessageTextBox.Clear(); + } + + private void ChangeFontButton_Click(object sender, EventArgs e) + { + FontDialog fd = new FontDialog(); + fd.Font = LogMessageTextBox.Font; + if (fd.ShowDialog() == DialogResult.OK) + { + LogMessageTextBox.Font = fd.Font; + } + } + + private void TopMostCheckBox_CheckedChanged(object sender, EventArgs e) { - textBox1.ScrollToCaret(); + this.TopMost = TopMostCheckBox.Checked; } } } From 14381cf887004227288d2846eb49852b9d0e4d34 Mon Sep 17 00:00:00 2001 From: kimw <1@kimwong.me> Date: Wed, 19 Aug 2015 22:23:54 +0800 Subject: [PATCH 2/2] update version number --- shadowsocks-csharp/Controller/Service/UpdateChecker.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shadowsocks-csharp/Controller/Service/UpdateChecker.cs b/shadowsocks-csharp/Controller/Service/UpdateChecker.cs index 9a3f832c..b2ef20dc 100644 --- a/shadowsocks-csharp/Controller/Service/UpdateChecker.cs +++ b/shadowsocks-csharp/Controller/Service/UpdateChecker.cs @@ -18,7 +18,7 @@ namespace Shadowsocks.Controller public string LatestVersionURL; public event EventHandler NewVersionFound; - public const string Version = "2.5.5"; + public const string Version = "2.5.6"; public void CheckUpdate(Configuration config) {