Modules - Ordering WIP

This commit is contained in:
SpoinkyNL committed 2020-08-27 00:21:44 +02:00
1 parent d62d389d9f
commit bfb122e95a
21 files changed
+535 -45

No files matched your search

@@ -6,15 +6,16 @@
xmlns:local="clr-namespace:Artemis.UI.Screens.Settings.Tabs.Modules"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:s="https://github.com/canton7/Stylet"
xmlns:dd="urn:gong-wpf-dragdrop"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
d:DataContext="{d:DesignInstance local:ModuleOrderTabViewModel}">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<Grid Margin="15" MaxWidth="800">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Profile editor settings -->
@@ -35,7 +36,14 @@
</Grid>
<materialDesign:Card materialDesign:ShadowAssist.ShadowDepth="Depth1" VerticalAlignment="Stretch" Margin="0,0,5,0">
<StackPanel Margin="15">
<ListBox ItemsSource="{Binding OverlayModules}" DisplayMemberPath="DisplayName"/>
<ListBox ItemsSource="{Binding OverlayModules}"
DisplayMemberPath="DisplayName"
materialDesign:RippleAssist.IsDisabled="True"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True"
dd:DragDrop.UseDefaultDragAdorner="True"
dd:DragDrop.DropHandler="{Binding ModulesDropHandler}"
MinHeight="30"/>
</StackPanel>
</materialDesign:Card>
</StackPanel>
@@ -57,7 +65,14 @@
</Grid>
<materialDesign:Card materialDesign:ShadowAssist.ShadowDepth="Depth1" VerticalAlignment="Stretch" Margin="0,0,5,0">
<StackPanel Margin="15">
<ListBox ItemsSource="{Binding ApplicationModules}" DisplayMemberPath="DisplayName"/>
<ListBox ItemsSource="{Binding ApplicationModules}"
DisplayMemberPath="DisplayName"
materialDesign:RippleAssist.IsDisabled="True"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True"
dd:DragDrop.UseDefaultDragAdorner="True"
dd:DragDrop.DropHandler="{Binding ModulesDropHandler}"
MinHeight="30"/>
</StackPanel>
</materialDesign:Card>
</StackPanel>
@@ -79,7 +94,14 @@
</Grid>
<materialDesign:Card materialDesign:ShadowAssist.ShadowDepth="Depth1" VerticalAlignment="Stretch" Margin="0,0,5,0">
<StackPanel Margin="15">
<ListBox ItemsSource="{Binding NormalModules}" DisplayMemberPath="DisplayName"/>
<ListBox ItemsSource="{Binding NormalModules}"
DisplayMemberPath="DisplayName"
materialDesign:RippleAssist.IsDisabled="True"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True"
dd:DragDrop.UseDefaultDragAdorner="True"
dd:DragDrop.DropHandler="{Binding ModulesDropHandler}"
MinHeight="30"/>
</StackPanel>
</materialDesign:Card>
</StackPanel>
@@ -10,7 +10,7 @@ namespace Artemis.UI.Screens.Settings.Tabs.Modules
{
private readonly IPluginService _pluginService;
public ModuleOrderTabViewModel(IPluginService pluginService)
public ModuleOrderTabViewModel(IPluginService pluginService, IModuleService moduleService)
{
DisplayName = "MODULE PRIORITY";
@@ -18,12 +18,17 @@ namespace Artemis.UI.Screens.Settings.Tabs.Modules
NormalModules = new BindableCollection<Core.Plugins.Modules.Module>();
ApplicationModules = new BindableCollection<Core.Plugins.Modules.Module>();
OverlayModules = new BindableCollection<Core.Plugins.Modules.Module>();
ModulesDropHandler = new ModulesDropHandler(moduleService, NormalModules, ApplicationModules, OverlayModules);
}
public BindableCollection<Core.Plugins.Modules.Module> NormalModules { get; set; }
public BindableCollection<Core.Plugins.Modules.Module> ApplicationModules { get; set; }
public BindableCollection<Core.Plugins.Modules.Module> OverlayModules { get; set; }
public ModulesDropHandler ModulesDropHandler { get; }
protected override void OnActivate()
{
// Take it off the UI thread to avoid freezing on tab change
@@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Artemis.Core.Plugins.Modules;
using Artemis.Core.Services.Interfaces;
using GongSolutions.Wpf.DragDrop;
using Stylet;
namespace Artemis.UI.Screens.Settings.Tabs.Modules
{
public class ModulesDropHandler : IDropTarget
{
private readonly IModuleService _moduleService;
private readonly BindableCollection<Core.Plugins.Modules.Module> _normalModules;
private readonly BindableCollection<Core.Plugins.Modules.Module> _applicationModules;
private readonly BindableCollection<Core.Plugins.Modules.Module> _overlayModules;
private DefaultDropHandler _defaultDropHandler;
public ModulesDropHandler(IModuleService moduleService,
BindableCollection<Core.Plugins.Modules.Module> normalModules,
BindableCollection<Core.Plugins.Modules.Module> applicationModules,
BindableCollection<Core.Plugins.Modules.Module> overlayModules)
{
_defaultDropHandler = new DefaultDropHandler();
_moduleService = moduleService;
_normalModules = normalModules;
_applicationModules = applicationModules;
_overlayModules = overlayModules;
}
public void DragOver(IDropInfo dropInfo)
{
_defaultDropHandler.DragOver(dropInfo);
}
public void Drop(IDropInfo dropInfo)
{
var module = (Core.Plugins.Modules.Module) dropInfo.Data;
var target = (BindableCollection<Core.Plugins.Modules.Module>) dropInfo.TargetCollection;
var insertIndex = dropInfo.InsertIndex;
ModulePriorityCategory category;
if (target == _applicationModules)
category = ModulePriorityCategory.Application;
else if (target == _normalModules)
category = ModulePriorityCategory.Normal;
else
category = ModulePriorityCategory.Overlay;
if (target.Contains(module))
{
target.Move(target.IndexOf(module), Math.Min(target.Count - 1, insertIndex));
_moduleService.UpdateModulePriority(module, category, insertIndex);
}
else
{
if (module.PriorityCategory == ModulePriorityCategory.Application)
_applicationModules.Remove(module);
else if (module.PriorityCategory == ModulePriorityCategory.Normal)
_normalModules.Remove(module);
else if (module.PriorityCategory == ModulePriorityCategory.Overlay)
_overlayModules.Remove(module);
_moduleService.UpdateModulePriority(module, category, insertIndex);
if (module.PriorityCategory == ModulePriorityCategory.Application)
_applicationModules.Insert(insertIndex, module);
else if (module.PriorityCategory == ModulePriorityCategory.Normal)
_normalModules.Insert(insertIndex, module);
else if (module.PriorityCategory == ModulePriorityCategory.Overlay)
_overlayModules.Insert(insertIndex, module);
}
}
}
}