\r
from gui import machineCom\r
from gui import icon\r
+from util import gcodeInterpreter\r
\r
printWindowHandle = None\r
\r
def __init__(self):\r
super(printWindow, self).__init__(None, -1, title='Printing')\r
self.machineCom = None\r
+ self.machineConnected = False\r
self.thread = None\r
self.gcodeList = None\r
self.printIdx = None\r
\r
sb = wx.StaticBox(self.panel, label="Statistics")\r
boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)\r
- boxsizer.Add(wx.StaticText(self.panel, -1, "Filament: #.##m #.##g"), flag=wx.LEFT, border=5)\r
- boxsizer.Add(wx.StaticText(self.panel, -1, "Print time: ##:##"), flag=wx.LEFT, border=5)\r
+ 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
\r
self.loadButton = wx.Button(self.panel, -1, 'Load GCode')\r
self.printButton = wx.Button(self.panel, -1, 'Print GCode')\r
self.cancelButton = wx.Button(self.panel, -1, 'Cancel print')\r
+ self.progress = wx.Gauge(self.panel, -1)\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(wx.Gauge(self.panel, -1), pos=(4,0), span=(1,2), flag=wx.EXPAND)\r
+ self.sizer.Add(self.progress, pos=(4,0), span=(1,2), flag=wx.EXPAND)\r
self.sizer.AddGrowableRow(3)\r
self.sizer.AddGrowableCol(0)\r
\r
self.Layout()\r
self.Fit()\r
self.Centre()\r
+ \r
+ self.UpdateButtonStates()\r
+ self.UpdateProgress()\r
+ \r
+ def UpdateButtonStates(self):\r
+ 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.cancelButton.Enable(self.printIdx != None)\r
+ \r
+ def UpdateProgress(self):\r
+ status = ""\r
+ if self.printIdx == None:\r
+ self.progress.SetValue(0)\r
+ else:\r
+ self.progress.SetValue(self.printIdx)\r
+ status += 'Line: %d/%d\n' % (self.printIdx, len(self.gcodeList))\r
+ self.statsText.SetLabel(status)\r
\r
def OnConnect(self, e):\r
if self.machineCom != None:\r
self.machineCom = machineCom.MachineCom()\r
self.thread = threading.Thread(target=self.PrinterMonitor)\r
self.thread.start()\r
+ self.UpdateButtonStates()\r
\r
def OnLoad(self, e):\r
pass\r
\r
def OnPrint(self, e):\r
- if self.machineCom == None:\r
+ if not self.machineConnected:\r
return\r
if self.gcodeList == None:\r
return\r
self.printIdx = 1\r
self.sendLine(0)\r
self.sendCnt = self.bufferLineCount\r
+ self.UpdateButtonStates()\r
\r
def OnCancel(self, e):\r
- pass\r
+ self.printIdx = None\r
+ self.UpdateButtonStates()\r
\r
def OnClose(self, e):\r
global printWindowHandle\r
line = line.strip()\r
if len(line) > 0:\r
gcodeList.append(line)\r
+ gcode = gcodeInterpreter.gcode()\r
+ gcode.loadList(gcodeList)\r
+ print gcode.extrusionAmount\r
+ print gcode.totalMoveTimeMinute\r
print "Loaded: %s (%d)" % (filename, len(gcodeList))\r
+ self.progress.SetRange(len(gcodeList))\r
self.gcodeList = gcodeList\r
+ self.UpdateButtonStates()\r
+ self.UpdateProgress()\r
\r
def sendLine(self, lineNr):\r
if lineNr >= len(self.gcodeList):\r
while True:\r
line = self.machineCom.readline()\r
if line == None:\r
+ self.machineConnected = False\r
+ wx.CallAfter(self.UpdateButtonState)\r
return\r
- while self.sendCnt > 0:\r
- self.sendLine(self.printIdx)\r
- self.printIdx += 1\r
- self.sendCnt -= 1\r
+ if self.machineConnected:\r
+ while self.sendCnt > 0:\r
+ self.sendLine(self.printIdx)\r
+ self.printIdx += 1\r
+ self.sendCnt -= 1\r
+ elif line.startswith("start"):\r
+ self.machineConnected = True\r
+ wx.CallAfter(self.UpdateButtonState)\r
if self.printIdx != None:\r
if line.startswith("ok"):\r
if skipCount > 0:\r
else:\r
self.sendLine(self.printIdx)\r
self.printIdx += 1\r
+ wx.CallAfter(self.UpdateProgress)\r
elif "resend" in line.lower() or "rs" in line:\r
try:\r
lineNr=int(line.replace("N:"," ").replace("N"," ").replace(":"," ").split()[-1])\r
if "rs" in line:\r
lineNr=int(line.split()[1])\r
self.printIdx = lineNr\r
+\r