Disable fit add on pages based on context (ship vs citadel)

This commit is contained in:
blitzmann
2016-07-04 01:03:30 -04:00
parent 3734be21d6
commit fe8c3a4957
12 changed files with 77 additions and 26 deletions

View File

@@ -332,7 +332,6 @@ class Skill(HandledItem):
for effect in item.effects.itervalues():
if effect.runTime == runTime and effect.isType("passive") and (not isinstance(fit.ship, eos.types.Citadel) or effect.isType("structure")):
try:
print "Running effect: ", self, fit, runTime, effect
effect.handler(fit, self, ("skill",))
except AttributeError:
continue

View File

@@ -194,6 +194,10 @@ class Fit(object):
# set fit attributes the same as ship
self.extraAttributes = self.ship.itemModifiedAttributes
@property
def isStructure(self):
return isinstance(self.ship, Citadel)
@property
def drones(self):
return self.__drones

View File

@@ -58,23 +58,36 @@ class AdditionsPane(TogglePanel):
gangImg = BitmapLoader.getImage("fleet_fc_small", "gui")
cargoImg = BitmapLoader.getImage("cargo_small", "gui")
self.notebook.AddPage(DroneView(self.notebook), "Drones", tabImage = droneImg, showClose = False)
self.notebook.AddPage(FighterView(self.notebook), "Fighters", tabImage = fighterImg, showClose = False)
self.notebook.AddPage(CargoView(self.notebook), "Cargo", tabImage = cargoImg, showClose = False)
self.notebook.AddPage(ImplantView(self.notebook), "Implants", tabImage = implantImg, showClose = False)
self.notebook.AddPage(BoosterView(self.notebook), "Boosters", tabImage = boosterImg, showClose = False)
self.drone = DroneView(self.notebook)
self.notebook.AddPage(self.drone, "Drones", tabImage = droneImg, showClose = False)
self.fighter = FighterView(self.notebook)
self.notebook.AddPage(self.fighter, "Fighters", tabImage = fighterImg, showClose = False)
self.cargo = CargoView(self.notebook)
self.notebook.AddPage(self.cargo, "Cargo", tabImage = cargoImg, showClose = False)
self.implant = ImplantView(self.notebook)
self.notebook.AddPage(self.implant, "Implants", tabImage = implantImg, showClose = False)
self.booster = BoosterView(self.notebook)
self.notebook.AddPage(self.booster, "Boosters", tabImage = boosterImg, showClose = False)
self.projectedPage = ProjectedView(self.notebook)
self.notebook.AddPage(self.projectedPage, "Projected", tabImage = projectedImg, showClose = False)
self.gangPage = GangView(self.notebook)
self.notebook.AddPage(self.gangPage, "Fleet", tabImage = gangImg, showClose = False)
self.notebook.SetSelection(0)
PANES = ["Drones", "Fighters", "Cargo", "Implants", "Boosters", "Projected", "Fleet"]
def select(self, name):
self.notebook.SetSelection(self.PANES.index(name))
def toggleBoosters(self, event):
self.notebook.ToggleShown(self.booster)
def getName(self, idx):
return self.PANES[idx]

View File

@@ -85,6 +85,11 @@ class BoosterView(d.Display):
event.Skip()
def fitChanged(self, event):
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
#Clear list and get out if current fitId is None
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
@@ -92,9 +97,6 @@ class BoosterView(d.Display):
event.Skip()
return
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.origional = fit.boosters if fit is not None else None
self.boosters = stuff = fit.boosters[:] if fit is not None else None

View File

@@ -201,7 +201,7 @@ class TargetingMiscViewFull(StatsView):
elif labelName == "labelFullAlignTime":
alignTime = "Align:\t%.3fs"%mainValue
mass = 'Mass:\t{:,.0f}kg'.format(fit.ship.getModifiedItemAttr("mass"))
agility = "Agility:\t%.3fx"%fit.ship.getModifiedItemAttr("agility")
agility = "Agility:\t%.3fx"%(fit.ship.getModifiedItemAttr("agility") or 0)
label.SetToolTip(wx.ToolTip("%s\n%s\n%s" % (alignTime, mass, agility)))
elif labelName == "labelFullCargo":
tipLines = []

View File

@@ -125,6 +125,11 @@ class CargoView(d.Display):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit()))
def fitChanged(self, event):
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
#Clear list and get out if current fitId is None
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
@@ -132,9 +137,6 @@ class CargoView(d.Display):
event.Skip()
return
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.original = fit.cargo if fit is not None else None
self.cargo = stuff = fit.cargo if fit is not None else None
if stuff is not None: stuff.sort(key=lambda cargo: cargo.itemID)

View File

@@ -227,6 +227,15 @@ class PFNotebook(wx.Panel):
self.activePage = tabWnd
self.ShowActive(True)
def DisablePage(self, page, toggle):
idx = self.GetPageIndex(page)
if toggle and page == self.activePage:
# Set page to the first non-disabled page
self.SetSelection(next(i for i, _ in enumerate(self.pages) if not self.tabsContainer.tabs[i].disabled))
self.tabsContainer.DisableTab(idx, toggle)
def SetSelection(self, page):
oldsel = self.GetSelection()
if oldsel != page:
@@ -354,6 +363,7 @@ class PFTabRenderer:
self.inclination = inclination
self.text = text
self.disabled = False
self.tabSize = (width, height)
self.closeButton = closeButton
self.selected = False
@@ -548,7 +558,7 @@ class PFTabRenderer:
mdc.DrawBitmap(self.tabBackBitmap, 0, 0, True)
if self.tabImg:
bmp = wx.BitmapFromImage(self.tabImg)
bmp = wx.BitmapFromImage(self.tabImg.ConvertToGreyscale() if self.disabled else self.tabImg)
if self.contentWidth > 16: # @todo: is this conditional relevant anymore?
# Draw tab icon
mdc.DrawBitmap(bmp, self.leftWidth + self.padding - bmp.GetWidth()/2, (height - bmp.GetHeight())/2)
@@ -591,6 +601,10 @@ class PFTabRenderer:
bmp = wx.BitmapFromImage(img)
self.tabBitmap = bmp
def __repr__(self):
return "PFTabRenderer(text={}, disabled={}) at {}".format(
self.text, self.disabled, hex(id(self))
)
class PFAddRenderer:
def __init__(self):
@@ -848,6 +862,7 @@ class PFTabsContainer(wx.Panel):
return True
if self.TabHitTest(tab, x, y):
if tab.disabled: return
tab.SetSelected(True)
oldSelTab.SetSelected(False)
@@ -1186,6 +1201,13 @@ class PFTabsContainer(wx.Panel):
for tab in self.tabs:
tab.SetSelected(False)
def DisableTab(self, tab, disabled=True):
tabRenderer = self.tabs[tab]
tabRenderer.disabled = disabled
self.AdjustTabsSize()
self.Refresh()
def DeleteTab(self, tab, external=False):
tabRenderer = self.tabs[tab]
wasSelected = tabRenderer.GetSelected()

View File

@@ -159,6 +159,10 @@ class DroneView(d.Display):
drone.item.name)
def fitChanged(self, event):
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
#Clear list and get out if current fitId is None
if event.fitID is None and self.lastFitId is not None:
@@ -167,9 +171,6 @@ class DroneView(d.Display):
event.Skip()
return
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.original = fit.drones if fit is not None else None
self.drones = stuff = fit.drones[:] if fit is not None else None

View File

@@ -224,6 +224,10 @@ class FighterDisplay(d.Display):
'''
def fitChanged(self, event):
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.Parent.DisablePage(self.Parent, not fit)
#Clear list and get out if current fitId is None
if event.fitID is None and self.lastFitId is not None:
@@ -232,9 +236,6 @@ class FighterDisplay(d.Display):
event.Skip()
return
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.original = fit.fighters if fit is not None else None
self.fighters = stuff = fit.fighters[:] if fit is not None else None

View File

@@ -26,7 +26,6 @@ import gui.globalEvents as GE
from gui import characterEditor as CharEditor
class GangView ( ScrolledPanel ):
def __init__( self, parent ):
@@ -247,6 +246,9 @@ class GangView ( ScrolledPanel ):
activeFitID = self.mainFrame.getActiveFit()
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID or activeFitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
commanders = (None, None, None)
if activeFitID:

View File

@@ -107,6 +107,11 @@ class ImplantDisplay(d.Display):
event.Skip()
def fitChanged(self, event):
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.Parent.DisablePage(self.Parent, not fit or fit.isStructure)
#Clear list and get out if current fitId is None
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
@@ -114,9 +119,6 @@ class ImplantDisplay(d.Display):
event.Skip()
return
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.original = fit.implants if fit is not None else None
self.implants = stuff = fit.appliedImplants if fit is not None else None
if stuff is not None: stuff.sort(key=lambda implant: implant.slot)

View File

@@ -159,6 +159,11 @@ class ProjectedView(d.Display):
return fit.name
def fitChanged(self, event):
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit)
#Clear list and get out if current fitId is None
if event.fitID is None and self.lastFitId is not None:
self.DeleteAllItems()
@@ -166,8 +171,6 @@ class ProjectedView(d.Display):
event.Skip()
return
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
stuff = []
if fit is not None:
self.modules = fit.projectedModules[:]