Skip to content

Commit f56aaf6

Browse files
committed
Feature: More dialogs
1 parent d6d2c74 commit f56aaf6

File tree

6 files changed

+88
-71
lines changed

6 files changed

+88
-71
lines changed

Source/NETworkManager/ViewModels/IPScannerSettingsViewModel.cs

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using MahApps.Metro.Controls.Dialogs;
2+
using MahApps.Metro.SimpleChildWindow;
23
using NETworkManager.Localization.Resources;
34
using NETworkManager.Settings;
45
using NETworkManager.Utilities;
@@ -23,11 +24,6 @@ public class IPScannerSettingsViewModel : ViewModelBase
2324
/// </summary>
2425
private readonly bool _isLoading;
2526

26-
/// <summary>
27-
/// The dialog coordinator instance.
28-
/// </summary>
29-
private readonly IDialogCoordinator _dialogCoordinator;
30-
3127
/// <summary>
3228
/// Backing field for <see cref="ShowAllResults"/>.
3329
/// </summary>
@@ -373,13 +369,10 @@ public int MaxPortThreads
373369
/// <summary>
374370
/// Initializes a new instance of the <see cref="IPScannerSettingsViewModel"/> class.
375371
/// </summary>
376-
/// <param name="instance">The dialog coordinator instance.</param>
377-
public IPScannerSettingsViewModel(IDialogCoordinator instance)
372+
public IPScannerSettingsViewModel()
378373
{
379374
_isLoading = true;
380375

381-
_dialogCoordinator = instance;
382-
383376
CustomCommands = CollectionViewSource.GetDefaultView(SettingsManager.Current.IPScanner_CustomCommands);
384377
CustomCommands.SortDescriptions.Add(new SortDescription(nameof(CustomCommandInfo.Name),
385378
ListSortDirection.Ascending));
@@ -457,56 +450,67 @@ private void DeleteCustomCommandAction()
457450
#region Methods
458451

459452
/// <summary>
460-
/// Adds a new custom command.
453+
/// Add a new custom command.
461454
/// </summary>
462-
private async void AddCustomCommand()
455+
private Task AddCustomCommand()
463456
{
464-
var customDialog = new CustomDialog
465-
{
466-
Title = Strings.AddCustomCommand
467-
};
457+
var childWindow = new CustomCommandChildWindow();
468458

469-
var customCommandViewModel = new CustomCommandViewModel(instance =>
459+
var childWindowViewModel = new CustomCommandViewModel(instance =>
460+
{
461+
childWindow.IsOpen = false;
462+
ConfigurationManager.Current.IsChildWindowOpen = false;
463+
464+
SettingsManager.Current.IPScanner_CustomCommands.Add(new CustomCommandInfo(
465+
instance.ID,
466+
instance.Name,
467+
instance.FilePath,
468+
instance.Arguments)
469+
);
470+
}, _ =>
470471
{
471-
_dialogCoordinator.HideMetroDialogAsync(this, customDialog);
472+
childWindow.IsOpen = false;
473+
ConfigurationManager.Current.IsChildWindowOpen = false;
474+
});
472475

473-
SettingsManager.Current.IPScanner_CustomCommands.Add(new CustomCommandInfo(instance.ID, instance.Name,
474-
instance.FilePath, instance.Arguments));
475-
}, _ => { _dialogCoordinator.HideMetroDialogAsync(this, customDialog); });
476+
childWindow.Title = Strings.AddCustomCommand;
476477

477-
customDialog.Content = new CustomCommandDialog
478-
{
479-
DataContext = customCommandViewModel
480-
};
478+
childWindow.DataContext = childWindowViewModel;
479+
480+
ConfigurationManager.Current.IsChildWindowOpen = true;
481481

482-
await _dialogCoordinator.ShowMetroDialogAsync(this, customDialog);
482+
return Application.Current.MainWindow.ShowChildWindowAsync(childWindow);
483483
}
484484

485485
/// <summary>
486-
/// Edits the selected custom command.
486+
/// Edit the selected custom command.
487487
/// </summary>
488-
public async void EditCustomCommand()
488+
public Task EditCustomCommand()
489489
{
490-
var customDialog = new CustomDialog
491-
{
492-
Title = Strings.EditCustomCommand
493-
};
494490

495-
var customCommandViewModel = new CustomCommandViewModel(instance =>
491+
var childWindow = new CustomCommandChildWindow();
492+
493+
var childWindowViewModel = new CustomCommandViewModel(instance =>
496494
{
497-
_dialogCoordinator.HideMetroDialogAsync(this, customDialog);
495+
childWindow.IsOpen = false;
496+
ConfigurationManager.Current.IsChildWindowOpen = false;
498497

499498
SettingsManager.Current.IPScanner_CustomCommands.Remove(SelectedCustomCommand);
500499
SettingsManager.Current.IPScanner_CustomCommands.Add(new CustomCommandInfo(instance.ID, instance.Name,
501500
instance.FilePath, instance.Arguments));
502-
}, _ => { _dialogCoordinator.HideMetroDialogAsync(this, customDialog); }, true, SelectedCustomCommand);
503-
504-
customDialog.Content = new CustomCommandDialog
501+
}, _ =>
505502
{
506-
DataContext = customCommandViewModel
507-
};
503+
childWindow.IsOpen = false;
504+
ConfigurationManager.Current.IsChildWindowOpen = false;
505+
}, true, SelectedCustomCommand);
506+
507+
childWindow.Title = Strings.EditCustomCommand;
508+
509+
childWindow.DataContext = childWindowViewModel;
510+
511+
ConfigurationManager.Current.IsChildWindowOpen = true;
508512

509-
await _dialogCoordinator.ShowMetroDialogAsync(this, customDialog);
513+
return Application.Current.MainWindow.ShowChildWindowAsync(childWindow);
510514
}
511515

512516
/// <summary>

Source/NETworkManager/Views/CustomCommandDialog.xaml renamed to Source/NETworkManager/Views/CustomCommandChildWindow.xaml

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<UserControl x:Class="NETworkManager.Views.CustomCommandDialog"
1+
<simpleChildWindow:ChildWindow x:Class="NETworkManager.Views.CustomCommandChildWindow"
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"
@@ -7,9 +7,13 @@
77
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
88
xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
99
xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
10-
mc:Ignorable="d" Loaded="UserControl_Loaded"
11-
d:DataContext="{d:DesignInstance viewModels:CustomCommandViewModel}">
12-
<Grid Margin="0,20">
10+
xmlns:simpleChildWindow="clr-namespace:MahApps.Metro.SimpleChildWindow;assembly=MahApps.Metro.SimpleChildWindow"
11+
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
12+
CloseButtonCommand="{Binding Path=CancelCommand}"
13+
Style="{StaticResource DefaultChildWindow}"
14+
Loaded="ChildWindow_OnLoaded"
15+
mc:Ignorable="d" d:DataContext="{d:DesignInstance viewModels:CustomCommandViewModel}">
16+
<Grid Margin="10">
1317
<Grid.RowDefinitions>
1418
<RowDefinition Height="*" />
1519
<RowDefinition Height="10" />
@@ -34,8 +38,10 @@
3438
<RowDefinition Height="10" />
3539
<RowDefinition Height="Auto" />
3640
</Grid.RowDefinitions>
37-
<TextBlock Grid.Column="0" Grid.Row="0" Text="{x:Static localization:Strings.Name}" />
38-
<TextBox x:Name="TextBoxName" Grid.Column="2" Grid.Row="0"
41+
<TextBlock Grid.Column="0" Grid.Row="0"
42+
Text="{x:Static localization:Strings.Name}" />
43+
<TextBox x:Name="TextBoxName"
44+
Grid.Column="2" Grid.Row="0"
3945
mah:TextBoxHelper.Watermark="{x:Static localization:StaticStrings.InternetExplorer}">
4046
<TextBox.Style>
4147
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource DefaultTextBox}">
@@ -66,7 +72,8 @@
6672
</Style>
6773
</TextBox.Style>
6874
</TextBox>
69-
<TextBlock Grid.Column="0" Grid.Row="2" Text="{x:Static localization:Strings.FilePath}" />
75+
<TextBlock Grid.Column="0" Grid.Row="2"
76+
Text="{x:Static localization:Strings.FilePath}" />
7077
<TextBox x:Name="TextBoxFilePath" Grid.Column="2" Grid.Row="2"
7178
mah:TextBoxHelper.Watermark="{x:Static localization:StaticStrings.IExploreExe}">
7279
<TextBox.Text>
@@ -77,18 +84,23 @@
7784
</Binding>
7885
</TextBox.Text>
7986
</TextBox>
80-
<Rectangle Grid.Column="4" Grid.Row="2" Width="24" Height="24" VerticalAlignment="Top"
87+
<Rectangle Grid.Column="4" Grid.Row="2"
88+
Width="24" Height="24"
89+
VerticalAlignment="Top"
8190
ToolTip="{x:Static localization:Strings.HelpMessage_CustomCommandVariables}"
8291
Style="{StaticResource HelpImageRectangle}">
8392
<Rectangle.Resources>
8493
<Style TargetType="{x:Type ToolTip}" BasedOn="{StaticResource HelpToolTip}" />
8594
</Rectangle.Resources>
8695
</Rectangle>
8796
<TextBlock Grid.Column="0" Grid.Row="4" Text="{x:Static localization:Strings.Arguments}" />
88-
<TextBox x:Name="TextBoxArguments" Grid.Column="2" Grid.Row="4"
97+
<TextBox x:Name="TextBoxArguments"
98+
Grid.Column="2" Grid.Row="4"
8999
Text="{Binding Arguments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
90100
mah:TextBoxHelper.Watermark="{x:Static localization:StaticStrings.ExampleCustomCommandVariableHostname}" />
91-
<Rectangle Grid.Column="4" Grid.Row="4" Width="24" Height="24" VerticalAlignment="Top"
101+
<Rectangle Grid.Column="4" Grid.Row="4"
102+
Width="24" Height="24"
103+
VerticalAlignment="Top"
92104
ToolTip="{x:Static localization:Strings.HelpMessage_CustomCommandVariables}"
93105
Style="{StaticResource HelpImageRectangle}">
94106
<Rectangle.Resources>
@@ -106,7 +118,7 @@
106118
<MultiDataTrigger>
107119
<MultiDataTrigger.Conditions>
108120
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=TextBoxName}"
109-
Value="False" />
121+
Value="False" />
110122
<Condition
111123
Binding="{Binding Path=(Validation.HasError), ElementName=TextBoxFilePath}"
112124
Value="False" />
@@ -127,4 +139,4 @@
127139
Style="{StaticResource DefaultButton}" />
128140
</StackPanel>
129141
</Grid>
130-
</UserControl>
142+
</simpleChildWindow:ChildWindow>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
using System.Windows.Threading;
3+
4+
namespace NETworkManager.Views;
5+
6+
public partial class CustomCommandChildWindow
7+
{
8+
public CustomCommandChildWindow()
9+
{
10+
InitializeComponent();
11+
}
12+
13+
private void ChildWindow_OnLoaded(object sender, System.Windows.RoutedEventArgs e)
14+
{
15+
Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, new Action(delegate
16+
{
17+
TextBoxName.Focus();
18+
}));
19+
}
20+
}

Source/NETworkManager/Views/CustomCommandDialog.xaml.cs

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

Source/NETworkManager/Views/IPScannerSettingsView.xaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
1010
xmlns:utilities="clr-namespace:NETworkManager.Utilities;assembly=NETworkManager.Utilities"
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:IPScannerSettingsViewModel}">
1513
<StackPanel>
1614
<TextBlock Text="{x:Static localization:Strings.IPScanner}" Style="{StaticResource HeaderTextBlock}" />

Source/NETworkManager/Views/IPScannerSettingsView.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 IPScannerSettingsView
109
{
11-
private readonly IPScannerSettingsViewModel _viewModel = new(DialogCoordinator.Instance);
10+
private readonly IPScannerSettingsViewModel _viewModel = new();
1211

1312
public IPScannerSettingsView()
1413
{

0 commit comments

Comments
 (0)