Files
Artemis/src/Artemis.UI/Screens/Settings/Tabs/Modules/ModuleOrderTabViewModel.cs
T
SpoinkyNL 8718d01eae Core - Flattened namespaces
Shared UI - Flattened namespaces
Shared UI - General housekeeping
Project - Code cleanup
2020-09-01 00:14:08 +02:00

83 lines
3.4 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Artemis.Core.Modules;
using Artemis.Core.Services;
using GongSolutions.Wpf.DragDrop;
using Stylet;
namespace Artemis.UI.Screens.Settings.Tabs.Modules
{
public class ModuleOrderTabViewModel : Screen, IDropTarget
{
private readonly IModuleService _moduleService;
private readonly IPluginService _pluginService;
private readonly DefaultDropHandler _defaultDropHandler;
private readonly List<ModuleOrderModuleViewModel> _modules;
public ModuleOrderTabViewModel(IPluginService pluginService, IModuleService moduleService)
{
DisplayName = "MODULE PRIORITY";
_pluginService = pluginService;
_moduleService = moduleService;
_modules = new List<ModuleOrderModuleViewModel>(pluginService.GetPluginsOfType<Module>().Select(m => new ModuleOrderModuleViewModel(m)));
_defaultDropHandler = new DefaultDropHandler();
NormalModules = new BindableCollection<ModuleOrderModuleViewModel>();
ApplicationModules = new BindableCollection<ModuleOrderModuleViewModel>();
OverlayModules = new BindableCollection<ModuleOrderModuleViewModel>();
Update();
}
public BindableCollection<ModuleOrderModuleViewModel> NormalModules { get; set; }
public BindableCollection<ModuleOrderModuleViewModel> ApplicationModules { get; set; }
public BindableCollection<ModuleOrderModuleViewModel> OverlayModules { get; set; }
public void DragOver(IDropInfo dropInfo)
{
_defaultDropHandler.DragOver(dropInfo);
}
public void Drop(IDropInfo dropInfo)
{
if (dropInfo.TargetItem == dropInfo.Data)
return;
var viewModel = (ModuleOrderModuleViewModel) dropInfo.Data;
var targetCollection = (BindableCollection<ModuleOrderModuleViewModel>) dropInfo.TargetCollection;
var insertIndex = dropInfo.InsertIndex;
ModulePriorityCategory category;
if (targetCollection == NormalModules)
category = ModulePriorityCategory.Normal;
else if (targetCollection == ApplicationModules)
category = ModulePriorityCategory.Application;
else
category = ModulePriorityCategory.Overlay;
// If moving down, take the removal of ourselves into consideration with the insert index
if (targetCollection.Contains(viewModel) && targetCollection.IndexOf(viewModel) < insertIndex)
insertIndex--;
_moduleService.UpdateModulePriority(viewModel.Module, category, insertIndex);
Update();
}
public void Update()
{
NormalModules.Clear();
NormalModules.AddRange(_modules.Where(m => m.Module.PriorityCategory == ModulePriorityCategory.Normal).OrderBy(m => m.Module.Priority));
ApplicationModules.Clear();
ApplicationModules.AddRange(_modules.Where(m => m.Module.PriorityCategory == ModulePriorityCategory.Application).OrderBy(m => m.Module.Priority));
OverlayModules.Clear();
OverlayModules.AddRange(_modules.Where(m => m.Module.PriorityCategory == ModulePriorityCategory.Overlay).OrderBy(m => m.Module.Priority));
foreach (var moduleOrderModuleViewModel in _modules)
moduleOrderModuleViewModel.Update();
}
}
}