diff --git a/controller/market.py b/controller/market.py index aa35078b0..75d2085a3 100644 --- a/controller/market.py +++ b/controller/market.py @@ -38,21 +38,6 @@ class Market(): def __init__(self): self.activeMetas = set() - def getItems(self, id): - """ - Get the items contained in the marketGroup with the passed id. - Returns a list, where each element is a tuple container: - the id, the name, the icon - """ - - items = [] - group = eos.db.getMarketGroup(id) - for item in group.items: - icon = item.icon.iconFile if item.icon else "" - items.append((item.ID, item.name, icon)) - - return items - def getChildren(self, id): """ Get the children of the group or marketGroup with the passed id. @@ -124,10 +109,26 @@ class Market(): return root def activateMetaGroup(self, name): - self.activeMetas.add(name) + for meta in self.META_MAP[name]: + self.activeMetas.add(meta) def disableMetaGroup(self, name): - self.activeMetas.remove(name) + for meta in self.META_MAP[name]: + if meta in self.activeMetas: + self.activeMetas.remove(meta) - def getVariations(self, item): - pass + def getVariations(self, marketGroupId): + if len(self.activeMetas) == 0: + return tuple() + + mg = eos.db.getMarketGroup(marketGroupId) + l = [] + for item in mg.items: + if item.metaGroup is None and 1 in self.activeMetas: + l.append((item.ID, item.name, item.icon.iconFile if item.icon else "")) + + vars = eos.db.getVariations(item, metaGroups = tuple(self.activeMetas), eager="icon") + for var in vars: + l.append((var.ID, var.name, var.icon.iconFile if var.icon else "")) + + return l diff --git a/gui/marketBrowser.py b/gui/marketBrowser.py index 409e9dbca..233b05c92 100644 --- a/gui/marketBrowser.py +++ b/gui/marketBrowser.py @@ -97,8 +97,10 @@ class MarketBrowser(wx.Panel): setattr(self, name, btn) box.Add(btn, 1, wx.ALIGN_CENTER) btn.Bind(wx.EVT_TOGGLEBUTTON, self.toggleMetagroup) + btn.metaName = name self.normal.SetValue(True) + cMarket.activateMetaGroup("normal") p.SetMinSize((wx.SIZE_AUTO_WIDTH, btn.GetSize()[1] + 5)) def addMarketViewImage(self, iconFile): @@ -141,14 +143,14 @@ class MarketBrowser(wx.Panel): self.itemView.DeleteAllItems() self.itemImageList.RemoveAll() - root = event.Item + root = self.marketView.GetSelection() if self.marketView.GetChildrenCount(root) != 0: return cMarket = controller.Market.getInstance() idNameMap = {} - for id, name, iconFile in cMarket.getItems(self.marketView.GetPyData(root)): + for id, name, iconFile in cMarket.getVariations(self.marketView.GetPyData(root)): iconId = self.addItemViewImage(iconFile) index = self.itemView.InsertImageStringItem(sys.maxint, name, iconId) idNameMap[id] = name @@ -159,9 +161,23 @@ class MarketBrowser(wx.Panel): def toggleMetagroup(self, event): ctrl = wx.GetMouseState().ControlDown() + cMarket = controller.Market.getInstance() + btn = event.EventObject if not ctrl: for name in ("normal", "faction", "complex", "officer"): getattr(self, name).SetValue(False) + cMarket.disableMetaGroup(name) - event.EventObject.SetValue(True) + btn.SetValue(True) + cMarket.activateMetaGroup(btn.metaName) + else: + # Note: using the old value might seem weird, + # But the button hasn't been toggled by wx yet + target = btn.GetValue() + btn.SetValue(target) + if target: + cMarket.activateMetaGroup(btn.metaName) + else: + cMarket.disableMetaGroup(btn.metaName) + self.selectionMade(event)