+ #self.UpdateProgress()
+ self._thread = threading.Thread(target=self._stdinMonitor)
+ self._thread.daemon = True
+ self._thread.start()
+
+ if webcam.hasWebcamSupport():
+ #Need to call the camera class on the GUI thread, or else it won't work. Shame as it hangs the GUI for about 2 seconds.
+ wx.CallAfter(self._webcamCheck)
+
+ def _stdinMonitor(self):
+ while True:
+ line = sys.stdin.readline().rstrip()
+ if line.startswith('LOAD:'):
+ if not self.LoadGCodeFile(line[5:]):
+ print 'LOADFAILED\n'
+
+ def _webcamCheck(self):
+ self.cam = webcam.webcam()
+ if self.cam.hasCamera():
+ self.camPage = wx.Panel(self.tabs)
+ sizer = wx.GridBagSizer(2, 2)
+ self.camPage.SetSizer(sizer)
+
+ self.timelapsEnable = wx.CheckBox(self.camPage, -1, _("Enable timelapse movie recording"))
+ self.timelapsSavePath = wx.TextCtrl(self.camPage, -1, os.path.expanduser('~/timelaps_' + datetime.datetime.now().strftime('%Y-%m-%d_%H-%M') + '.mpg'))
+ sizer.Add(self.timelapsEnable, pos=(0, 0), span=(1, 2), flag=wx.EXPAND)
+ sizer.Add(self.timelapsSavePath, pos=(1, 0), span=(1, 2), flag=wx.EXPAND)
+
+ pages = self.cam.propertyPages()
+ self.cam.buttons = [self.timelapsEnable, self.timelapsSavePath]
+ for page in pages:
+ button = wx.Button(self.camPage, -1, page)
+ button.index = pages.index(page)
+ sizer.Add(button, pos=(2, pages.index(page)))
+ button.Bind(wx.EVT_BUTTON, self.OnPropertyPageButton)
+ self.cam.buttons.append(button)
+
+ self.campreviewEnable = wx.CheckBox(self.camPage, -1, _("Show preview"))
+ sizer.Add(self.campreviewEnable, pos=(3, 0), span=(1, 2), flag=wx.EXPAND)
+
+ self.camPreview = wx.Panel(self.camPage)
+ sizer.Add(self.camPreview, pos=(4, 0), span=(1, 2), flag=wx.EXPAND)
+
+ self.tabs.AddPage(self.camPage, _("Camera"))
+ self.camPreview.timer = wx.Timer(self)
+ self.Bind(wx.EVT_TIMER, self.OnCameraTimer, self.camPreview.timer)
+ self.camPreview.timer.Start(500)
+ self.camPreview.Bind(wx.EVT_ERASE_BACKGROUND, self.OnCameraEraseBackground)
+ else:
+ self.cam = None