Initialize graph with ideal target profile, and plug it into UI's columns

This commit is contained in:
DarkPhoenix
2019-07-25 19:45:20 +03:00
parent 365a3798c2
commit 6f1321aa13
7 changed files with 105 additions and 15 deletions

View File

@@ -17,7 +17,6 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================
from abc import ABCMeta, abstractmethod
# noinspection PyPackageRequirements
@@ -26,6 +25,7 @@ import wx
import eos.config
import gui.mainFrame
from eos.saveddata.fit import Fit
from eos.saveddata.targetProfile import TargetProfile
from eos.utils.spoolSupport import SpoolOptions, SpoolType
from gui.bitmap_loader import BitmapLoader
from gui.viewColumn import ViewColumn
@@ -47,7 +47,7 @@ class GraphColumn(ViewColumn, metaclass=ABCMeta):
raise NotImplementedError
def getText(self, stuff):
if isinstance(stuff, Fit):
if isinstance(stuff, (Fit, TargetProfile)):
val, unit = self._getValue(stuff)
if val is None:
return ''
@@ -107,8 +107,14 @@ class SpeedColumn(GraphColumn):
def __init__(self, fittingView, params):
super().__init__(fittingView, 1389)
def _getValue(self, fit):
return fit.ship.getModifiedItemAttr('maxVelocity'), 'm/s'
def _getValue(self, stuff):
if isinstance(stuff, Fit):
speed = stuff.ship.getModifiedItemAttr('maxVelocity')
elif isinstance(stuff, TargetProfile):
speed = stuff.maxVelocity
else:
speed = 0
return speed, 'm/s'
def _getFitTooltip(self):
return 'Maximum speed'
@@ -141,8 +147,14 @@ class RadiusColumn(GraphColumn):
def __init__(self, fittingView, params):
super().__init__(fittingView, 3266)
def _getValue(self, fit):
return fit.ship.getModifiedItemAttr('radius'), 'm'
def _getValue(self, stuff):
if isinstance(stuff, Fit):
radius = stuff.ship.getModifiedItemAttr('radius')
elif isinstance(stuff, TargetProfile):
radius = stuff.radius
else:
radius = 0
return radius, 'm'
def _getFitTooltip(self):
return 'Radius'
@@ -158,8 +170,14 @@ class SignatureRadiusColumn(GraphColumn):
def __init__(self, fittingView, params):
super().__init__(fittingView, 1390)
def _getValue(self, fit):
return fit.ship.getModifiedItemAttr('signatureRadius'), 'm'
def _getValue(self, stuff):
if isinstance(stuff, Fit):
sigRadius = stuff.ship.getModifiedItemAttr('signatureRadius')
elif isinstance(stuff, TargetProfile):
sigRadius = stuff.signatureRadius
else:
sigRadius = 0
return sigRadius, 'm'
def _getFitTooltip(self):
return 'Signature radius'

View File

@@ -4,6 +4,7 @@ from eos.saveddata.implant import Implant
from eos.saveddata.drone import Drone
from eos.saveddata.module import Module, Rack
from eos.saveddata.fit import Fit
from eos.saveddata.targetProfile import TargetProfile
from eos.const import FittingSlot
from gui.viewColumn import ViewColumn
@@ -37,6 +38,8 @@ class BaseIcon(ViewColumn):
"gui")
else:
return self.loadIconFile(stuff.item.iconID or "")
elif isinstance(stuff, TargetProfile):
return self.fittingView.imageList.GetImageIndex("target_small", "gui")
item = getattr(stuff, "item", stuff)
return self.loadIconFile(item.iconID)

View File

@@ -27,6 +27,7 @@ from eos.saveddata.drone import Drone
from eos.saveddata.fighter import Fighter
from eos.saveddata.module import Module, Rack
from eos.saveddata.fit import Fit
from eos.saveddata.targetProfile import TargetProfile
from eos.const import FittingSlot
from service.fit import Fit as FitSvc
from service.market import Market
@@ -94,6 +95,8 @@ class BaseName(ViewColumn):
return stuff.item.name
elif isinstance(stuff, Implant):
return stuff.item.name
elif isinstance(stuff, TargetProfile):
return stuff.name
else:
item = getattr(stuff, "item", stuff)

View File

@@ -23,6 +23,7 @@ import wx
import gui.display
import gui.globalEvents as GE
from eos.saveddata.targetProfile import TargetProfile
from gui.builtinShipBrowser.events import EVT_FIT_RENAMED
from service.const import GraphCacheCleanupReason
from service.fit import Fit
@@ -107,7 +108,10 @@ class BaseList(gui.display.Display):
self.removeColumn(col)
for colSpec in extraColSpecs:
self.appendColumnBySpec(colSpec)
self.refresh(self.fits)
self.refreshView()
def refreshView(self):
raise NotImplementedError
def OnFitRenamed(self, event):
event.Skip()
@@ -191,9 +195,19 @@ class FitList(BaseList):
self.fits.append(fit)
self.update(self.fits)
def refreshView(self):
self.refresh(self.fits)
class TargetList(BaseList):
def __init__(self, graphFrame, parent):
super().__init__(graphFrame, parent)
self.update(self.fits)
self.profiles = []
self.profiles.append(TargetProfile.getIdeal())
stuff = self.fits + self.profiles
self.update(stuff)
def refreshView(self):
stuff = self.fits + self.profiles
self.refresh(stuff)

View File

@@ -16,6 +16,8 @@ def formatAmount(val, prec=3, lowest=0, highest=0, currency=False, forceSign=Fal
"""
if val is None:
return ""
if val == math.inf:
return "\u221e" if unitName is None else "\u221e {}".format(unitName)
# Define suffix maps
posSuffixMap = {3: "k", 6: "M", 9: "B" if currency is True else "G"}
negSuffixMap = {-6: '\u03bc', -3: "m"}