1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00
Artemis/src/Artemis.UI/Services/DebugService.cs
Robert 28e1532064 Web server - Added web server service
UI - Added remote management for bringing to foreground, restarting and shutting down
UI - Simplified services namespaces
2021-01-27 20:52:51 +01:00

61 lines
1.9 KiB
C#

using System.Windows;
using Artemis.UI.Screens.Settings.Debug;
using MaterialDesignExtensions.Controls;
using Ninject;
using Stylet;
namespace Artemis.UI.Services
{
public class DebugService : IDebugService
{
private readonly IKernel _kernel;
private readonly IWindowManager _windowManager;
private DebugViewModel _debugViewModel;
public DebugService(IKernel kernel, IWindowManager windowManager)
{
_kernel = kernel;
_windowManager = windowManager;
}
public void ShowDebugger()
{
if (_debugViewModel != null)
BringDebuggerToForeground();
else
CreateDebugger();
}
private void CreateDebugger()
{
_debugViewModel = _kernel.Get<DebugViewModel>();
_debugViewModel.Closed += DebugViewModelOnClosed;
_windowManager.ShowWindow(_debugViewModel);
}
private void DebugViewModelOnClosed(object sender, CloseEventArgs e)
{
_debugViewModel.Closed -= DebugViewModelOnClosed;
_debugViewModel = null;
}
private void BringDebuggerToForeground()
{
MaterialWindow materialWindow = (MaterialWindow) _debugViewModel.View;
// Not as straightforward as you might think, this ensures the window always shows, even if it's behind another window etc.
// https://stackoverflow.com/a/4831839/5015269
if (!materialWindow.IsVisible)
materialWindow.Show();
if (materialWindow.WindowState == WindowState.Minimized)
materialWindow.WindowState = WindowState.Normal;
materialWindow.Activate();
materialWindow.Topmost = true; // important
materialWindow.Topmost = false; // important
materialWindow.Focus();
}
}
}