Skip to content

Commit 4e24b3d

Browse files
committed
Grouping by server address added, copy dnsserver/port
1 parent ea7a0af commit 4e24b3d

2 files changed

Lines changed: 93 additions & 26 deletions

File tree

Source/NETworkManager/ViewModels/Applications/DNSLookupViewModel.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using System.Windows;
77
using System.Windows.Input;
88
using NETworkManager.Collections;
9-
using System.Net.NetworkInformation;
109
using System.Windows.Threading;
1110
using System.Diagnostics;
1211
using Heijden.DNS;
@@ -287,6 +286,7 @@ public DNSLookupViewModel()
287286
{
288287
_hostHistoryView = CollectionViewSource.GetDefaultView(SettingsManager.Current.DNSLookup_HostHistory);
289288
_lookupResultView = CollectionViewSource.GetDefaultView(LookupResult);
289+
_lookupResultView.GroupDescriptions.Add(new PropertyGroupDescription("DNSServer"));
290290

291291
LoadSettings();
292292

@@ -363,6 +363,26 @@ private void CopySelectedResultAction()
363363
{
364364
Clipboard.SetText(SelectedLookupResult.Result);
365365
}
366+
367+
public ICommand CopySelectedDNSServerCommand
368+
{
369+
get { return new RelayCommand(p => CopySelectedDNSServerAction()); }
370+
}
371+
372+
private void CopySelectedDNSServerAction()
373+
{
374+
Clipboard.SetText(SelectedLookupResult.DNSServer);
375+
}
376+
377+
public ICommand CopySelectedPortCommand
378+
{
379+
get { return new RelayCommand(p => CopySelectedPortAction()); }
380+
}
381+
382+
private void CopySelectedPortAction()
383+
{
384+
Clipboard.SetText(SelectedLookupResult.Port.ToString());
385+
}
366386
#endregion
367387

368388
#region Methods

Source/NETworkManager/Views/Applications/DNSLookupView.xaml

Lines changed: 72 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -32,31 +32,31 @@
3232
<RowDefinition Height="Auto" />
3333
<RowDefinition Height="Auto" />
3434
</Grid.RowDefinitions>
35-
<Grid Grid.Row="0" Margin="0,0,0,10">
36-
<Grid.ColumnDefinitions>
37-
<ColumnDefinition Width="Auto" />
38-
<ColumnDefinition Width="10" />
39-
<ColumnDefinition Width="*" />
40-
<ColumnDefinition Width="10" />
41-
<ColumnDefinition Width="Auto" />
42-
</Grid.ColumnDefinitions>
43-
<Grid.RowDefinitions>
44-
<RowDefinition Height="Auto" />
45-
<RowDefinition Height="10" />
46-
<RowDefinition Height="Auto" />
47-
</Grid.RowDefinitions>
48-
<TextBlock Grid.Column="0" Grid.Row="0" Text="{DynamicResource String_Host}" Style="{DynamicResource DefaultTextBlock}" VerticalAlignment="Center" />
49-
<ComboBox x:Name="cbHost" Grid.Column="2" Grid.Row="0" Height="{Binding ElementName=cbType, Path=ActualHeight}" ItemsSource="{Binding HostHistoryView}" mah:TextBoxHelper.Watermark="{DynamicResource String_Watermark_ExampleHostnameOrIPAddress}" IsEnabled="{Binding IsLookupRunning, Converter={StaticResource BooleanReverseConverter}}" Style="{StaticResource HistoryComboBox}">
50-
<ComboBox.Text>
51-
<Binding Path="Host" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
52-
<Binding.ValidationRules>
53-
<Validator:EmptyValidator ValidatesOnTargetUpdated="True" />
54-
</Binding.ValidationRules>
55-
</Binding>
56-
</ComboBox.Text>
57-
</ComboBox>
58-
<TextBlock Grid.Column="0" Grid.Row="2" Text="{DynamicResource String_Type}" Style="{DynamicResource DefaultTextBlock}" VerticalAlignment="Center" />
59-
<ComboBox x:Name="cbType" Grid.Column="2" Grid.Row="2" ItemsSource="{Binding Types}" SelectedItem="{Binding Type}" Width="200" HorizontalAlignment="Left" />
35+
<Grid Grid.Row="0" Margin="0,0,0,10">
36+
<Grid.ColumnDefinitions>
37+
<ColumnDefinition Width="Auto" />
38+
<ColumnDefinition Width="10" />
39+
<ColumnDefinition Width="*" />
40+
<ColumnDefinition Width="10" />
41+
<ColumnDefinition Width="Auto" />
42+
</Grid.ColumnDefinitions>
43+
<Grid.RowDefinitions>
44+
<RowDefinition Height="Auto" />
45+
<RowDefinition Height="10" />
46+
<RowDefinition Height="Auto" />
47+
</Grid.RowDefinitions>
48+
<TextBlock Grid.Column="0" Grid.Row="0" Text="{DynamicResource String_Host}" Style="{DynamicResource DefaultTextBlock}" VerticalAlignment="Center" />
49+
<ComboBox x:Name="cbHost" Grid.Column="2" Grid.Row="0" Height="{Binding ElementName=cbType, Path=ActualHeight}" ItemsSource="{Binding HostHistoryView}" mah:TextBoxHelper.Watermark="{DynamicResource String_Watermark_ExampleHostnameOrIPAddress}" IsEnabled="{Binding IsLookupRunning, Converter={StaticResource BooleanReverseConverter}}" Style="{StaticResource HistoryComboBox}">
50+
<ComboBox.Text>
51+
<Binding Path="Host" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
52+
<Binding.ValidationRules>
53+
<Validator:EmptyValidator ValidatesOnTargetUpdated="True" />
54+
</Binding.ValidationRules>
55+
</Binding>
56+
</ComboBox.Text>
57+
</ComboBox>
58+
<TextBlock Grid.Column="0" Grid.Row="2" Text="{DynamicResource String_Type}" Style="{DynamicResource DefaultTextBlock}" VerticalAlignment="Center" />
59+
<ComboBox x:Name="cbType" Grid.Column="2" Grid.Row="2" ItemsSource="{Binding Types}" SelectedItem="{Binding Type}" Width="200" HorizontalAlignment="Left" />
6060
<Button Grid.Column="4" Grid.Row="2" Command="{Binding LookupCommand}" IsDefault="{Binding IsLookupRunning, Converter={StaticResource BooleanReverseConverter}}" HorizontalAlignment="Right">
6161
<Button.Resources>
6262
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ImageWithTextButton}">
@@ -165,6 +165,24 @@
165165
</Rectangle>
166166
</MenuItem.Icon>
167167
</MenuItem>
168+
<MenuItem Header="{DynamicResource String_DNSServer}" Command="{Binding CopySelectedDNSServerCommand}">
169+
<MenuItem.Icon>
170+
<Rectangle Width="16" Height="16" Fill="{DynamicResource BlackColorBrush}">
171+
<Rectangle.OpacityMask>
172+
<VisualBrush Stretch="Uniform" Visual="{IconPacks:Material Kind=ContentCopy}" />
173+
</Rectangle.OpacityMask>
174+
</Rectangle>
175+
</MenuItem.Icon>
176+
</MenuItem>
177+
<MenuItem Header="{DynamicResource String_Port}" Command="{Binding CopySelectedPortCommand}">
178+
<MenuItem.Icon>
179+
<Rectangle Width="16" Height="16" Fill="{DynamicResource BlackColorBrush}">
180+
<Rectangle.OpacityMask>
181+
<VisualBrush Stretch="Uniform" Visual="{IconPacks:Material Kind=ContentCopy}" />
182+
</Rectangle.OpacityMask>
183+
</Rectangle>
184+
</MenuItem.Icon>
185+
</MenuItem>
168186
</MenuItem>
169187
</ContextMenu>
170188
</DataGrid.Resources>
@@ -177,6 +195,35 @@
177195
</Style.Triggers>
178196
</Style>
179197
</DataGrid.RowStyle>
198+
<DataGrid.GroupStyle>
199+
<GroupStyle>
200+
<GroupStyle.HeaderTemplate>
201+
<DataTemplate>
202+
<StackPanel>
203+
<TextBlock Text="{Binding Path=Name}" />
204+
</StackPanel>
205+
</DataTemplate>
206+
</GroupStyle.HeaderTemplate>
207+
<GroupStyle.ContainerStyle>
208+
<Style TargetType="{x:Type GroupItem}">
209+
<Setter Property="Template">
210+
<Setter.Value>
211+
<ControlTemplate TargetType="{x:Type GroupItem}">
212+
<Expander IsExpanded="True">
213+
<Expander.Header>
214+
<StackPanel Orientation="Horizontal">
215+
<TextBlock Text="{Binding Path=Name}" />
216+
</StackPanel>
217+
</Expander.Header>
218+
<ItemsPresenter />
219+
</Expander>
220+
</ControlTemplate>
221+
</Setter.Value>
222+
</Setter>
223+
</Style>
224+
</GroupStyle.ContainerStyle>
225+
</GroupStyle>
226+
</DataGrid.GroupStyle>
180227
<DataGrid.Columns>
181228
<DataGridTextColumn Header="{DynamicResource String_Name}" Binding="{Binding Name}" MinWidth="150" />
182229
<DataGridTextColumn Header="{DynamicResource String_TTL}" Binding="{Binding TTL}" MinWidth="80" />

0 commit comments

Comments
 (0)