mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Merge pull request #510 from diogotr7/feature/sidebar-modules
UI - Made it so modules are sorted by priority in the sidebar
This commit is contained in:
commit
286f475c7b
@ -1,4 +1,5 @@
|
|||||||
using System.Threading.Tasks;
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Artemis.Core.Modules;
|
using Artemis.Core.Modules;
|
||||||
|
|
||||||
namespace Artemis.Core.Services
|
namespace Artemis.Core.Services
|
||||||
@ -8,6 +9,11 @@ namespace Artemis.Core.Services
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IModuleService : IArtemisService
|
public interface IModuleService : IArtemisService
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Occurs when the priorty of a module is updated.
|
||||||
|
/// </summary>
|
||||||
|
event EventHandler ModulePriorityUpdated;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the current active module override. If set, all other modules are deactivated and only the
|
/// Gets the current active module override. If set, all other modules are deactivated and only the
|
||||||
/// <see cref="ActiveModuleOverride" /> is active.
|
/// <see cref="ActiveModuleOverride" /> is active.
|
||||||
|
|||||||
@ -149,6 +149,8 @@ namespace Artemis.Core.Services
|
|||||||
UpdateModulePriority(module, category, priority);
|
UpdateModulePriority(module, category, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public event EventHandler ModulePriorityUpdated;
|
||||||
|
|
||||||
public Module? ActiveModuleOverride { get; private set; }
|
public Module? ActiveModuleOverride { get; private set; }
|
||||||
|
|
||||||
public async Task SetActiveModuleOverride(Module? overrideModule)
|
public async Task SetActiveModuleOverride(Module? overrideModule)
|
||||||
@ -261,6 +263,8 @@ namespace Artemis.Core.Services
|
|||||||
_moduleRepository.Save(categoryModule.SettingsEntity);
|
_moduleRepository.Save(categoryModule.SettingsEntity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ModulePriorityUpdated?.Invoke(this, EventArgs.Empty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -35,7 +35,7 @@ namespace Artemis.UI.Screens.Sidebar
|
|||||||
private BindableCollection<INavigationItem> _sidebarItems;
|
private BindableCollection<INavigationItem> _sidebarItems;
|
||||||
private Dictionary<INavigationItem, Module> _sidebarModules;
|
private Dictionary<INavigationItem, Module> _sidebarModules;
|
||||||
|
|
||||||
public SidebarViewModel(IKernel kernel, ISettingsService settingsService, IEventAggregator eventAggregator, IModuleVmFactory moduleVmFactory, IPluginManagementService pluginManagementService)
|
public SidebarViewModel(IKernel kernel, ISettingsService settingsService, IEventAggregator eventAggregator, IModuleVmFactory moduleVmFactory, IPluginManagementService pluginManagementService, IModuleService moduleService)
|
||||||
{
|
{
|
||||||
_kernel = kernel;
|
_kernel = kernel;
|
||||||
_settingsService = settingsService;
|
_settingsService = settingsService;
|
||||||
@ -53,6 +53,7 @@ namespace Artemis.UI.Screens.Sidebar
|
|||||||
|
|
||||||
_pluginManagementService.PluginFeatureEnabled += OnFeatureEnabled;
|
_pluginManagementService.PluginFeatureEnabled += OnFeatureEnabled;
|
||||||
_pluginManagementService.PluginFeatureDisabled += OnFeatureDisabled;
|
_pluginManagementService.PluginFeatureDisabled += OnFeatureDisabled;
|
||||||
|
moduleService.ModulePriorityUpdated += OnModulePriorityUpdated;
|
||||||
|
|
||||||
SetupSidebar();
|
SetupSidebar();
|
||||||
eventAggregator.Subscribe(this);
|
eventAggregator.Subscribe(this);
|
||||||
@ -96,6 +97,18 @@ namespace Artemis.UI.Screens.Sidebar
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void SetupSidebar()
|
public void SetupSidebar()
|
||||||
|
{
|
||||||
|
UpdateSidebarItems();
|
||||||
|
|
||||||
|
// Set the sidebar as open if it's pinned
|
||||||
|
if (PinSidebar.Value)
|
||||||
|
IsSidebarOpen = true;
|
||||||
|
|
||||||
|
// Select the top item, which will be one of the defaults
|
||||||
|
Task.Run(() => SelectSidebarItem(SidebarItems[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateSidebarItems()
|
||||||
{
|
{
|
||||||
SidebarItems.Clear();
|
SidebarItems.Clear();
|
||||||
SidebarModules.Clear();
|
SidebarModules.Clear();
|
||||||
@ -109,17 +122,16 @@ namespace Artemis.UI.Screens.Sidebar
|
|||||||
|
|
||||||
// Add all activated modules
|
// Add all activated modules
|
||||||
SidebarItems.Add(new DividerNavigationItem());
|
SidebarItems.Add(new DividerNavigationItem());
|
||||||
SidebarItems.Add(new SubheaderNavigationItem {Subheader = "Modules"});
|
|
||||||
List<Module> modules = _pluginManagementService.GetFeaturesOfType<Module>().ToList();
|
List<Module> modules = _pluginManagementService.GetFeaturesOfType<Module>().ToList();
|
||||||
foreach (Module module in modules)
|
|
||||||
|
foreach (IGrouping<ModulePriorityCategory, Module> category in modules.OrderByDescending(m => m.PriorityCategory).GroupBy(m => m.PriorityCategory))
|
||||||
|
{
|
||||||
|
SidebarItems.Add(new SubheaderNavigationItem { Subheader = category.Key.ToString() });
|
||||||
|
foreach(Module module in category.OrderBy(m => m.Priority))
|
||||||
|
{
|
||||||
AddModule(module);
|
AddModule(module);
|
||||||
|
}
|
||||||
// Set the sidebar as open if it's pinned
|
}
|
||||||
if (PinSidebar.Value)
|
|
||||||
IsSidebarOpen = true;
|
|
||||||
|
|
||||||
// Select the top item, which will be one of the defaults
|
|
||||||
Task.Run(() => SelectSidebarItem(SidebarItems[0]));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReSharper disable once UnusedMember.Global - Called by view
|
// ReSharper disable once UnusedMember.Global - Called by view
|
||||||
@ -217,14 +229,19 @@ namespace Artemis.UI.Screens.Sidebar
|
|||||||
|
|
||||||
private void OnFeatureEnabled(object sender, PluginFeatureEventArgs e)
|
private void OnFeatureEnabled(object sender, PluginFeatureEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.PluginFeature is Module module)
|
if (e.PluginFeature is Module)
|
||||||
AddModule(module);
|
UpdateSidebarItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnFeatureDisabled(object sender, PluginFeatureEventArgs e)
|
private void OnFeatureDisabled(object sender, PluginFeatureEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.PluginFeature is Module module)
|
if (e.PluginFeature is Module)
|
||||||
RemoveModule(module);
|
UpdateSidebarItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnModulePriorityUpdated(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
UpdateSidebarItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handle(RequestSelectSidebarItemEvent message)
|
public void Handle(RequestSelectSidebarItemEvent message)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user