Make a single entry point for the GUI interface, as Cura.gui.app

master
daid303 2012-12-10 11:38:30 +01:00
parent 98ef38eb46
commit 00c2b1ed66
6 changed files with 66 additions and 93 deletions

View 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()

61
Cura/gui/app.py Normal file
View File

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

View 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()

View 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())

View 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()

View 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()