printWindowHandle.Show(True)\r
printWindowHandle.Raise()\r
printWindowHandle.OnConnect(None)\r
- printWindowHandle.LoadGCodeFile(filename)\r
+ t = threading.Thread(target=printWindowHandle.LoadGCodeFile,args=(filename,))\r
+ t.daemon = True\r
+ t.start()\r
app.MainLoop()\r
\r
class printProcessMonitor():\r
self.feedrateRatioFill = 1.0\r
self.feedrateRatioSupport = 1.0\r
self.pause = False\r
+ self.termHistory = []\r
+ self.termHistoryIdx = 0\r
\r
#self.SetIcon(icon.getMainIcon())\r
\r
sizer.Add(wx.StaticText(self.speedPanel, -1, "%"), pos=(3,2))\r
\r
nb.AddPage(self.speedPanel, 'Speed')\r
+ \r
+ self.termPanel = wx.Panel(nb)\r
+ sizer = wx.GridBagSizer(2, 2)\r
+ self.termPanel.SetSizer(sizer)\r
+ \r
+ f = wx.Font(8, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False)\r
+ self.termLog = wx.TextCtrl(self.termPanel, style=wx.TE_MULTILINE|wx.TE_DONTWRAP)\r
+ self.termLog.SetFont(f)\r
+ self.termLog.SetEditable(0)\r
+ self.termInput = wx.TextCtrl(self.termPanel, style=wx.TE_PROCESS_ENTER)\r
+ self.termInput.SetFont(f)\r
+\r
+ sizer.Add(self.termLog, pos=(0,0),flag=wx.EXPAND)\r
+ sizer.Add(self.termInput, pos=(1,0),flag=wx.EXPAND)\r
+ sizer.AddGrowableCol(0)\r
+ sizer.AddGrowableRow(0)\r
+\r
+ nb.AddPage(self.termPanel, 'Term')\r
\r
self.sizer.AddGrowableRow(3)\r
self.sizer.AddGrowableCol(0)\r
self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.innerWallSpeedSelect)\r
self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.fillSpeedSelect)\r
self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.supportSpeedSelect)\r
+ self.Bind(wx.EVT_TEXT_ENTER, self.OnTermEnterLine, self.termInput)\r
+ self.termInput.Bind(wx.EVT_CHAR, self.OnTermKey)\r
\r
self.Layout()\r
self.Fit()\r
\r
def UpdateProgress(self):\r
status = ""\r
- if self.gcode != None:\r
+ if self.gcode == None:\r
+ status += "Loading gcode...\n"\r
+ else:\r
status += "Filament: %.2fm %.2fg\n" % (self.gcode.extrusionAmount / 1000, self.gcode.calculateWeight() * 1000)\r
cost = self.gcode.calculateCost()\r
if cost != False:\r
self.feedrateRatioInnerWall = self.innerWallSpeedSelect.GetValue() / 100.0\r
self.feedrateRatioFill = self.fillSpeedSelect.GetValue() / 100.0\r
self.feedrateRatioSupport = self.supportSpeedSelect.GetValue() / 100.0\r
+ \r
+ def AddTermLog(self, line):\r
+ self.termLog.AppendText(line)\r
+ \r
+ def OnTermEnterLine(self, e):\r
+ line = self.termInput.GetValue()\r
+ if line == '':\r
+ return\r
+ self.termLog.AppendText('>%s\n' % (line))\r
+ self.sendCommand(line)\r
+ self.termHistory.append(line)\r
+ self.termHistoryIdx = len(self.termHistory)\r
+ self.termInput.SetValue('')\r
+\r
+ def OnTermKey(self, e):\r
+ if len(self.termHistory) > 0:\r
+ if e.GetKeyCode() == wx.WXK_UP:\r
+ self.termHistoryIdx = self.termHistoryIdx - 1\r
+ if self.termHistoryIdx < 0:\r
+ self.termHistoryIdx = len(self.termHistory) - 1\r
+ self.termInput.SetValue(self.termHistory[self.termHistoryIdx])\r
+ if e.GetKeyCode() == wx.WXK_DOWN:\r
+ self.termHistoryIdx = self.termHistoryIdx - 1\r
+ if self.termHistoryIdx >= len(self.termHistory):\r
+ self.termHistoryIdx = 0\r
+ self.termInput.SetValue(self.termHistory[self.termHistoryIdx])\r
+ e.Skip()\r
\r
def LoadGCodeFile(self, filename):\r
if self.printIdx != None:\r
gcode = gcodeInterpreter.gcode()\r
gcode.loadList(gcodeList)\r
print "Loaded: %s (%d)" % (filename, len(gcodeList))\r
- self.progress.SetRange(len(gcodeList))\r
self.gcode = gcode\r
self.gcodeList = gcodeList\r
self.typeList = typeList\r
- self.UpdateButtonStates()\r
- self.UpdateProgress()\r
+ \r
+ wx.CallAfter(self.progress.SetRange, len(gcodeList))\r
+ wx.CallAfter(self.UpdateButtonStates)\r
+ wx.CallAfter(self.UpdateProgress)\r
\r
def sendCommand(self, cmd):\r
if self.machineConnected:\r
self.machineConnected = False\r
wx.CallAfter(self.UpdateButtonStates)\r
return\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
if self.machineConnected:\r
while self.sendCnt > 0 and not self.pause:\r
self.sendLine(self.printIdx)\r
self.printIdx += 1\r
self.sendCnt -= 1\r
- elif line.startswith("start"):\r
+ if line.startswith("start"):\r
self.machineConnected = True\r
wx.CallAfter(self.UpdateButtonStates)\r
- if 'T:' in line:\r
+ elif 'T:' in line:\r
self.temp = float(re.search("[0-9\.]*", line.split('T:')[1]).group(0))\r
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 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
+ elif line.strip() != 'ok':\r
+ wx.CallAfter(self.AddTermLog, line)\r
if self.printIdx != None:\r
if line.startswith("ok"):\r
if len(self.sendList) > 0:\r