diff --git a/controller/character.py b/controller/character.py index 2118903f4..ad982c7f0 100644 --- a/controller/character.py +++ b/controller/character.py @@ -30,6 +30,11 @@ class Character(): return cls.instance + def all0ID(self): + all0 = eos.types.Character.getAll0() + eos.db.commit() + return all0.ID + def getCharacterList(self): baseChars = [eos.types.Character.getAll0(), eos.types.Character.getAll5()] # Flush incase all0 & all5 weren't in the db yet diff --git a/gui/builtinViewColumns/display.py b/gui/builtinViewColumns/display.py index c965f20ce..55e38bc38 100644 --- a/gui/builtinViewColumns/display.py +++ b/gui/builtinViewColumns/display.py @@ -106,7 +106,7 @@ class Display(wx.ListCtrl): def refresh(self, stuff): if stuff == None: return - + self.Freeze() item = -1 for id, st in enumerate(stuff): diff --git a/gui/characterSelection.py b/gui/characterSelection.py index ac09adfc8..062a831a7 100644 --- a/gui/characterSelection.py +++ b/gui/characterSelection.py @@ -20,6 +20,7 @@ import wx import controller from gui import characterEditor as ce +from gui import shipBrowser as sb from gui import fittingView as fv import gui.mainFrame @@ -40,6 +41,9 @@ class CharacterSelection(wx.Panel): self.Bind(wx.EVT_CHOICE, self.charChanged) self.mainFrame.Bind(ce.CHAR_LIST_UPDATED, self.refreshCharacterList) + self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) + + self.Enable(False) def getActiveCharacter(self): selection = self.charChoice.GetCurrentSelection() @@ -72,3 +76,31 @@ class CharacterSelection(wx.Panel): cFit.changeChar(fitID, charID) wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + + def selectChar(self, charID): + choice = self.charChoice + numItems = len(choice.GetItems()) + for i in xrange(numItems): + id = choice.GetClientData(i) + if id == charID: + choice.SetSelection(i) + return True + + return False + + def fitChanged(self, event): + self.Enable(event.fitID != None) + + choice = self.charChoice + cFit = controller.Fit.getInstance() + currCharID = choice.GetClientData(choice.GetCurrentSelection()) + fit = cFit.getFit(event.fitID) + newCharID = fit.character.ID if fit is not None else None + + if newCharID == None: + cChar = controller.Character.getInstance() + self.selectChar(cChar.all0ID()) + elif currCharID != newCharID: + self.selectChar(newCharID) + + event.Skip() \ No newline at end of file diff --git a/gui/fittingView.py b/gui/fittingView.py index 5d77d4db9..291f9dc55 100644 --- a/gui/fittingView.py +++ b/gui/fittingView.py @@ -40,17 +40,12 @@ class FittingView(d.Display): d.Display.__init__(self, parent) self.mainFrame.Bind(FIT_CHANGED, self.fitChanged) self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) - self.Hide() #Don't show ourselves at start self.activeFitID = None #Gets called from the fitMultiSwitch when it decides its time def changeFit(self, fitID): self.activeFitID = fitID - if fitID == None: - self.Hide() - else: - self.Show() - + self.Show(fitID is not None) self.slotsChanged() wx.PostEvent(self.mainFrame, FitChanged(fitID=fitID)) @@ -91,9 +86,9 @@ class FittingView(d.Display): self.populate(self.mods) def fitChanged(self, event): - if event.fitID != self.activeFitID: - return + if self.activeFitID is not None and self.activeFitID == event.fitID: + self.generateMods() + self.refresh(self.mods) - self.generateMods() - self.refresh(self.mods) + self.Show(self.activeFitID is not None and self.activeFitID == event.fitID) event.Skip() diff --git a/gui/multiSwitch.py b/gui/multiSwitch.py index ae8bab3d4..40422019f 100644 --- a/gui/multiSwitch.py +++ b/gui/multiSwitch.py @@ -48,6 +48,9 @@ class MultiSwitch(wx.Notebook): return self.GetCurrentPage().view.activeFitID def AddTab(self, type="fit", frame=None, title=None): + #Hide current selection + self.GetCurrentPage().Hide() + pos = self.GetPageCount() - 1 if type == "fit": @@ -59,14 +62,15 @@ class MultiSwitch(wx.Notebook): sizer.Add(p.view, 1, wx.EXPAND | wx.RESERVE_SPACE_EVEN_IF_HIDDEN) p.SetSizer(sizer) - self.InsertPage(pos, p, "") self.setTabTitle(pos, None) else: self.InsertPage(pos, frame, title) frame.type=type + self.ChangeSelection(pos) wx.CallAfter(self.ChangeSelection, pos) + return pos def removeTab(self, i): if self.GetPageCount() > 2: @@ -109,12 +113,20 @@ class MultiSwitch(wx.Notebook): self.SetPageImage(tab, self.imageList.Add(bitmap)) def pageChanged(self, event): - print "p" - selection = event.Selection + #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 + page = self.GetPage(selection) if hasattr(page, "type") and page.type == "fit": fitID = page.view.activeFitID wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) + else: + wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=None)) + + event.Skip() def changeFit(self, event): selected = self.GetSelection() @@ -149,7 +161,6 @@ class MultiSwitch(wx.Notebook): 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)