From a1416e6bece09a6037c79ed63f2ddf7963ee56aa Mon Sep 17 00:00:00 2001 From: blitzmann Date: Sun, 25 May 2014 02:55:28 -0400 Subject: [PATCH] Improves on fit loading on startup by only calculating the last fit that is opened. Issue with FittingView.MakeSnapshot() need an exception catch. --- gui/builtinViews/fittingView.py | 27 ++++++++++++++--------- gui/mainFrame.py | 39 +++++++++++++++++++-------------- gui/multiSwitch.py | 9 ++++---- 3 files changed, 44 insertions(+), 31 deletions(-) diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index 96101be72..444ad9ad4 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -44,8 +44,6 @@ class FitSpawner(gui.multiSwitch.TabSpawner): def fitSelected(self, event): count = -1 - if self.multiSwitch.GetPageCount() == 0: - self.multiSwitch.AddPage() for index, page in enumerate(self.multiSwitch.pages): try: if page.activeFitID == event.fitID: @@ -56,9 +54,10 @@ class FitSpawner(gui.multiSwitch.TabSpawner): except: pass if count < 0: - mstate = getattr(event, "mstate", wx.GetMouseState()) + startup = getattr(event, "startup", False) # see OpenFitsThread in gui.mainFrame + mstate = wx.GetMouseState() - if mstate.CmdDown() or mstate.MiddleDown(): + if mstate.CmdDown() or mstate.MiddleDown() or startup: self.multiSwitch.AddPage() view = FittingView(self.multiSwitch) @@ -281,13 +280,15 @@ class FittingView(d.Display): def fitSelected(self, event): if self.parent.IsActive(self): fitID = event.fitID + startup = getattr(event, "startup", False) self.activeFitID = fitID - self.Show(fitID is not None) - self.slotsChanged() sFit = service.Fit.getInstance() - sFit.switchFit(fitID) - wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) self.updateTab() + if not startup or startup == 2: # see OpenFitsThread in gui.mainFrame + self.Show(fitID is not None) + self.slotsChanged() + sFit.switchFit(fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) event.Skip() @@ -562,11 +563,17 @@ class FittingView(d.Display): self.itemRect = self.GetItemRect(0) if 'wxMac' in wx.PlatformInfo: - self.MakeSnapshot() + try: + self.MakeSnapshot() + except: + pass def OnShow(self, event): if not event.GetShow(): - self.MakeSnapshot() + try: + self.MakeSnapshot() + except: + pass event.Skip() def Snapshot(self): diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 9625df43e..dad54971d 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -77,17 +77,17 @@ class OpenFitsThread(threading.Thread): def run(self): time.sleep(0.5) # Give GUI some time to finish drawing - # open first fit in same tab (which should be empty) - wx.PostEvent(self.mainFrame, FitSelected(fitID=self.fits[0])) - - # set mouse state to pass to FitSpawner via event - mstate = wx.GetMouseState() - mstate.SetMiddleDown(True) - - # open the rest of the fits with an mstate override (to open in new tabs) - for fitID in self.fits[1:]: - wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID, mstate=mstate)) + # `startup` tells FitSpawner that we are loading fits are startup, and + # has 3 values: + # False = Set as default in FitSpawner itself, never set here + # 1 = Create new fit page, but do not calculate page + # 2 = Create new page and calculate + # We use 1 for all fits except the last one where we use 2 so that we + # have correct calculations displayed at startup + for fitID in self.fits[:-1]: + wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID, startup=1)) + wx.PostEvent(self.mainFrame, FitSelected(fitID=self.fits[-1], startup=2)) wx.CallAfter(self.callback) class MainFrame(wx.Frame): @@ -185,9 +185,7 @@ class MainFrame(wx.Frame): #Show ourselves self.Show() - self.prevOpenFits = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False,"pyfaOpenFits": []}) - if self.prevOpenFits['enabled']: - self.LoadPreviousOpenFits() + self.LoadPreviousOpenFits() #Check for updates self.sUpdate = service.Update.getInstance() @@ -199,11 +197,18 @@ class MainFrame(wx.Frame): dlg.Destroy() def LoadPreviousOpenFits(self): + self.prevOpenFits = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False, "pyfaOpenFits": []}) fits = self.prevOpenFits['pyfaOpenFits'] - if len(fits) > 0: - self.waitDialog = animUtils.WaitDialog(self, title = "Opening previous fits") - thread = OpenFitsThread(fits, self.closeWaitDialog) - self.waitDialog.ShowModal() + + if not self.prevOpenFits['enabled'] or len(fits) is 0: + # add blank page if there are no fits to be loaded + self.fitMultiSwitch.AddPage() + return + + self.waitDialog = animUtils.WaitDialog(self, title="Opening previous fits") + OpenFitsThread(fits, self.closeWaitDialog) + self.waitDialog.ShowModal() + def LoadMainFrameAttribs(self): mainFrameDefaultAttribs = {"wnd_width":1000, "wnd_height": 700, "wnd_maximized": False} diff --git a/gui/multiSwitch.py b/gui/multiSwitch.py index dd37e9d56..91532785d 100644 --- a/gui/multiSwitch.py +++ b/gui/multiSwitch.py @@ -17,14 +17,14 @@ # along with pyfa. If not, see . #=============================================================================== -import wx import gui.chromeTabs import gui.builtinViews.emptyView + class MultiSwitch(gui.chromeTabs.PFNotebook): def __init__(self, parent): gui.chromeTabs.PFNotebook.__init__(self, parent) - self.AddPage() + #self.AddPage() # now handled by mainFrame self.handlers = handlers = [] for type in TabSpawner.tabTypes: handlers.append(type(self)) @@ -35,21 +35,22 @@ class MultiSwitch(gui.chromeTabs.PFNotebook): if h: h(type, info) - def AddPage(self, tabWnd=None, tabTitle="Empty Tab", tabImage=None): + def AddPage(self, tabWnd=None, tabTitle="Empty Tab", tabImage=None): if tabWnd is None: tabWnd = gui.builtinViews.emptyView.BlankPage(self) tabWnd.handleDrag = lambda type, info: self.handleDrag(type, info) gui.chromeTabs.PFNotebook.AddPage(self, tabWnd, tabTitle, tabImage, True) - def DeletePage(self, n, *args, **kwargs): gui.chromeTabs.PFNotebook.DeletePage(self, n, *args, **kwargs) if self.GetPageCount() == 0: self.AddPage() + class TabSpawner(object): tabTypes = [] + @classmethod def register(cls): TabSpawner.tabTypes.append(cls)