chiark / gitweb /
Change how the engine is interfaced from the python code. Put the GCode viewer in...
[cura.git] / Cura / gui / app.py
index 681da39eac152b7981b30c5f278e473c3b8609b9..47932c60c5e163b1415a7f1536cd9a15ba8af560 100644 (file)
@@ -23,6 +23,31 @@ class CuraApp(wx.App):
                self.splash = None
                self.loadFiles = files
 
+               if sys.platform.startswith('win'):
+                       #Check for an already running instance, if another instance is running load files in there
+                       from Cura.util import version
+                       from ctypes import windll
+                       import ctypes
+                       import socket
+                       import threading
+
+                       portNr = 0xCA00 + sum(map(ord, version.getVersion(False)))
+                       if len(files) > 0:
+                               try:
+                                       other_hwnd = windll.user32.FindWindowA(None, ctypes.c_char_p('Cura - ' + version.getVersion()))
+                                       if other_hwnd != 0:
+                                               sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+                                               sock.sendto('\0'.join(files), ("127.0.0.1", portNr))
+
+                                               windll.user32.SetForegroundWindow(other_hwnd)
+                                               return
+                               except:
+                                       pass
+
+                       socketListener = threading.Thread(target=self.Win32SocketListener, args=(portNr,))
+                       socketListener.daemon = True
+                       socketListener.start()
+
                if sys.platform.startswith('darwin'):
                        #Do not show a splashscreen on OSX, as by Apple guidelines
                        self.afterSplashCallback()
@@ -36,16 +61,28 @@ class CuraApp(wx.App):
                except Exception as e:
                        warnings.warn("File at {p} cannot be read: {e}".format(p=path, e=str(e)))
 
+       def Win32SocketListener(self, port):
+               import socket
+               try:
+                       sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+                       sock.bind(("127.0.0.1", port))
+                       while True:
+                               data, addr = sock.recvfrom(2048)
+                               self.mainWindow.OnDropFiles(data.split('\0'))
+               except:
+                       pass
+
        def afterSplashCallback(self):
                #These imports take most of the time and thus should be done after showing the splashscreen
                import webbrowser
                from Cura.gui import mainWindow
                from Cura.gui import configWizard
+               from Cura.gui import newVersionDialog
                from Cura.util import profile
                from Cura.util import resources
                from Cura.util import version
 
-               resources.setupLocalization()  # it's important to set up localization at very beginning to install _
+               resources.setupLocalization(profile.getPreference('language'))  # it's important to set up localization at very beginning to install _
 
                #If we do not have preferences yet, try to load it from a previous Cura install
                if profile.getMachineSetting('machine_type') == 'unknown':
@@ -86,11 +123,16 @@ class CuraApp(wx.App):
                                if wx.MessageBox(_("A new version of Cura is available, would you like to download?"), _("New version available"), wx.YES_NO | wx.ICON_INFORMATION) == wx.YES:
                                        webbrowser.open(newVersion)
                                        return
+               if profile.getMachineSetting('machine_name') == '':
+                       return
                self.mainWindow = mainWindow.mainWindow()
                if self.splash is not None:
                        self.splash.Show(False)
                self.mainWindow.Show()
                self.mainWindow.OnDropFiles(self.loadFiles)
+               if profile.getPreference('last_run_version') != version.getVersion(False):
+                       profile.putPreference('last_run_version', version.getVersion(False))
+                       newVersionDialog.newVersionDialog().Show()
 
                setFullScreenCapable(self.mainWindow)