- Thanks @DuckSoft for the review suggestionstags/4.3.0.0
@@ -340,7 +340,7 @@ namespace Shadowsocks.Localization { | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// Looks up a localized string similar to Timeout. | |||||
/// Looks up a localized string similar to Timeout (sec). | |||||
/// </summary> | /// </summary> | ||||
internal static string Timeout { | internal static string Timeout { | ||||
get { | get { | ||||
@@ -130,7 +130,7 @@ | |||||
<value>adresse</value> | <value>adresse</value> | ||||
</data> | </data> | ||||
<data name="Timeout" xml:space="preserve"> | <data name="Timeout" xml:space="preserve"> | ||||
<value>Délai d'attente</value> | |||||
<value>Délai d'attente (sec)</value> | |||||
</data> | </data> | ||||
<data name="cancelButton_Content" xml:space="preserve"> | <data name="cancelButton_Content" xml:space="preserve"> | ||||
<value>Annuler</value> | <value>Annuler</value> | ||||
@@ -130,7 +130,7 @@ | |||||
<value>ポート</value> | <value>ポート</value> | ||||
</data> | </data> | ||||
<data name="Timeout" xml:space="preserve"> | <data name="Timeout" xml:space="preserve"> | ||||
<value>タイムアウト</value> | |||||
<value>タイムアウト (秒)</value> | |||||
</data> | </data> | ||||
<data name="cancelButton_Content" xml:space="preserve"> | <data name="cancelButton_Content" xml:space="preserve"> | ||||
<value>キャンセル</value> | <value>キャンセル</value> | ||||
@@ -130,7 +130,7 @@ | |||||
<value>포트</value> | <value>포트</value> | ||||
</data> | </data> | ||||
<data name="Timeout" xml:space="preserve"> | <data name="Timeout" xml:space="preserve"> | ||||
<value>시간 초과</value> | |||||
<value>시간 초과 (초)</value> | |||||
</data> | </data> | ||||
<data name="cancelButton_Content" xml:space="preserve"> | <data name="cancelButton_Content" xml:space="preserve"> | ||||
<value>취소</value> | <value>취소</value> | ||||
@@ -139,7 +139,7 @@ | |||||
<value>Port</value> | <value>Port</value> | ||||
</data> | </data> | ||||
<data name="Timeout" xml:space="preserve"> | <data name="Timeout" xml:space="preserve"> | ||||
<value>Timeout</value> | |||||
<value>Timeout (sec)</value> | |||||
</data> | </data> | ||||
<data name="CredentialsOptional" xml:space="preserve"> | <data name="CredentialsOptional" xml:space="preserve"> | ||||
<value>Credentials (optional)</value> | <value>Credentials (optional)</value> | ||||
@@ -130,7 +130,7 @@ | |||||
<value>порт</value> | <value>порт</value> | ||||
</data> | </data> | ||||
<data name="Timeout" xml:space="preserve"> | <data name="Timeout" xml:space="preserve"> | ||||
<value>Таймаут</value> | |||||
<value>Таймаут (сек)</value> | |||||
</data> | </data> | ||||
<data name="cancelButton_Content" xml:space="preserve"> | <data name="cancelButton_Content" xml:space="preserve"> | ||||
<value>Отмена</value> | <value>Отмена</value> | ||||
@@ -148,7 +148,7 @@ | |||||
<value>端口</value> | <value>端口</value> | ||||
</data> | </data> | ||||
<data name="Timeout" xml:space="preserve"> | <data name="Timeout" xml:space="preserve"> | ||||
<value>超时</value> | |||||
<value>超时 (秒)</value> | |||||
</data> | </data> | ||||
<data name="okButton_Content" xml:space="preserve"> | <data name="okButton_Content" xml:space="preserve"> | ||||
<value>确定</value> | <value>确定</value> | ||||
@@ -130,7 +130,7 @@ | |||||
<value>位址</value> | <value>位址</value> | ||||
</data> | </data> | ||||
<data name="Timeout" xml:space="preserve"> | <data name="Timeout" xml:space="preserve"> | ||||
<value>逾時</value> | |||||
<value>逾時 (秒)</value> | |||||
</data> | </data> | ||||
<data name="cancelButton_Content" xml:space="preserve"> | <data name="cancelButton_Content" xml:space="preserve"> | ||||
<value>取消</value> | <value>取消</value> | ||||
@@ -33,6 +33,9 @@ namespace Shadowsocks.ViewModels | |||||
Username = _config.proxy.authUser; | Username = _config.proxy.authUser; | ||||
Password = _config.proxy.authPwd; | Password = _config.proxy.authPwd; | ||||
this.WhenAnyValue(x => x.NoProxy, x => !x) | |||||
.ToPropertyEx(this, x => x.CanModifyDetails); | |||||
AddressRule = this.ValidationRule( | AddressRule = this.ValidationRule( | ||||
viewModel => viewModel.Address, | viewModel => viewModel.Address, | ||||
address => !string.IsNullOrWhiteSpace(address), | address => !string.IsNullOrWhiteSpace(address), | ||||
@@ -73,6 +76,9 @@ namespace Shadowsocks.ViewModels | |||||
public ReactiveCommand<Unit, Unit> Save { get; } | public ReactiveCommand<Unit, Unit> Save { get; } | ||||
public ReactiveCommand<Unit, Unit> Cancel { get; } | public ReactiveCommand<Unit, Unit> Cancel { get; } | ||||
[ObservableAsProperty] | |||||
public bool CanModifyDetails { get; } | |||||
[Reactive] | [Reactive] | ||||
public bool NoProxy { get; set; } | public bool NoProxy { get; set; } | ||||
@@ -40,6 +40,18 @@ namespace Shadowsocks.Views | |||||
viewModel => viewModel.Timeout, | viewModel => viewModel.Timeout, | ||||
view => view.timeoutTextBox.Text) | view => view.timeoutTextBox.Text) | ||||
.DisposeWith(disposables); | .DisposeWith(disposables); | ||||
this.OneWayBind(ViewModel, | |||||
viewModel => viewModel.CanModifyDetails, | |||||
view => view.addressTextBox.IsEnabled) | |||||
.DisposeWith(disposables); | |||||
this.OneWayBind(ViewModel, | |||||
viewModel => viewModel.CanModifyDetails, | |||||
view => view.portTextBox.IsEnabled) | |||||
.DisposeWith(disposables); | |||||
this.OneWayBind(ViewModel, | |||||
viewModel => viewModel.CanModifyDetails, | |||||
view => view.timeoutTextBox.IsEnabled) | |||||
.DisposeWith(disposables); | |||||
this.Bind(ViewModel, | this.Bind(ViewModel, | ||||
viewModel => viewModel.Username, | viewModel => viewModel.Username, | ||||