chiark / gitweb /
Make the print button functional.
authordaid303 <daid303@gmail.com>
Fri, 29 Mar 2013 13:49:56 +0000 (14:49 +0100)
committerdaid303 <daid303@gmail.com>
Fri, 29 Mar 2013 13:49:56 +0000 (14:49 +0100)
Cura/gui/printWindow.py
Cura/gui/sceneView.py
Cura/util/machineCom.py

index 45c650791d271cbd4910ebfafe49679e1a78cdf3..52d4d90132a6faf9af0544d6b5bb9d11aaab8a01 100644 (file)
@@ -511,12 +511,12 @@ class printWindow(wx.Frame):
        def OnTermKey(self, e):
                if len(self.termHistory) > 0:
                        if e.GetKeyCode() == wx.WXK_UP:
        def OnTermKey(self, e):
                if len(self.termHistory) > 0:
                        if e.GetKeyCode() == wx.WXK_UP:
-                               self.termHistoryIdx = self.termHistoryIdx - 1
+                               self.termHistoryIdx -= 1
                                if self.termHistoryIdx < 0:
                                        self.termHistoryIdx = len(self.termHistory) - 1
                                self.termInput.SetValue(self.termHistory[self.termHistoryIdx])
                        if e.GetKeyCode() == wx.WXK_DOWN:
                                if self.termHistoryIdx < 0:
                                        self.termHistoryIdx = len(self.termHistory) - 1
                                self.termInput.SetValue(self.termHistory[self.termHistoryIdx])
                        if e.GetKeyCode() == wx.WXK_DOWN:
-                               self.termHistoryIdx = self.termHistoryIdx - 1
+                               self.termHistoryIdx -= 1
                                if self.termHistoryIdx >= len(self.termHistory):
                                        self.termHistoryIdx = 0
                                self.termInput.SetValue(self.termHistory[self.termHistoryIdx])
                                if self.termHistoryIdx >= len(self.termHistory):
                                        self.termHistoryIdx = 0
                                self.termInput.SetValue(self.termHistory[self.termHistoryIdx])
index b7190752d7b2d172e90bb25fe60d03bae0b460eb..933737a7b10365d22b2f262b0c370a9a76c88578 100644 (file)
@@ -10,11 +10,13 @@ OpenGL.ERROR_CHECKING = False
 from OpenGL.GLU import *
 from OpenGL.GL import *
 
 from OpenGL.GLU import *
 from OpenGL.GL import *
 
+from Cura.gui import printWindow
 from Cura.util import profile
 from Cura.util import meshLoader
 from Cura.util import objectScene
 from Cura.util import resources
 from Cura.util import sliceEngine
 from Cura.util import profile
 from Cura.util import meshLoader
 from Cura.util import objectScene
 from Cura.util import resources
 from Cura.util import sliceEngine
+from Cura.util import machineCom
 from Cura.gui.util import opengl
 from Cura.gui.util import openglGui
 
 from Cura.gui.util import opengl
 from Cura.gui.util import openglGui
 
@@ -59,14 +61,15 @@ class SceneView(openglGui.glGuiPanel):
                self._platformMesh = meshLoader.loadMeshes(resources.getPathForMesh('ultimaker_platform.stl'))[0]
                self._platformMesh._drawOffset = numpy.array([0,0,0.5], numpy.float32)
                self._isSimpleMode = True
                self._platformMesh = meshLoader.loadMeshes(resources.getPathForMesh('ultimaker_platform.stl'))[0]
                self._platformMesh._drawOffset = numpy.array([0,0,0.5], numpy.float32)
                self._isSimpleMode = True
-               self._slicer = sliceEngine.Slicer(self._updateSliceProgress)
-               self._sceneUpdateTimer = wx.Timer(self)
-               self.Bind(wx.EVT_TIMER, lambda e : self._slicer.runSlicer(self._scene), self._sceneUpdateTimer)
 
                self.openFileButton      = openglGui.glButton(self, 4, 'Load', (0,0), self.ShowLoadModel)
                self.printButton         = openglGui.glButton(self, 6, 'Print', (1,0), self.ShowPrintWindow)
                self.printButton.setDisabled(True)
 
 
                self.openFileButton      = openglGui.glButton(self, 4, 'Load', (0,0), self.ShowLoadModel)
                self.printButton         = openglGui.glButton(self, 6, 'Print', (1,0), self.ShowPrintWindow)
                self.printButton.setDisabled(True)
 
+               self._slicer = sliceEngine.Slicer(self._updateSliceProgress)
+               self._sceneUpdateTimer = wx.Timer(self)
+               self.Bind(wx.EVT_TIMER, lambda e : self._slicer.runSlicer(self._scene), self._sceneUpdateTimer)
+
                self.updateProfileToControls()
                wx.EVT_IDLE(self, self.OnIdle)
 
                self.updateProfileToControls()
                wx.EVT_IDLE(self, self.OnIdle)
 
@@ -85,7 +88,8 @@ class SceneView(openglGui.glGuiPanel):
                self.loadScene([filename])
 
        def ShowPrintWindow(self):
                self.loadScene([filename])
 
        def ShowPrintWindow(self):
-               pass
+               if machineCom.machineIsConnected():
+                       printWindow.printFile(self._slicer.getGCodeFilename())
 
        def OnIdle(self, e):
                if self._animView is not None or self._animZoom is not None:
 
        def OnIdle(self, e):
                if self._animView is not None or self._animZoom is not None:
@@ -184,6 +188,8 @@ class SceneView(openglGui.glGuiPanel):
                                        self.Refresh()
 
        def OnMouseUp(self, e):
                                        self.Refresh()
 
        def OnMouseUp(self, e):
+               if e.LeftIsDown() or e.MiddleIsDown() or e.RightIsDown():
+                       return
                if self._mouseState == 'dragOrClick':
                        if e.Button == 1:
                                if self._focusObj is not None:
                if self._mouseState == 'dragOrClick':
                        if e.Button == 1:
                                if self._focusObj is not None:
@@ -191,6 +197,12 @@ class SceneView(openglGui.glGuiPanel):
                                else:
                                        self._selectedObj = None
                                        self.Refresh()
                                else:
                                        self._selectedObj = None
                                        self.Refresh()
+                       if e.Button == 3 and self._selectedObj == self._focusObj:
+                               #menu = wx.Menu()
+                               #menu.Append(-1, 'Test')
+                               #self.PopupMenu(menu)
+                               #menu.Destroy()
+                               pass
                if self._mouseState == 'dragObject' and self._selectedObj is not None:
                        self._scene.pushFree()
                        self.sceneUpdated()
                if self._mouseState == 'dragObject' and self._selectedObj is not None:
                        self._scene.pushFree()
                        self.sceneUpdated()
@@ -261,6 +273,8 @@ class SceneView(openglGui.glGuiPanel):
                glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
 
        def OnPaint(self,e):
                glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
 
        def OnPaint(self,e):
+               self.printButton._imageID = 6 if machineCom.machineIsConnected() else 2
+
                if self._animView is not None:
                        self._viewTarget = self._animView.getPosition()
                        if self._animView.isDone():
                if self._animView is not None:
                        self._viewTarget = self._animView.getPosition()
                        if self._animView.isDone():
index 642c6a8e9456b9d207bae490093aa9e54ebf5af1..9cefa3ed491ea7d02aecb2e64be69d8473563fee 100644 (file)
@@ -8,6 +8,7 @@ import math
 import re
 import traceback
 import threading
 import re
 import traceback
 import threading
+import platform
 import Queue as queue
 
 import serial
 import Queue as queue
 
 import serial
@@ -25,14 +26,14 @@ except:
 
 def serialList(forAutoDetect=False):
        baselist=[]
 
 def serialList(forAutoDetect=False):
        baselist=[]
-       if os.name=="nt":
+       if platform.system() == "Windows":
                try:
                        key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM")
                        i=0
                        while True:
                                values = _winreg.EnumValue(key, i)
                                if not forAutoDetect or 'USBSER' in values[0]:
                try:
                        key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM")
                        i=0
                        while True:
                                values = _winreg.EnumValue(key, i)
                                if not forAutoDetect or 'USBSER' in values[0]:
-                                       baselist+=[_winreg.EnumValue(key,i)[1]]
+                                       baselist+=[values[1]]
                                i+=1
                except:
                        pass
                                i+=1
                except:
                        pass
@@ -45,10 +46,18 @@ def serialList(forAutoDetect=False):
        if prev in baselist:
                baselist.remove(prev)
                baselist.insert(0, prev)
        if prev in baselist:
                baselist.remove(prev)
                baselist.insert(0, prev)
-       if version.isDevVersion():
+       if version.isDevVersion() and not forAutoDetect:
                baselist.append('VIRTUAL')
        return baselist
 
                baselist.append('VIRTUAL')
        return baselist
 
+def machineIsConnected():
+       port = profile.getPreference('serial_port')
+       if port == 'AUTO':
+               return len(serialList(True)) > 0
+       if platform.system() == "Windows":
+               return port in serialList(True)
+       return os.path.isfile(port)
+
 def baudrateList():
        ret = [250000, 230400, 115200, 57600, 38400, 19200, 9600]
        if profile.getPreference('serial_baud_auto') != '':
 def baudrateList():
        ret = [250000, 230400, 115200, 57600, 38400, 19200, 9600]
        if profile.getPreference('serial_baud_auto') != '':
@@ -143,14 +152,14 @@ class MachineCom(object):
        STATE_CLOSED_WITH_ERROR = 10
        
        def __init__(self, port = None, baudrate = None, callbackObject = None):
        STATE_CLOSED_WITH_ERROR = 10
        
        def __init__(self, port = None, baudrate = None, callbackObject = None):
-               if port == None:
+               if port is None:
                        port = profile.getPreference('serial_port')
                        port = profile.getPreference('serial_port')
-               if baudrate == None:
+               if baudrate is None:
                        if profile.getPreference('serial_baud') == 'AUTO':
                                baudrate = 0
                        else:
                                baudrate = int(profile.getPreference('serial_baud'))
                        if profile.getPreference('serial_baud') == 'AUTO':
                                baudrate = 0
                        else:
                                baudrate = int(profile.getPreference('serial_baud'))
-               if callbackObject == None:
+               if callbackObject is None:
                        callbackObject = MachineComPrintCallback()
 
                self._port = port
                        callbackObject = MachineComPrintCallback()
 
                self._port = port
@@ -533,7 +542,7 @@ class MachineCom(object):
                self._printSection = 'CUSTOM'
                self._changeState(self.STATE_PRINTING)
                self._printStartTime = time.time()
                self._printSection = 'CUSTOM'
                self._changeState(self.STATE_PRINTING)
                self._printStartTime = time.time()
-               for i in xrange(0, 6):
+               for i in xrange(0, 4):
                        self._sendNext()
        
        def cancelPrint(self):
                        self._sendNext()
        
        def cancelPrint(self):