From 2d82eb7c929d4ba796ec7dc21c415e33a7539e82 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Sat, 24 May 2014 22:20:26 -0400 Subject: [PATCH] Add thread for opening fits on startup, which allows us of wait dialog Wait dialog doesn't actually move as the GUI thread is locked when opening the fits, but at least it shows that -something- is happening. --- gui/builtinViews/fittingView.py | 4 +-- gui/mainFrame.py | 47 ++++++++++++++++++++++----------- 2 files changed, 34 insertions(+), 17 deletions(-) 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}