1
0
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:
Robert Beekman 2020-11-30 19:51:19 +01:00 committed by GitHub
commit 286f475c7b
3 changed files with 49 additions and 22 deletions

View File

@ -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.

View File

@ -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);
} }
} }
} }

View File

@ -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)