// SPDX-License-Identifier: AGPL-3.0-only /** * Digital Voice Modem - Desktop Dispatch Console * AGPLv3 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * @package DVM / Desktop Dispatch Console * @license AGPLv3 License (https://opensource.org/licenses/AGPL-3.0) * * Copyright (C) 2025 Caleb, K4PHP * */ using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Threading; namespace dvmconsole { /// /// /// public class FlashingBackgroundManager { private readonly Control control; private readonly Canvas canvas; private readonly UserControl userControl; private readonly Window mainWindow; private readonly DispatcherTimer timer; private Brush originalControlBackground; private Brush originalCanvasBackground; private Brush originalUserControlBackground; private Brush originalMainWindowBackground; private bool isFlashing; /* ** Methods */ /// /// Initializes a new instance of the class. /// /// /// /// /// /// /// public FlashingBackgroundManager(Control control = null, Canvas canvas = null, UserControl userControl = null, Window mainWindow = null, int intervalMilliseconds = 450) { this.control = control; this.canvas = canvas; this.userControl = userControl; this.mainWindow = mainWindow; if (this.control == null && this.canvas == null && this.userControl == null && this.mainWindow == null) throw new ArgumentException("At least one of control, canvas, userControl, or mainWindow must be provided."); timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(intervalMilliseconds) }; timer.Tick += OnTimerTick; } /// /// /// public void Start() { if (isFlashing) return; if (control != null) originalControlBackground = control.Background; if (canvas != null) originalCanvasBackground = canvas.Background; if (userControl != null) originalUserControlBackground = userControl.Background; if (mainWindow != null) originalMainWindowBackground = mainWindow.Background; isFlashing = true; timer.Start(); } /// /// /// public void Stop() { if (!isFlashing) return; timer.Stop(); if (control != null) control.Background = originalControlBackground; if (canvas != null) canvas.Background = originalCanvasBackground; if (userControl != null) userControl.Background = originalUserControlBackground; if (mainWindow != null && originalMainWindowBackground != null) mainWindow.Background = originalMainWindowBackground; isFlashing = false; } /// /// /// /// /// private void OnTimerTick(object sender, EventArgs e) { Brush flashingColor = Brushes.Red; if (control != null) control.Background = control.Background == Brushes.DarkRed ? originalControlBackground : Brushes.DarkRed; if (canvas != null) canvas.Background = canvas.Background == flashingColor ? originalCanvasBackground : flashingColor; if (userControl != null) userControl.Background = userControl.Background == Brushes.DarkRed ? originalUserControlBackground : Brushes.DarkRed; if (mainWindow != null) mainWindow.Background = mainWindow.Background == flashingColor ? originalMainWindowBackground : flashingColor; } } // public class FlashingBackgroundManager } // namespace dvmconsole