advanced setting for shift-click multiselect; handle no-op moves better
This commit is contained in:
@@ -24,6 +24,7 @@ using GridFindExtensions = GClass2503;
|
|||||||
using BaseItemInfoInteractions = GClass3021;
|
using BaseItemInfoInteractions = GClass3021;
|
||||||
using GenericItemContext = GClass2817;
|
using GenericItemContext = GClass2817;
|
||||||
using Stackable = GClass2735;
|
using Stackable = GClass2735;
|
||||||
|
using NoOpMove = GClass2779;
|
||||||
using DestroyError = GClass3320;
|
using DestroyError = GClass3320;
|
||||||
using NoRoomError = GClass3292;
|
using NoRoomError = GClass3292;
|
||||||
using GridModificationsUnavailableError = StashGridClass.GClass3291;
|
using GridModificationsUnavailableError = StashGridClass.GClass3291;
|
||||||
@@ -47,6 +48,8 @@ namespace UIFixes
|
|||||||
private static bool DisableMerge = false;
|
private static bool DisableMerge = false;
|
||||||
private static bool IgnoreItemParent = false;
|
private static bool IgnoreItemParent = false;
|
||||||
|
|
||||||
|
private static readonly Color ValidMoveColor = new(0.06f, 0.38f, 0.06f, 0.57f);
|
||||||
|
|
||||||
public static void Enable()
|
public static void Enable()
|
||||||
{
|
{
|
||||||
// Initialization
|
// Initialization
|
||||||
@@ -168,7 +171,7 @@ namespace UIFixes
|
|||||||
bool shiftDown = Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.RightShift);
|
bool shiftDown = Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.RightShift);
|
||||||
bool altDown = Input.GetKey(KeyCode.LeftAlt) && !Input.GetKey(KeyCode.RightAlt);
|
bool altDown = Input.GetKey(KeyCode.LeftAlt) && !Input.GetKey(KeyCode.RightAlt);
|
||||||
|
|
||||||
if (__instance is GridItemView gridItemView && eventData.button == PointerEventData.InputButton.Left && shiftDown && !ctrlDown && !altDown)
|
if (Settings.EnableMultiClick.Value && __instance is GridItemView gridItemView && eventData.button == PointerEventData.InputButton.Left && shiftDown && !ctrlDown && !altDown)
|
||||||
{
|
{
|
||||||
MultiSelect.Toggle(gridItemView);
|
MultiSelect.Toggle(gridItemView);
|
||||||
return;
|
return;
|
||||||
@@ -561,6 +564,12 @@ namespace UIFixes
|
|||||||
FindOrigin = null;
|
FindOrigin = null;
|
||||||
FindVerticalFirst = false;
|
FindVerticalFirst = false;
|
||||||
|
|
||||||
|
// Moving item to the same place, not a problem. Use a no-op move
|
||||||
|
if (operation.Error is MoveSameSpaceError)
|
||||||
|
{
|
||||||
|
operation = new(new NoOpMove());
|
||||||
|
}
|
||||||
|
|
||||||
if (__result = operation.Succeeded)
|
if (__result = operation.Succeeded)
|
||||||
{
|
{
|
||||||
operations.Push(operation);
|
operations.Push(operation);
|
||||||
@@ -569,16 +578,6 @@ namespace UIFixes
|
|||||||
ShowPreview(__instance, selectedItemContext, operation);
|
ShowPreview(__instance, selectedItemContext, operation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (operation.Error is MoveSameSpaceError)
|
|
||||||
{
|
|
||||||
// Moving item to the same place, cool, not a problem
|
|
||||||
__result = true;
|
|
||||||
operation = default;
|
|
||||||
if (isGridPlacement && selectedItemContext.Item.Parent is GridItemAddress gridAddress)
|
|
||||||
{
|
|
||||||
ShowPreview(__instance, selectedItemContext, gridAddress, R.GridView.ValidMoveColor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (operation.Error is NoRoomError noRoomError)
|
if (operation.Error is NoRoomError noRoomError)
|
||||||
@@ -1266,7 +1265,16 @@ namespace UIFixes
|
|||||||
|
|
||||||
private static void ShowPreview(GridView gridView, ItemContextClass itemContext, ItemOperation operation)
|
private static void ShowPreview(GridView gridView, ItemContextClass itemContext, ItemOperation operation)
|
||||||
{
|
{
|
||||||
if (operation.Value is not MoveOperation moveOperation || moveOperation.To is not GridItemAddress gridAddress)
|
GridItemAddress gridAddress = null;
|
||||||
|
if (operation.Value is MoveOperation moveOperation)
|
||||||
|
{
|
||||||
|
gridAddress = moveOperation.To as GridItemAddress;
|
||||||
|
}
|
||||||
|
else if (operation.Value is NoOpMove noopMove)
|
||||||
|
{
|
||||||
|
gridAddress = itemContext.ItemAddress as GridItemAddress;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1282,7 +1290,7 @@ namespace UIFixes
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Color backgroundColor = gridView.GetHighlightColor(itemContext, operation, null);
|
Color backgroundColor = operation.Value is NoOpMove ? ValidMoveColor : gridView.GetHighlightColor(itemContext, operation, null);
|
||||||
|
|
||||||
ShowPreview(gridView, itemContext, gridAddress, backgroundColor);
|
ShowPreview(gridView, itemContext, gridAddress, backgroundColor);
|
||||||
}
|
}
|
||||||
|
27
Settings.cs
27
Settings.cs
@@ -67,7 +67,8 @@ namespace UIFixes
|
|||||||
|
|
||||||
// Inventory
|
// Inventory
|
||||||
public static ConfigEntry<bool> EnableMultiSelect { get; set; }
|
public static ConfigEntry<bool> EnableMultiSelect { get; set; }
|
||||||
public static ConfigEntry<bool> EnableMultiSelectInRaid { get; set; }
|
public static ConfigEntry<bool> EnableMultiSelectInRaid { get; set; } // Advanced
|
||||||
|
public static ConfigEntry<bool> EnableMultiClick { get; set; } // Advanced
|
||||||
public static ConfigEntry<KeyboardShortcut> SelectionBoxKey { get; set; }
|
public static ConfigEntry<KeyboardShortcut> SelectionBoxKey { get; set; }
|
||||||
public static ConfigEntry<MultiSelectStrategy> MultiSelectStrat { get; set; }
|
public static ConfigEntry<MultiSelectStrategy> MultiSelectStrat { get; set; }
|
||||||
public static ConfigEntry<bool> ShowMultiSelectDebug { get; set; } // Advanced
|
public static ConfigEntry<bool> ShowMultiSelectDebug { get; set; } // Advanced
|
||||||
@@ -317,6 +318,15 @@ namespace UIFixes
|
|||||||
null,
|
null,
|
||||||
new ConfigurationManagerAttributes { IsAdvanced = true })));
|
new ConfigurationManagerAttributes { IsAdvanced = true })));
|
||||||
|
|
||||||
|
configEntries.Add(EnableMultiClick = config.Bind(
|
||||||
|
InventorySection,
|
||||||
|
"Enable Multiselect with Shift-Click",
|
||||||
|
true,
|
||||||
|
new ConfigDescription(
|
||||||
|
"Add items to the selection by shift-clicking them. If you disable this, the only way to multiselect is with the selection box",
|
||||||
|
null,
|
||||||
|
new ConfigurationManagerAttributes { IsAdvanced = true })));
|
||||||
|
|
||||||
configEntries.Add(SelectionBoxKey = config.Bind(
|
configEntries.Add(SelectionBoxKey = config.Bind(
|
||||||
InventorySection,
|
InventorySection,
|
||||||
"Selection Box Key",
|
"Selection Box Key",
|
||||||
@@ -574,10 +584,12 @@ namespace UIFixes
|
|||||||
|
|
||||||
RecalcOrder(configEntries);
|
RecalcOrder(configEntries);
|
||||||
|
|
||||||
MakeExclusive(EnableMultiSelect, AutoOpenSortingTable);
|
|
||||||
|
|
||||||
MakeDependent(EnableMultiSelect, EnableMultiSelectInRaid);
|
MakeDependent(EnableMultiSelect, EnableMultiSelectInRaid);
|
||||||
MakeDependent(EnableMultiSelect, ShowMultiSelectDebug, false);
|
MakeDependent(EnableMultiSelect, ShowMultiSelectDebug, false);
|
||||||
|
MakeDependent(EnableMultiSelect, EnableMultiClick);
|
||||||
|
|
||||||
|
MakeExclusive(EnableMultiClick, AutoOpenSortingTable, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void RecalcOrder(List<ConfigEntryBase> configEntries)
|
private static void RecalcOrder(List<ConfigEntryBase> configEntries)
|
||||||
@@ -595,7 +607,7 @@ namespace UIFixes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void MakeExclusive(ConfigEntry<bool> priorityConfig, ConfigEntry<bool> secondaryConfig)
|
private static void MakeExclusive(ConfigEntry<bool> priorityConfig, ConfigEntry<bool> secondaryConfig, bool allowSecondaryToDisablePrimary = true)
|
||||||
{
|
{
|
||||||
if (priorityConfig.Value)
|
if (priorityConfig.Value)
|
||||||
{
|
{
|
||||||
@@ -614,7 +626,14 @@ namespace UIFixes
|
|||||||
{
|
{
|
||||||
if (secondaryConfig.Value)
|
if (secondaryConfig.Value)
|
||||||
{
|
{
|
||||||
priorityConfig.Value = false;
|
if (allowSecondaryToDisablePrimary)
|
||||||
|
{
|
||||||
|
priorityConfig.Value = false;
|
||||||
|
}
|
||||||
|
else if (priorityConfig.Value)
|
||||||
|
{
|
||||||
|
secondaryConfig.Value = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user