36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
from collections import OrderedDict
|
|
from itertools import chain
|
|
|
|
# noinspection PyPackageRequirements
|
|
import wx
|
|
|
|
from gui.utils.sorter import smartSort
|
|
from service.damagePattern import DamagePattern as DmgPatternSvc
|
|
|
|
_t = wx.GetTranslation
|
|
|
|
|
|
class DamagePatternMixin:
|
|
|
|
def _getPatterns(self):
|
|
sDP = DmgPatternSvc.getInstance()
|
|
builtinPatterns = sDP.getBuiltinDamagePatternList()
|
|
userPatterns = sorted(sDP.getUserDamagePatternList(), key=lambda p: smartSort(p.fullName))
|
|
# Order here is important: patterns with duplicate names from the latter will overwrite
|
|
# patterns from the former
|
|
patterns = sorted(
|
|
chain(builtinPatterns, userPatterns),
|
|
key=lambda p: p.fullName not in ["Uniform", "Selected Ammo"])
|
|
return patterns
|
|
|
|
def _getItems(self, patterns):
|
|
items = (OrderedDict(), OrderedDict())
|
|
for pattern in patterns:
|
|
container = items
|
|
for categoryName in pattern.hierarchy:
|
|
categoryName = _t(categoryName) if pattern.builtin else categoryName
|
|
container = container[1].setdefault(categoryName, (OrderedDict(), OrderedDict()))
|
|
shortName = _t(pattern.shortName) if pattern.builtin else pattern.shortName
|
|
container[0][shortName] = pattern
|
|
return items
|