Skip to content

Commit 0a34a7a

Browse files
committed
Feature: SNMP Settings dialog
1 parent e01c772 commit 0a34a7a

File tree

6 files changed

+75
-65
lines changed

6 files changed

+75
-65
lines changed

Source/NETworkManager/ViewModels/SNMPSettingsViewModel.cs

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using Lextm.SharpSnmpLib.Messaging;
2-
using MahApps.Metro.Controls.Dialogs;
2+
using MahApps.Metro.SimpleChildWindow;
33
using NETworkManager.Localization.Resources;
44
using NETworkManager.Models.Network;
55
using NETworkManager.Settings;
@@ -22,8 +22,6 @@ public class SNMPSettingsViewModel : ViewModelBase
2222

2323
private readonly bool _isLoading;
2424

25-
private readonly IDialogCoordinator _dialogCoordinator;
26-
2725
public ICollectionView OIDProfiles { get; }
2826

2927
private SNMPOIDProfileInfo _selectedOIDProfile = new();
@@ -101,12 +99,10 @@ public int Port
10199

102100
#region Contructor, load settings
103101

104-
public SNMPSettingsViewModel(IDialogCoordinator instance)
102+
public SNMPSettingsViewModel()
105103
{
106104
_isLoading = true;
107105

108-
_dialogCoordinator = instance;
109-
110106
OIDProfiles = CollectionViewSource.GetDefaultView(SettingsManager.Current.SNMP_OidProfiles);
111107
OIDProfiles.SortDescriptions.Add(new SortDescription(nameof(SNMPOIDProfileInfo.Name),
112108
ListSortDirection.Ascending));
@@ -155,49 +151,57 @@ private void DeleteOIDProfileAction()
155151

156152
private async Task AddOIDProfile()
157153
{
158-
var customDialog = new CustomDialog
159-
{
160-
Title = Strings.AddOIDProfile
161-
};
154+
var childWindow = new SNMPOIDProfileChildWindow();
162155

163-
var viewModel = new SNMPOIDProfileViewModel(async instance =>
156+
var childWindowViewModel = new SNMPOIDProfileViewModel(async instance =>
164157
{
165-
await _dialogCoordinator.HideMetroDialogAsync(this, customDialog);
158+
childWindow.IsOpen = false;
159+
ConfigurationManager.Current.IsChildWindowOpen = false;
160+
161+
SettingsManager.Current.SNMP_OidProfiles.Add(new SNMPOIDProfileInfo(
162+
instance.Name,
163+
instance.OID,
164+
instance.Mode)
165+
);
166+
}, async _ =>
167+
{
168+
childWindow.IsOpen = false;
169+
ConfigurationManager.Current.IsChildWindowOpen = false;
170+
});
166171

167-
SettingsManager.Current.SNMP_OidProfiles.Add(new SNMPOIDProfileInfo(instance.Name, instance.OID,
168-
instance.Mode));
169-
}, async _ => { await _dialogCoordinator.HideMetroDialogAsync(this, customDialog); });
172+
childWindow.Title = Strings.AddOIDProfile;
170173

171-
customDialog.Content = new SNMPOIDProfileDialog
172-
{
173-
DataContext = viewModel
174-
};
174+
childWindow.DataContext = childWindowViewModel;
175+
176+
ConfigurationManager.Current.IsChildWindowOpen = true;
175177

176-
await _dialogCoordinator.ShowMetroDialogAsync(this, customDialog);
178+
await Application.Current.MainWindow.ShowChildWindowAsync(childWindow);
177179
}
178180

179181
public async Task EditOIDProfile()
180182
{
181-
var customDialog = new CustomDialog
182-
{
183-
Title = Strings.EditOIDProfile
184-
};
183+
var childWindow = new SNMPOIDProfileChildWindow();
185184

186-
var viewModel = new SNMPOIDProfileViewModel(async instance =>
185+
var childWindowViewModel = new SNMPOIDProfileViewModel(async instance =>
187186
{
188-
await _dialogCoordinator.HideMetroDialogAsync(this, customDialog);
187+
childWindow.IsOpen = false;
188+
ConfigurationManager.Current.IsChildWindowOpen = false;
189189

190190
SettingsManager.Current.SNMP_OidProfiles.Remove(SelectedOIDProfile);
191191
SettingsManager.Current.SNMP_OidProfiles.Add(new SNMPOIDProfileInfo(instance.Name, instance.OID,
192192
instance.Mode));
193-
}, async _ => { await _dialogCoordinator.HideMetroDialogAsync(this, customDialog); }, true, SelectedOIDProfile);
193+
}, async _ => {
194+
childWindow.IsOpen = false;
195+
ConfigurationManager.Current.IsChildWindowOpen = false;
196+
}, true, SelectedOIDProfile);
194197

195-
customDialog.Content = new SNMPOIDProfileDialog
196-
{
197-
DataContext = viewModel
198-
};
198+
childWindow.Title = Strings.EditOIDProfile;
199+
200+
childWindow.DataContext = childWindowViewModel;
201+
202+
ConfigurationManager.Current.IsChildWindowOpen = true;
199203

200-
await _dialogCoordinator.ShowMetroDialogAsync(this, customDialog);
204+
await Application.Current.MainWindow.ShowChildWindowAsync(childWindow);
201205
}
202206

203207
private async Task DeleteOIDProfile()

Source/NETworkManager/Views/SNMPOIDProfileDialog.xaml renamed to Source/NETworkManager/Views/SNMPOIDProfileChildWindow.xaml

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<UserControl x:Class="NETworkManager.Views.SNMPOIDProfileDialog"
1+
<simpleChildWindow:ChildWindow x:Class="NETworkManager.Views.SNMPOIDProfileChildWindow"
22
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
33
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
44
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
@@ -8,9 +8,13 @@
88
xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
99
xmlns:wpfHelpers="clr-namespace:NETworkManager.Utilities.WPF;assembly=NETworkManager.Utilities.WPF"
1010
xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
11-
mc:Ignorable="d" Loaded="UserControl_Loaded"
12-
d:DataContext="{d:DesignInstance viewModels:SNMPOIDProfileViewModel}">
13-
<Grid Margin="0,20">
11+
xmlns:simpleChildWindow="clr-namespace:MahApps.Metro.SimpleChildWindow;assembly=MahApps.Metro.SimpleChildWindow"
12+
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
13+
CloseButtonCommand="{Binding Path=CancelCommand}"
14+
Style="{StaticResource DefaultChildWindow}"
15+
Loaded="ChildWindow_OnLoaded"
16+
mc:Ignorable="d" d:DataContext="{d:DesignInstance viewModels:SNMPOIDProfileViewModel}">
17+
<Grid Margin="10">
1418
<Grid.RowDefinitions>
1519
<RowDefinition Height="*" />
1620
<RowDefinition Height="10" />
@@ -35,7 +39,7 @@
3539
</Grid.RowDefinitions>
3640
<TextBlock Grid.Column="0" Grid.Row="0" Text="{x:Static localization:Strings.Name}" />
3741
<TextBox x:Name="TextBoxName" Grid.Column="2" Grid.Row="0"
38-
mah:TextBoxHelper.Watermark="{x:Static localization:StaticStrings.ExampleSNMPMIB}">
42+
mah:TextBoxHelper.Watermark="{x:Static localization:StaticStrings.ExampleSNMPMIB}">
3943
<TextBox.Style>
4044
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource DefaultTextBox}">
4145
<Style.Triggers>
@@ -73,11 +77,11 @@
7377
<TextBox.Style>
7478
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource DefaultTextBox}">
7579
<Setter Property="mah:TextBoxHelper.Watermark"
76-
Value="{x:Static localization:StaticStrings.ExampleSnmpOid}" />
80+
Value="{x:Static localization:StaticStrings.ExampleSnmpOid}" />
7781
<Style.Triggers>
7882
<DataTrigger Binding="{Binding Path=Mode}" Value="Get">
7983
<Setter Property="mah:TextBoxHelper.Watermark"
80-
Value="{x:Static localization:StaticStrings.ExampleSnmpOids}" />
84+
Value="{x:Static localization:StaticStrings.ExampleSnmpOids}" />
8185
</DataTrigger>
8286
</Style.Triggers>
8387
</Style>
@@ -89,7 +93,7 @@
8993
<validators:SNMPOIDValidator ValidatesOnTargetUpdated="True">
9094
<validators:SNMPOIDValidator.Wrapper>
9195
<validators:SNMPOIDDependencyObjectWrapper
92-
Mode="{Binding Data.Mode, Source={StaticResource BindingProxy}}" />
96+
Mode="{Binding Data.Mode, Source={StaticResource BindingProxy}}" />
9397
</validators:SNMPOIDValidator.Wrapper>
9498
</validators:SNMPOIDValidator>
9599
</Binding.ValidationRules>
@@ -101,17 +105,17 @@
101105
</Grid>
102106
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right">
103107
<Button Content="{x:Static localization:Strings.Save}" Command="{Binding SaveCommand}" IsDefault="True"
104-
Margin="0,0,10,0">
108+
Margin="0,0,10,0">
105109
<Button.Style>
106110
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource HighlightedButton}">
107111
<Setter Property="IsEnabled" Value="False" />
108112
<Style.Triggers>
109113
<MultiDataTrigger>
110114
<MultiDataTrigger.Conditions>
111115
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=TextBoxName}"
112-
Value="False" />
116+
Value="False" />
113117
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=TextBoxOID}"
114-
Value="False" />
118+
Value="False" />
115119
<Condition Binding="{Binding InfoChanged}" Value="True" />
116120
</MultiDataTrigger.Conditions>
117121
<MultiDataTrigger.Setters>
@@ -123,7 +127,7 @@
123127
</Button.Style>
124128
</Button>
125129
<Button Content="{x:Static localization:Strings.Cancel}" Command="{Binding CancelCommand}" IsCancel="True"
126-
Style="{StaticResource DefaultButton}" />
130+
Style="{StaticResource DefaultButton}" />
127131
</StackPanel>
128132
</Grid>
129-
</UserControl>
133+
</simpleChildWindow:ChildWindow>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System;
2+
using System.Windows;
3+
using System.Windows.Threading;
4+
5+
namespace NETworkManager.Views;
6+
7+
public partial class SNMPOIDProfileChildWindow
8+
{
9+
public SNMPOIDProfileChildWindow()
10+
{
11+
InitializeComponent();
12+
}
13+
14+
private void ChildWindow_OnLoaded(object sender, RoutedEventArgs e)
15+
{
16+
Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, new Action(delegate
17+
{
18+
TextBoxName.Focus();
19+
}));
20+
}
21+
}

Source/NETworkManager/Views/SNMPOIDProfileDialog.xaml.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

Source/NETworkManager/Views/SNMPSettingsView.xaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
xmlns:validators="clr-namespace:NETworkManager.Validators;assembly=NETworkManager.Validators"
1010
xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
1111
xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
12-
xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
13-
dialogs:DialogParticipation.Register="{Binding}"
1412
mc:Ignorable="d" d:DataContext="{d:DesignInstance viewModels:SNMPSettingsViewModel}">
1513
<StackPanel>
1614
<TextBlock Text="{x:Static localization:Strings.SNMP}" Style="{StaticResource HeaderTextBlock}" />

Source/NETworkManager/Views/SNMPSettingsView.xaml.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
using System.Windows;
22
using System.Windows.Controls;
33
using System.Windows.Input;
4-
using MahApps.Metro.Controls.Dialogs;
54
using NETworkManager.ViewModels;
65

76
namespace NETworkManager.Views;
87

98
public partial class SNMPSettingsView
109
{
11-
private readonly SNMPSettingsViewModel _viewModel = new(DialogCoordinator.Instance);
10+
private readonly SNMPSettingsViewModel _viewModel = new();
1211

1312
public SNMPSettingsView()
1413
{

0 commit comments

Comments
 (0)