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)