Merge pull request #149 from blitzmann/issue-134

Introduces empty group filtering to ship browser: stage 1
This commit is contained in:
Ryan Holmes
2014-07-30 16:07:08 -04:00
2 changed files with 36 additions and 6 deletions

View File

@@ -417,8 +417,12 @@ class NavigationPanel(SFItem.SFBrowserItem):
else:
self.shipBrowser.filterShipsWithNoFits = True
self.btnSwitch.label = "Show empty ship groups"
stage = self.shipBrowser.GetActiveStage()
if stage == 2:
if stage == 1:
wx.PostEvent(self.shipBrowser,Stage1Selected())
elif stage == 2:
categoryID = self.shipBrowser.GetStageData(stage)
wx.PostEvent(self.shipBrowser,Stage2Selected(categoryID=categoryID, back = True))
@@ -553,6 +557,7 @@ class ShipBrowser(wx.Panel):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.categoryList=[]
self.categoryFitCache = {}
self._stage1Data = -1
self._stage2Data = -1
@@ -665,16 +670,28 @@ class ShipBrowser(wx.Panel):
self.navpanel.ShowSwitchEmptyGroupsButton(False)
sMarket = service.Market.getInstance()
sFit = service.Fit.getInstance()
self.lpane.ShowLoading(False)
self.lpane.Freeze()
self.lpane.RemoveAllChildren()
if len(self.categoryList) == 0:
# set cache of category list
self.categoryList = list(sMarket.getShipRoot())
self.categoryList.sort(key=lambda ship: ship.name)
# set map & cache of fittings per category
for cat in self.categoryList:
self.categoryFitCache[cat.ID] = sFit.groupHasFits(cat.ID)
for ship in self.categoryList:
self.lpane.AddWidget(CategoryItem(self.lpane, ship.ID, (ship.name, 0)))
if self.filterShipsWithNoFits and not self.categoryFitCache[ship.ID]:
continue
else:
self.lpane.AddWidget(CategoryItem(self.lpane, ship.ID, (ship.name, 0)))
self.navpanel.ShowSwitchEmptyGroupsButton(True)
self.lpane.RefreshList()
self.lpane.Thaw()
@@ -691,12 +708,15 @@ class ShipBrowser(wx.Panel):
def stage2Callback(self, data):
if self.GetActiveStage() != 2:
return
categoryID = self._stage2Data
ships = list(data[1])
sFit = service.Fit.getInstance()
ships.sort(key=self.raceNameKey)
racesList = []
subRacesFilter = {}
t_fits = 0 # total number of fits in this category
for ship in ships:
if ship.race:
@@ -715,6 +735,7 @@ class ShipBrowser(wx.Panel):
for ship in ships:
fits = sFit.countFitsWithShip(ship.ID)
t_fits += fits
filter = subRacesFilter[ship.race] if ship.race else True
if override:
@@ -730,6 +751,11 @@ class ShipBrowser(wx.Panel):
self.raceselect.RebuildRaces(racesList)
# refresh category cache
if t_fits == 0:
self.categoryFitCache[categoryID] = False
else:
self.categoryFitCache[categoryID] = True
self.lpane.ShowLoading(False)
@@ -747,7 +773,6 @@ class ShipBrowser(wx.Panel):
self._lastStage = self._activeStage
self._activeStage = 2
categoryID = event.categoryID
self.lastdata = categoryID
@@ -785,6 +810,9 @@ class ShipBrowser(wx.Panel):
sFit = service.Fit.getInstance()
sMarket = service.Market.getInstance()
ship = sMarket.getItem(shipID)
categoryID = ship.group.ID
self.lpane.Freeze()
self.lpane.RemoveAllChildren()
fitList = sFit.getFitsWithShip(shipID)
@@ -795,6 +823,8 @@ class ShipBrowser(wx.Panel):
self.navpanel.gotoStage(stage,data)
return
self.categoryFitCache[categoryID] = True
self.navpanel.ShowNewFitButton(True)
self.navpanel.ShowSwitchEmptyGroupsButton(False)
@@ -803,7 +833,7 @@ class ShipBrowser(wx.Panel):
self.Layout()
fitList.sort(key=self.nameKey)
shipName = sMarket.getItem(shipID).name
shipName = ship.name
self._stage3ShipName = shipName
self._stage3Data = shipID

View File

@@ -132,7 +132,7 @@ class Fit(object):
def groupHasFits(self, groupID):
sMkt = Market.getInstance()
grp = sMkt.getGroup(groupID, eager=("items", "group"))
grp = sMkt.getGroup(groupID)
items = sMkt.getItemsByGroup(grp)
for item in items:
if self.countFitsWithShip(item.ID) > 0: