Start work on integrating new tabs into pyfa

This commit is contained in:
cncfanatics
2010-11-17 09:05:45 +01:00
parent 4922d6c880
commit 26df47699d
7 changed files with 1092 additions and 1320 deletions

2
eos

Submodule eos updated: f964b32559...dfe939dadf

View File

@@ -79,7 +79,7 @@ class CharacterSelection(wx.Panel):
if not picked:
charID = cChar.all0ID()
self.selectChar(charID)
fitID = self.mainFrame.fitMultiSwitch.getActiveFit()
fitID = self.mainFrame.getActiveFit()
cFit = service.Fit.getInstance()
cFit.changeChar(fitID, charID)
@@ -87,7 +87,7 @@ class CharacterSelection(wx.Panel):
event.Skip()
def charChanged(self, event):
fitID = self.mainFrame.fitMultiSwitch.getActiveFit()
fitID = self.mainFrame.getActiveFit()
charID = self.getActiveCharacter()
cFit = service.Fit.getInstance()

File diff suppressed because it is too large Load Diff

View File

@@ -21,8 +21,11 @@ import wx
import wx.lib.newevent
import service
import gui.mainFrame
import gui.marketBrowser
import bitmapLoader
import gui.display as d
from gui.contextMenu import ContextMenu
import gui.shipBrowser
import sys
from eos.types import Slot
from gui.builtinViewColumns.state import State
@@ -59,7 +62,13 @@ class FittingView(d.Display):
def __init__(self, parent):
d.Display.__init__(self, parent)
self.Show(False)
self.parent = parent
self.mainFrame.Bind(FIT_CHANGED, self.fitChanged)
self.mainFrame.Bind(gui.shipBrowser.EVT_FIT_SELECTED, self.fitSelected)
self.mainFrame.Bind(gui.shipBrowser.EVT_FIT_RENAMED, self.fitRenamed)
self.mainFrame.Bind(gui.shipBrowser.EVT_FIT_REMOVED, self.fitRemoved)
self.mainFrame.Bind(gui.marketBrowser.ITEM_SELECTED, self.appendItem)
self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem)
self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag)
if "__WXGTK__" in wx.PlatformInfo:
@@ -73,6 +82,9 @@ class FittingView(d.Display):
self.Bind(wx.EVT_LEFT_DOWN, self.click)
self.Bind(wx.EVT_RIGHT_DOWN, self.click)
def getActiveFit(self):
return self.activeFitID
def startDrag(self, event):
row = event.GetIndex()
if row != -1:
@@ -110,32 +122,53 @@ class FittingView(d.Display):
event.Skip()
#Gets called from the fitMultiSwitch when it decides its time
def changeFit(self, fitID):
self.activeFitID = fitID
self.Show(fitID is not None)
self.slotsChanged()
wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID))
def fitRemoved(self, event):
fitID = event.fitID
if fitID == self.getActiveFit():
self.parent.DeletePage(self.parent.GetPageIndex(self))
def appendItem(self, itemID):
fitID = self.activeFitID
if fitID != None:
cFit = service.Fit.getInstance()
if cFit.isAmmo(itemID):
modules = []
sel = self.GetFirstSelected()
while sel != -1:
modules.append(self.mods[self.GetItemData(sel)])
sel = self.GetNextSelected(sel)
def fitRenamed(self, event):
fitID = event.fitID
if fitID == self.getActiveFit():
self.updateTab()
cFit.setAmmo(fitID, itemID, modules)
wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID))
else:
populate = cFit.appendModule(fitID, itemID)
if populate:
self.slotsChanged()
if populate is not None:
def fitSelected(self, event):
if self.parent.IsActive(self):
fitID = event.fitID
self.activeFitID = fitID
self.Show(fitID is not None)
self.slotsChanged()
wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID))
self.updateTab()
def updateTab(self):
cFit = service.Fit.getInstance()
fit = cFit.getFit(self.getActiveFit())
bitmap = bitmapLoader.getBitmap("race_%s_small", "icons")
text = "%s: %s" % (fit.ship.item.name, fit.name)
self.parent.SetPageTextIcon(self.parent.GetSelection(), text, bitmap)
def appendItem(self, event):
if self.parent.IsActive(self):
itemID = event.itemID
fitID = self.activeFitID
if fitID != None:
cFit = service.Fit.getInstance()
if cFit.isAmmo(itemID):
modules = []
sel = self.GetFirstSelected()
while sel != -1:
modules.append(self.mods[self.GetItemData(sel)])
sel = self.GetNextSelected(sel)
cFit.setAmmo(fitID, itemID, modules)
wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID))
else:
populate = cFit.appendModule(fitID, itemID)
if populate:
self.slotsChanged()
if populate is not None:
wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID))
def removeItem(self, event):
row, _ = self.HitTest(event.Position)

View File

@@ -79,7 +79,7 @@ class MainFrame(wx.Frame):
faSizer = wx.BoxSizer(wx.VERTICAL)
self.fitMultiSwitch = MultiSwitch(self.FitviewAdditionsPanel)
self.fitMultiSwitch.AddTab()
#self.fitMultiSwitch.AddTab()
faSizer.Add(self.fitMultiSwitch,1,wx.EXPAND)
self.additionsPane = AdditionsPane(self.FitviewAdditionsPanel)
@@ -128,9 +128,9 @@ class MainFrame(wx.Frame):
self.Show()
def getActiveFit(self):
sel = self.fitMultiSwitch.GetSelection()
view = self.fitMultiSwitch.GetPage(sel).view
return view.activeFitID
p = self.fitMultiSwitch.GetSelectedPage()
m = getattr(p, "getActiveFit", None)
return m() if m is not None else None
def getFittingView(self):
sel = self.fitMultiSwitch.GetSelection()

View File

@@ -18,210 +18,10 @@
#===============================================================================
import wx
import bitmapLoader
import gui.mainFrame
import gui.fittingView as fv
import gui.marketBrowser as mb
import gui.shipBrowser as sb
import service
import gui.chromeTabs
import gui.fittingView
class MultiSwitch(wx.Notebook):
class MultiSwitch(gui.chromeTabs.PFNotebook):
def __init__(self, parent):
wx.Notebook.__init__(self, parent, wx.ID_ANY)
self.fitPanes = []
self.AddPage(wx.Panel(self), "+")
self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.checkAdd)
self.Bind(wx.EVT_MIDDLE_DOWN, self.checkRemove)
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.pageChanged)
self.Bind(wx.EVT_NAVIGATION_KEY, self.OnNavigate)
self.mainFrame.Bind(sb.EVT_FIT_RENAMED, self.processRename)
self.mainFrame.Bind(sb.EVT_FIT_SELECTED, self.changeFit)
self.mainFrame.Bind(sb.EVT_FIT_REMOVED, self.processRemove)
self.mainFrame.Bind(mb.ITEM_SELECTED, self.itemSelected)
self.imageList = wx.ImageList(16, 16)
self.SetImageList(self.imageList)
self.removal = False
self.countEvt = 1
self.ignorePageChanged = False
def OnNavigate(self, event):
self.ignorePageChanged = True
event.Skip()
def getActiveFit(self):
return self.GetCurrentPage().view.activeFitID
def AddTab(self, type="fit", frame=None, title=None):
if self.removal:
self.SetSelection(self.GetPageCount() - 2)
return False
#Hide current selection
pos = self.GetPageCount() - 1
if type == "fit":
p = wx.Panel(self)
self.InsertPage(pos, p, "")
p.type = "fit"
sizer = wx.BoxSizer(wx.VERTICAL)
p.view = fv.FittingView(p)
sizer.Add(p.view, 1, wx.EXPAND | wx.RESERVE_SPACE_EVEN_IF_HIDDEN)
p.SetSizer(sizer)
p.Layout()
self.setTabTitle(pos, None)
else:
self.InsertPage(pos, frame, title)
frame.type=type
self.SetSelection(pos)
wx.CallAfter(self.SetSelection, pos)
return pos
def removeTab(self, i):
if self.GetPageCount() > 2:
### FIXME - seems that we remove the wrong image from the list
# self.ImageList.Remove(self.GetPageImage(i))
###
self.DeletePage(i)
else:
self.setTabTitle(i, None)
remIcon = self.GetPageImage(i)
self.SetPageImage(i, -1)
self.ImageList.Remove(remIcon)
page = self.GetPage(i)
if page.type == "fit":
page.view.changeFit(None)
def checkRemove(self, event):
tab, _ = self.HitTest(event.Position)
if tab != -1 and tab != self.GetPageCount() - 1:
self.removal = True
self.removeTab(tab)
#Deleting a tab might have put us on the "+" tab, make sure we don't stay there
if self.GetSelection() == self.GetPageCount() - 1:
self.SetSelection(self.GetPageCount() - 2)
self.removal = False
def removeCurrentTab(self):
self.removal = True
self.removeTab(self.GetSelection())
#Deleting a tab might have put us on the "+" tab, make sure we don't stay there
if self.GetSelection() == self.GetPageCount() - 1:
self.SetSelection(self.GetPageCount() - 2)
self.removal = False
def checkAdd(self, event):
if event.Selection == self.GetPageCount() - 1:
if "__WXMSW__" not in wx.PlatformInfo:
self.countEvt = 1
if not self.ignorePageChanged:
self.AddTab()
else:
self.ignorePageChanged = False
event.Veto()
#Veto to prevent the + tab from being selected
event.Veto()
def setTabTitle(self, tab, fitID):
page = self.GetPage(tab)
if page.type == "fit":
if fitID == None:
self.SetPageText(tab, "Empty Tab")
self.SetPageImage(tab, -1)
else:
cFit = service.Fit.getInstance()
fit = cFit.getFit(fitID)
self.SetPageText(tab, "%s: %s" % (fit.ship.item.name, fit.name))
bitmap = bitmapLoader.getBitmap("race_%s_small" % fit.ship.item.race, "icons")
if bitmap:
self.SetPageImage(tab, self.imageList.Add(bitmap))
def pageChanged(self, event):
#On windows, we can't use the CHANGING event as its bugged, so we need to RECHECK here
if event.Selection == self.GetPageCount() - 1:
selection = self.AddTab()
else:
selection = event.Selection
if "__WXMSW__" in wx.PlatformInfo:
self.countEvt = 0
page = self.GetPage(selection)
if self.countEvt == 0:
fitID = page.view.activeFitID
sFit = service.Fit.getInstance()
sFit.switchFit(fitID)
if hasattr(page, "type") and page.type == "fit":
wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID))
else:
wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=None))
self.countEvt -= 1
if self.countEvt < 0:
if "__WXMSW__" not in wx.PlatformInfo:
self.countEvt = 0
else:
self.countEvt = 1
event.Skip()
def changeFit(self, event):
selected = self.GetSelection()
page = self.GetPage(selected)
if page.type == "fit":
fitID = event.fitID
view = page.view
#Notify service
sFit = service.Fit.getInstance()
sFit.switchFit(fitID)
#Change title of current tab to new fit
self.setTabTitle(selected, fitID)
view.changeFit(fitID)
event.Skip()
def processRename(self, event):
fitID = event.fitID
# Loop through every tab and check if they're our culprit, if so, change tab name
for i in xrange(self.GetPageCount() - 1):
page = self.GetPage(i)
if page.type == "fit":
view = page.view
if view.activeFitID == fitID:
self.setTabTitle(i, fitID)
event.Skip()
def processRemove(self, event):
fitID = event.fitID
for i in xrange(self.GetPageCount() - 2, -1, -1):
page = self.GetPage(i)
if page.type == "fit":
view = page.view
if view.activeFitID == fitID:
self.removeTab(i)
#Deleting a tab might have put us on the "+" tab, make sure we don't stay there
if self.GetSelection() == self.GetPageCount() - 1:
self.SetSelection(self.GetPageCount() - 2)
event.Skip()
def itemSelected(self, event):
selected = self.GetSelection()
page = self.GetPage(selected)
if page.type == "fit":
page.view.appendItem(event.itemID)
event.Skip()
gui.chromeTabs.PFNotebook.__init__(self, parent)
self.AddPage(gui.fittingView.FittingView(self), "Empty Fit")

View File

@@ -2,7 +2,7 @@ import wx
import copy
from gui import bitmapLoader
import gui.mainFrame
import gui.fittingView as fv
import gui.fittingView
import service
import time
import os
@@ -63,7 +63,7 @@ class ShipBrowser(wx.Panel):
self.Bind(EVT_SB_STAGE3_SEL, self.stage3)
self.Bind(EVT_SB_SEARCH_SEL, self.searchStage)
self.mainFrame.Bind(fv.FIT_CHANGED, self.RefreshList)
self.mainFrame.Bind(gui.fittingView.FIT_CHANGED, self.RefreshList)
self.stage1(None)
@@ -1594,12 +1594,11 @@ class FitItem(wx.Window):
fitInst = service.fit.Fit.getInstance()
draggedFit = fitInst.getFit(self.fitID)
fitInst.project(activeFit,draggedFit)
wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=activeFit))
wx.PostEvent(self.mainFrame, gui.fittingView.FitChanged(fitID=activeFit))
if self.checkForGraphFrame(targetWnd, gfWnd):
self.mainFrame.graphFrame.AppendFitToList(self.fitID)
event.Skip()
return