Skip to content

Commit f7a37d6

Browse files
committed
Feature: Migration done & cleanup
1 parent b7a6300 commit f7a37d6

17 files changed

+214
-229
lines changed

Source/NETworkManager.Controls/MultiSelectDataGrid.cs

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
using System.Collections;
2+
using System.Collections.Specialized;
23
using System.Windows;
34
using System.Windows.Controls;
45

56
namespace NETworkManager.Controls;
67

78
public class MultiSelectDataGrid : DataGrid
89
{
10+
private bool _isUpdatingSelection;
11+
912
public static readonly DependencyProperty SelectedItemsListProperty =
1013
DependencyProperty.Register("SelectedItemsList", typeof(IList), typeof(MultiSelectDataGrid),
11-
new PropertyMetadata(null));
14+
new PropertyMetadata(null, OnSelectedItemsListChanged));
1215

1316
public MultiSelectDataGrid()
1417
{
@@ -21,8 +24,81 @@ public IList SelectedItemsList
2124
set => SetValue(SelectedItemsListProperty, value);
2225
}
2326

27+
private static void OnSelectedItemsListChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
28+
{
29+
if (d is not MultiSelectDataGrid dataGrid)
30+
return;
31+
32+
dataGrid.UnsubscribeFromCollectionChanged(e.OldValue as IList);
33+
dataGrid.SubscribeToCollectionChanged(e.NewValue as IList);
34+
dataGrid.UpdateSelectedItems();
35+
}
36+
37+
private void SubscribeToCollectionChanged(IList list)
38+
{
39+
if (list is INotifyCollectionChanged observableCollection)
40+
{
41+
observableCollection.CollectionChanged += OnSelectedItemsListCollectionChanged;
42+
}
43+
}
44+
45+
private void UnsubscribeFromCollectionChanged(IList list)
46+
{
47+
if (list is INotifyCollectionChanged observableCollection)
48+
{
49+
observableCollection.CollectionChanged -= OnSelectedItemsListCollectionChanged;
50+
}
51+
}
52+
53+
private void OnSelectedItemsListCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
54+
{
55+
UpdateSelectedItems();
56+
}
57+
58+
private void UpdateSelectedItems()
59+
{
60+
if (_isUpdatingSelection)
61+
return;
62+
63+
_isUpdatingSelection = true;
64+
65+
try
66+
{
67+
SelectedItems.Clear();
68+
69+
if (SelectedItemsList != null)
70+
{
71+
foreach (var item in SelectedItemsList)
72+
{
73+
SelectedItems.Add(item);
74+
}
75+
}
76+
}
77+
finally
78+
{
79+
_isUpdatingSelection = false;
80+
}
81+
}
82+
2483
private void DataGridMultiItemSelect_SelectionChanged(object sender, SelectionChangedEventArgs e)
2584
{
26-
SelectedItemsList = SelectedItems;
85+
if (_isUpdatingSelection || SelectedItemsList == null)
86+
return;
87+
88+
_isUpdatingSelection = true;
89+
90+
try
91+
{
92+
SelectedItemsList.Clear();
93+
94+
foreach (var item in SelectedItems)
95+
{
96+
SelectedItemsList.Add(item);
97+
}
98+
}
99+
finally
100+
{
101+
_isUpdatingSelection = false;
102+
}
27103
}
28104
}

Source/NETworkManager.Settings/AppearanceManager.cs

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using ControlzEx.Theming;
2-
using MahApps.Metro.Controls.Dialogs;
32
using MahApps.Metro.Theming;
43
using NETworkManager.Models.Appearance;
54
using System;
@@ -42,11 +41,6 @@ public static class AppearanceManager
4241
/// </summary>
4342
private const string ThemeFolderName = "Themes";
4443

45-
/// <summary>
46-
/// Contains the default settings for a new <see cref="BaseMetroDialog" />
47-
/// </summary>
48-
public static readonly MetroDialogSettings MetroDialog = new();
49-
5044
/// <summary>
5145
/// List who contains all MahApps.Metro themes.
5246
/// </summary>
@@ -82,16 +76,7 @@ static AppearanceManager()
8276

8377
ThemeManager.Current.ThemeChanged += Current_ThemeChanged;
8478

85-
LoadCustomThemes();
86-
87-
MetroDialog.CustomResourceDictionary = new ResourceDictionary
88-
{
89-
Source = new Uri("NETworkManager;component/Resources/Styles/MetroDialogStyles.xaml",
90-
UriKind.RelativeOrAbsolute)
91-
};
92-
93-
MetroDialog.DialogButtonFontSize = 14;
94-
MetroDialog.DialogMessageFontSize = 14;
79+
LoadCustomThemes();
9580
}
9681
#endregion
9782

Source/NETworkManager/App.xaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
<ResourceDictionary Source="/Resources/Styles/LoadingIndicatorArcsStyle.xaml" />
3636
<ResourceDictionary Source="/Resources/Styles/LoadingIndicatorPulseStyle.xaml" />
3737
<ResourceDictionary Source="/Resources/Styles/MenuItemStyles.xaml" />
38-
<ResourceDictionary Source="/Resources/Styles/MetroDialogStyles.xaml" />
3938
<ResourceDictionary Source="/Resources/Styles/NumericUpDownStyles.xaml" />
4039
<ResourceDictionary Source="/Resources/Styles/RadioButtonStyles.xaml" />
4140
<ResourceDictionary Source="/Resources/Styles/ScrollBarStyles.xaml" />

Source/NETworkManager/Controls/DragablzTabHostWindow.xaml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@
1010
xmlns:controls="clr-namespace:NETworkManager.Controls"
1111
xmlns:application="clr-namespace:NETworkManager.Models;assembly=NETworkManager.Models"
1212
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
13-
xmlns:wpfHelpers="clr-namespace:NETworkManager.Utilities.WPF;assembly=NETworkManager.Utilities.WPF"
14-
xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
13+
xmlns:wpfHelpers="clr-namespace:NETworkManager.Utilities.WPF;assembly=NETworkManager.Utilities.WPF"
1514
mc:Ignorable="d"
1615
Style="{DynamicResource DefaultWindow}" MinWidth="800" Width="1024" Height="768" MinHeight="600"
17-
TitleAlignment="Left" Activated="MetroWindow_Activated"
18-
dialogs:DialogParticipation.Register="{Binding}"
16+
TitleAlignment="Left" Activated="MetroWindow_Activated"
1917
Closing="DragablzTabHostWindow_OnClosing"
2018
d:DataContext="{d:DesignInstance controls:DragablzTabHostWindow}">
2119
<mah:MetroWindow.Resources>

Source/NETworkManager/Controls/DragablzTabHostWindow.xaml.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Dragablz;
2-
using MahApps.Metro.Controls.Dialogs;
32
using NETworkManager.Localization;
43
using NETworkManager.Localization.Resources;
54
using NETworkManager.Models;
@@ -224,13 +223,13 @@ private async void RemoteDesktop_SendCtrlAltDelAction(object view)
224223
}
225224
catch (Exception ex)
226225
{
227-
ConfigurationManager.OnDialogOpen();
226+
//ConfigurationManager.OnDialogOpen();
228227

229-
await this.ShowMessageAsync(Strings.Error,
230-
string.Format("{0}\n\nMessage:\n{1}",
231-
Strings.CouldNotSendKeystroke, ex.Message));
228+
// Use built-in message box because we have visual issues in the dragablz window
229+
System.Windows.MessageBox.Show(string.Format("{0}\n\nMessage:\n{1}",
230+
Strings.CouldNotSendKeystroke, ex.Message), Strings.Error, MessageBoxButton.OK, MessageBoxImage.Error);
232231

233-
ConfigurationManager.OnDialogClose();
232+
//ConfigurationManager.OnDialogClose();
234233
}
235234
}
236235

Source/NETworkManager/MainWindow.xaml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,12 @@
1010
xmlns:interactivity="http://schemas.microsoft.com/xaml/behaviors"
1111
xmlns:asf="clr-namespace:AirspaceFixer;assembly=AirspaceFixer"
1212
xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
13-
xmlns:settings="clr-namespace:NETworkManager.Settings;assembly=NETworkManager.Settings"
14-
xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
13+
xmlns:settings="clr-namespace:NETworkManager.Settings;assembly=NETworkManager.Settings"
1514
xmlns:resources="clr-namespace:NETworkManager.Properties"
1615
xmlns:networkManager="clr-namespace:NETworkManager"
1716
xmlns:models="clr-namespace:NETworkManager.Models;assembly=NETworkManager.Models"
1817
mc:Ignorable="d"
19-
Style="{DynamicResource ResourceKey=DefaultWindow}"
20-
dialogs:DialogParticipation.Register="{Binding }"
18+
Style="{DynamicResource ResourceKey=DefaultWindow}"
2119
MinWidth="800" MinHeight="600"
2220
Width="1024" Height="768"
2321
SaveWindowPosition="True" TitleAlignment="Left"

Source/NETworkManager/MainWindow.xaml.cs

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using Dragablz;
22
using log4net;
3-
using MahApps.Metro.Controls.Dialogs;
43
using MahApps.Metro.SimpleChildWindow;
54
using NETworkManager.Controls;
65
using NETworkManager.Documentation;
@@ -34,6 +33,7 @@
3433
using System.Windows.Interop;
3534
using System.Windows.Markup;
3635
using System.Windows.Threading;
36+
using static System.Runtime.InteropServices.JavaScript.JSType;
3737
using Application = System.Windows.Application;
3838
using ContextMenu = System.Windows.Controls.ContextMenu;
3939
using MouseEventArgs = System.Windows.Forms.MouseEventArgs;
@@ -460,12 +460,8 @@ private async void WelcomeThenLoadAsync()
460460
// Show a note if settings have been reset
461461
if (ConfigurationManager.Current.ShowSettingsResetNoteOnStartup)
462462
{
463-
var settings = AppearanceManager.MetroDialog;
464-
settings.AffirmativeButtonText = Strings.OK;
465-
466-
await this.ShowMessageAsync(Strings.SettingsHaveBeenReset,
467-
Strings.SettingsFileFoundWasCorruptOrNotCompatibleMessage,
468-
MessageDialogStyle.Affirmative, settings);
463+
await DialogHelper.ShowMessageAsync(Application.Current.MainWindow, Strings.SettingsHaveBeenReset,
464+
Strings.SettingsFileFoundWasCorruptOrNotCompatibleMessage, ChildWindowIcon.Error);
469465
}
470466

471467
// Show welcome dialog
@@ -593,19 +589,14 @@ private async void MetroWindowMain_Closing(object sender, CancelEventArgs e)
593589
if (WindowState == WindowState.Minimized)
594590
BringWindowToFront();
595591

596-
var settings = AppearanceManager.MetroDialog;
592+
ConfigurationManager.OnDialogOpen();
597593

598-
settings.AffirmativeButtonText = Strings.Close;
599-
settings.NegativeButtonText = Strings.Cancel;
600-
settings.DefaultButtonFocus = MessageDialogResult.Affirmative;
594+
var result = await DialogHelper.ShowConfirmationMessageAsync(Application.Current.MainWindow, Strings.ConfirmClose,
595+
Strings.ConfirmCloseMessage, ChildWindowIcon.Question, Strings.Close, Strings.Cancel);
601596

602-
ConfigurationManager.OnDialogOpen();
603-
var result = await this.ShowMessageAsync(Strings.ConfirmClose,
604-
Strings.ConfirmCloseMessage, MessageDialogStyle.AffirmativeAndNegative,
605-
settings);
606597
ConfigurationManager.OnDialogClose();
607598

608-
if (result != MessageDialogResult.Affirmative)
599+
if (!result)
609600
return;
610601

611602
_isClosing = true;
@@ -1047,12 +1038,9 @@ private async void EventSystem_RedirectDataToApplicationEvent(object sender, Eve
10471038
// Show error message if the application was not found
10481039
if (application == null)
10491040
{
1050-
var settings = AppearanceManager.MetroDialog;
1051-
settings.AffirmativeButtonText = Strings.OK;
1052-
1053-
await this.ShowMessageAsync(Strings.Error,
1041+
await DialogHelper.ShowMessageAsync(Application.Current.MainWindow, Strings.Error,
10541042
string.Format(Strings.CouldNotFindApplicationXXXMessage,
1055-
data.Application.ToString()));
1043+
$"{data.Application}"), ChildWindowIcon.Error);
10561044

10571045
return;
10581046
}
@@ -1464,16 +1452,10 @@ private async void SwitchProfile(ProfileFileInfo info)
14641452
ConfigurationManager.Current.ProfileManagerErrorMessage =
14651453
Strings.ProfileFileCouldNotBeLoaded;
14661454

1467-
var settings = AppearanceManager.MetroDialog;
1468-
settings.AffirmativeButtonText = Strings.OK;
1469-
1470-
settings.DefaultButtonFocus = MessageDialogResult.Affirmative;
1471-
14721455
ConfigurationManager.OnDialogOpen();
14731456

1474-
await this.ShowMessageAsync(Strings.ProfileFileCouldNotBeLoaded,
1475-
string.Format(Strings.ProfileFileCouldNotBeLoadedMessage, ex.Message),
1476-
MessageDialogStyle.Affirmative, settings);
1457+
await DialogHelper.ShowMessageAsync(Application.Current.MainWindow, Strings.ProfileFileCouldNotBeLoaded,
1458+
string.Format(Strings.ProfileFileCouldNotBeLoadedMessage, ex.Message), ChildWindowIcon.Error);
14771459

14781460
ConfigurationManager.OnDialogClose();
14791461
}

Source/NETworkManager/Resources/Styles/MetroDialogStyles.xaml

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

Source/NETworkManager/ViewModels/LookupPortViewModel.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -390,12 +390,9 @@ private Task ExportAction()
390390
{
391391
Log.Error("Error while exporting data as " + instance.FileType, ex);
392392

393-
var settings = AppearanceManager.MetroDialog;
394-
settings.AffirmativeButtonText = Strings.OK;
395-
396393
await DialogHelper.ShowMessageAsync(Application.Current.MainWindow, Strings.Error,
397394
Strings.AnErrorOccurredWhileExportingTheData + Environment.NewLine +
398-
Environment.NewLine + ex.Message, ChildWindowIcon.Error);
395+
Environment.NewLine + ex.Message, ChildWindowIcon.Error);
399396
}
400397

401398
SettingsManager.Current.Lookup_Port_ExportFileType = instance.FileType;

0 commit comments

Comments
 (0)