Change sorting algorythm

Now it sorts by category name > market group ID > parent item name > meta tab position > meta level > item name
Sounds huge, but that's the most universal sorting for generic tab display & search results display
This commit is contained in:
DarkPhoenix
2011-10-16 16:07:29 +04:00
parent 29877bf547
commit bc844e30f5

View File

@@ -217,6 +217,9 @@ class ItemView(d.Display):
self.Bind(wx.EVT_CONTEXT_MENU, self.contextMenu)
self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.itemActivated)
# Make reverse map, used by sorter
self.metaMap = self.makeReverseMetaMap()
def itemActivated(self, event=None):
# Check if something is selected, if so, spawn the menu for it
sel = self.GetFirstSelected()
@@ -330,9 +333,14 @@ class ItemView(d.Display):
def itemSort(self, item):
sMkt = self.sMarket
catname = sMkt.getCategoryByItem(item).name
mktgrpid = sMkt.getMarketGroupByItem(item).ID
parentname = sMkt.getParentItemByItem(item).name
mgid = sMkt.getMetaGroupIdByItem(item)
return (parentname, mgid, item.name)
# Get position of market group
metagrpid = sMkt.getMetaGroupIdByItem(item)
metatab = self.metaMap.get(metagrpid)
metalvl = self.metalvls.get(item.ID, 0)
return (catname, mktgrpid, parentname, metatab, metalvl, item.name)
def contextMenu(self, event):
# Check if something is selected, if so, spawn the menu for it
@@ -349,12 +357,41 @@ class ItemView(d.Display):
menu = ContextMenu.getMenu((item,), (sourceContext, itemContext))
self.PopupMenu(menu)
def populate(self, stuff):
self.deselectItems()
stuff.sort(key=self.itemSort)
self.active = stuff
d.Display.populate(self, stuff)
def populate(self, items):
if len(items) > 0:
# Get dictionary with meta level attribute
sAttr = service.Attribute.getInstance()
attrs = sAttr.getAttributeInfo("metaLevel")
sMkt = self.sMarket
self.metalvls = sMkt.directAttrRequest(items, attrs)
# Clear selection
self.deselectItems()
# Perform sorting, using item's meta levels besides other stuff
items.sort(key=self.itemSort)
# Mark current item list as active
self.active = items
# Show them
d.Display.populate(self, items)
def refresh(self, stuff):
stuff.sort(key=self.itemSort)
d.Display.refresh(self, stuff)
def refresh(self, items):
if len(items) > 1:
# Get dictionary with meta level attribute
sAttr = service.Attribute.getInstance()
attrs = sAttr.getAttributeInfo("metaLevel")
sMkt = self.sMarket
self.metalvls = sMkt.directAttrRequest(items, attrs)
# Re-sort stuff
items.sort(key=self.itemSort)
d.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.sMarket.META_MAP.itervalues():
for mgid in mgids:
revmap[mgid] = i
i += 1
return revmap