diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index e844774248..c0570eda3a 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,19 +1,32 @@
-**Please provide some details about this pull request:**
--
+## Changes proposed in this pull request
+
-
-
-Fixes #{issue number}
+## Related issue(s)
+
+- Fixes #{issue number}
+
+## Copilot generated summary
+
+Provide a Copilot generated summary of the changes in this pull request.
+
+
+Copilot summary
+
+{generated summary}
+
+
-**ToDo:**
+## To-Do
- [ ] Update [documentation](https://github.com/BornToBeRoot/NETworkManager/tree/main/Website/docs) to reflect this changes
- [ ] Update [changelog](https://github.com/BornToBeRoot/NETworkManager/tree/main/Website/docs/changelog) to reflect this changes
----
+## Contributing
**By submitting this pull request, I confirm the following:**
- [ ] I have read and understood the [contributing guidelines](https://github.com/BornToBeRoot/NETworkManager/blob/main/CONTRIBUTING.md) and the [code of conduct](https://github.com/BornToBeRoot/NETworkManager/blob/main/CODE_OF_CONDUCT.md).
- [ ] I have have added my name, username or email to the [contributors](https://github.com/BornToBeRoot/NETworkManager/blob/main/CONTRIBUTORS.md) list or don't want to.
-- [ ] The code or resource is compatible with the [GNU General Public License v3.0](https://github.com/BornToBeRoot/NETworkManager/blob/main/LICENSE).
\ No newline at end of file
+- [ ] The code or resource is compatible with the [GNU General Public License v3.0](https://github.com/BornToBeRoot/NETworkManager/blob/main/LICENSE).
diff --git a/Source/NETworkManager/App.xaml b/Source/NETworkManager/App.xaml
index 6c7b9ed511..ea78b717b3 100644
--- a/Source/NETworkManager/App.xaml
+++ b/Source/NETworkManager/App.xaml
@@ -17,21 +17,8 @@
Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.FlatButton.xaml" />
-
-
-
-
-
-
-
-
@@ -44,6 +31,8 @@
+
+
diff --git a/Source/NETworkManager/LoadingIndicators.cs b/Source/NETworkManager/LoadingIndicators.cs
new file mode 100644
index 0000000000..1953c304fe
--- /dev/null
+++ b/Source/NETworkManager/LoadingIndicators.cs
@@ -0,0 +1,139 @@
+using System.Windows;
+using System.Windows.Controls;
+
+namespace NETworkManager;
+
+///
+/// A control featuring a range of loading indicating animations.
+/// Source: https://github.com/zeluisping/LoadingIndicators.WPF
+///
+[TemplatePart(Name = "Border", Type = typeof(Border))]
+public class LoadingIndicator : Control
+{
+ ///
+ /// Identifies the dependency property.
+ ///
+ public static readonly DependencyProperty SpeedRatioProperty =
+ DependencyProperty.Register(nameof(SpeedRatio), typeof(double), typeof(LoadingIndicator), new PropertyMetadata(1d, (o, e) =>
+ {
+ LoadingIndicator li = (LoadingIndicator)o;
+
+ if (li.PART_Border == null || li.IsActive == false)
+ {
+ return;
+ }
+
+ foreach (VisualStateGroup group in VisualStateManager.GetVisualStateGroups(li.PART_Border))
+ {
+ if (group.Name == "ActiveStates")
+ {
+ foreach (VisualState state in group.States)
+ {
+ if (state.Name == "Active")
+ {
+ state.Storyboard.SetSpeedRatio(li.PART_Border, (double)e.NewValue);
+ }
+ }
+ }
+ }
+ }));
+
+ ///
+ /// Identifies the dependency property.
+ ///
+ public static readonly DependencyProperty IsActiveProperty =
+ DependencyProperty.Register(nameof(IsActive), typeof(bool), typeof(LoadingIndicator), new PropertyMetadata(true, (o, e) =>
+ {
+ LoadingIndicator li = (LoadingIndicator)o;
+
+ if (li.PART_Border == null)
+ {
+ return;
+ }
+
+ if ((bool)e.NewValue == false)
+ {
+ VisualStateManager.GoToElementState(li.PART_Border, "Inactive", false);
+ li.PART_Border.Visibility = Visibility.Collapsed;
+ }
+ else
+ {
+ VisualStateManager.GoToElementState(li.PART_Border, "Active", false);
+ li.PART_Border.Visibility = Visibility.Visible;
+
+ foreach (VisualStateGroup group in VisualStateManager.GetVisualStateGroups(li.PART_Border))
+ {
+ if (group.Name == "ActiveStates")
+ {
+ foreach (VisualState state in group.States)
+ {
+ if (state.Name == "Active")
+ {
+ state.Storyboard.SetSpeedRatio(li.PART_Border, li.SpeedRatio);
+ }
+ }
+ }
+ }
+ }
+ }));
+
+ // Variables
+ protected Border PART_Border;
+
+ ///
+ /// Get/set the speed ratio of the animation.
+ ///
+ public double SpeedRatio
+ {
+ get { return (double)GetValue(SpeedRatioProperty); }
+ set { SetValue(SpeedRatioProperty, value); }
+ }
+
+ ///
+ /// Get/set whether the loading indicator is active.
+ ///
+ public bool IsActive
+ {
+ get { return (bool)GetValue(IsActiveProperty); }
+ set { SetValue(IsActiveProperty, value); }
+ }
+
+ ///
+ /// When overridden in a derived class, is invoked whenever application code
+ /// or internal processes call System.Windows.FrameworkElement.ApplyTemplate().
+ ///
+ public override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+
+ PART_Border = (Border)GetTemplateChild("PART_Border");
+
+ if (PART_Border != null)
+ {
+ VisualStateManager.GoToElementState(PART_Border, (this.IsActive ? "Active" : "Inactive"), false);
+ foreach (VisualStateGroup group in VisualStateManager.GetVisualStateGroups(PART_Border))
+ {
+ if (group.Name == "ActiveStates")
+ {
+ foreach (VisualState state in group.States)
+ {
+ if (state.Name == "Active")
+ {
+ state.Storyboard.SetSpeedRatio(PART_Border, this.SpeedRatio);
+ }
+ }
+ }
+ }
+
+ PART_Border.Visibility = (IsActive ? Visibility.Visible : Visibility.Collapsed);
+ }
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public LoadingIndicator()
+ {
+
+ }
+}
diff --git a/Source/NETworkManager/NETworkManager.csproj b/Source/NETworkManager/NETworkManager.csproj
index 980e8c2301..f83b5b7d27 100644
--- a/Source/NETworkManager/NETworkManager.csproj
+++ b/Source/NETworkManager/NETworkManager.csproj
@@ -66,7 +66,6 @@
-
diff --git a/Source/NETworkManager/Resources/Styles/LoadingIndicatorArcsStyle.xaml b/Source/NETworkManager/Resources/Styles/LoadingIndicatorArcsStyle.xaml
new file mode 100644
index 0000000000..c86db2d15d
--- /dev/null
+++ b/Source/NETworkManager/Resources/Styles/LoadingIndicatorArcsStyle.xaml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/NETworkManager/Resources/Styles/LoadingIndicatorPulseStyle.xaml b/Source/NETworkManager/Resources/Styles/LoadingIndicatorPulseStyle.xaml
new file mode 100644
index 0000000000..c213a7b21f
--- /dev/null
+++ b/Source/NETworkManager/Resources/Styles/LoadingIndicatorPulseStyle.xaml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
diff --git a/Source/NETworkManager/Views/DiscoveryProtocolView.xaml b/Source/NETworkManager/Views/DiscoveryProtocolView.xaml
index 9d6dd66e72..5623490a43 100644
--- a/Source/NETworkManager/Views/DiscoveryProtocolView.xaml
+++ b/Source/NETworkManager/Views/DiscoveryProtocolView.xaml
@@ -4,9 +4,9 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
+ xmlns:networkManager="clr-namespace:NETworkManager"
xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
xmlns:dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
- xmlns:loadingIndicators="clr-namespace:LoadingIndicators.WPF;assembly=LoadingIndicators.WPF"
xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
xmlns:settings="clr-namespace:NETworkManager.Settings;assembly=NETworkManager.Settings"
@@ -260,7 +260,7 @@
-
-
-
@@ -174,10 +174,11 @@
-
+
diff --git a/Source/NETworkManager/Views/WiFiView.xaml b/Source/NETworkManager/Views/WiFiView.xaml
index 6a4d21ffdb..8e7a6cdb36 100644
--- a/Source/NETworkManager/Views/WiFiView.xaml
+++ b/Source/NETworkManager/Views/WiFiView.xaml
@@ -8,10 +8,10 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
- xmlns:liveChart="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
+ xmlns:liveChart="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
+ xmlns:networkManager="clr-namespace:NETworkManager"
xmlns:controls="clr-namespace:NETworkManager.Controls"
- xmlns:controls2="clr-namespace:NETworkManager.Controls;assembly=NETworkManager.Controls"
- xmlns:loadingIndicators="clr-namespace:LoadingIndicators.WPF;assembly=LoadingIndicators.WPF"
+ xmlns:controls2="clr-namespace:NETworkManager.Controls;assembly=NETworkManager.Controls"
xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
xmlns:utilities="clr-namespace:NETworkManager.Utilities;assembly=NETworkManager.Utilities"
dialogs:DialogParticipation.Register="{Binding}"
@@ -631,7 +631,7 @@
-
@@ -770,8 +770,7 @@
Orientation="Horizontal"
VerticalAlignment="Center"
HorizontalAlignment="Center">
-
-
-
diff --git a/Website/docs/changelog/next-release.md b/Website/docs/changelog/next-release.md
index 109f633f64..e64aa65056 100644
--- a/Website/docs/changelog/next-release.md
+++ b/Website/docs/changelog/next-release.md
@@ -44,6 +44,7 @@ Release date: **xx.xx.2024**
## Dependencies, Refactoring & Documentation
+Migrated code for some loading indicators from the library [LoadingIndicators.WPF] (https://github.com/zeluisping/LoadingIndicators.WPF) to the NETworkManager repo, as the original repo looks unmaintained and has problems with MahApps.Metro version 2 and later. [#2963](https://github.com/BornToBeRoot/NETworkManager/pull/2963)
- Code cleanup & refactoring [#2940](https://github.com/BornToBeRoot/NETworkManager/pull/2940)
- Language files updated via [#transifex](https://github.com/BornToBeRoot/NETworkManager/pulls?q=author%3Aapp%2Ftransifex-integration)
- Dependencies updated via [#dependabot](https://github.com/BornToBeRoot/NETworkManager/pulls?q=author%3Aapp%2Fdependabot)