chiark / gitweb /
Check for modified files and ask the user to reload if the file is changed.
authordaid303 <daid303@gmail.com>
Thu, 13 Dec 2012 08:52:25 +0000 (09:52 +0100)
committerdaid303 <daid303@gmail.com>
Thu, 13 Dec 2012 08:52:25 +0000 (09:52 +0100)
Cura/gui/preview3d.py
Cura/gui/sliceProgessPanel.py

index c55f8483eced56044d3edf89f9612123f437fc2e..996d97348ee9b772e216797eb563a69db06baa5c 100644 (file)
@@ -145,6 +145,10 @@ class previewPanel(wx.Panel):
                sizer.Add(self.glCanvas, 1, flag=wx.EXPAND)
                sizer.Add(self.toolbar2, 0, flag=wx.EXPAND|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=1)
                self.SetSizer(sizer)
+               
+               self.checkReloadFileTimer = wx.Timer(self)
+               self.Bind(wx.EVT_TIMER, self.OnCheckReloadFile, self.checkReloadFileTimer)
+               self.checkReloadFileTimer.Start(1000)
        
        def returnToModelViewAndUpdateModel(self):
                if self.glCanvas.viewMode == 'GCode' or self.glCanvas.viewMode == 'Mixed':
@@ -272,18 +276,32 @@ class previewPanel(wx.Panel):
                        if profile.getProfileSettingFloat('model_scale') != 1.0 or profile.getProfileSettingFloat('model_rotate_base') != 0 or profile.getProfileSetting('flip_x') != 'False' or profile.getProfileSetting('flip_y') != 'False' or profile.getProfileSetting('flip_z') != 'False' or profile.getProfileSetting('swap_xz') != 'False' or profile.getProfileSetting('swap_yz') != 'False' or len(profile.getPluginConfig()) > 0:
                                self.ShowWarningPopup('Reset scale, rotation, mirror and plugins?', self.OnResetAll)
        
-       def loadReModelFiles(self, filelist):
-               #Only load this again if the filename matches the file we have already loaded (for auto loading GCode after slicing)
-               for idx in xrange(0, len(filelist)):
-                       if self.objectList[idx].filename != filelist[idx]:
-                               return False
+       def OnCheckReloadFile(self, e):
+               #Only show the reload popup when the window has focus, because the popup goes over other programs.
+               if self.GetParent().FindFocus() is None:
+                       return
+               for obj in self.objectList:
+                       if obj.filename != None and os.path.isfile(obj.filename) and obj.fileTime != os.stat(obj.filename).st_mtime:
+                               self.checkReloadFileTimer.Stop()
+                               self.ShowWarningPopup('File changed, reload?', self.reloadModelFiles)
+       
+       def reloadModelFiles(self, filelist = None):
+               if filelist is not None:
+                       #Only load this again if the filename matches the file we have already loaded (for auto loading GCode after slicing)
+                       for idx in xrange(0, len(filelist)):
+                               if self.objectList[idx].filename != filelist[idx]:
+                                       return False
+               else:
+                       filelist = []
+                       for idx in xrange(0, len(self.objectList)):
+                               filelist.append(self.objectList[idx].filename)
                self.loadModelFiles(filelist)
                return True
        
        def doFileLoadThread(self):
                for obj in self.objectList:
                        if obj.filename != None and os.path.isfile(obj.filename) and obj.fileTime != os.stat(obj.filename).st_mtime:
-                               obj.ileTime = os.stat(obj.filename).st_mtime
+                               obj.fileTime = os.stat(obj.filename).st_mtime
                                mesh = meshLoader.loadMesh(obj.filename)
                                obj.dirty = False
                                obj.mesh = mesh
@@ -319,6 +337,7 @@ class previewPanel(wx.Panel):
                        wx.CallAfter(self.glCanvas.Refresh)
                elif not os.path.isfile(self.gcodeFilename):
                        self.gcode = None
+               wx.CallAfter(self.checkReloadFileTimer.Start, 1000)
        
        def loadProgress(self, progress):
                pass
index 5669534c0ea8dc62f51cf480b470e17c721367fd..5cb01f2dff0c2767545c18aa252ffbfc525cd904 100644 (file)
@@ -142,7 +142,7 @@ class sliceProgessPanel(wx.Panel):
                self.sizer.Layout()
                self.Layout()
                self.abort = True
-               if self.mainWindow.preview3d.loadReModelFiles(self.filelist):
+               if self.mainWindow.preview3d.reloadModelFiles(self.filelist):
                        self.mainWindow.preview3d.setViewMode("GCode")
                taskbar.setBusy(self.GetParent(), False)