Skip to content

Commit 451b5d4

Browse files
authored
Merge pull request #2624 from lunedis/feature/charges-for-fit
Add "Charges For Active Fit" market tree shortcut
2 parents d204e70 + ce9ce17 commit 451b5d4

File tree

4 files changed

+58
-9
lines changed

4 files changed

+58
-9
lines changed

gui/builtinMarketBrowser/events.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@
55
ItemSelected, ITEM_SELECTED = wx.lib.newevent.NewEvent()
66

77
RECENTLY_USED_MODULES = -2
8+
9+
CHARGES_FOR_FIT = -3

gui/builtinMarketBrowser/itemView.py

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@
22
from logbook import Logger
33

44
import gui.builtinMarketBrowser.pfSearchBox as SBox
5+
import gui.globalEvents as GE
56
from config import slotColourMap, slotColourMapDark
67
from eos.saveddata.module import Module
7-
from gui.builtinMarketBrowser.events import ItemSelected, RECENTLY_USED_MODULES
8+
from gui.builtinMarketBrowser.events import ItemSelected, RECENTLY_USED_MODULES, CHARGES_FOR_FIT
89
from gui.contextMenu import ContextMenu
910
from gui.display import Display
1011
from gui.utils.staticHelpers import DragDropHelper
1112
from gui.utils.dark import isDark
1213
from service.fit import Fit
1314
from service.market import Market
15+
from service.ammo import Ammo
1416

1517

1618
pyfalog = Logger(__name__)
@@ -32,6 +34,7 @@ def __init__(self, parent, marketBrowser):
3234
self.filteredStore = set()
3335
self.sMkt = marketBrowser.sMkt
3436
self.sFit = Fit.getInstance()
37+
self.sAmmo = Ammo.getInstance()
3538

3639
self.marketBrowser = marketBrowser
3740
self.marketView = marketBrowser.marketView
@@ -51,6 +54,9 @@ def __init__(self, parent, marketBrowser):
5154
self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.itemActivated)
5255
self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag)
5356

57+
# the "charges for active fitting" needs to listen to fitting changes
58+
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
59+
5460
self.active = []
5561

5662
def delaySearch(self, evt):
@@ -91,7 +97,11 @@ def selectionMade(self, context):
9197
if sel.IsOk():
9298
# Get data field of the selected item (which is a marketGroup ID if anything was selected)
9399
seldata = self.marketView.GetItemData(sel)
94-
if seldata is not None and seldata != RECENTLY_USED_MODULES:
100+
if seldata == RECENTLY_USED_MODULES:
101+
items = self.sMkt.getRecentlyUsed()
102+
elif seldata == CHARGES_FOR_FIT:
103+
items = self.getChargesForActiveFit()
104+
elif seldata is not None:
95105
# If market group treeview item doesn't have children (other market groups or dummies),
96106
# then it should have items in it and we want to request them
97107
if self.marketView.ItemHasChildren(sel) is False:
@@ -103,18 +113,17 @@ def selectionMade(self, context):
103113
else:
104114
items = set()
105115
else:
106-
# If method was called but selection wasn't actually made or we have a hit on recently used modules
107-
if seldata == RECENTLY_USED_MODULES:
108-
items = self.sMkt.getRecentlyUsed()
109-
else:
110-
items = set()
116+
items = set()
111117

112118
# Fill store
113119
self.updateItemStore(items)
114120

115121
# Set toggle buttons / use search mode flag if recently used modules category is selected (in order to have all modules listed and not filtered)
116122
if seldata == RECENTLY_USED_MODULES:
117123
self.marketBrowser.mode = 'recent'
124+
125+
if seldata == CHARGES_FOR_FIT:
126+
self.marketBrowser.mode = 'charges'
118127

119128
self.setToggles()
120129
if context == 'tree' and self.marketBrowser.settings.get('marketMGMarketSelectMode') == 1:
@@ -123,6 +132,41 @@ def selectionMade(self, context):
123132
btn.setUserSelection(True)
124133
self.filterItemStore()
125134

135+
def getChargesForActiveFit(self):
136+
fitId = self.mainFrame.getActiveFit()
137+
138+
# no active fit => no charges
139+
if fitId is None:
140+
return set()
141+
142+
fit = self.sFit.getFit(fitId)
143+
144+
# use a set so we only add one entry for each charge
145+
items = set()
146+
for mod in fit.modules:
147+
charges = self.sAmmo.getModuleFlatAmmo(mod)
148+
for charge in charges:
149+
items.add(charge)
150+
return items
151+
152+
def fitChanged(self, event):
153+
# skip the event so the other handlers also get called
154+
event.Skip()
155+
156+
if self.marketBrowser.mode != 'charges':
157+
return
158+
159+
activeFitID = self.mainFrame.getActiveFit()
160+
# if it was not the active fitting that was changed, do not do anything
161+
if activeFitID is not None and activeFitID not in event.fitIDs:
162+
return
163+
164+
items = self.getChargesForActiveFit()
165+
166+
# update the UI
167+
self.updateItemStore(items)
168+
self.filterItemStore()
169+
126170
def updateItemStore(self, items):
127171
self.unfilteredStore = items
128172

gui/builtinMarketBrowser/marketTree.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import wx
22

33
from gui.cachingImageList import CachingImageList
4-
from gui.builtinMarketBrowser.events import RECENTLY_USED_MODULES
4+
from gui.builtinMarketBrowser.events import RECENTLY_USED_MODULES, CHARGES_FOR_FIT
55

66
from logbook import Logger
77

@@ -35,6 +35,9 @@ def __init__(self, parent, marketBrowser):
3535
# Add recently used modules node
3636
rumIconId = self.addImage("market_small", "gui")
3737
self.AppendItem(self.root, _t("Recently Used Items"), rumIconId, data=RECENTLY_USED_MODULES)
38+
# Add charges for active fitting node
39+
cffIconId = self.addImage("damagePattern_small", "gui")
40+
self.AppendItem(self.root, _t("Charges For Active Fit"), cffIconId, data=CHARGES_FOR_FIT)
3841

3942
# Bind our lookup method to when the tree gets expanded
4043
self.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup)

gui/marketBrowser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def mode(self, newMode):
146146
setting = self.settings.get('marketMGSearchMode')
147147
# We turn on all meta buttons for the duration of search/recents
148148
if setting == 1:
149-
if newMode in ('search', 'recent'):
149+
if newMode in ('search', 'recent', 'charges'):
150150
for btn in self.metaButtons:
151151
btn.setUserSelection(True)
152152
if newMode == 'normal':

0 commit comments

Comments
 (0)