Start work on integrating new tabs into pyfa
This commit is contained in:
2
eos
2
eos
Submodule eos updated: f964b32559...dfe939dadf
@@ -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
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user