Browse Source

Make Apply button disable/enable work correctly.

Douglas Thrift 9 years ago
parent
commit
125a50b506

+ 7 - 4
ssh-handler/HandlerSettingsBox.xaml.cs

@@ -26,11 +26,13 @@ using System.Windows.Controls;
 public partial class HandlerSettingsBox : GroupBox
 {
     private Handler handler;
+    private Button applyButton;
 
-    public HandlerSettingsBox(Handler handler, IEnumerable<string> options)
+    public HandlerSettingsBox(Handler handler, IEnumerable<string> options, Button applyButton)
     {
         InitializeComponent();
 
+        this.applyButton = applyButton;
         this.handler = handler;
         HandlerRadioButton.Content = handler.Setting.usage;
 
@@ -38,13 +40,13 @@ public partial class HandlerSettingsBox : GroupBox
             switch (setting.type)
             {
             case SettingType.OptionalExecutable:
-                SettingsPanel.Children.Add(new OptionalExecutablePanel(setting, options));
+                SettingsPanel.Children.Add(new OptionalExecutablePanel(setting, options, applyButton));
                 break;
             case SettingType.OptionalYesNoExecutable:
-                SettingsPanel.Children.Add(new OptionalYesNoExecutablePanel(setting, options));
+                SettingsPanel.Children.Add(new OptionalYesNoExecutablePanel(setting, options, applyButton));
                 break;
             case SettingType.OptionalYesNoDirectory:
-                SettingsPanel.Children.Add(new OptionalYesNoDirectoryPanel(setting, options));
+                SettingsPanel.Children.Add(new OptionalYesNoDirectoryPanel(setting, options, applyButton));
                 break;
             }
 
@@ -77,5 +79,6 @@ public partial class HandlerSettingsBox : GroupBox
     private void HandlerRadioButton_Unchecked(object sender, System.Windows.RoutedEventArgs e)
     {
         SettingsPanel.IsEnabled = false;
+        applyButton.IsEnabled = true;
     }
 }

+ 1 - 0
ssh-handler/OptionalExecutablePanel.xaml

@@ -28,6 +28,7 @@
             <toolkit:AutoCompleteBox
                 Name="SettingExecutableBox"
                 Populating="SettingExecutableBox_Populating"
+                TextChanged="SettingExecutableBox_TextChanged"
                 />
             <Button
                 Name="SettingExecutableBrowse"

+ 10 - 1
ssh-handler/OptionalExecutablePanel.xaml.cs

@@ -28,11 +28,13 @@ using System.Windows.Controls;
 public partial class OptionalExecutablePanel : StackPanel, SettingPanel
 {
     private Setting setting;
+    private Button applyButton;
 
-    public OptionalExecutablePanel(Setting setting, IEnumerable<string> options)
+    public OptionalExecutablePanel(Setting setting, IEnumerable<string> options, Button applyButton)
     {
         InitializeComponent();
 
+        this.applyButton = applyButton;
         this.setting = setting;
 
         if (setting.handler)
@@ -89,11 +91,13 @@ public partial class OptionalExecutablePanel : StackPanel, SettingPanel
     private void SettingCheckBox_Checked(object sender, System.Windows.RoutedEventArgs e)
     {
         SettingExecutablePanel.IsEnabled = true;
+        applyButton.IsEnabled = true;
     }
 
     private void SettingCheckBox_Unchecked(object sender, System.Windows.RoutedEventArgs e)
     {
         SettingExecutablePanel.IsEnabled = false;
+        applyButton.IsEnabled = true;
     }
 
     private void SettingExecutableBrowse_Click(object sender, System.Windows.RoutedEventArgs e)
@@ -105,4 +109,9 @@ public partial class OptionalExecutablePanel : StackPanel, SettingPanel
     {
         SettingPanelHelper.DoExecutableBoxPopulating(SettingExecutableBox);
     }
+
+    private void SettingExecutableBox_TextChanged(object sender, System.Windows.RoutedEventArgs e)
+    {
+        applyButton.IsEnabled = true;
+    }
 }

+ 3 - 0
ssh-handler/OptionalYesNoDirectoryPanel.xaml

@@ -29,10 +29,12 @@
                 Name="SettingYes"
                 Content="Yes"
                 IsChecked="True"
+                Unchecked="SettingYes_Unchecked"
                 />
             <RadioButton
                 Name="SettingNo"
                 Content="No"
+                Unchecked="SettingNo_Unchecked"
                 />
             <RadioButton
                 Name="SettingDirectory"
@@ -48,6 +50,7 @@
                 <toolkit:AutoCompleteBox
                     Name="SettingDirectoryBox"
                     Populating="SettingDirectoryBox_Populating"
+                    TextChanged="SettingDirectoryBox_TextChanged"
                     />
                 <Button
                     Name="SettingDirectoryBrowse"

+ 21 - 1
ssh-handler/OptionalYesNoDirectoryPanel.xaml.cs

@@ -28,11 +28,13 @@ using System.Windows.Controls;
 public partial class OptionalYesNoDirectoryPanel : StackPanel, SettingPanel
 {
     private Setting setting;
+    private Button applyButton;
 
-    public OptionalYesNoDirectoryPanel(Setting setting, IEnumerable<string> options)
+    public OptionalYesNoDirectoryPanel(Setting setting, IEnumerable<string> options, Button applyButton)
     {
         InitializeComponent();
 
+        this.applyButton = applyButton;
         this.setting = setting;
         SettingCheckBox.Content = setting.name + ":";
         SettingUsage.Text = setting.usage + ":";
@@ -96,11 +98,23 @@ public partial class OptionalYesNoDirectoryPanel : StackPanel, SettingPanel
     private void SettingCheckBox_Checked(object sender, System.Windows.RoutedEventArgs e)
     {
         SettingRadioPanel.IsEnabled = true;
+        applyButton.IsEnabled = true;
     }
 
     private void SettingCheckBox_Unchecked(object sender, System.Windows.RoutedEventArgs e)
     {
         SettingRadioPanel.IsEnabled = false;
+        applyButton.IsEnabled = true;
+    }
+
+    private void SettingYes_Unchecked(object sender, System.Windows.RoutedEventArgs e)
+    {
+        applyButton.IsEnabled = true;
+    }
+
+    private void SettingNo_Unchecked(object sender, System.Windows.RoutedEventArgs e)
+    {
+        applyButton.IsEnabled = true;
     }
 
     private void SettingDirectory_Checked(object sender, System.Windows.RoutedEventArgs e)
@@ -111,6 +125,7 @@ public partial class OptionalYesNoDirectoryPanel : StackPanel, SettingPanel
     private void SettingDirectory_Unchecked(object sender, System.Windows.RoutedEventArgs e)
     {
         SettingDirectoryPanel.IsEnabled = false;
+        applyButton.IsEnabled = true;
     }
 
     private void SettingDirectoryBrowse_Click(object sender, System.Windows.RoutedEventArgs e)
@@ -122,4 +137,9 @@ public partial class OptionalYesNoDirectoryPanel : StackPanel, SettingPanel
     {
         SettingPanelHelper.DoDirectoryBoxPopulating(SettingDirectoryBox);
     }
+
+    private void SettingDirectoryBox_TextChanged(object sender, System.Windows.RoutedEventArgs e)
+    {
+        applyButton.IsEnabled = true;
+    }
 }

+ 3 - 0
ssh-handler/OptionalYesNoExecutablePanel.xaml

@@ -29,10 +29,12 @@
                 Name="SettingYes"
                 Content="Yes"
                 IsChecked="True"
+                Unchecked="SettingYes_Unchecked"
                 />
             <RadioButton
                 Name="SettingNo"
                 Content="No"
+                Unchecked="SettingNo_Unchecked"
                 />
             <RadioButton
                 Name="SettingExecutable"
@@ -48,6 +50,7 @@
                 <toolkit:AutoCompleteBox
                     Name="SettingExecutableBox"
                     Populating="SettingExecutableBox_Populating"
+                    TextChanged="SettingExecutableBox_TextChanged"
                     />
                 <Button
                     Name="SettingExecutableBrowse"

+ 21 - 1
ssh-handler/OptionalYesNoExecutablePanel.xaml.cs

@@ -28,11 +28,13 @@ using System.Windows.Controls;
 public partial class OptionalYesNoExecutablePanel : StackPanel, SettingPanel
 {
     private Setting setting;
+    private Button applyButton;
 
-    public OptionalYesNoExecutablePanel(Setting setting, IEnumerable<string> options)
+    public OptionalYesNoExecutablePanel(Setting setting, IEnumerable<string> options, Button applyButton)
     {
         InitializeComponent();
 
+        this.applyButton = applyButton;
         this.setting = setting;
         SettingCheckBox.Content = setting.name + ":";
         SettingUsage.Text = setting.usage + ":";
@@ -96,11 +98,23 @@ public partial class OptionalYesNoExecutablePanel : StackPanel, SettingPanel
     private void SettingCheckBox_Checked(object sender, System.Windows.RoutedEventArgs e)
     {
         SettingRadioPanel.IsEnabled = true;
+        applyButton.IsEnabled = true;
     }
 
     private void SettingCheckBox_Unchecked(object sender, System.Windows.RoutedEventArgs e)
     {
         SettingRadioPanel.IsEnabled = false;
+        applyButton.IsEnabled = true;
+    }
+
+    private void SettingYes_Unchecked(object sender, System.Windows.RoutedEventArgs e)
+    {
+        applyButton.IsEnabled = true;
+    }
+
+    private void SettingNo_Unchecked(object sender, System.Windows.RoutedEventArgs e)
+    {
+        applyButton.IsEnabled = true;
     }
 
     private void SettingExecutable_Checked(object sender, System.Windows.RoutedEventArgs e)
@@ -111,6 +125,7 @@ public partial class OptionalYesNoExecutablePanel : StackPanel, SettingPanel
     private void SettingExecutable_Unchecked(object sender, System.Windows.RoutedEventArgs e)
     {
         SettingExecutablePanel.IsEnabled = false;
+        applyButton.IsEnabled = true;
     }
 
     private void SettingExecutableBrowse_Click(object sender, System.Windows.RoutedEventArgs e)
@@ -122,4 +137,9 @@ public partial class OptionalYesNoExecutablePanel : StackPanel, SettingPanel
     {
         SettingPanelHelper.DoExecutableBoxPopulating(SettingExecutableBox);
     }
+
+    private void SettingExecutableBox_TextChanged(object sender, System.Windows.RoutedEventArgs e)
+    {
+        applyButton.IsEnabled = true;
+    }
 }

+ 2 - 0
ssh-handler/SettingsDialog.xaml

@@ -24,6 +24,7 @@
                             Content="Find the first suitable SSH application"
                             GroupName="Handlers"
                             IsChecked="True"
+                            Unchecked="RadioButton_Unchecked"
                             />
                     </GroupBox.Header>
                 </GroupBox>
@@ -49,6 +50,7 @@
                 IsCancel="True"
                 />
             <Button
+                Name="ApplyButton"
                 Content="_Apply"
                 Margin="0,0,0,0"
                 Width="73"

+ 10 - 2
ssh-handler/SettingsDialog.xaml.cs

@@ -49,7 +49,9 @@ public partial class SettingsDialog : Window
             }
 
         foreach (Handler handler in handlers)
-            SettingsPanel.Children.Add(new HandlerSettingsBox(handler, options));
+            SettingsPanel.Children.Add(new HandlerSettingsBox(handler, options, ApplyButton));
+
+        ApplyButton.IsEnabled = false;
     }
 
     private void OkButton_Click(object sender, RoutedEventArgs e)
@@ -60,7 +62,13 @@ public partial class SettingsDialog : Window
 
     private void ApplyButton_Click(object sender, RoutedEventArgs e)
     {
-        Apply();
+        if (Apply())
+            ApplyButton.IsEnabled = false;
+    }
+
+    private void RadioButton_Unchecked(object sender, RoutedEventArgs e)
+    {
+        ApplyButton.IsEnabled = true;
     }
 
     private bool Apply()