diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index 89e5018cc..96101be72 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -49,13 +49,13 @@ class FitSpawner(gui.multiSwitch.TabSpawner): for index, page in enumerate(self.multiSwitch.pages): try: if page.activeFitID == event.fitID: - count +=1 + count += 1 self.multiSwitch.SetSelection(index) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=event.fitID)) break except: pass - if count <0: + if count < 0: mstate = getattr(event, "mstate", wx.GetMouseState()) if mstate.CmdDown() or mstate.MiddleDown(): diff --git a/gui/mainFrame.py b/gui/mainFrame.py index da83bbbd0..9625df43e 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -22,12 +22,14 @@ import os.path import sqlalchemy import wx +import time from wx._core import PyDeadObjectError from wx.lib.wordwrap import wordwrap import service import config +import threading import gui.aboutData import gui.chromeTabs @@ -64,6 +66,30 @@ class PFPanel(wx.Panel): def OnBkErase(self, event): pass +class OpenFitsThread(threading.Thread): + def __init__(self, fits, callback): + threading.Thread.__init__(self) + self.mainFrame = MainFrame.getInstance() + self.callback = callback + self.fits = fits + self.start() + + 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)) + + wx.CallAfter(self.callback) + class MainFrame(wx.Frame): __instance = None @classmethod @@ -154,16 +180,15 @@ class MainFrame(wx.Frame): self.statsWnds = [] self.activeStatsWnd = None - self.Bind(wx.EVT_CLOSE, self.OnClose) + #Show ourselves + self.Show() + self.prevOpenFits = service.SettingsProvider.getInstance().getSettings("pyfaPrevOpenFits", {"enabled": False,"pyfaOpenFits": []}) if self.prevOpenFits['enabled']: self.LoadPreviousOpenFits() - #Show ourselves - self.Show() - #Check for updates self.sUpdate = service.Update.getInstance() self.sUpdate.CheckUpdate(self.ShowUpdateBox) @@ -175,18 +200,10 @@ class MainFrame(wx.Frame): def LoadPreviousOpenFits(self): fits = self.prevOpenFits['pyfaOpenFits'] - if len(fits) > 0: - # open first fit in same tab (which should be empty) - wx.PostEvent(self, FitSelected(fitID=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 fits[1:]: - wx.PostEvent(self, FitSelected(fitID=fitID, mstate=mstate)) + self.waitDialog = animUtils.WaitDialog(self, title = "Opening previous fits") + thread = OpenFitsThread(fits, self.closeWaitDialog) + self.waitDialog.ShowModal() def LoadMainFrameAttribs(self): mainFrameDefaultAttribs = {"wnd_width":1000, "wnd_height": 700, "wnd_maximized": False}