mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 03:48:56 +00:00
Modules - Ordering WIP
This commit is contained in:
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user