diff --git a/gui/chromeTabs.py b/gui/chromeTabs.py index 7a233d063..e9513d99d 100644 --- a/gui/chromeTabs.py +++ b/gui/chromeTabs.py @@ -99,6 +99,20 @@ class PFNotebook(wx.Panel): def GetPage(self, i): return self.pages[i] + def SetPage(self, i, page): + oldPage = self.pages[i] + self.pages[i] = page + if oldPage == self.activePage: + self.activePage = page + + oldPage.Destroy() + page.Reparent(self.pageContainer) + page.Layout() + page.Show() + + def ReplaceActivePage(self, page): + self.SetPage(self.GetSelection(), page) + def GetSelectedPage(self): return self.activePage diff --git a/gui/fittingView.py b/gui/fittingView.py index 8e800fb6a..086db6f9f 100644 --- a/gui/fittingView.py +++ b/gui/fittingView.py @@ -29,9 +29,25 @@ import gui.shipBrowser import sys from eos.types import Slot from gui.builtinViewColumns.state import State +import gui.multiSwitch FitChanged, FIT_CHANGED = wx.lib.newevent.NewEvent() +#Tab spawning handler +class FitSpawner(gui.multiSwitch.TabSpawner): + def __init__(self, multiSwitch): + self.multiSwitch = multiSwitch + mainFrame = gui.mainFrame.MainFrame.getInstance() + mainFrame.Bind(gui.shipBrowser.EVT_FIT_SELECTED, self.fitSelected) + + def fitSelected(self, event): + view = FittingView(self.multiSwitch) + self.multiSwitch.ReplaceActivePage(view) + view.fitSelected(event) + +FitSpawner.register() + +#Drag'n'drop handler class FittingViewDrop(wx.PyDropTarget): def __init__(self, dropFn): wx.PyDropTarget.__init__(self) @@ -45,6 +61,7 @@ class FittingViewDrop(wx.PyDropTarget): self.dropFn(x, y, int(self.dropData.GetText())) return t + class FittingView(d.Display): DEFAULT_COLS = ["State", "Ammo Icon", @@ -127,11 +144,15 @@ class FittingView(d.Display): if fitID == self.getActiveFit(): self.parent.DeletePage(self.parent.GetPageIndex(self)) + event.Skip() + def fitRenamed(self, event): fitID = event.fitID if fitID == self.getActiveFit(): self.updateTab() + event.Skip() + def fitSelected(self, event): if self.parent.IsActive(self): fitID = event.fitID @@ -143,6 +164,8 @@ class FittingView(d.Display): wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID)) self.updateTab() + event.Skip() + def updateTab(self): cFit = service.Fit.getInstance() fit = cFit.getFit(self.getActiveFit()) @@ -172,6 +195,8 @@ class FittingView(d.Display): if populate is not None: wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID)) + event.Skip() + def removeItem(self, event): row, _ = self.HitTest(event.Position) if row != -1: @@ -184,6 +209,8 @@ class FittingView(d.Display): if populate: self.slotsChanged() wx.PostEvent(self.mainFrame, FitChanged(fitID=self.activeFitID)) + event.Skip() + def swapItems(self, x, y, itemID): srcRow = self.FindItemData(-1,itemID) dstRow, _ = self.HitTest((x, y)) diff --git a/gui/multiSwitch.py b/gui/multiSwitch.py index 9824ca6f2..23ccee6b1 100644 --- a/gui/multiSwitch.py +++ b/gui/multiSwitch.py @@ -19,9 +19,16 @@ import wx import gui.chromeTabs -import gui.fittingView class MultiSwitch(gui.chromeTabs.PFNotebook): def __init__(self, parent): gui.chromeTabs.PFNotebook.__init__(self, parent) - self.AddPage(gui.fittingView.FittingView(self), "Empty Fit") + self.AddPage(wx.Panel(self), "Empty Tab") + for type in TabSpawner.tabTypes: + type(self) + +class TabSpawner(object): + tabTypes = [] + @classmethod + def register(cls): + TabSpawner.tabTypes.append(cls)