Disable fit add on pages based on context (ship vs citadel)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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[:]
|
||||
|
||||
Reference in New Issue
Block a user