22from logbook import Logger
33
44import gui .builtinMarketBrowser .pfSearchBox as SBox
5+ import gui .globalEvents as GE
56from config import slotColourMap , slotColourMapDark
67from 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
89from gui .contextMenu import ContextMenu
910from gui .display import Display
1011from gui .utils .staticHelpers import DragDropHelper
1112from gui .utils .dark import isDark
1213from service .fit import Fit
1314from service .market import Market
15+ from service .ammo import Ammo
1416
1517
1618pyfalog = 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
0 commit comments