Wire up events so the active fit in a tab changes when a new fit is selected, and names change when renamed, etc.

This commit is contained in:
cncfanatics
2010-08-25 19:20:38 +02:00
parent 2d33a5dda5
commit 321188e23e
4 changed files with 80 additions and 41 deletions

View File

@@ -30,6 +30,7 @@ class Fit(object):
return cls.instance
def getFitsWithShip(self, id):
fits = eos.db.getFitsWithShip(id)
names = []
@@ -62,3 +63,6 @@ class Fit(object):
eos.db.saveddata_session.add(newFit)
eos.db.saveddata_session.flush()
return newFit.ID
def getFit(self, fitID):
return eos.db.getFit(fitID)

View File

@@ -18,8 +18,11 @@
#===============================================================================
import wx
import gui.mainFrame
from gui.fittingView import FittingView
from gui.statsPane import StatsPane
import gui.shipBrowser as sb
import controller
class FitMultiSwitch(wx.Notebook):
def __init__(self, parent):
@@ -28,19 +31,49 @@ class FitMultiSwitch(wx.Notebook):
self.AddPage(wx.Panel(self), "+")
self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.checkAdd)
self.shipBrowser = gui.mainFrame.MainFrame.getInstance().shipBrowser
self.shipBrowser.Bind(sb.EVT_FIT_RENAMED, self.processRename)
self.shipBrowser.Bind(sb.EVT_FIT_SELECTED, self.changeFit)
def AddTab(self):
pos = self.GetPageCount() - 1
p = wx.Panel(self)
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(FittingView(p), 1, wx.EXPAND | wx.RESERVE_SPACE_EVEN_IF_HIDDEN)
p.view = FittingView(p)
sizer.Add(p.view, 1, wx.EXPAND | wx.RESERVE_SPACE_EVEN_IF_HIDDEN)
p.SetSizer(sizer)
pos = self.GetPageCount() - 1
self.InsertPage(pos, p, "Empty tab")
# Get fit name
fitID = self.shipBrowser.getSelectedFitID()
if fitID is None:
name = "Empty Tab"
else:
cFit = controller.Fit.getInstance()
name = cFit.getFit(fitID).name
self.InsertPage(pos, p, name)
wx.CallAfter(self.ChangeSelection, pos)
def checkAdd(self, event):
if event.Selection == self.GetPageCount() - 1:
self.AddTab()
event.Veto()
def changeFit(self, event):
fitID = event.fitID
cFit = controller.Fit.getInstance()
selected = self.GetSelection()
view = self.GetPage(selected).view
self.SetPageText(selected, cFit.getFit(fitID).name)
view.changeFit(fitID)
def processRename(self, event):
fitID = event.fitID
cFit = controller.Fit.getInstance()
for i in xrange(self.GetPageCount() - 1):
view = self.GetPage(i).view
if view.activeFitID == fitID:
self.SetPageText(i, cFit.getFit(fitID).name)

View File

@@ -18,8 +18,9 @@
#===============================================================================
import wx
import sys
import controller
import gui.builtinViewColumns
import gui.shipBrowser as sb
import gui.mainFrame
from gui.builtinViewColumns import *
@@ -40,14 +41,12 @@ class FittingView(wx.ListCtrl):
self.SetImageList(self.imageList, wx.IMAGE_LIST_SMALL)
self.activeColumns = []
self.Bind(wx.EVT_LIST_COL_BEGIN_DRAG, self.resizeChecker)
self.Bind(wx.EVT_LIST_COL_CLICK, self.dragCheck)
self.Bind(wx.EVT_LIST_COL_END_DRAG, self.dragCheck)
#Listen to when stuff in the ship browser changes
mainFrame = gui.mainFrame.MainFrame.getInstance()
for tree in (mainFrame.shipBrowser.shipView, mainFrame.shipBrowser.searchView):
tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.changeFit)
tree.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.renameFit)
self.shipBrowser = mainFrame.shipBrowser
self.shipView = mainFrame.shipBrowser.shipView
self.searchView = mainFrame.shipBrowser.shipView
self.switch = mainFrame.fitMultiSwitch
i = 0
for colName in FittingView.DEFAULT_COLS:
@@ -64,6 +63,7 @@ class FittingView(wx.ListCtrl):
i += 1
self.imageListBase = self.imageList.ImageCount
self.activeFitID = None
def addColumn(self, i, col):
self.activeColumns.append(col)
@@ -78,16 +78,6 @@ class FittingView(wx.ListCtrl):
if self.activeColumns[event.Column].resizable is False:
event.Veto()
def dragCheck(self, event):
print event
def dragEnd(self, event):
print event
def renameFit(self, event):
print event
event.Skip()
def changeFit(self, event):
print event
event.Skip()
#Gets called from the fitMultiSwitch when it decides its time
def changeFit(self, fitID):
self.activeFitID = fitID

View File

@@ -2,6 +2,12 @@ import wx
import controller
import bitmapLoader
import gui.mainFrame
import wx.lib.newevent
FitCreated, EVT_FIT_CREATED = wx.lib.newevent.NewEvent()
FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent()
FitRemoved, EVT_FIT_REMOVED = wx.lib.newevent.NewEvent()
FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent()
class ShipBrowser(wx.Panel):
def __init__(self, parent):
@@ -49,7 +55,6 @@ class ShipBrowser(wx.Panel):
tree.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup)
tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.toggleButtons)
tree.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.changeFitName)
tree.Bind(wx.EVT_LEFT_DCLICK, self.renameOrExpand)
#Bind buttons
self.shipMenu.new.Bind(wx.EVT_BUTTON, self.newFit)
@@ -68,6 +73,8 @@ class ShipBrowser(wx.Panel):
self.timer = None
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
def build(self):
if not self.built:
self.built = True
@@ -98,12 +105,14 @@ class ShipBrowser(wx.Panel):
if data is None:
return
type, groupID = data
type, fitID = data
if type == "fit":
for btn in btns:
btn.Enable()
elif type == "ship":
wx.PostEvent(self, FitSelected(fitID=fitID))
elif type == "ship":
for btn in btns:
btn.Enable(btn == self.shipMenu.new)
@@ -154,17 +163,8 @@ class ShipBrowser(wx.Panel):
tree.Expand(root)
tree.SelectItem(childId)
tree.EditLabel(childId)
event.Skip()
def renameOrExpand(self, event):
tree = self.getActiveTree()
root = tree.GetSelection()
type, _ = tree.GetPyData(root)
if type == "fit":
tree.EditLabel(root)
event.Skip()
wx.PostEvent(self, FitCreated(fitID=fitID))
def renameFit(self, event):
tree = self.getActiveTree()
@@ -182,8 +182,10 @@ class ShipBrowser(wx.Panel):
type, fitID = tree.GetPyData(item)
cFit = controller.Fit.getInstance()
cFit.renameFit(fitID, newName)
wx.CallAfter(tree.SortChildren, tree.GetItemParent(item))
event.Skip()
wx.PostEvent(self, FitRenamed(fitID=fitID))
def deleteFit(self, event):
tree = self.getActiveTree()
@@ -194,7 +196,7 @@ class ShipBrowser(wx.Panel):
cFit.deleteFit(fitID)
tree.Delete(root)
event.Skip()
wx.PostEvent(self, FitRemoved(fitID=fitID))
def copyFit(self, event):
tree = self.getActiveTree()
@@ -210,7 +212,7 @@ class ShipBrowser(wx.Panel):
tree.SelectItem(childId)
tree.EditLabel(childId)
event.Skip()
wx.PostEvent(self, FitCreated(fitID=newID))
def scheduleSearch(self, event):
self.searchTimer.Stop()
@@ -279,6 +281,16 @@ class ShipBrowser(wx.Panel):
event.Skip()
def getSelectedFitID(self):
tree = self.getActiveTree()
selection = tree.GetSelection()
data = tree.GetPyData(selection)
if data is not None:
type, fitID = data
if type == "fit":
return fitID
class ShipView(wx.TreeCtrl):
def __init__(self, parent):
wx.TreeCtrl.__init__(self, parent)