diff --git a/shadowsocks-csharp/Data/cn.txt b/shadowsocks-csharp/Data/cn.txt
index 9dc07328..fd09606d 100644
--- a/shadowsocks-csharp/Data/cn.txt
+++ b/shadowsocks-csharp/Data/cn.txt
@@ -42,6 +42,8 @@ Remarks=备注
OK=确定
Cancel=取消
New server=未配置的服务器
+Move &Up=上移
+Move D&own=下移
# QRCode Form
diff --git a/shadowsocks-csharp/View/ConfigForm.Designer.cs b/shadowsocks-csharp/View/ConfigForm.Designer.cs
index 83dae64a..f8b5940a 100755
--- a/shadowsocks-csharp/View/ConfigForm.Designer.cs
+++ b/shadowsocks-csharp/View/ConfigForm.Designer.cs
@@ -47,6 +47,9 @@
this.ServerGroupBox = new System.Windows.Forms.GroupBox();
this.ServersListBox = new System.Windows.Forms.ListBox();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+ this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel();
+ this.MoveDownButton = new System.Windows.Forms.Button();
+ this.MoveUpButton = new System.Windows.Forms.Button();
this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel();
this.ProxyPortTextBox = new System.Windows.Forms.TextBox();
this.ProxyPortLabel = new System.Windows.Forms.Label();
@@ -55,6 +58,7 @@
this.tableLayoutPanel1.SuspendLayout();
this.ServerGroupBox.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout();
+ this.tableLayoutPanel6.SuspendLayout();
this.tableLayoutPanel5.SuspendLayout();
this.tableLayoutPanel3.SuspendLayout();
this.tableLayoutPanel4.SuspendLayout();
@@ -184,7 +188,7 @@
//
// EncryptionSelect
//
- this.EncryptionSelect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ this.EncryptionSelect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.EncryptionSelect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.EncryptionSelect.FormattingEnabled = true;
@@ -281,6 +285,7 @@
//
this.ServersListBox.FormattingEnabled = true;
this.ServersListBox.IntegralHeight = false;
+ this.ServersListBox.ItemHeight = 12;
this.ServersListBox.Location = new System.Drawing.Point(0, 0);
this.ServersListBox.Margin = new System.Windows.Forms.Padding(0);
this.ServersListBox.Name = "ServersListBox";
@@ -295,6 +300,7 @@
this.tableLayoutPanel2.ColumnCount = 2;
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel6, 0, 2);
this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel5, 1, 1);
this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 1, 2);
this.tableLayoutPanel2.Controls.Add(this.ServersListBox, 0, 0);
@@ -310,6 +316,48 @@
this.tableLayoutPanel2.Size = new System.Drawing.Size(427, 238);
this.tableLayoutPanel2.TabIndex = 7;
//
+ // tableLayoutPanel6
+ //
+ this.tableLayoutPanel6.AutoSize = true;
+ this.tableLayoutPanel6.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanel6.ColumnCount = 2;
+ this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanel6.Controls.Add(this.MoveDownButton, 1, 0);
+ this.tableLayoutPanel6.Controls.Add(this.MoveUpButton, 0, 0);
+ this.tableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Top;
+ this.tableLayoutPanel6.Location = new System.Drawing.Point(0, 211);
+ this.tableLayoutPanel6.Margin = new System.Windows.Forms.Padding(0);
+ this.tableLayoutPanel6.Name = "tableLayoutPanel6";
+ this.tableLayoutPanel6.RowCount = 1;
+ this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel6.Size = new System.Drawing.Size(166, 32);
+ this.tableLayoutPanel6.TabIndex = 10;
+ //
+ // MoveDownButton
+ //
+ this.MoveDownButton.Dock = System.Windows.Forms.DockStyle.Right;
+ this.MoveDownButton.Location = new System.Drawing.Point(86, 6);
+ this.MoveDownButton.Margin = new System.Windows.Forms.Padding(3, 6, 0, 3);
+ this.MoveDownButton.Name = "MoveDownButton";
+ this.MoveDownButton.Size = new System.Drawing.Size(80, 23);
+ this.MoveDownButton.TabIndex = 7;
+ this.MoveDownButton.Text = "Move D&own";
+ this.MoveDownButton.UseVisualStyleBackColor = true;
+ this.MoveDownButton.Click += new System.EventHandler(this.MoveDownButton_Click);
+ //
+ // MoveUpButton
+ //
+ this.MoveUpButton.Dock = System.Windows.Forms.DockStyle.Left;
+ this.MoveUpButton.Location = new System.Drawing.Point(0, 6);
+ this.MoveUpButton.Margin = new System.Windows.Forms.Padding(0, 6, 3, 3);
+ this.MoveUpButton.Name = "MoveUpButton";
+ this.MoveUpButton.Size = new System.Drawing.Size(80, 23);
+ this.MoveUpButton.TabIndex = 6;
+ this.MoveUpButton.Text = "Move &Up";
+ this.MoveUpButton.UseVisualStyleBackColor = true;
+ this.MoveUpButton.Click += new System.EventHandler(this.MoveUpButton_Click);
+ //
// tableLayoutPanel5
//
this.tableLayoutPanel5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
@@ -418,6 +466,7 @@
this.ServerGroupBox.PerformLayout();
this.tableLayoutPanel2.ResumeLayout(false);
this.tableLayoutPanel2.PerformLayout();
+ this.tableLayoutPanel6.ResumeLayout(false);
this.tableLayoutPanel5.ResumeLayout(false);
this.tableLayoutPanel5.PerformLayout();
this.tableLayoutPanel3.ResumeLayout(false);
@@ -453,6 +502,9 @@
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5;
private System.Windows.Forms.TextBox ProxyPortTextBox;
private System.Windows.Forms.Label ProxyPortLabel;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel6;
+ private System.Windows.Forms.Button MoveDownButton;
+ private System.Windows.Forms.Button MoveUpButton;
}
}
diff --git a/shadowsocks-csharp/View/ConfigForm.cs b/shadowsocks-csharp/View/ConfigForm.cs
index 675aa23e..edcb405e 100755
--- a/shadowsocks-csharp/View/ConfigForm.cs
+++ b/shadowsocks-csharp/View/ConfigForm.cs
@@ -51,6 +51,8 @@ namespace Shadowsocks.View
ServerGroupBox.Text = I18N.GetString("Server");
OKButton.Text = I18N.GetString("OK");
MyCancelButton.Text = I18N.GetString("Cancel");
+ MoveUpButton.Text = I18N.GetString("Move &Up");
+ MoveDownButton.Text = I18N.GetString("Move D&own");
this.Text = I18N.GetString("Edit Servers");
}
@@ -58,7 +60,7 @@ namespace Shadowsocks.View
{
LoadCurrentConfiguration();
}
-
+
private void ShowWindow()
{
this.Opacity = 1;
@@ -87,7 +89,7 @@ namespace Shadowsocks.View
Configuration.CheckLocalPort(localPort);
_modifiedConfiguration.configs[_oldSelectedIndex] = server;
_modifiedConfiguration.localPort = localPort;
-
+
return true;
}
catch (FormatException)
@@ -113,12 +115,6 @@ namespace Shadowsocks.View
ProxyPortTextBox.Text = _modifiedConfiguration.localPort.ToString();
EncryptionSelect.Text = server.method ?? "aes-256-cfb";
RemarksTextBox.Text = server.remarks;
- ServerGroupBox.Visible = true;
- //IPTextBox.Focus();
- }
- else
- {
- ServerGroupBox.Visible = false;
}
}
@@ -141,6 +137,7 @@ namespace Shadowsocks.View
_oldSelectedIndex = 0;
}
ServersListBox.SelectedIndex = _oldSelectedIndex;
+ UpdateMoveUpAndDownButton();
LoadSelectedServer();
}
@@ -162,6 +159,7 @@ namespace Shadowsocks.View
ServersListBox.SelectedIndex = _oldSelectedIndex;
return;
}
+ UpdateMoveUpAndDownButton();
LoadSelectedServer();
_oldSelectedIndex = ServersListBox.SelectedIndex;
}
@@ -208,7 +206,9 @@ namespace Shadowsocks.View
MessageBox.Show(I18N.GetString("Please add at least one server"));
return;
}
+ int index = _modifiedConfiguration.index;
controller.SaveServers(_modifiedConfiguration.configs, _modifiedConfiguration.localPort);
+ controller.SelectServerIndex(index);
this.Close();
}
@@ -227,5 +227,61 @@ namespace Shadowsocks.View
controller.ConfigChanged -= controller_ConfigChanged;
}
+ private void MoveConfigItem(int step)
+ {
+ int index = ServersListBox.SelectedIndex;
+ Server server = _modifiedConfiguration.configs[index];
+ object item = ServersListBox.SelectedItem;
+
+ _modifiedConfiguration.configs.Remove(server);
+ _modifiedConfiguration.configs.Insert(index + step, server);
+ _modifiedConfiguration.index += step;
+
+ ServersListBox.BeginUpdate();
+ _oldSelectedIndex = index + step;
+ ServersListBox.Items.Remove(item);
+ ServersListBox.Items.Insert(index + step, item);
+ ServersListBox.SelectedIndex = index + step;
+ ServersListBox.EndUpdate();
+
+ UpdateMoveUpAndDownButton();
+ }
+
+ private void UpdateMoveUpAndDownButton()
+ {
+ if (ServersListBox.SelectedIndex == 0)
+ {
+ MoveUpButton.Enabled = false;
+ }
+ else
+ {
+ MoveUpButton.Enabled = true;
+ }
+ if (ServersListBox.SelectedIndex == ServersListBox.Items.Count - 1)
+ {
+ MoveDownButton.Enabled = false;
+ }
+ else
+ {
+ MoveDownButton.Enabled = true;
+ }
+ }
+
+ private void MoveUpButton_Click(object sender, EventArgs e)
+ {
+ if (ServersListBox.SelectedIndex > 0)
+ {
+ MoveConfigItem(-1); // -1 means move backward
+ }
+ }
+
+ private void MoveDownButton_Click(object sender, EventArgs e)
+ {
+ if (ServersListBox.SelectedIndex < ServersListBox.Items.Count - 1)
+ {
+ MoveConfigItem(+1); // +1 means move forward
+ }
+ }
+
}
}
diff --git a/shadowsocks-csharp/View/ConfigForm.resx b/shadowsocks-csharp/View/ConfigForm.resx
index ff31a6db..c7e0d4bd 100755
--- a/shadowsocks-csharp/View/ConfigForm.resx
+++ b/shadowsocks-csharp/View/ConfigForm.resx
@@ -112,9 +112,9 @@
2.0
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
\ No newline at end of file