chiark / gitweb /
Make a single entry point for the GUI interface, as Cura.gui.app
authordaid303 <daid303@gmail.com>
Mon, 10 Dec 2012 10:38:30 +0000 (11:38 +0100)
committerdaid303 <daid303@gmail.com>
Mon, 10 Dec 2012 10:38:30 +0000 (11:38 +0100)
Cura/cura.py
Cura/gui/app.py [new file with mode: 0644]
Cura/gui/flatSlicerWindow.py
Cura/gui/mainWindow.py
Cura/gui/projectPlanner.py
Cura/gui/splashScreen.py

index fec91bfe58cc911a9a0769aa2e09b685fe951fbe..b38495f7b888d9c4437f961ba08a7b78e223bd77 100644 (file)
@@ -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] <filename>.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 (file)
index 0000000..cd7a2e8
--- /dev/null
@@ -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()
index 6a8c4cd0d32aa01cb4da690143bd52b3689757a7..3b567a388c793e6704dcedbe71c52c1047039019 100644 (file)
@@ -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()
-
index 7a5030b52cc3568c205997b1a9c21e4dbb5c5791..cdaccdc820fa0ce73c1ab29f1ec97a8b5cb90510 100644 (file)
@@ -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())
index ab0fe4926be92dc355b101e0d68015d7485e338f..0025a2fc3e03d69d3ed3301649a45b41e3d19474 100644 (file)
@@ -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()
index 544fb28c286cb4889ec4eef45e7a29ebf99549ee..1a70907c3bd7fe64d8f655948ff288f993fba302 100644 (file)
@@ -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()