From 00c2b1ed6619cf7fd276b30296b9b55a0842e6b5 Mon Sep 17 00:00:00 2001 From: daid303 Date: Mon, 10 Dec 2012 11:38:30 +0100 Subject: [PATCH] Make a single entry point for the GUI interface, as Cura.gui.app --- Cura/cura.py | 40 +++-------------------- Cura/gui/app.py | 61 ++++++++++++++++++++++++++++++++++++ Cura/gui/flatSlicerWindow.py | 9 ------ Cura/gui/mainWindow.py | 16 ---------- Cura/gui/projectPlanner.py | 8 ----- Cura/gui/splashScreen.py | 25 +-------------- 6 files changed, 66 insertions(+), 93 deletions(-) create mode 100644 Cura/gui/app.py diff --git a/Cura/cura.py b/Cura/cura.py index fec91bfe..b38495f7 100644 --- a/Cura/cura.py +++ b/Cura/cura.py @@ -10,8 +10,6 @@ The slicing code is the same as Skeinforge. But the UI has been revamped to be.. """ from __future__ import absolute_import -import sys -import warnings from optparse import OptionParser from Cura.util import profile @@ -48,10 +46,6 @@ def main(): parser = OptionParser(usage="usage: %prog [options] .stl") parser.add_option("-i", "--ini", action="store", type="string", dest="profileini", help="Load settings from a profile ini file") - parser.add_option("-P", "--project", action="store_true", dest="openprojectplanner", - help="Open the project planner") - parser.add_option("-F", "--flat", action="store_true", dest="openflatslicer", - help="Open the 2D SVG slicer (unfinished)") parser.add_option("-r", "--print", action="store", type="string", dest="printfile", help="Open the printing interface, instead of the normal cura interface.") parser.add_option("-p", "--profile", action="store", type="string", dest="profile", @@ -65,45 +59,19 @@ def main(): if options.profileini is not None: profile.loadGlobalProfile(options.profileini) - if options.openprojectplanner is not None: - from Cura.gui import projectPlanner - projectPlanner.main() - elif options.openflatslicer is not None: - from Cura.gui import flatSlicerWindow - flatSlicerWindow.main() - elif options.printfile is not None: + if options.printfile is not None: from Cura.gui import printWindow printWindow.startPrintInterface(options.printfile) elif options.slice is not None: from Cura.util import sliceRun sliceRun.runSlice(args) else: + #Place any unused arguments as last file, so Cura starts with opening those files. if len(args) > 0: profile.putPreference('lastFile', ';'.join(args)) - import wx._core - from Cura.gui import splashScreen - - class CuraApp(wx.App): - def MacOpenFile(self, path): - try: - pass - except Exception as e: - warnings.warn("File at {p} cannot be read: {e}".format(p=path, e=str(e))) - - def mainWindowRunCallback(splash): - from Cura.gui import mainWindow - if splash is not None: - splash.Show(False) - mainWindow.main() - - app = CuraApp(False) - # Apple discourages usage of splash screens on a mac. - if sys.platform.startswith('darwin'): - mainWindowRunCallback(None) - else: - splashScreen.splashScreen(mainWindowRunCallback) - app.MainLoop() + from Cura.gui import app + app.CuraApp().MainLoop() if __name__ == '__main__': main() diff --git a/Cura/gui/app.py b/Cura/gui/app.py new file mode 100644 index 00000000..cd7a2e84 --- /dev/null +++ b/Cura/gui/app.py @@ -0,0 +1,61 @@ +from __future__ import absolute_import + +import sys +import os +import platform +import shutil +import glob +import warnings + +#Only import the _core to save import time +import wx._core + +from Cura.gui import splashScreen +from Cura.util import profile + +class CuraApp(wx.App): + def __init__(self): + if platform.system() == "Windows": + super(CuraApp, self).__init__(redirect = True, filename = 'output.txt') + else: + super(CuraApp, self).__init__(redirect = False) + + self.mainWindow = None + self.splash = None + + if sys.platform.startswith('darwin'): + #Do not show a splashscreen on OSX, as by Apple guidelines + self.afterSplashCallback() + else: + self.splash = splashScreen.splashScreen(self.afterSplashCallback) + + def MacOpenFile(self, path): + try: + self.mainWindow._loadModels([path]) + except Exception as e: + warnings.warn("File at {p} cannot be read: {e}".format(p=path, e=str(e))) + + def afterSplashCallback(self): + #These imports take most of the time and thus should be done after showing the splashscreen + from Cura.gui import mainWindow + from Cura.gui import configWizard + + #If we haven't run it before, run the configuration wizard. + if profile.getPreference('machine_type') == 'unknown': + if platform.system() == "Darwin": + #Check if we need to copy our examples + exampleFile = os.path.expanduser('~/CuraExamples/UltimakerRobot_support.stl') + if not os.path.isfile(exampleFile): + try: + os.makedirs(os.path.dirname(exampleFile)) + except: + pass + for filename in glob.glob(os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'example', '*.*'))): + shutil.copy(filename, os.path.join(os.path.dirname(exampleFile), os.path.basename(filename))) + profile.putPreference('lastFile', exampleFile) + configWizard.configWizard() + + #Hide the splashscreen before showing the main window. + if self.splash is not None: + self.splash.Show(False) + self.mainWindow = mainWindow.mainWindow() diff --git a/Cura/gui/flatSlicerWindow.py b/Cura/gui/flatSlicerWindow.py index 6a8c4cd0..3b567a38 100644 --- a/Cura/gui/flatSlicerWindow.py +++ b/Cura/gui/flatSlicerWindow.py @@ -186,12 +186,3 @@ class PreviewGLCanvas(glcanvas.GLCanvas): glEnd() glFlush() - -def main(): - app = wx.App(False) - flatSlicerWindow().Show(True) - app.MainLoop() - -if __name__ == '__main__': - main() - diff --git a/Cura/gui/mainWindow.py b/Cura/gui/mainWindow.py index 7a5030b5..cdaccdc8 100644 --- a/Cura/gui/mainWindow.py +++ b/Cura/gui/mainWindow.py @@ -28,22 +28,6 @@ from Cura.util import version from Cura.util import sliceRun from Cura.util import meshLoader -def main(): - if profile.getPreference('machine_type') == 'unknown': - if platform.system() == "Darwin": - #Check if we need to copy our examples - exampleFile = os.path.expanduser('~/CuraExamples/UltimakerRobot_support.stl') - if not os.path.isfile(exampleFile): - try: - os.makedirs(os.path.dirname(exampleFile)) - except: - pass - for filename in glob.glob(os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'example', '*.*'))): - shutil.copy(filename, os.path.join(os.path.dirname(exampleFile), os.path.basename(filename))) - profile.putPreference('lastFile', exampleFile) - configWizard.configWizard() - mainWindow() - class mainWindow(wx.Frame): def __init__(self): super(mainWindow, self).__init__(None, title='Cura - ' + version.getVersion()) diff --git a/Cura/gui/projectPlanner.py b/Cura/gui/projectPlanner.py index ab0fe492..0025a2fc 100644 --- a/Cura/gui/projectPlanner.py +++ b/Cura/gui/projectPlanner.py @@ -1150,11 +1150,3 @@ class LogWindow(wx.Frame): self.SetSize((400,300)) self.Centre() self.Show(True) - -def main(): - app = wx.App(False) - projectPlanner().Show(True) - app.MainLoop() - -if __name__ == '__main__': - main() diff --git a/Cura/gui/splashScreen.py b/Cura/gui/splashScreen.py index 544fb28c..1a70907c 100644 --- a/Cura/gui/splashScreen.py +++ b/Cura/gui/splashScreen.py @@ -5,7 +5,6 @@ import wx._core #We only need the core here, which speeds up the import. As we w from Cura.util.resources import getPathForImage - class splashScreen(wx.SplashScreen): def __init__(self, callback): self.callback = callback @@ -14,27 +13,5 @@ class splashScreen(wx.SplashScreen): wx.CallAfter(self.DoCallback) def DoCallback(self): - self.callback(self) + self.callback() self.Destroy() - - -def showSplash(callback): - from Cura.cura import CuraApp - app = CuraApp(False) - splashScreen(callback) - app.MainLoop() - - -def testCallback(splashscreen): - print "Callback!" - import time - - time.sleep(2) - print "!Callback" - - -def main(): - showSplash(testCallback) - -if __name__ == u'__main__': - main() -- 2.30.2