Improves on fit loading on startup by only calculating the last fit that is opened.

Issue with FittingView.MakeSnapshot() need an exception catch.
This commit is contained in:
blitzmann
2014-05-25 02:55:28 -04:00
parent 2d82eb7c92
commit a1416e6bec
3 changed files with 44 additions and 31 deletions

View File

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

View File

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

View File

@@ -17,14 +17,14 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
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)