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: if not picked:
charID = cChar.all0ID() charID = cChar.all0ID()
self.selectChar(charID) self.selectChar(charID)
fitID = self.mainFrame.fitMultiSwitch.getActiveFit() fitID = self.mainFrame.getActiveFit()
cFit = service.Fit.getInstance() cFit = service.Fit.getInstance()
cFit.changeChar(fitID, charID) cFit.changeChar(fitID, charID)
@@ -87,7 +87,7 @@ class CharacterSelection(wx.Panel):
event.Skip() event.Skip()
def charChanged(self, event): def charChanged(self, event):
fitID = self.mainFrame.fitMultiSwitch.getActiveFit() fitID = self.mainFrame.getActiveFit()
charID = self.getActiveCharacter() charID = self.getActiveCharacter()
cFit = service.Fit.getInstance() 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 wx.lib.newevent
import service import service
import gui.mainFrame import gui.mainFrame
import gui.marketBrowser
import bitmapLoader
import gui.display as d import gui.display as d
from gui.contextMenu import ContextMenu from gui.contextMenu import ContextMenu
import gui.shipBrowser
import sys import sys
from eos.types import Slot from eos.types import Slot
from gui.builtinViewColumns.state import State from gui.builtinViewColumns.state import State
@@ -59,7 +62,13 @@ class FittingView(d.Display):
def __init__(self, parent): def __init__(self, parent):
d.Display.__init__(self, parent) d.Display.__init__(self, parent)
self.Show(False) self.Show(False)
self.parent = parent
self.mainFrame.Bind(FIT_CHANGED, self.fitChanged) 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_LEFT_DCLICK, self.removeItem)
self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag) self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.startDrag)
if "__WXGTK__" in wx.PlatformInfo: 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_LEFT_DOWN, self.click)
self.Bind(wx.EVT_RIGHT_DOWN, self.click) self.Bind(wx.EVT_RIGHT_DOWN, self.click)
def getActiveFit(self):
return self.activeFitID
def startDrag(self, event): def startDrag(self, event):
row = event.GetIndex() row = event.GetIndex()
if row != -1: if row != -1:
@@ -110,32 +122,53 @@ class FittingView(d.Display):
event.Skip() event.Skip()
#Gets called from the fitMultiSwitch when it decides its time def fitRemoved(self, event):
def changeFit(self, fitID): fitID = event.fitID
self.activeFitID = fitID if fitID == self.getActiveFit():
self.Show(fitID is not None) self.parent.DeletePage(self.parent.GetPageIndex(self))
self.slotsChanged()
wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID))
def appendItem(self, itemID): def fitRenamed(self, event):
fitID = self.activeFitID fitID = event.fitID
if fitID != None: if fitID == self.getActiveFit():
cFit = service.Fit.getInstance() self.updateTab()
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) def fitSelected(self, event):
wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID)) if self.parent.IsActive(self):
else: fitID = event.fitID
populate = cFit.appendModule(fitID, itemID) self.activeFitID = fitID
if populate: self.Show(fitID is not None)
self.slotsChanged() self.slotsChanged()
if populate is not None: 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)) 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): def removeItem(self, event):
row, _ = self.HitTest(event.Position) row, _ = self.HitTest(event.Position)

View File

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

View File

@@ -18,210 +18,10 @@
#=============================================================================== #===============================================================================
import wx import wx
import bitmapLoader import gui.chromeTabs
import gui.mainFrame import gui.fittingView
import gui.fittingView as fv
import gui.marketBrowser as mb
import gui.shipBrowser as sb
import service
class MultiSwitch(wx.Notebook): class MultiSwitch(gui.chromeTabs.PFNotebook):
def __init__(self, parent): def __init__(self, parent):
wx.Notebook.__init__(self, parent, wx.ID_ANY) gui.chromeTabs.PFNotebook.__init__(self, parent)
self.fitPanes = [] self.AddPage(gui.fittingView.FittingView(self), "Empty Fit")
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()

View File

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