chiark / gitweb /
Add pause button to printing interface, and auto pause when M0 or M1 is hit.
authorDaid <daid303@gmail.com>
Wed, 27 Jun 2012 18:23:01 +0000 (20:23 +0200)
committerDaid <daid303@gmail.com>
Wed, 27 Jun 2012 18:23:01 +0000 (20:23 +0200)
Cura/gui/printWindow.py

index 8ec0a4f23888dd4f7772e034f58578e971444a5c..e6f804cd7fb4af0d7e7603ec8e536c3d3b8f1787 100644 (file)
@@ -68,6 +68,7 @@ class PrintCommandButton(buttons.GenBitmapButton):
        def OnClick(self, e):\r
                self.parent.sendCommand("G91")\r
                self.parent.sendCommand(self.command)\r
+               self.parent.sendCommand("G90")\r
                e.Skip()\r
 \r
 class printWindow(wx.Frame):\r
@@ -89,6 +90,7 @@ class printWindow(wx.Frame):
                self.feedrateRatioInnerWall = 1.0\r
                self.feedrateRatioFill = 1.0\r
                self.feedrateRatioSupport = 1.0\r
+               self.pause = False\r
 \r
                #self.SetIcon(icon.getMainIcon())\r
                \r
@@ -103,22 +105,24 @@ class printWindow(wx.Frame):
                self.statsText = wx.StaticText(self.panel, -1, "Filament: ####.##m #.##g\nPrint time: #####:##")\r
                boxsizer.Add(self.statsText, flag=wx.LEFT, border=5)\r
                \r
-               self.sizer.Add(boxsizer, pos=(0,0), span=(4,1), flag=wx.EXPAND)\r
+               self.sizer.Add(boxsizer, pos=(0,0), span=(5,1), flag=wx.EXPAND)\r
                \r
                self.connectButton = wx.Button(self.panel, -1, 'Connect')\r
                #self.loadButton = wx.Button(self.panel, -1, 'Load GCode')\r
                self.printButton = wx.Button(self.panel, -1, 'Print GCode')\r
+               self.pauseButton = wx.Button(self.panel, -1, 'Pause')\r
                self.cancelButton = wx.Button(self.panel, -1, 'Cancel print')\r
                self.progress = wx.Gauge(self.panel, -1)\r
                \r
                self.sizer.Add(self.connectButton, pos=(0,1))\r
                #self.sizer.Add(self.loadButton, pos=(1,1))\r
                self.sizer.Add(self.printButton, pos=(2,1))\r
-               self.sizer.Add(self.cancelButton, pos=(3,1))\r
-               self.sizer.Add(self.progress, pos=(4,0), span=(1,2), flag=wx.EXPAND)\r
+               self.sizer.Add(self.pauseButton, pos=(3,1))\r
+               self.sizer.Add(self.cancelButton, pos=(4,1))\r
+               self.sizer.Add(self.progress, pos=(5,0), span=(1,2), flag=wx.EXPAND)\r
 \r
                nb = wx.Notebook(self.panel)\r
-               self.sizer.Add(nb, pos=(0,3), span=(6,4))\r
+               self.sizer.Add(nb, pos=(0,3), span=(7,4))\r
                \r
                self.temperaturePanel = wx.Panel(nb)\r
                sizer = wx.GridBagSizer(2, 2)\r
@@ -208,6 +212,7 @@ class printWindow(wx.Frame):
                self.connectButton.Bind(wx.EVT_BUTTON, self.OnConnect)\r
                #self.loadButton.Bind(wx.EVT_BUTTON, self.OnLoad)\r
                self.printButton.Bind(wx.EVT_BUTTON, self.OnPrint)\r
+               self.pauseButton.Bind(wx.EVT_BUTTON, self.OnPause)\r
                self.cancelButton.Bind(wx.EVT_BUTTON, self.OnCancel)\r
                \r
                self.Bind(wx.EVT_SPINCTRL, self.OnTempChange, self.temperatureSelect)\r
@@ -229,8 +234,10 @@ class printWindow(wx.Frame):
                self.connectButton.Enable(not self.machineConnected)\r
                #self.loadButton.Enable(self.printIdx == None)\r
                self.printButton.Enable(self.machineConnected and self.gcodeList != None and self.printIdx == None)\r
+               self.pauseButton.Enable(self.printIdx != None)\r
                self.cancelButton.Enable(self.printIdx != None)\r
                self.temperatureSelect.Enable(self.machineConnected)\r
+               self.bedTemperatureSelect.Enable(self.machineConnected)\r
                self.directControlPanel.Enable(self.machineConnected)\r
        \r
        def UpdateProgress(self):\r
@@ -284,9 +291,21 @@ class printWindow(wx.Frame):
        \r
        def OnCancel(self, e):\r
                self.printIdx = None\r
+               self.pause = False\r
+               self.pauseButton.SetLabel('Pause')\r
                self.sendCommand("M84")\r
                self.UpdateButtonStates()\r
        \r
+       def OnPause(self, e):\r
+               if self.pause:\r
+                       self.pause = False\r
+                       self.sendLine(self.printIdx)\r
+                       self.printIdx += 1\r
+                       self.pauseButton.SetLabel('Pause')\r
+               else:\r
+                       self.pause = True\r
+                       self.pauseButton.SetLabel('Resume')\r
+       \r
        def OnClose(self, e):\r
                global printWindowHandle\r
                printWindowHandle = None\r
@@ -335,7 +354,7 @@ class printWindow(wx.Frame):
                \r
        def sendCommand(self, cmd):\r
                if self.machineConnected:\r
-                       if self.printIdx == None:\r
+                       if self.printIdx == None or self.pause:\r
                                self.machineCom.sendCommand(cmd)\r
                        else:\r
                                self.sendList.append(cmd)\r
@@ -354,6 +373,8 @@ class printWindow(wx.Frame):
                        line = re.sub('F([0-9]*)', lambda m: 'F' + str(int(int(m.group(1)) * self.feedrateRatioSupport)), line)\r
                checksum = reduce(lambda x,y:x^y, map(ord, "N%d%s" % (lineNr, line)))\r
                self.machineCom.sendCommand("N%d%s*%d" % (lineNr, line, checksum))\r
+               if line == 'M0' or line == 'M1':\r
+                       self.OnPause(None)\r
                return True\r
 \r
        def PrinterMonitor(self):\r
@@ -364,7 +385,7 @@ class printWindow(wx.Frame):
                                wx.CallAfter(self.UpdateButtonStates)\r
                                return\r
                        if self.machineConnected:\r
-                               while self.sendCnt > 0:\r
+                               while self.sendCnt > 0 and not self.pause:\r
                                        self.sendLine(self.printIdx)\r
                                        self.printIdx += 1\r
                                        self.sendCnt -= 1\r
@@ -376,13 +397,15 @@ class printWindow(wx.Frame):
                                if 'B:' in line:\r
                                        self.bedTemp = float(re.search("[0-9\.]*", line.split('B:')[1]).group(0))\r
                                wx.CallAfter(self.UpdateProgress)\r
-                       if self.printIdx == None:\r
-                               if line == '':  #When we have a communication "timeout" and we're not sending gcode, then read the temperature.\r
+                       if line == '':  #When we have a communication "timeout" and we're not sending gcode, then read the temperature.\r
+                               if self.printIdx == None or self.pause:\r
                                        self.machineCom.sendCommand("M105")\r
-                       else:\r
+                       if self.printIdx != None:\r
                                if line.startswith("ok"):\r
                                        if len(self.sendList) > 0:\r
                                                self.machineCom.sendCommand(self.sendList.pop(0))\r
+                                       elif self.pause:\r
+                                               self.sendCnt += 1\r
                                        else:\r
                                                if self.sendLine(self.printIdx):\r
                                                        self.printIdx += 1\r