diff --git a/eos/gamedata.py b/eos/gamedata.py index 9c14f23ac..8468e6601 100644 --- a/eos/gamedata.py +++ b/eos/gamedata.py @@ -562,6 +562,15 @@ class Unit(EqBase): self.name = None self.displayName = None + @property + def rigSizes(self): + return { + 1: "Small", + 2: "Medium", + 3: "Large", + 4: "X-Large" + } + @property def translations(self): """ This is a mapping of various tweaks that we have to do between the internal representation of an attribute @@ -585,8 +594,8 @@ class Unit(EqBase): lambda d: d, lambda u: "m³"), "Sizeclass": ( - lambda v: v, - lambda d: d, + lambda v: self.rigSizes[v], + lambda d: next(i for i in self.rigSizes.keys() if self.rigSizes[i] == 'Medium'), lambda u: ""), "Absolute Percent": ( lambda v: (v * 100), diff --git a/gui/builtinItemStatsViews/attributeGrouping.py b/gui/builtinItemStatsViews/attributeGrouping.py index ee5f84308..92d273fc1 100644 --- a/gui/builtinItemStatsViews/attributeGrouping.py +++ b/gui/builtinItemStatsViews/attributeGrouping.py @@ -26,21 +26,36 @@ class AttrGroup(Enum): FIGHTERS = 12 +# todo: instead of defining the attribute grouping as "grouped attributes" vs "normal attributes", +# define the liast of grouped attributes outside. When iterating over attributes, can then find +# the first one and apply them all RequiredSkillAttrs = sum((["requiredSkill{}".format(x), "requiredSkill{}Level".format(x)] for x in range(1, 7)), []) - AttrGroupDict = { AttrGroup.FITTING : { - AttrGroupingType.LABEL: "Fitting", + AttrGroupingType.LABEL : "Fitting", AttrGroupingType.NORMAL: [ + # parent-level attributes + "cpuOutput", + "powerOutput", + "upgradeCapacity", + "hiSlots", + "medSlots", + "lowSlots", + "serviceSlots", + "turretSlotsLeft", + "launcherSlotsLeft", + "upgradeSlotsLeft", + # child-level attributes "cpu", "power", "rigSize", "upgradeCost", - "attributeMass", ] + # "mass", + ] }, AttrGroup.STRUCTURE : { - AttrGroupingType.LABEL: "Structure", + AttrGroupingType.LABEL : "Structure", AttrGroupingType.NORMAL: [ "hp", "capacity", @@ -72,7 +87,7 @@ AttrGroupDict = { ] }, AttrGroup.ARMOR : { - AttrGroupingType.LABEL: "Armor", + AttrGroupingType.LABEL : "Armor", AttrGroupingType.NORMAL: [ "armorHP", "armorDamageLimit" @@ -86,7 +101,7 @@ AttrGroupDict = { }, AttrGroup.SHIELD : { - AttrGroupingType.LABEL: "Shield", + AttrGroupingType.LABEL : "Shield", AttrGroupingType.NORMAL: [ "shieldCapacity", "shieldRechargeRate", @@ -101,7 +116,7 @@ AttrGroupDict = { }, AttrGroup.EWAR_RESISTS : { - AttrGroupingType.LABEL: "Electronic Warfare", + AttrGroupingType.LABEL : "Electronic Warfare", AttrGroupingType.NORMAL: [ "ECMResistance", "remoteAssistanceImpedance", @@ -114,14 +129,14 @@ AttrGroupDict = { ] }, AttrGroup.CAPACITOR : { - AttrGroupingType.LABEL: "Capacitor", + AttrGroupingType.LABEL : "Capacitor", AttrGroupingType.NORMAL: [ "capacitorCapacity", "rechargeRate", ] }, AttrGroup.TARGETING : { - AttrGroupingType.LABEL: "Targeting", + AttrGroupingType.LABEL : "Targeting", AttrGroupingType.NORMAL: [ "maxTargetRange", "maxRange", @@ -134,22 +149,22 @@ AttrGroupDict = { "trackingSpeed", ], AttrGroupingType.SENSOR: [ - "scanLadarStrength", + "scanRadarStrength", "scanMagnetometricStrength", "scanGravimetricStrength", - "scanRadarStrength", + "scanLadarStrength", ] }, AttrGroup.SHARED_FACILITIES : { - AttrGroupingType.LABEL: "Shared Facilities", + AttrGroupingType.LABEL : "Shared Facilities", AttrGroupingType.NORMAL: [ - "shipMaintenanceBayCapacity", "fleetHangarCapacity", + "shipMaintenanceBayCapacity", "maxJumpClones", ] }, AttrGroup.FIGHTER_FACILITIES: { - AttrGroupingType.LABEL: "Fighter Squadron Facilities", + AttrGroupingType.LABEL : "Fighter Squadron Facilities", AttrGroupingType.NORMAL: [ "fighterCapacity", "fighterTubes", @@ -162,7 +177,7 @@ AttrGroupDict = { ] }, AttrGroup.ON_DEATH : { - AttrGroupingType.LABEL: "On Death", + AttrGroupingType.LABEL : "On Death", AttrGroupingType.NORMAL: [ "onDeathDamageEM", "onDeathDamageTherm", @@ -173,7 +188,7 @@ AttrGroupDict = { ] }, AttrGroup.JUMP_SYSTEMS : { - AttrGroupingType.LABEL: "Jump Drive Systems", + AttrGroupingType.LABEL : "Jump Drive Systems", AttrGroupingType.NORMAL: [ "jumpDriveCapacitorNeed", "jumpDriveRange", @@ -187,13 +202,13 @@ AttrGroupDict = { ] }, AttrGroup.PROPULSIONS : { - AttrGroupingType.LABEL: "Propulsion", + AttrGroupingType.LABEL : "Propulsion", AttrGroupingType.NORMAL: [ "maxVelocity" ] }, AttrGroup.FIGHTERS : { - AttrGroupingType.LABEL: "Fighters", + AttrGroupingType.LABEL : "Fighters", AttrGroupingType.NORMAL: [ "mass", "maxVelocity", @@ -208,6 +223,7 @@ AttrGroupDict = { } Group1 = [ + AttrGroup.FITTING, AttrGroup.STRUCTURE, AttrGroup.ARMOR, AttrGroup.SHIELD, diff --git a/gui/builtinItemStatsViews/itemAttributes.py b/gui/builtinItemStatsViews/itemAttributes.py index 84fb1210c..50d0b456e 100644 --- a/gui/builtinItemStatsViews/itemAttributes.py +++ b/gui/builtinItemStatsViews/itemAttributes.py @@ -9,9 +9,13 @@ from gui.builtinItemStatsViews.helpers import AutoListCtrl from gui.bitmap_loader import BitmapLoader from gui.utils.numberFormatter import formatAmount -from enum import Enum +from enum import IntEnum from gui.builtinItemStatsViews.attributeGrouping import * +class AttributeView(IntEnum): + NORMAL = 1 + RAW = -1 + class ItemParams(wx.Panel): def __init__(self, parent, stuff, item, context=None): @@ -189,9 +193,6 @@ class ItemParams(wx.Panel): if self.stuff is not None: self.paramList.SetItemText(attr_item , baseVal, 2) self.paramList.SetItemImage(attr_item , attrIcon, which=wx.TreeItemIcon_Normal) - attr_item.SetTextX(-100) - - print("{} has x: {}".format(attrName, attr_item.GetTextX())) processed_attribs.add(attr) resists = data.get(AttrGroupingType.RESIST, []) @@ -207,8 +208,11 @@ class ItemParams(wx.Panel): self.paramList.SetItemText(attr_item , baseVal, 2) self.paramList.SetItemImage(attr_item , attrIcon, which=wx.TreeItemIcon_Normal) processed_attribs.add(attr) - print("{} has x: {}".format(attrName, attr_item.GetTextX())) - self.paramList.Expand(resist_item) + + if self.paramList.GetChildrenCount(resist_item) == 0: + self.paramList.Delete(resist_item) + else: + self.paramList.Expand(resist_item) sensors = data.get(AttrGroupingType.SENSOR, []) if len(sensors) > 0: @@ -223,10 +227,16 @@ class ItemParams(wx.Panel): self.paramList.SetItemText(attr_item, baseVal, 2) self.paramList.SetItemImage(attr_item, attrIcon, which=wx.TreeItemIcon_Normal) processed_attribs.add(attr) - print("{} has x: {}".format(attrName, attr_item.GetTextX())) - self.paramList.Expand(sensor_item) - self.paramList.Expand(header_item) + if self.paramList.GetChildrenCount(resist_item) == 0: + self.paramList.Delete(sensor_item) + else: + self.paramList.Expand(sensor_item) + + if self.paramList.GetChildrenCount(header_item) == 0: + self.paramList.Delete(header_item) + else: + self.paramList.Expand(header_item) misc_parent = self.paramList.AppendItem(root, "Miscellaneous") @@ -239,6 +249,8 @@ class ItemParams(wx.Panel): if name in processed_attribs: continue + if self.toggleView == AttributeView.NORMAL and not self.attrInfo.get(name).published: + continue attrIcon, attrName, currentVal, baseVal = self.GetData(name) attr_item = self.paramList.AppendItem(misc_parent, attrName) @@ -316,7 +328,8 @@ class ItemParams(wx.Panel): else: valueUnitDefault = formatAmount(valueDefault, 3, 0, 0) - return (attrIcon, attrName, valueUnit, valueUnitDefault) + # todo: attribute that point to another item should load that item's icon. + return (attrIcon, attrName + " {}".format(info.published), valueUnit, valueUnitDefault) # self.paramList.SetItemText(index, valueUnit, 1) # if self.stuff is not None: @@ -344,10 +357,15 @@ if __name__ == "__main__": os.chdir('..') import config config.defPaths(None) - + config.debug = True class Frame(wx.Frame): def __init__(self, ): - item = eos.db.getItem(23773) # Ragnarok + # item = eos.db.getItem(23773) # Ragnarok + # item = eos.db.getItem(23061) # Einherji I + item = eos.db.getItem(24483) # Nidhoggur + # item = eos.db.getItem(587) # Rifter + # item = eos.db.getItem(2486) # Warrior I + #item = eos.db.getItem(526) # Stasis Webifier I super().__init__(None, title="Test Attribute Window | {} - {}".format(item.ID, item.name), size=(1000, 500)) if 'wxMSW' in wx.PlatformInfo: