From fe8c3a495712deae005ace49ae0cded249ba6052 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Mon, 4 Jul 2016 01:03:30 -0400 Subject: [PATCH] Disable fit add on pages based on context (ship vs citadel) --- eos/saveddata/character.py | 1 - eos/saveddata/fit.py | 4 ++++ gui/additionsPane.py | 23 ++++++++++++++---- gui/boosterView.py | 8 ++++--- .../targetingMiscViewFull.py | 2 +- gui/cargoView.py | 8 ++++--- gui/chromeTabs.py | 24 ++++++++++++++++++- gui/droneView.py | 7 +++--- gui/fighterView.py | 7 +++--- gui/gangView.py | 4 +++- gui/implantView.py | 8 ++++--- gui/projectedView.py | 7 ++++-- 12 files changed, 77 insertions(+), 26 deletions(-) diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py index 321d74982..ce4650449 100644 --- a/eos/saveddata/character.py +++ b/eos/saveddata/character.py @@ -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 diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index 71148978d..4371041e3 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -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 diff --git a/gui/additionsPane.py b/gui/additionsPane.py index d108686cc..8c855dc95 100644 --- a/gui/additionsPane.py +++ b/gui/additionsPane.py @@ -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] diff --git a/gui/boosterView.py b/gui/boosterView.py index 2ad9cf349..e71dabbb8 100644 --- a/gui/boosterView.py +++ b/gui/boosterView.py @@ -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 diff --git a/gui/builtinStatsViews/targetingMiscViewFull.py b/gui/builtinStatsViews/targetingMiscViewFull.py index af6a195ad..207fe46c5 100644 --- a/gui/builtinStatsViews/targetingMiscViewFull.py +++ b/gui/builtinStatsViews/targetingMiscViewFull.py @@ -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 = [] diff --git a/gui/cargoView.py b/gui/cargoView.py index f7c856e1b..91bfb2b5f 100644 --- a/gui/cargoView.py +++ b/gui/cargoView.py @@ -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) diff --git a/gui/chromeTabs.py b/gui/chromeTabs.py index 06ed1d5a1..485d82a55 100644 --- a/gui/chromeTabs.py +++ b/gui/chromeTabs.py @@ -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() diff --git a/gui/droneView.py b/gui/droneView.py index f71c7cb25..9b02d1925 100644 --- a/gui/droneView.py +++ b/gui/droneView.py @@ -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 diff --git a/gui/fighterView.py b/gui/fighterView.py index b011f89d0..b4468c94f 100644 --- a/gui/fighterView.py +++ b/gui/fighterView.py @@ -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 diff --git a/gui/gangView.py b/gui/gangView.py index 25a457301..949406ff0 100644 --- a/gui/gangView.py +++ b/gui/gangView.py @@ -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: diff --git a/gui/implantView.py b/gui/implantView.py index 8ae9ac50a..2f5a34213 100644 --- a/gui/implantView.py +++ b/gui/implantView.py @@ -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) diff --git a/gui/projectedView.py b/gui/projectedView.py index 3600620fd..223edfe05 100644 --- a/gui/projectedView.py +++ b/gui/projectedView.py @@ -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[:]