diff --git a/ControlPad/Arduino/ArduinoController.cs b/ControlPad/Arduino/ArduinoController.cs
index e9568cc..853eeee 100644
--- a/ControlPad/Arduino/ArduinoController.cs
+++ b/ControlPad/Arduino/ArduinoController.cs
@@ -23,6 +23,7 @@ public static class ArduinoController
private static CancellationTokenSource? _readCts;
private static readonly StringBuilder _lineBuf = new();
private static BoardType _lastBoardType = BoardType.None;
+ private static BadgeType _lastBadgeType = BadgeType.None;
public static void Initialize(MainWindow mainWindow, EventHandler eventHandler)
{
@@ -42,11 +43,13 @@ public static void Initialize(MainWindow mainWindow, EventHandler eventHandler)
{
if (_serialPort != null && !_serialPort.IsOpen)
{
+ _lastBadgeType = BadgeType.None;
_mainWindow.Dispatcher.BeginInvoke(() =>
{
_mainWindow.BoardDisconnectedInfoBar.IsOpen = true;
if (_mainWindow.NVI_Home.IsActive) _mainWindow.MainContentFrame.Navigate(_mainWindow.progressRing);
_mainWindow.NVI_EditMode.Visibility = Visibility.Collapsed;
+ _mainWindow.UpdateBadgeType(BadgeType.None);
IsConnected = false;
});
}
@@ -66,8 +69,10 @@ await _mainWindow.Dispatcher.InvokeAsync(() =>
_mainWindow.BoardDisconnectedInfoBar.IsOpen = true;
if (_mainWindow.NVI_Home.IsActive) _mainWindow.MainContentFrame.Navigate(_mainWindow.progressRing);
_mainWindow.NVI_EditMode.Visibility = Visibility.Collapsed;
+ _mainWindow.UpdateBadgeType(BadgeType.None);
IsConnected = false;
});
+ _lastBadgeType = BadgeType.None;
return;
}
@@ -149,11 +154,13 @@ private static async Task ReadLoopAsync(SerialPort sp, CancellationToken ct)
await Task.Delay(1, ct);
}
+ _lastBadgeType = BadgeType.None;
await _mainWindow.Dispatcher.InvokeAsync(() =>
{
_mainWindow.BoardDisconnectedInfoBar.IsOpen = true;
if (_mainWindow.NVI_Home.IsActive) _mainWindow.MainContentFrame.Navigate(_mainWindow.progressRing);
_mainWindow.NVI_EditMode.Visibility = Visibility.Collapsed;
+ _mainWindow.UpdateBadgeType(BadgeType.None);
IsConnected = false;
});
}
@@ -180,7 +187,18 @@ private static void ProcessLine(string line)
}
}
- int subscribtionTier = int.Parse(inputs[1]);
+ if (int.TryParse(inputs[1], out int badgeValue))
+ {
+ var newBadgeType = (BadgeType)badgeValue;
+ if (_lastBadgeType != newBadgeType)
+ {
+ _mainWindow.Dispatcher.BeginInvoke(() =>
+ {
+ _mainWindow.UpdateBadgeType(newBadgeType);
+ });
+ _lastBadgeType = newBadgeType;
+ }
+ }
UpdateValues(inputs[2..]);
diff --git a/ControlPad/BadgeType.cs b/ControlPad/BadgeType.cs
new file mode 100644
index 0000000..f808059
--- /dev/null
+++ b/ControlPad/BadgeType.cs
@@ -0,0 +1,9 @@
+namespace ControlPad
+{
+ public enum BadgeType
+ {
+ None = 0,
+ Supporter = 1,
+ Premium = 2,
+ }
+}
diff --git a/ControlPad/ControlPad.csproj b/ControlPad/ControlPad.csproj
index 759cb0a..e22ac19 100644
--- a/ControlPad/ControlPad.csproj
+++ b/ControlPad/ControlPad.csproj
@@ -14,12 +14,16 @@
+
+
Always
+
+
diff --git a/ControlPad/Resources/Premium.png b/ControlPad/Resources/Premium.png
new file mode 100644
index 0000000..c86dfa1
Binary files /dev/null and b/ControlPad/Resources/Premium.png differ
diff --git a/ControlPad/Resources/Supporter.png b/ControlPad/Resources/Supporter.png
new file mode 100644
index 0000000..1d10d65
Binary files /dev/null and b/ControlPad/Resources/Supporter.png differ
diff --git a/ControlPad/Windows/MainWindow.xaml b/ControlPad/Windows/MainWindow.xaml
index 6a9ccdb..145c23a 100644
--- a/ControlPad/Windows/MainWindow.xaml
+++ b/ControlPad/Windows/MainWindow.xaml
@@ -35,10 +35,22 @@
+ Icon="{ui:ImageIcon 'pack://application:,,,/Resources/logo.ico'}">
+
+
+
+
+
+
+
-
+
diff --git a/ControlPad/Windows/MainWindow.xaml.cs b/ControlPad/Windows/MainWindow.xaml.cs
index 686a212..839b031 100644
--- a/ControlPad/Windows/MainWindow.xaml.cs
+++ b/ControlPad/Windows/MainWindow.xaml.cs
@@ -3,6 +3,7 @@
using System.IO;
using System.Windows;
using System.Windows.Controls;
+using System.Windows.Media.Imaging;
using Wpf.Ui.Controls;
namespace ControlPad
@@ -32,6 +33,27 @@ public MainWindow(Mutex mutex)
DataHandler.LoadPreset(GetCurrentPreset(), _settingsUserControl, _homeUserControl, true);
_manageSliderCategoriesUserControl = new ManageSliderCategoriesUserControl(this);
_manageButtonCategoriesUserControl = new ManageButtonCategoriesUserControl(this);
+
+ }
+
+ public void UpdateBadgeType(BadgeType badgeType)
+ {
+ if (badgeType == BadgeType.None)
+ {
+ BadgeImage.Visibility = Visibility.Collapsed;
+ BadgeImage.Source = null;
+ }
+ else
+ {
+ string resourceName = badgeType == BadgeType.Supporter ? "Supporter" : "Premium";
+ var bmp = new BitmapImage();
+ bmp.BeginInit();
+ bmp.UriSource = new Uri($"pack://application:,,,/Resources/{resourceName}.png");
+ bmp.DecodePixelHeight = 40; // decode at 2x display size for crisp HiDPI rendering
+ bmp.EndInit();
+ BadgeImage.Source = bmp;
+ BadgeImage.Visibility = Visibility.Visible;
+ }
}
public void UpdateBoardType(BoardType curBoardType, BoardType newBoardType)