diff --git a/controller/fit.py b/controller/fit.py index 566c9e6f0..f43c3ce1c 100644 --- a/controller/fit.py +++ b/controller/fit.py @@ -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) diff --git a/gui/fitMultiSwitch.py b/gui/fitMultiSwitch.py index 1ff90e608..b41b0605d 100644 --- a/gui/fitMultiSwitch.py +++ b/gui/fitMultiSwitch.py @@ -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) diff --git a/gui/fittingView.py b/gui/fittingView.py index 44f4c7b97..e36279769 100644 --- a/gui/fittingView.py +++ b/gui/fittingView.py @@ -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 diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 7f03f8d05..3d267e433 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -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)