Skip to content

Commit 2fdd5a3

Browse files
committed
refactor open context menu in slot item
1 parent a5baa4b commit 2fdd5a3

File tree

6 files changed

+66
-54
lines changed

6 files changed

+66
-54
lines changed

Intersect.Client.Core/Interface/Game/Bag/BagItem.cs

+9-8
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ public partial class BagItem : SlotItem
3939
// Context Menu Handling
4040
private readonly MenuItem _withdrawContextItem;
4141

42-
public BagItem(BagWindow bagWindow, Base parent, int index, ContextMenu contextMenu) : base(parent, nameof(BagItem), index, contextMenu)
42+
public BagItem(BagWindow bagWindow, Base parent, int index, ContextMenu contextMenu)
43+
: base(parent, nameof(BagItem), index, contextMenu)
4344
{
4445
_bagWindow = bagWindow;
4546
TextureFilename = "bagitem.png";
@@ -60,15 +61,15 @@ public BagItem(BagWindow bagWindow, Base parent, int index, ContextMenu contextM
6061

6162
LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
6263

63-
_contextMenu!.ClearChildren();
64-
_withdrawContextItem = _contextMenu.AddItem(Strings.BagContextMenu.Withdraw);
64+
contextMenu.ClearChildren();
65+
_withdrawContextItem = contextMenu.AddItem(Strings.BagContextMenu.Withdraw);
6566
_withdrawContextItem.Clicked += _withdrawMenuItem_Clicked;
66-
_contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
67+
contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
6768
}
6869

6970
#region Context Menu
7071

71-
public override void OpenContextMenu()
72+
protected override void OnContextMenuOpening(ContextMenu contextMenu)
7273
{
7374
if (Globals.BagSlots is not { Length: > 0 } bagSlots)
7475
{
@@ -81,10 +82,10 @@ public override void OpenContextMenu()
8182
}
8283

8384
// Clear the context menu and add the withdraw item with updated item name
84-
_contextMenu!.ClearChildren();
85+
contextMenu.ClearChildren();
8586
_withdrawContextItem.SetText(Strings.BagContextMenu.Withdraw.ToString(item.Name));
86-
_contextMenu.AddChild(_withdrawContextItem);
87-
base.OpenContextMenu();
87+
contextMenu.AddChild(_withdrawContextItem);
88+
base.OnContextMenuOpening(contextMenu);
8889
}
8990

9091
private void _withdrawMenuItem_Clicked(Base sender, MouseButtonState arguments)

Intersect.Client.Core/Interface/Game/Bank/BankItem.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,13 @@ public BankItem(BankWindow bankWindow, Base parent, int index, ContextMenu conte
6363

6464
LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
6565

66-
_contextMenu!.ClearChildren();
67-
_withdrawContextItem = _contextMenu.AddItem(Strings.BankContextMenu.Withdraw);
66+
contextMenu.ClearChildren();
67+
_withdrawContextItem = contextMenu.AddItem(Strings.BankContextMenu.Withdraw);
6868
_withdrawContextItem.Clicked += _withdrawMenuItem_Clicked;
69-
_contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
69+
contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
7070
}
7171

72-
public void OpenContextMenu()
72+
protected override void OnContextMenuOpening(ContextMenu contextMenu)
7373
{
7474
if (Globals.BankSlots is not { Length: > 0 } bankSlots)
7575
{
@@ -82,11 +82,11 @@ public void OpenContextMenu()
8282
}
8383

8484
// Clear the context menu and add the withdraw item with updated item name
85-
_contextMenu!.ClearChildren();
85+
contextMenu.ClearChildren();
86+
contextMenu.AddChild(_withdrawContextItem);
8687
_withdrawContextItem.SetText(Strings.BankContextMenu.Withdraw.ToString(item.Name));
87-
_contextMenu.AddChild(_withdrawContextItem);
8888

89-
base.OpenContextMenu();
89+
base.OnContextMenuOpening(contextMenu);
9090
}
9191

9292
private void _withdrawMenuItem_Clicked(Base sender, MouseButtonState arguments)

Intersect.Client.Core/Interface/Game/Inventory/InventoryItem.cs

+19-18
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public partial class InventoryItem : SlotItem
4848
private readonly MenuItem _actionItemMenuItem;
4949
private readonly MenuItem _dropItemMenuItem;
5050

51-
public InventoryItem(InventoryWindow inventoryWindow, Base parent, int index, ContextMenu contextMenu) : base(parent, nameof(InventoryItem), index, contextMenu)
51+
public InventoryItem(InventoryWindow inventoryWindow, Base parent, int index, ContextMenu contextMenu)
52+
: base(parent, nameof(InventoryItem), index, contextMenu)
5253
{
5354
_inventoryWindow = inventoryWindow;
5455
TextureFilename = "inventoryitem.png";
@@ -97,14 +98,14 @@ public InventoryItem(InventoryWindow inventoryWindow, Base parent, int index, Co
9798

9899
LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
99100

100-
_contextMenu!.ClearChildren();
101-
_useItemMenuItem = _contextMenu.AddItem(Strings.ItemContextMenu.Use);
101+
contextMenu.ClearChildren();
102+
_useItemMenuItem = contextMenu.AddItem(Strings.ItemContextMenu.Use);
102103
_useItemMenuItem.Clicked += _useItemContextItem_Clicked;
103-
_dropItemMenuItem = _contextMenu.AddItem(Strings.ItemContextMenu.Drop);
104+
_dropItemMenuItem = contextMenu.AddItem(Strings.ItemContextMenu.Drop);
104105
_dropItemMenuItem.Clicked += _dropItemContextItem_Clicked;
105-
_actionItemMenuItem = _contextMenu.AddItem(Strings.ItemContextMenu.Bank);
106+
_actionItemMenuItem = contextMenu.AddItem(Strings.ItemContextMenu.Bank);
106107
_actionItemMenuItem.Clicked += _actionItemContextItem_Clicked;
107-
_contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
108+
contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
108109

109110
if (Globals.Me is { } player)
110111
{
@@ -114,10 +115,10 @@ public InventoryItem(InventoryWindow inventoryWindow, Base parent, int index, Co
114115

115116
#region Context Menu
116117

117-
public override void OpenContextMenu()
118+
protected override void OnContextMenuOpening(ContextMenu contextMenu)
118119
{
119120
// Clear out the old options since we might not show all of them
120-
_contextMenu!.ClearChildren();
121+
contextMenu.ClearChildren();
121122

122123
if (Globals.Me?.Inventory[SlotIndex] is not { } inventorySlot)
123124
{
@@ -134,24 +135,24 @@ public override void OpenContextMenu()
134135
switch (descriptor.ItemType)
135136
{
136137
case ItemType.Spell:
137-
_contextMenu.AddChild(_useItemMenuItem);
138+
contextMenu.AddChild(_useItemMenuItem);
138139
var useItemLabel = descriptor.QuickCast ? Strings.ItemContextMenu.Cast : Strings.ItemContextMenu.Learn;
139140
_useItemMenuItem.Text = useItemLabel.ToString(descriptor.Name);
140141
break;
141142

142143
case ItemType.Event:
143144
case ItemType.Consumable:
144-
_contextMenu.AddChild(_useItemMenuItem);
145+
contextMenu.AddChild(_useItemMenuItem);
145146
_useItemMenuItem.Text = Strings.ItemContextMenu.Use.ToString(descriptor.Name);
146147
break;
147148

148149
case ItemType.Bag:
149-
_contextMenu.AddChild(_useItemMenuItem);
150+
contextMenu.AddChild(_useItemMenuItem);
150151
_useItemMenuItem.Text = Strings.ItemContextMenu.Open.ToString(descriptor.Name);
151152
break;
152153

153154
case ItemType.Equipment:
154-
_contextMenu.AddChild(_useItemMenuItem);
155+
contextMenu.AddChild(_useItemMenuItem);
155156
var equipItemLabel = Globals.Me.MyEquipment.Contains(SlotIndex) ? Strings.ItemContextMenu.Unequip : Strings.ItemContextMenu.Equip;
156157
_useItemMenuItem.Text = equipItemLabel.ToString(descriptor.Name);
157158
break;
@@ -160,33 +161,33 @@ public override void OpenContextMenu()
160161
// Set up the correct contextual additional action.
161162
if (Globals.InBag && descriptor.CanBag)
162163
{
163-
_contextMenu.AddChild(_actionItemMenuItem);
164+
contextMenu.AddChild(_actionItemMenuItem);
164165
_actionItemMenuItem.SetText(Strings.ItemContextMenu.Bag.ToString(descriptor.Name));
165166
}
166167
else if (Globals.InBank && (descriptor.CanBank || descriptor.CanGuildBank))
167168
{
168-
_contextMenu.AddChild(_actionItemMenuItem);
169+
contextMenu.AddChild(_actionItemMenuItem);
169170
_actionItemMenuItem.SetText(Strings.ItemContextMenu.Bank.ToString(descriptor.Name));
170171
}
171172
else if (Globals.InTrade && descriptor.CanTrade)
172173
{
173-
_contextMenu.AddChild(_actionItemMenuItem);
174+
contextMenu.AddChild(_actionItemMenuItem);
174175
_actionItemMenuItem.SetText(Strings.ItemContextMenu.Trade.ToString(descriptor.Name));
175176
}
176177
else if (Globals.GameShop != null && descriptor.CanSell)
177178
{
178-
_contextMenu.AddChild(_actionItemMenuItem);
179+
contextMenu.AddChild(_actionItemMenuItem);
179180
_actionItemMenuItem.SetText(Strings.ItemContextMenu.Sell.ToString(descriptor.Name));
180181
}
181182

182183
// Can we drop this item? if so show the user!
183184
if (descriptor.CanDrop)
184185
{
185-
_contextMenu.AddChild(_dropItemMenuItem);
186+
contextMenu.AddChild(_dropItemMenuItem);
186187
_dropItemMenuItem.SetText(Strings.ItemContextMenu.Drop.ToString(descriptor.Name));
187188
}
188189

189-
base.OpenContextMenu();
190+
base.OnContextMenuOpening(contextMenu);
190191
}
191192

192193
private void _useItemContextItem_Clicked(Base sender, MouseButtonState arguments)

Intersect.Client.Core/Interface/Game/Shop/ShopItem.cs

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using Intersect.Client.Core;
22
using Intersect.Client.Framework.File_Management;
3-
using Intersect.Client.Framework.Gwen;
43
using Intersect.Client.Framework.Gwen.Control;
54
using Intersect.Client.Framework.Gwen.Control.EventArguments;
65
using Intersect.Client.Framework.Gwen.Input;
@@ -20,7 +19,8 @@ public partial class ShopItem : SlotItem
2019
private readonly MenuItem _buyMenuItem;
2120
private ItemDescriptionWindow? _itemDescWindow;
2221

23-
public ShopItem(ShopWindow shopWindow, Base parent, int index, ContextMenu contextMenu) : base(parent, nameof(ShopItem), index, contextMenu)
22+
public ShopItem(ShopWindow shopWindow, Base parent, int index, ContextMenu contextMenu)
23+
: base(parent, nameof(ShopItem), index, contextMenu)
2424
{
2525
_shopWindow = shopWindow;
2626
_mySlot = index;
@@ -33,11 +33,10 @@ public ShopItem(ShopWindow shopWindow, Base parent, int index, ContextMenu conte
3333

3434
LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
3535

36-
//TODO: Is this a memory leak?
37-
_contextMenu!.ClearChildren();
38-
_buyMenuItem = _contextMenu.AddItem(Strings.ShopContextMenu.Buy);
36+
contextMenu.ClearChildren();
37+
_buyMenuItem = contextMenu.AddItem(Strings.ShopContextMenu.Buy);
3938
_buyMenuItem.Clicked += _buyMenuItem_Clicked;
40-
_contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
39+
contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
4140

4241
LoadItem();
4342
}
@@ -124,7 +123,7 @@ private void _buyMenuItem_Clicked(Base sender, Framework.Gwen.Control.EventArgum
124123
Globals.Me?.TryBuyItem(_mySlot);
125124
}
126125

127-
public override void OpenContextMenu()
126+
protected override void OnContextMenuOpening(ContextMenu contextMenu)
128127
{
129128
if (Globals.GameShop is not { SellingItems.Count: > 0 } gameShop)
130129
{
@@ -136,8 +135,10 @@ public override void OpenContextMenu()
136135
return;
137136
}
138137

138+
contextMenu.ClearChildren();
139+
contextMenu.AddChild(_buyMenuItem);
139140
_buyMenuItem.SetText(Strings.ShopContextMenu.Buy.ToString(item.Name));
140-
base.OpenContextMenu();
141+
base.OnContextMenuOpening(contextMenu);
141142
}
142143

143144
public void LoadItem()

Intersect.Client.Core/Interface/Game/SlotItem.cs

+13-3
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,22 @@ public virtual void Update()
3232
{
3333
}
3434

35-
public virtual void OpenContextMenu()
35+
public void OpenContextMenu()
36+
{
37+
if (_contextMenu is not { } contextMenu)
38+
{
39+
return;
40+
}
41+
42+
OnContextMenuOpening(contextMenu);
43+
}
44+
45+
protected virtual void OnContextMenuOpening(ContextMenu contextMenu)
3646
{
3747
// Display our menu... If we have anything to display.
38-
if (_contextMenu?.Children.Count > 0)
48+
if (contextMenu.Children.Count > 0)
3949
{
40-
_contextMenu.Open(Pos.None);
50+
contextMenu.Open(Pos.None);
4151
}
4252
}
4353
}

Intersect.Client.Core/Interface/Game/Spells/SpellItem.cs

+9-10
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,20 @@ public SpellItem(SpellsWindow spellWindow, Base parent, int index, ContextMenu c
6161

6262
LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
6363

64-
_contextMenu!.ClearChildren();
65-
_useSpellMenuItem = _contextMenu.AddItem(Strings.SpellContextMenu.Cast.ToString());
64+
contextMenu.ClearChildren();
65+
_useSpellMenuItem = contextMenu.AddItem(Strings.SpellContextMenu.Cast.ToString());
6666
_useSpellMenuItem.Clicked += _useSpellMenuItem_Clicked;
67-
_forgetSpellMenuItem = _contextMenu.AddItem(Strings.SpellContextMenu.Forget.ToString());
67+
_forgetSpellMenuItem = contextMenu.AddItem(Strings.SpellContextMenu.Forget.ToString());
6868
_forgetSpellMenuItem.Clicked += _forgetSpellMenuItem_Clicked;
69-
_contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
69+
contextMenu.LoadJsonUi(GameContentManager.UI.InGame, Graphics.Renderer.GetResolutionString());
7070
}
7171

7272
#region Context Menu
7373

74-
public void OpenContextMenu()
74+
protected override void OnContextMenuOpening(ContextMenu contextMenu)
7575
{
7676
// Clear out the old options.
77-
_contextMenu!.ClearChildren();
77+
contextMenu.ClearChildren();
7878

7979
if (Globals.Me?.Spells is not { Length: > 0 } spellSlots)
8080
{
@@ -88,18 +88,17 @@ public void OpenContextMenu()
8888
}
8989

9090
// Add our use spell option.
91-
_contextMenu.AddChild(_useSpellMenuItem);
91+
contextMenu.AddChild(_useSpellMenuItem);
9292
_useSpellMenuItem.SetText(Strings.SpellContextMenu.Cast.ToString(spell.Name));
9393

9494
// If this spell is not bound, allow users to forget it!
9595
if (!spell.Bound)
9696
{
97-
_contextMenu.AddChild(_forgetSpellMenuItem);
97+
contextMenu.AddChild(_forgetSpellMenuItem);
9898
_forgetSpellMenuItem.SetText(Strings.SpellContextMenu.Forget.ToString(spell.Name));
9999
}
100100

101-
_contextMenu.SizeToChildren();
102-
_contextMenu.Open(Pos.None);
101+
base.OnContextMenuOpening(contextMenu);
103102
}
104103

105104
private void _useSpellMenuItem_Clicked(Base sender, MouseButtonState arguments)

0 commit comments

Comments
 (0)