Remove all specific code from multiSwitch, work with a spawning handler

This commit is contained in:
cncfanatics
2010-11-17 14:13:59 +01:00
parent c697aea827
commit 4359fa46b0
3 changed files with 50 additions and 2 deletions

View File

@@ -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

View File

@@ -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))

View File

@@ -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)