Use market sorting in attribute override editor
This commit is contained in:
@@ -49,8 +49,6 @@ class ItemView(Display):
|
||||
self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.itemActivated)
|
||||
self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag)
|
||||
|
||||
# Make reverse map, used by sorter
|
||||
self.metaMap = self.makeReverseMetaMap()
|
||||
self.active = []
|
||||
|
||||
def delaySearch(self, evt):
|
||||
@@ -214,7 +212,7 @@ class ItemView(Display):
|
||||
parentname = sMkt.getParentItemByItem(item).name
|
||||
# Get position of market group
|
||||
metagrpid = sMkt.getMetaGroupIdByItem(item)
|
||||
metatab = self.metaMap.get(metagrpid)
|
||||
metatab = sMkt.META_MAP_REVERSE_INDICES.get(metagrpid)
|
||||
metalvl = item.metaLevel or 0
|
||||
|
||||
return catname, mktgrpid, parentname, metatab, metalvl, item.name
|
||||
@@ -259,18 +257,6 @@ class ItemView(Display):
|
||||
|
||||
Display.refresh(self, items)
|
||||
|
||||
def makeReverseMetaMap(self):
|
||||
"""
|
||||
Form map which tells in which tab items of given metagroup are located
|
||||
"""
|
||||
revmap = {}
|
||||
i = 0
|
||||
for mgids in self.sMkt.META_MAP.values():
|
||||
for mgid in mgids:
|
||||
revmap[mgid] = i
|
||||
i += 1
|
||||
return revmap
|
||||
|
||||
def columnBackground(self, colItem, item):
|
||||
if self.sFit.serviceFittingOptions["colorFitBySlot"]:
|
||||
return slotColourMap.get(Module.calculateSlot(item)) or self.GetBackgroundColour()
|
||||
|
||||
@@ -208,10 +208,38 @@ class ItemView(d.Display):
|
||||
|
||||
sMkt.searchItems(search, self.populateSearch, 'everything')
|
||||
|
||||
def itemSort(self, item):
|
||||
sMkt = Market.getInstance()
|
||||
isFittable = item.group.name in sMkt.FIT_GROUPS or item.category.name in sMkt.FIT_CATEGORIES
|
||||
catname = sMkt.getCategoryByItem(item).name
|
||||
try:
|
||||
mktgrpid = sMkt.getMarketGroupByItem(item).ID
|
||||
except AttributeError:
|
||||
mktgrpid = -1
|
||||
pyfalog.warning("unable to find market group for {}".format(item.name))
|
||||
parentname = sMkt.getParentItemByItem(item).name
|
||||
# Get position of market group
|
||||
metagrpid = sMkt.getMetaGroupIdByItem(item)
|
||||
metatab = sMkt.META_MAP_REVERSE_INDICES.get(metagrpid)
|
||||
metalvl = item.metaLevel or 0
|
||||
|
||||
return not isFittable, catname, mktgrpid, parentname, metatab, metalvl, item.name
|
||||
|
||||
def populateSearch(self, items):
|
||||
self.items = list(items)
|
||||
self.update(items)
|
||||
|
||||
def populate(self, items):
|
||||
if len(items) > 0:
|
||||
self.unselectAll()
|
||||
items.sort(key=self.itemSort)
|
||||
d.Display.populate(self, items)
|
||||
|
||||
def refresh(self, items):
|
||||
if len(items) > 1:
|
||||
items.sort(key=self.itemSort)
|
||||
d.Display.refresh(self, items)
|
||||
|
||||
|
||||
class AttributeGrid(wxpg.PropertyGrid):
|
||||
def __init__(self, parent):
|
||||
|
||||
@@ -117,8 +117,8 @@ class SearchWorkerThread(threading.Thread):
|
||||
elif filterName == 'everything':
|
||||
filters = [
|
||||
or_(
|
||||
types_Category.name == 'Ship',
|
||||
types_Group.name.in_(('Citadel', 'Engineering Complex', 'Refinery'))),
|
||||
types_Category.name.in_(sMkt.FIT_CATEGORIES),
|
||||
types_Group.name.in_(sMkt.FIT_GROUPS)),
|
||||
or_(
|
||||
types_Category.name.in_(sMkt.SEARCH_CATEGORIES),
|
||||
types_Group.name.in_(sMkt.SEARCH_GROUPS))]
|
||||
@@ -330,6 +330,7 @@ class Market:
|
||||
self.META_MAP["normal"] = frozenset((0, *(mg.ID for mg in eos.db.getMetaGroups() if mg.ID not in nonNormalMetas)))
|
||||
self.META_MAP.move_to_end("normal", last=False)
|
||||
self.META_MAP_REVERSE = {sv: k for k, v in self.META_MAP.items() for sv in v}
|
||||
self.META_MAP_REVERSE_INDICES = self.__makeReverseMetaMapIndices()
|
||||
self.SEARCH_CATEGORIES = (
|
||||
"Drone",
|
||||
"Module",
|
||||
@@ -353,6 +354,8 @@ class Market:
|
||||
2203 # Structure Modifications
|
||||
)
|
||||
self.SHOWN_MARKET_GROUPS = eos.db.getMarketTreeNodeIds(self.ROOT_MARKET_GROUPS)
|
||||
self.FIT_CATEGORIES = ['Ship']
|
||||
self.FIT_GROUPS = ['Citadel', 'Engineering Complex', 'Refinery']
|
||||
# Tell other threads that Market is at their service
|
||||
mktRdy.set()
|
||||
|
||||
@@ -372,6 +375,15 @@ class Market:
|
||||
rev[value].add(item)
|
||||
return rev
|
||||
|
||||
def __makeReverseMetaMapIndices(self):
|
||||
revmap = {}
|
||||
i = 0
|
||||
for mgids in self.META_MAP.values():
|
||||
for mgid in mgids:
|
||||
revmap[mgid] = i
|
||||
i += 1
|
||||
return revmap
|
||||
|
||||
@staticmethod
|
||||
def getItem(identity, *args, **kwargs):
|
||||
"""Get item by its ID or name"""
|
||||
|
||||
Reference in New Issue
Block a user