diff --git a/README.md b/README.md index a5f89ee6d..d42f5a6fe 100644 --- a/README.md +++ b/README.md @@ -64,4 +64,4 @@ pyfa is licensed under the GNU GPL v3.0, see LICENSE * Email: sable.blitzmann@gmail.com ## CCP Copyright Notice -EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to Osmium to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, Osmium. CCP is in no way responsible for the content on or functioning of this website, nor can it be liable for any damage arising from the use of this website. +EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to pyfa to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, pyfa. CCP is in no way responsible for the content on or functioning of this program, nor can it be liable for any damage arising from the use of this program. diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index 42fd7cede..f5197f6f0 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -629,7 +629,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): @property def rawCycleTime(self): - speed = self.getModifiedItemAttr("speed") or self.getModifiedItemAttr("duration") + speed = self.getModifiedItemAttr("speed") or self.getModifiedItemAttr("duration") return speed @property diff --git a/gui/builtinViewColumns/misc.py b/gui/builtinViewColumns/misc.py index c50f23e47..9baee4726 100644 --- a/gui/builtinViewColumns/misc.py +++ b/gui/builtinViewColumns/misc.py @@ -210,42 +210,44 @@ class Miscellanea(ViewColumn): ladar = stuff.getModifiedItemAttr("scanLadarStrengthBonus") radar = stuff.getModifiedItemAttr("scanRadarStrengthBonus") magnet = stuff.getModifiedItemAttr("scanMagnetometricStrengthBonus") - if grav is None or ladar is None or radar is None or magnet is None: + displayMax = max(grav, ladar, radar, magnet) + displayMin = min(grav, ladar, radar, magnet) + if grav is None or ladar is None or radar is None or magnet is None or displayMax is None: return "", None - display = max(grav, ladar, radar, magnet) - if not display: - return "", None - text = "{0}".format(formatAmount(display, 3, 0, 3)) - ttEntries = [] - if display == grav: - ttEntries.append("gravimetric") - if display == ladar: - ttEntries.append("ladar") - if display == magnet: - ttEntries.append("magnetometric") - if display == radar: - ttEntries.append("radar") - plu = "" if len(ttEntries) == 1 else "s" - tooltip = "{0} strength{1}".format(formatList(ttEntries), plu).capitalize() + + if displayMax == displayMin or displayMin is None: + text = "{0}".format( + formatAmount(displayMax, 3, 0, 3), + ) + else: + text = "{0} | {1}".format( + formatAmount(displayMax, 3, 0, 3), + formatAmount(displayMin, 3, 0, 3), + ) + tooltip = "ECM Jammer Strength:\n{0} Gravimetric | {1} Ladar | {2} Magnetometric | {3} Radar".format( + formatAmount(grav, 3, 0, 3), + formatAmount(ladar, 3, 0, 3), + formatAmount(radar, 3, 0, 3), + formatAmount(magnet, 3, 0, 3), + ) return text, tooltip elif itemGroup in ("Remote Sensor Booster", "Sensor Booster", "Signal Amplifier"): scanResBonus = stuff.getModifiedItemAttr("scanResolutionBonus") lockRangeBonus = stuff.getModifiedItemAttr("maxTargetRangeBonus") - if scanResBonus is None or lockRangeBonus is None: + gravBonus = stuff.getModifiedItemAttr("scanGravimetricStrengthPercent") + if scanResBonus is None or lockRangeBonus is None or gravBonus is None: return "", None - display = 0 - for bonus in (scanResBonus, lockRangeBonus): - if abs(bonus) > abs(display): - display = bonus - if not display: - return "", None - text = "{0}%".format(formatAmount(display, 3, 0, 3, forceSign=True)) - ttEntries = [] - if display == lockRangeBonus: - ttEntries.append("lock range") - if display == scanResBonus: - ttEntries.append("scan resolution") - tooltip = "{0} bonus".format(formatList(ttEntries)).capitalize() + + text = "{0}% | {1}% | {2}%".format( + formatAmount(scanResBonus, 3, 0, 3), + formatAmount(lockRangeBonus, 3, 0, 3), + formatAmount(gravBonus, 3, 0, 3), + ) + tooltip = "Applied bonuses:\n{0}% scan resolution | {1}% lock range | {2}% sensor strength".format( + formatAmount(scanResBonus, 3, 0, 3), + formatAmount(lockRangeBonus, 3, 0, 3), + formatAmount(gravBonus, 3, 0, 3), + ) return text, tooltip elif itemGroup in ("Projected ECCM", "ECCM", "Sensor Backup Array"): grav = stuff.getModifiedItemAttr("scanGravimetricStrengthPercent") @@ -483,6 +485,25 @@ class Miscellanea(ViewColumn): duration = cycles * cycleTime / 1000 text = "{0} / {1}s".format(formatAmount(ehp, 3, 0, 9), formatAmount(duration, 3, 0, 3)) + return text, tooltip + elif itemGroup == "Armor Resistance Shift Hardener": + itemArmorResistanceShiftHardenerEM = (1-stuff.getModifiedItemAttr("armorEmDamageResonance"))*100 + itemArmorResistanceShiftHardenerTherm = (1-stuff.getModifiedItemAttr("armorThermalDamageResonance")) * 100 + itemArmorResistanceShiftHardenerKin = (1-stuff.getModifiedItemAttr("armorKineticDamageResonance")) * 100 + itemArmorResistanceShiftHardenerExp = (1-stuff.getModifiedItemAttr("armorExplosiveDamageResonance")) * 100 + + text = "{0}% | {1}% | {2}% | {3}%".format( + formatAmount(itemArmorResistanceShiftHardenerEM, 3, 0, 3), + formatAmount(itemArmorResistanceShiftHardenerTherm, 3, 0, 3), + formatAmount(itemArmorResistanceShiftHardenerKin, 3, 0, 3), + formatAmount(itemArmorResistanceShiftHardenerExp, 3, 0, 3), + ) + tooltip = "Resistances Shifted to Damage Profile:\n{0}% EM | {1}% Therm | {2}% Kin | {3}% Exp".format( + formatAmount(itemArmorResistanceShiftHardenerEM, 3, 0, 3), + formatAmount(itemArmorResistanceShiftHardenerTherm, 3, 0, 3), + formatAmount(itemArmorResistanceShiftHardenerKin, 3, 0, 3), + formatAmount(itemArmorResistanceShiftHardenerExp, 3, 0, 3), + ) return text, tooltip elif stuff.charge is not None: chargeGroup = stuff.charge.group.name diff --git a/gui/itemStats.py b/gui/itemStats.py index ad3e49b6c..c64164a47 100644 --- a/gui/itemStats.py +++ b/gui/itemStats.py @@ -84,9 +84,9 @@ class ItemStatsDialog(wx.Dialog): self.SetMinSize((300, 200)) if "wxGTK" in wx.PlatformInfo: # GTK has huge tab widgets, give it a bit more room - self.SetSize((530, 300)) + self.SetSize((580, 500)) else: - self.SetSize((500, 300)) + self.SetSize((550, 500)) #self.SetMaxSize((500, -1)) self.mainSizer = wx.BoxSizer(wx.VERTICAL) self.container = ItemStatsContainer(self, victim, item, itmContext) @@ -341,9 +341,14 @@ class ItemParams (wx.Panel): def PopulateList(self): self.paramList.InsertColumn(0,"Attribute") - self.paramList.InsertColumn(1,"Value") - self.paramList.SetColumnWidth(1,150) - self.paramList.setResizeColumn(1) + self.paramList.InsertColumn(1,"Current Value") + if self.stuff is not None: + self.paramList.InsertColumn(2,"Base Value") + self.paramList.SetColumnWidth(0,110) + self.paramList.SetColumnWidth(1,90) + if self.stuff is not None: + self.paramList.SetColumnWidth(2,90) + self.paramList.setResizeColumn(0) self.imageList = wx.ImageList(16, 16) self.paramList.SetImageList(self.imageList,wx.IMAGE_LIST_SMALL) @@ -354,9 +359,11 @@ class ItemParams (wx.Panel): idCount = 0 for name in names: info = self.attrInfo.get(name) - - att = self.attrValues[name] + + valDefault = getattr(info, "value", None) + valueDefault = valDefault if valDefault is not None else att + val = getattr(att, "value", None) value = val if val is not None else att @@ -395,8 +402,16 @@ class ItemParams (wx.Panel): else: valueUnit = formatAmount(value, 3, 0, 0) + if self.toggleView != 1: + valueUnitDefault = str(valueDefault) + elif info and info.unit: + valueUnitDefault = self.TranslateValueUnit(valueDefault, info.unit.displayName, info.unit.name) + else: + valueUnitDefault = formatAmount(valueDefault, 3, 0, 0) self.paramList.SetStringItem(index, 1, valueUnit) + if self.stuff is not None: + self.paramList.SetStringItem(index, 2, valueUnitDefault) diff --git a/gui/mainMenuBar.py b/gui/mainMenuBar.py index 169ed4e6c..bbae75cfd 100644 --- a/gui/mainMenuBar.py +++ b/gui/mainMenuBar.py @@ -74,8 +74,6 @@ class MainMenuBar(wx.MenuBar): fileMenu.Append(self.exportSkillsNeededId, "Export &Skills Needed", "Export skills needed for this fitting") fileMenu.Append(self.importCharacterId, "Import C&haracter File", "Import characters into pyfa from file") fileMenu.AppendSeparator() - fileMenu.Append(self.importDatabaseDefaultsId, "Import D&atabase Defaults", "Imports missing database defaults") - fileMenu.AppendSeparator() fileMenu.Append(wx.ID_EXIT) # Edit menu @@ -139,11 +137,11 @@ class MainMenuBar(wx.MenuBar): self.Enable(self.exportToEveId, False) if not gui.mainFrame.disableOverrideEditor: + windowMenu.AppendSeparator() attrItem = wx.MenuItem(windowMenu, self.attrEditorId, "Attribute Overrides\tCTRL+B") attrItem.SetBitmap(BitmapLoader.getBitmap("fit_rename_small", "gui")) windowMenu.AppendItem(attrItem) - editMenu.AppendSeparator() - editMenu.Append(self.toggleOverridesId, "Turn Overrides On") + windowMenu.Append(self.toggleOverridesId, "Turn Overrides On") # Help menu helpMenu = wx.Menu() @@ -151,6 +149,8 @@ class MainMenuBar(wx.MenuBar): helpMenu.Append(self.wikiId, "Wiki", "Go to wiki on GitHub") helpMenu.Append(self.forumId, "Forums", "Go to EVE Online Forum thread") helpMenu.AppendSeparator() + helpMenu.Append(self.importDatabaseDefaultsId, "Import D&atabase Defaults", "Imports missing database defaults") + helpMenu.AppendSeparator() helpMenu.Append(wx.ID_ABOUT) if config.debug: