There is a bug with Hide Cannot Invoke Actions option at ItemActionPanel.
When this option is set, and item action is calling base.CanInvokeInternal() the m_ItemViewSlotsContainer is not yet assigned which cause ArgumentOutOfRangeException.
This happens because SetViewSlotsContainer() is called after CanInvoke(). The solution is to do it otherwise. Here is the code:
ItemActionPanel.cs:39
In case this is the correct solution, can you please include it to the future release?
When this option is set, and item action is calling base.CanInvokeInternal() the m_ItemViewSlotsContainer is not yet assigned which cause ArgumentOutOfRangeException.
This happens because SetViewSlotsContainer() is called after CanInvoke(). The solution is to do it otherwise. Here is the code:
ItemActionPanel.cs:39
Code:
public void AssignActions(ListSlice<ItemAction> itemActions, ItemInfo itemInfo,
ItemUser itemUser, ItemViewSlotsContainerBase itemViewSlotsContainer, int itemViewSlotIndex)
{
m_ItemInfo = itemInfo;
m_ItemUser = itemUser;
m_ItemViewSlotsContainer = itemViewSlotsContainer;
if (m_ItemActions == null) { m_ItemActions = new List<ItemAction>(); }
m_ItemActions.Clear();
for (int i = 0; i < itemActions.Count; i++) {
var itemAction = itemActions[i];
itemAction.Setup(itemInfo, itemUser);
itemAction.Initialize(false);
// Call SetViewSlotsContainer before CanInvoke
if (itemAction is ItemViewSlotsContainerItemAction itemActionWithContainer) {
itemActionWithContainer.SetViewSlotsContainer(m_ItemViewSlotsContainer, itemViewSlotIndex);
}
if (m_HideCannotInvokeActions) {
if (itemAction.CanInvoke(itemInfo, itemUser) == false) {
continue;
}
}
m_ItemActions.Add(itemAction);
// if (itemAction is ItemViewSlotsContainerItemAction itemActionWithContainer) {
// itemActionWithContainer.SetViewSlotsContainer(m_ItemViewSlotsContainer, itemViewSlotIndex);
// }
}
AssignActions(m_ItemActions);
}
In case this is the correct solution, can you please include it to the future release?