Deselect items that are gone due to merge or destruction
This commit is contained in:
@@ -63,9 +63,6 @@ namespace UIFixes
|
|||||||
{
|
{
|
||||||
ItemContextClass itemContext = new MultiSelectItemContext(itemView.ItemContext, itemView.ItemRotation);
|
ItemContextClass itemContext = new MultiSelectItemContext(itemView.ItemContext, itemView.ItemRotation);
|
||||||
|
|
||||||
// Remove event handlers that no one cares about and cause stack overflows
|
|
||||||
itemContext.method_1();
|
|
||||||
|
|
||||||
// Subscribe to window closures to deselect
|
// Subscribe to window closures to deselect
|
||||||
GClass3085 windowContext = itemView.GetComponentInParent<GridWindow>()?.WindowContext ?? itemView.GetComponentInParent<InfoWindow>()?.WindowContext;
|
GClass3085 windowContext = itemView.GetComponentInParent<GridWindow>()?.WindowContext ?? itemView.GetComponentInParent<InfoWindow>()?.WindowContext;
|
||||||
if (windowContext != null)
|
if (windowContext != null)
|
||||||
@@ -319,17 +316,47 @@ namespace UIFixes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MultiSelectItemContext(ItemContextAbstractClass itemContext, ItemRotation rotation) : ItemContextClass(itemContext, rotation)
|
public class MultiSelectItemContext : ItemContextClass
|
||||||
{
|
{
|
||||||
|
public MultiSelectItemContext(ItemContextAbstractClass itemContext, ItemRotation rotation) : base(itemContext, rotation)
|
||||||
|
{
|
||||||
|
// Adjust event handlers
|
||||||
|
if (GClass2813_0 != null)
|
||||||
|
{
|
||||||
|
// Listen for underlying context being disposed, it might mean the item is gone (merged, destroyed, etc)
|
||||||
|
GClass2813_0.OnDisposed += OnParentDispose;
|
||||||
|
// This serves no purpose and causes stack overflows
|
||||||
|
GClass2813_0.OnCloseWindow -= CloseDependentWindows;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Dispose()
|
||||||
|
{
|
||||||
|
base.Dispose();
|
||||||
|
if (GClass2813_0 != null)
|
||||||
|
{
|
||||||
|
GClass2813_0.OnDisposed -= OnParentDispose;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnParentDispose()
|
||||||
|
{
|
||||||
|
if (Item.CurrentAddress == null)
|
||||||
|
{
|
||||||
|
// This item is gone!
|
||||||
|
MultiSelect.Deselect(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override bool SplitAvailable => false;
|
public override bool SplitAvailable => false;
|
||||||
|
|
||||||
// used by ItemUiContext.QuickFindAppropriatePlace, the one that picks a container, i.e. ctrl-click
|
// used by ItemUiContext.QuickFindAppropriatePlace, the one that picks a container, i.e. ctrl-click
|
||||||
// ItemContextClass (drag) defaults to None, but we want what the underlying item allows
|
// ItemContextClass (drag) defaults to None, but we want what the underlying item allows
|
||||||
public override bool CanQuickMoveTo(ETargetContainer targetContainer)
|
public override bool CanQuickMoveTo(ETargetContainer targetContainer)
|
||||||
{
|
{
|
||||||
if (this.GClass2813_0 != null)
|
if (GClass2813_0 != null)
|
||||||
{
|
{
|
||||||
return this.GClass2813_0.CanQuickMoveTo(targetContainer);
|
return GClass2813_0.CanQuickMoveTo(targetContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return base.CanQuickMoveTo(targetContainer);
|
return base.CanQuickMoveTo(targetContainer);
|
||||||
|
|||||||
@@ -103,10 +103,20 @@ namespace UIFixes
|
|||||||
__instance.TransferItemsScreen.GetOrAddComponent<DrawMultiSelect>();
|
__instance.TransferItemsScreen.GetOrAddComponent<DrawMultiSelect>();
|
||||||
__instance.ScavengerInventoryScreen.GetOrAddComponent<DrawMultiSelect>();
|
__instance.ScavengerInventoryScreen.GetOrAddComponent<DrawMultiSelect>();
|
||||||
|
|
||||||
if (Settings.ShowMultiSelectDebug.Value)
|
void ToggleDebug()
|
||||||
{
|
{
|
||||||
Singleton<PreloaderUI>.Instance.GetOrAddComponent<MultiSelectDebug>();
|
if (Settings.ShowMultiSelectDebug.Value)
|
||||||
}
|
{
|
||||||
|
Singleton<PreloaderUI>.Instance.GetOrAddComponent<MultiSelectDebug>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var debug = Singleton<PreloaderUI>.Instance.GetComponent<MultiSelectDebug>();
|
||||||
|
UnityEngine.Object.Destroy(debug);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ToggleDebug();
|
||||||
|
Settings.ShowMultiSelectDebug.SettingChanged += (s, a) => ToggleDebug();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user