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_ITEM_ACTIVATED, self.itemActivated)
|
||||||
self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag)
|
self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag)
|
||||||
|
|
||||||
# Make reverse map, used by sorter
|
|
||||||
self.metaMap = self.makeReverseMetaMap()
|
|
||||||
self.active = []
|
self.active = []
|
||||||
|
|
||||||
def delaySearch(self, evt):
|
def delaySearch(self, evt):
|
||||||
@@ -214,7 +212,7 @@ class ItemView(Display):
|
|||||||
parentname = sMkt.getParentItemByItem(item).name
|
parentname = sMkt.getParentItemByItem(item).name
|
||||||
# Get position of market group
|
# Get position of market group
|
||||||
metagrpid = sMkt.getMetaGroupIdByItem(item)
|
metagrpid = sMkt.getMetaGroupIdByItem(item)
|
||||||
metatab = self.metaMap.get(metagrpid)
|
metatab = sMkt.META_MAP_REVERSE_INDICES.get(metagrpid)
|
||||||
metalvl = item.metaLevel or 0
|
metalvl = item.metaLevel or 0
|
||||||
|
|
||||||
return catname, mktgrpid, parentname, metatab, metalvl, item.name
|
return catname, mktgrpid, parentname, metatab, metalvl, item.name
|
||||||
@@ -259,18 +257,6 @@ class ItemView(Display):
|
|||||||
|
|
||||||
Display.refresh(self, items)
|
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):
|
def columnBackground(self, colItem, item):
|
||||||
if self.sFit.serviceFittingOptions["colorFitBySlot"]:
|
if self.sFit.serviceFittingOptions["colorFitBySlot"]:
|
||||||
return slotColourMap.get(Module.calculateSlot(item)) or self.GetBackgroundColour()
|
return slotColourMap.get(Module.calculateSlot(item)) or self.GetBackgroundColour()
|
||||||
|
|||||||
@@ -208,10 +208,38 @@ class ItemView(d.Display):
|
|||||||
|
|
||||||
sMkt.searchItems(search, self.populateSearch, 'everything')
|
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):
|
def populateSearch(self, items):
|
||||||
self.items = list(items)
|
self.items = list(items)
|
||||||
self.update(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):
|
class AttributeGrid(wxpg.PropertyGrid):
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
|
|||||||
@@ -117,8 +117,8 @@ class SearchWorkerThread(threading.Thread):
|
|||||||
elif filterName == 'everything':
|
elif filterName == 'everything':
|
||||||
filters = [
|
filters = [
|
||||||
or_(
|
or_(
|
||||||
types_Category.name == 'Ship',
|
types_Category.name.in_(sMkt.FIT_CATEGORIES),
|
||||||
types_Group.name.in_(('Citadel', 'Engineering Complex', 'Refinery'))),
|
types_Group.name.in_(sMkt.FIT_GROUPS)),
|
||||||
or_(
|
or_(
|
||||||
types_Category.name.in_(sMkt.SEARCH_CATEGORIES),
|
types_Category.name.in_(sMkt.SEARCH_CATEGORIES),
|
||||||
types_Group.name.in_(sMkt.SEARCH_GROUPS))]
|
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["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.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 = {sv: k for k, v in self.META_MAP.items() for sv in v}
|
||||||
|
self.META_MAP_REVERSE_INDICES = self.__makeReverseMetaMapIndices()
|
||||||
self.SEARCH_CATEGORIES = (
|
self.SEARCH_CATEGORIES = (
|
||||||
"Drone",
|
"Drone",
|
||||||
"Module",
|
"Module",
|
||||||
@@ -353,6 +354,8 @@ class Market:
|
|||||||
2203 # Structure Modifications
|
2203 # Structure Modifications
|
||||||
)
|
)
|
||||||
self.SHOWN_MARKET_GROUPS = eos.db.getMarketTreeNodeIds(self.ROOT_MARKET_GROUPS)
|
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
|
# Tell other threads that Market is at their service
|
||||||
mktRdy.set()
|
mktRdy.set()
|
||||||
|
|
||||||
@@ -372,6 +375,15 @@ class Market:
|
|||||||
rev[value].add(item)
|
rev[value].add(item)
|
||||||
return rev
|
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
|
@staticmethod
|
||||||
def getItem(identity, *args, **kwargs):
|
def getItem(identity, *args, **kwargs):
|
||||||
"""Get item by its ID or name"""
|
"""Get item by its ID or name"""
|
||||||
|
|||||||
Reference in New Issue
Block a user