Skip to content

Commit 808dabf

Browse files
committed
Add DragDropManager.
1 parent 344defc commit 808dabf

File tree

3 files changed

+34
-8
lines changed

3 files changed

+34
-8
lines changed

Penumbra/Services/DalamudServices.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using Dalamud.Plugin;
1313
using System.Linq;
1414
using System.Reflection;
15+
using Dalamud.Interface.DragDrop;
1516
using Microsoft.Extensions.DependencyInjection;
1617

1718
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Local
@@ -76,6 +77,7 @@ public void AddServices(IServiceCollection services)
7677
services.AddSingleton(SigScanner);
7778
services.AddSingleton(this);
7879
services.AddSingleton(UiBuilder);
80+
services.AddSingleton(DragDropManager);
7981
}
8082

8183
// TODO remove static
@@ -93,6 +95,7 @@ public void AddServices(IServiceCollection services)
9395
[PluginService][RequiredVersion("1.0")] public GameGui GameGui { get; private set; } = null!;
9496
[PluginService][RequiredVersion("1.0")] public KeyState KeyState { get; private set; } = null!;
9597
[PluginService][RequiredVersion("1.0")] public SigScanner SigScanner { get; private set; } = null!;
98+
[PluginService][RequiredVersion("1.0")] public IDragDropManager DragDropManager { get; private set; } = null!;
9699
// @formatter:on
97100

98101
public UiBuilder UiBuilder

Penumbra/UI/ModsTab/ModFileSystemSelector.cs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
using System;
2+
using System.IO;
23
using System.Linq;
34
using System.Numerics;
45
using System.Runtime.InteropServices;
56
using Dalamud.Game.ClientState.Keys;
67
using Dalamud.Interface;
8+
using Dalamud.Interface.DragDrop;
79
using Dalamud.Interface.Internal.Notifications;
810
using ImGuiNET;
911
using OtterGui;
@@ -33,12 +35,13 @@ public sealed class ModFileSystemSelector : FileSystemSelector<Mod, ModFileSyste
3335
private readonly CollectionManager _collectionManager;
3436
private readonly TutorialService _tutorial;
3537
private readonly ModImportManager _modImportManager;
38+
private readonly IDragDropManager _dragDrop;
3639
public ModSettings SelectedSettings { get; private set; } = ModSettings.Empty;
3740
public ModCollection SelectedSettingCollection { get; private set; } = ModCollection.Empty;
3841

3942
public ModFileSystemSelector(KeyState keyState, CommunicatorService communicator, ModFileSystem fileSystem, ModManager modManager,
4043
CollectionManager collectionManager, Configuration config, TutorialService tutorial, FileDialogService fileDialog, ChatService chat,
41-
ModImportManager modImportManager)
44+
ModImportManager modImportManager, IDragDropManager dragDrop)
4245
: base(fileSystem, keyState, HandleException)
4346
{
4447
_communicator = communicator;
@@ -49,6 +52,7 @@ public ModFileSystemSelector(KeyState keyState, CommunicatorService communicator
4952
_fileDialog = fileDialog;
5053
_chat = chat;
5154
_modImportManager = modImportManager;
55+
_dragDrop = dragDrop;
5256

5357
// @formatter:off
5458
SubscribeRightClickFolder(EnableDescendants, 10);
@@ -82,6 +86,28 @@ public ModFileSystemSelector(KeyState keyState, CommunicatorService communicator
8286
OnCollectionChange(CollectionType.Current, null, _collectionManager.Active.Current, "");
8387
}
8488

89+
private static readonly string[] ValidModExtensions = new[]
90+
{
91+
".ttmp",
92+
".ttmp2",
93+
".pmp",
94+
".zip",
95+
".rar",
96+
".7z",
97+
};
98+
99+
public new void Draw(float width)
100+
{
101+
_dragDrop.CreateImGuiSource("ModDragDrop", m => m.Extensions.Any(e => ValidModExtensions.Contains(e.ToLowerInvariant())), m =>
102+
{
103+
ImGui.TextUnformatted($"Dragging mods for import:\n\t{string.Join("\n\t", m.Files.Select(Path.GetFileName))}");
104+
return true;
105+
});
106+
base.Draw(width);
107+
if (_dragDrop.CreateImGuiTarget("ModDragDrop", out var files, out _))
108+
_modImportManager.AddUnpack(files.Where(f => ValidModExtensions.Contains(Path.GetExtension(f.ToLowerInvariant()))));
109+
}
110+
85111
public override void Dispose()
86112
{
87113
base.Dispose();
@@ -655,7 +681,7 @@ private bool ApplyFiltersAndState(ModFileSystem.Leaf leaf, out ModState state)
655681
private bool DrawFilterCombo(ref bool everything)
656682
{
657683
using var combo = ImRaii.Combo("##filterCombo", string.Empty,
658-
ImGuiComboFlags.NoPreview | ImGuiComboFlags.PopupAlignLeft | ImGuiComboFlags.HeightLargest);
684+
ImGuiComboFlags.NoPreview | ImGuiComboFlags.PopupAlignLeft | ImGuiComboFlags.HeightLargest);
659685
var ret = ImGui.IsItemClicked(ImGuiMouseButton.Right);
660686
if (!combo)
661687
return ret;
@@ -695,12 +721,12 @@ protected override (float, bool) CustomFilters(float width)
695721

696722
ImGui.SetCursorPos(comboPos);
697723
// Draw combo button
698-
using var color = ImRaii.PushColor(ImGuiCol.Button, Colors.FilterActive, !everything);
699-
var rightClick = DrawFilterCombo(ref everything);
724+
using var color = ImRaii.PushColor(ImGuiCol.Button, Colors.FilterActive, !everything);
725+
var rightClick = DrawFilterCombo(ref everything);
700726
_tutorial.OpenTutorial(BasicTutorialSteps.ModFilters);
701727
if (rightClick)
702728
{
703-
_stateFilter = ModFilterExtensions.UnfilteredStateMods;
729+
_stateFilter = ModFilterExtensions.UnfilteredStateMods;
704730
SetFilterDirty();
705731
}
706732

Penumbra/UI/Tabs/ModsTab.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using ImGuiNET;
22
using OtterGui;
33
using OtterGui.Raii;
4-
using Penumbra.Collections;
54
using Penumbra.UI.Classes;
65
using System;
76
using System.Linq;
@@ -13,11 +12,9 @@
1312
using Penumbra.Interop.Services;
1413
using Penumbra.Mods;
1514
using Penumbra.Mods.Manager;
16-
using Penumbra.Services;
1715
using Penumbra.UI.ModsTab;
1816
using ModFileSystemSelector = Penumbra.UI.ModsTab.ModFileSystemSelector;
1917
using Penumbra.Collections.Manager;
20-
using Penumbra.UI.CollectionTab;
2118

2219
namespace Penumbra.UI.Tabs;
2320

0 commit comments

Comments
 (0)