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.
This commit is contained in:
blitzmann
2014-05-24 22:20:26 -04:00
parent 9a2408741e
commit 2d82eb7c92
2 changed files with 34 additions and 17 deletions

View File

@@ -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():

View File

@@ -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}