| @@ -80,7 +80,10 @@ namespace Shadowsocks.View | |||
| return true; | |||
| } | |||
| Server server = GetServerDetailsFromUI(); | |||
| if (server == null) | |||
| { | |||
| return false; | |||
| } | |||
| Configuration.CheckServer(server); | |||
| _modifiedConfiguration.configs[_lastSelectedIndex] = server; | |||
| @@ -172,32 +175,40 @@ namespace Shadowsocks.View | |||
| PortableModeCheckBox.Checked = _modifiedConfiguration.portableMode; | |||
| } | |||
| private bool SaveValidConfiguration() | |||
| { | |||
| if (!ValidateAndSaveSelectedServerDetails()) | |||
| { | |||
| return false; | |||
| } | |||
| if (_modifiedConfiguration.configs.Count == 0) | |||
| { | |||
| MessageBox.Show(I18N.GetString("Please add at least one server")); | |||
| return false; | |||
| } | |||
| int localPort = int.Parse(ProxyPortTextBox.Text); | |||
| Configuration.CheckLocalPort(localPort); | |||
| _modifiedConfiguration.localPort = localPort; | |||
| _modifiedConfiguration.portableMode = PortableModeCheckBox.Checked; | |||
| controller.SaveServers(_modifiedConfiguration.configs, _modifiedConfiguration.localPort, _modifiedConfiguration.portableMode); | |||
| // SelectedIndex remains valid | |||
| // We handled this in event handlers, e.g. Add/DeleteButton, SelectedIndexChanged | |||
| // and move operations | |||
| controller.SelectServerIndex(ServersListBox.SelectedIndex); | |||
| return true; | |||
| } | |||
| private void ConfigForm_KeyDown(object sender, KeyEventArgs e) | |||
| { | |||
| // Sometimes the users may hit enter key by mistake, and the form will close without saving entries. | |||
| if (e.KeyCode == Keys.Enter) | |||
| { | |||
| Server server = controller.GetCurrentServer(); | |||
| if (!ValidateAndSaveSelectedServerDetails()) | |||
| { | |||
| return; | |||
| } | |||
| if (_modifiedConfiguration.configs.Count == 0) | |||
| { | |||
| MessageBox.Show(I18N.GetString("Please add at least one server")); | |||
| return; | |||
| } | |||
| int localPort = int.Parse(ProxyPortTextBox.Text); | |||
| Configuration.CheckLocalPort(localPort); | |||
| _modifiedConfiguration.localPort = localPort; | |||
| _modifiedConfiguration.portableMode = PortableModeCheckBox.Checked; | |||
| controller.SaveServers(_modifiedConfiguration.configs, _modifiedConfiguration.localPort, _modifiedConfiguration.portableMode); | |||
| controller.SelectServerIndex(_modifiedConfiguration.configs.IndexOf(server)); | |||
| SaveValidConfiguration(); | |||
| } | |||
| } | |||
| private void ServersListBox_SelectedIndexChanged(object sender, EventArgs e) | |||
| @@ -273,28 +284,10 @@ namespace Shadowsocks.View | |||
| private void OKButton_Click(object sender, EventArgs e) | |||
| { | |||
| if (!ValidateAndSaveSelectedServerDetails()) | |||
| if (SaveValidConfiguration()) | |||
| { | |||
| return; | |||
| } | |||
| if (_modifiedConfiguration.configs.Count == 0) | |||
| { | |||
| MessageBox.Show(I18N.GetString("Please add at least one server")); | |||
| return; | |||
| this.Close(); | |||
| } | |||
| int localPort = int.Parse(ProxyPortTextBox.Text); | |||
| Configuration.CheckLocalPort(localPort); | |||
| _modifiedConfiguration.localPort = localPort; | |||
| _modifiedConfiguration.portableMode = PortableModeCheckBox.Checked; | |||
| controller.SaveServers(_modifiedConfiguration.configs, _modifiedConfiguration.localPort, _modifiedConfiguration.portableMode); | |||
| // SelectedIndex remains valid | |||
| // We handled this in event handlers, e.g. Add/DeleteButton, SelectedIndexChanged | |||
| // and move operations | |||
| controller.SelectServerIndex(ServersListBox.SelectedIndex); | |||
| this.Close(); | |||
| } | |||
| private void CancelButton_Click(object sender, EventArgs e) | |||