Add chat context menu entries
This commit is contained in:
parent
19e1e93416
commit
b28367fb65
@ -86,7 +86,7 @@ public class AutoDiscardPlogon : IDalamudPlugin
|
|||||||
ECommonsMain.Init(_pluginInterface, this);
|
ECommonsMain.Init(_pluginInterface, this);
|
||||||
_autoRetainerApi = new();
|
_autoRetainerApi = new();
|
||||||
_taskManager = new();
|
_taskManager = new();
|
||||||
_contextMenuIntegration = new(_pluginInterface, _chatGui, itemCache, _configuration, _configWindow);
|
_contextMenuIntegration = new(_pluginInterface, _chatGui, itemCache, _configuration, _configWindow, _gameGui);
|
||||||
|
|
||||||
_clientState.Login += _discardWindow.Login;
|
_clientState.Login += _discardWindow.Login;
|
||||||
_clientState.Logout += _discardWindow.Logout;
|
_clientState.Logout += _discardWindow.Logout;
|
||||||
|
@ -15,85 +15,128 @@ internal sealed class ContextMenuIntegration : IDisposable
|
|||||||
private readonly ItemCache _itemCache;
|
private readonly ItemCache _itemCache;
|
||||||
private readonly Configuration _configuration;
|
private readonly Configuration _configuration;
|
||||||
private readonly ConfigWindow _configWindow;
|
private readonly ConfigWindow _configWindow;
|
||||||
private readonly InventoryContextMenuItem _addItem;
|
private readonly IGameGui _gameGui;
|
||||||
private readonly InventoryContextMenuItem _removeItem;
|
private readonly SeString _addItemPayload;
|
||||||
|
private readonly SeString _removeItemPayload;
|
||||||
|
private readonly InventoryContextMenuItem _addInventoryItem;
|
||||||
|
private readonly InventoryContextMenuItem _removeInventoryItem;
|
||||||
private readonly DalamudContextMenu _dalamudContextMenu;
|
private readonly DalamudContextMenu _dalamudContextMenu;
|
||||||
|
|
||||||
public ContextMenuIntegration(DalamudPluginInterface pluginInterface, IChatGui chatGui, ItemCache itemCache,
|
public ContextMenuIntegration(DalamudPluginInterface pluginInterface, IChatGui chatGui, ItemCache itemCache,
|
||||||
Configuration configuration, ConfigWindow configWindow)
|
Configuration configuration, ConfigWindow configWindow, IGameGui gameGui)
|
||||||
{
|
{
|
||||||
_chatGui = chatGui;
|
_chatGui = chatGui;
|
||||||
_itemCache = itemCache;
|
_itemCache = itemCache;
|
||||||
_configuration = configuration;
|
_configuration = configuration;
|
||||||
_configWindow = configWindow;
|
_configWindow = configWindow;
|
||||||
_addItem = new InventoryContextMenuItem(
|
_gameGui = gameGui;
|
||||||
|
_addItemPayload =
|
||||||
new SeString(new UIForegroundPayload(52))
|
new SeString(new UIForegroundPayload(52))
|
||||||
.Append($"\ue05f ")
|
.Append($"\ue05f ")
|
||||||
.Append(new UIForegroundPayload(0)).Append("Add to Auto Discard List"),
|
.Append(new UIForegroundPayload(0)).Append("Add to Auto Discard List");
|
||||||
AddToDiscardList);
|
_removeItemPayload = new SeString(new UIForegroundPayload(52))
|
||||||
_removeItem = new InventoryContextMenuItem(
|
.Append($"\ue05f ")
|
||||||
new SeString(new UIForegroundPayload(52))
|
.Append(new UIForegroundPayload(0)).Append("Remove from Auto Discard List");
|
||||||
.Append($"\ue05f ")
|
_addInventoryItem = new InventoryContextMenuItem(_addItemPayload, AddToDiscardList);
|
||||||
.Append(new UIForegroundPayload(0)).Append("Remove from Auto Discard List"),
|
_removeInventoryItem = new InventoryContextMenuItem(_removeItemPayload, RemoveFromDiscardList);
|
||||||
RemoveFromDiscardList);
|
|
||||||
|
|
||||||
_dalamudContextMenu = new(pluginInterface);
|
_dalamudContextMenu = new(pluginInterface);
|
||||||
_dalamudContextMenu.OnOpenInventoryContextMenu += OpenInventoryContextMenu;
|
_dalamudContextMenu.OnOpenInventoryContextMenu += OpenInventoryContextMenu;
|
||||||
|
_dalamudContextMenu.OnOpenGameObjectContextMenu += OpenGameObjectContextMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
private unsafe void OpenInventoryContextMenu(InventoryContextMenuOpenArgs args)
|
private void OpenInventoryContextMenu(InventoryContextMenuOpenArgs args)
|
||||||
{
|
{
|
||||||
if (!_configuration.ContextMenu.Enabled)
|
if (!IsEnabled())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_configuration.ContextMenu.OnlyWhenConfigIsOpen && !_configWindow.IsOpen)
|
if (args.ParentAddonName is not ("Inventory" or "InventoryExpansion" or "InventoryLarge" or "ArmouryBoard"))
|
||||||
return;
|
|
||||||
|
|
||||||
if (!(args.ParentAddonName is "Inventory" or "InventoryExpansion" or "InventoryLarge" or "ArmouryBoard"))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!_configWindow.CanItemBeConfigured(args.ItemId))
|
if (!_configWindow.CanItemBeConfigured(args.ItemId))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_configuration.DiscardingItems.Contains(args.ItemId))
|
if (_configuration.DiscardingItems.Contains(args.ItemId))
|
||||||
args.AddCustomItem(_removeItem);
|
args.AddCustomItem(_removeInventoryItem);
|
||||||
else if (_itemCache.TryGetItem(args.ItemId, out ItemCache.CachedItemInfo? cachedItemInfo) &&
|
else if (_itemCache.TryGetItem(args.ItemId, out ItemCache.CachedItemInfo? cachedItemInfo) &&
|
||||||
cachedItemInfo.CanBeDiscarded())
|
cachedItemInfo.CanBeDiscarded())
|
||||||
args.AddCustomItem(_addItem);
|
args.AddCustomItem(_addInventoryItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddToDiscardList(InventoryContextMenuItemSelectedArgs args)
|
private void OpenGameObjectContextMenu(GameObjectContextMenuOpenArgs args)
|
||||||
{
|
{
|
||||||
if (_configWindow.AddToDiscardList(args.ItemId))
|
if (!IsEnabled())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (args.ParentAddonName is not "ChatLog")
|
||||||
|
return;
|
||||||
|
|
||||||
|
uint itemId = (uint)_gameGui.HoveredItem;
|
||||||
|
if (itemId > 1_000_000)
|
||||||
|
itemId -= 1_000_000;
|
||||||
|
|
||||||
|
if (itemId > 500_000)
|
||||||
|
itemId -= 500_000;
|
||||||
|
|
||||||
|
if (_configuration.DiscardingItems.Contains(itemId))
|
||||||
|
args.AddCustomItem(new GameObjectContextMenuItem(_removeItemPayload, _ => RemoveFromDiscardList(itemId)));
|
||||||
|
else if (_itemCache.TryGetItem(itemId, out ItemCache.CachedItemInfo? cachedItemInfo) &&
|
||||||
|
cachedItemInfo.CanBeDiscarded())
|
||||||
|
args.AddCustomItem(new GameObjectContextMenuItem(_addItemPayload, _ => AddToDiscardList(itemId)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddToDiscardList(InventoryContextMenuItemSelectedArgs args) => AddToDiscardList(args.ItemId);
|
||||||
|
|
||||||
|
private void AddToDiscardList(uint itemId)
|
||||||
|
{
|
||||||
|
if (_configWindow.AddToDiscardList(itemId))
|
||||||
{
|
{
|
||||||
_chatGui.Print(new SeString(new UIForegroundPayload(52))
|
_chatGui.Print(new SeString(new UIForegroundPayload(52))
|
||||||
.Append($"\ue05f ")
|
.Append($"\ue05f ")
|
||||||
.Append(new UIForegroundPayload(0))
|
.Append(new UIForegroundPayload(0))
|
||||||
.Append($"Added ")
|
.Append($"Added ")
|
||||||
.Append(new UIForegroundPayload(52))
|
.Append(new UIForegroundPayload(52))
|
||||||
.Append(_itemCache.GetItemName(args.ItemId))
|
.Append(new ItemPayload(itemId))
|
||||||
|
.Append(_itemCache.GetItemName(itemId))
|
||||||
|
.Append(RawPayload.LinkTerminator)
|
||||||
.Append(new UIForegroundPayload(0))
|
.Append(new UIForegroundPayload(0))
|
||||||
.Append(" to Auto Discard List."));
|
.Append(" to Auto Discard List."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RemoveFromDiscardList(InventoryContextMenuItemSelectedArgs args)
|
private void RemoveFromDiscardList(InventoryContextMenuItemSelectedArgs args) => RemoveFromDiscardList(args.ItemId);
|
||||||
|
|
||||||
|
private void RemoveFromDiscardList(uint itemId)
|
||||||
{
|
{
|
||||||
if (_configWindow.RemoveFromDiscardList(args.ItemId))
|
if (_configWindow.RemoveFromDiscardList(itemId))
|
||||||
{
|
{
|
||||||
_chatGui.Print(new SeString(new UIForegroundPayload(52))
|
_chatGui.Print(new SeString(new UIForegroundPayload(52))
|
||||||
.Append($"\ue05f ")
|
.Append($"\ue05f ")
|
||||||
.Append(new UIForegroundPayload(0))
|
.Append(new UIForegroundPayload(0))
|
||||||
.Append($"Removed ")
|
.Append($"Removed ")
|
||||||
.Append(new UIForegroundPayload(52))
|
.Append(new UIForegroundPayload(52))
|
||||||
.Append(_itemCache.GetItemName(args.ItemId))
|
.Append(new ItemPayload(itemId))
|
||||||
|
.Append(_itemCache.GetItemName(itemId))
|
||||||
|
.Append(RawPayload.LinkTerminator)
|
||||||
.Append(new UIForegroundPayload(0))
|
.Append(new UIForegroundPayload(0))
|
||||||
.Append(" from Auto Discard List."));
|
.Append(" from Auto Discard List."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsEnabled()
|
||||||
|
{
|
||||||
|
if (!_configuration.ContextMenu.Enabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (_configuration.ContextMenu.OnlyWhenConfigIsOpen && !_configWindow.IsOpen)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
_dalamudContextMenu.OnOpenGameObjectContextMenu -= OpenGameObjectContextMenu;
|
||||||
_dalamudContextMenu.OnOpenInventoryContextMenu -= OpenInventoryContextMenu;
|
_dalamudContextMenu.OnOpenInventoryContextMenu -= OpenInventoryContextMenu;
|
||||||
_dalamudContextMenu.Dispose();
|
_dalamudContextMenu.Dispose();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user