import wx from configtool.page import Page from configtool.data import reFloat class MiscellaneousPage(wx.Panel, Page): def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.font = font self.labels = { "USE_INTERNAL_PULLUPS": "Use Internal Pullups", "BED_LEVELING": "Enable dynamic bed leveling", "Z_AUTODISABLE": "Z Autodisable", "EECONFIG": "Enable EEPROM Storage", "BANG_BANG": "Enable", "BANG_BANG_ON": "On PWM Level:", "BANG_BANG_OFF": "Off PWM Level:", "REPORT_TARGET_TEMPS": "Report Target Temperatures", "MOVEBUFFER_SIZE": "Movebuffer Size:", "DC_EXTRUDER": "Heater:", "DC_EXTRUDER_PWM": "PWM:", "USE_WATCHDOG": "Use the Watchdog Timer", "TH_COUNT": "Temperature History Size:", "FAST_PWM": "Fast PWM", "ENDSTOP_STEPS": "Endstop Steps:", "PID_SCALE": "PID Scaling Factor:", "TEMP_HYSTERESIS": "Temperature Hysteresis:", "TEMP_RESIDENCY_TIME": "Temperature Residency Time:", "TEMP_EWMA": "Temperature EWMA:", "HEATER_SANITY_CHECK": "Heater Sanity Check", } self.heaterNameNone = "" self.heaterNames = [self.heaterNameNone] self.boardHeaters = [] self.processors = [] sz = wx.GridBagSizer() sz.Add((20, 40), pos=(0, 0)) sz.Add((40, 40), pos=(0, 2)) sz.Add((40, 40), pos=(0, 4)) sz.Add((20, 30), pos=(1, 0)) sz.Add((20, 30), pos=(2, 0)) sz.Add((20, 30), pos=(3, 0)) sz.Add((20, 30), pos=(4, 0)) sz.Add((20, 30), pos=(5, 0)) sz.Add((20, 30), pos=(6, 0)) sz.Add((20, 30), pos=(7, 0)) sz.Add((20, 30), pos=(8, 0)) labelWidth = 140 k = "EECONFIG" cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(1, 1)) k = "USE_INTERNAL_PULLUPS" cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(2, 1)) k = "USE_WATCHDOG" cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(3, 1)) k = "FAST_PWM" cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(4, 1)) k = "HEATER_SANITY_CHECK" cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(5, 1)) k = "REPORT_TARGET_TEMPS" cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(6, 1)) k = "Z_AUTODISABLE" cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(7, 1)) k = "BED_LEVELING" cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(8, 1)) b = wx.StaticBox(self, wx.ID_ANY, "BANG BANG Bed Control") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.Add((5, 5)) k = "BANG_BANG" cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 60) sbox.Add((5, 20)) k = "BANG_BANG_ON" tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger) sbox.Add(tc) sbox.Add((5, 5)) k = "BANG_BANG_OFF" tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger) sbox.Add(tc) sbox.Add((5, 5)) sz.Add(sbox, pos=(1, 3), span=(5, 1), flag=wx.ALIGN_CENTER_HORIZONTAL) b = wx.StaticBox(self, wx.ID_ANY, "DC Motor Extruder") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.Add((5, 5)) k = "DC_EXTRUDER" ch = self.addChoice(k, self.heaterNames, 0, 60, self.onChoice) sbox.Add(ch) sbox.Add((5, 5)) k = "DC_EXTRUDER_PWM" tc = self.addTextCtrl(k, 60, self.onTextCtrlInteger) sbox.Add(tc) sbox.Add((5, 5)) sz.Add(sbox, pos=(6, 3), span=(3, 1), flag=wx.ALIGN_CENTER_HORIZONTAL) labelWidth = 190 k = "MOVEBUFFER_SIZE" tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(1, 5)) k = "TH_COUNT" tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(2, 5)) k = "ENDSTOP_STEPS" tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(3, 5)) k = "PID_SCALE" tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(4, 5)) k = "TEMP_HYSTERESIS" tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(6, 5)) k = "TEMP_RESIDENCY_TIME" tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(7, 5)) k = "TEMP_EWMA" tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(8, 5)) self.SetSizer(sz) self.enableAll(False) def setHeaters(self, hlist): k = "DC_EXTRUDER" v = self.choices[k].GetSelection() currentChoice = self.heaterNames[v] self.boardHeaters = [s[0] for s in hlist] self.heaterNames = [self.heaterNameNone] + self.boardHeaters self.choices[k].Clear() self.choices[k].SetFont(self.font) for h in self.heaterNames: self.choices[k].Append(h) try: v = self.heaterNames.index(currentChoice) except: v = 0 dlg = wx.MessageDialog( self, "Printer: Miscellaneous tab:\nDC Extruder heater " '"%s" not defined for this board. Please check.' % currentChoice, "Warning", wx.OK + wx.ICON_WARNING, ) dlg.ShowModal() dlg.Destroy() self.choices[k].SetSelection(v) def setOriginalHeater(self, h): k = "DC_EXTRUDER" if h and h.startswith("HEATER_"): hname = h[len("HEATER_") :] else: hname = h if hname and len(self.boardHeaters) != 0: if hname not in self.boardHeaters: dlg = wx.MessageDialog( self, "Printer: Miscellaneous tab:\nDC Extruder " 'heater "%s" not defined for this board. ' "Please check." % hname, "Warning", wx.OK + wx.ICON_WARNING, ) dlg.ShowModal() dlg.Destroy() self.heaterNames = [self.heaterNameNone] + self.boardHeaters else: self.heaterNames = [self.heaterNameNone] if hname and hname != self.heaterNameNone: self.heaterNames.append(hname) self.choices[k].Clear() self.choices[k].SetFont(self.font) for ht in self.heaterNames: self.choices[k].Append(ht) if hname: try: v = self.heaterNames.index(hname) except: v = 0 else: v = 0 self.choices[k].SetSelection(v) def getValues(self): result = Page.getValues(self) k = "DC_EXTRUDER" s = self.choices[k].GetSelection() v = self.choices[k].GetString(s) if v == self.heaterNameNone: if k in self.choicesOriginal.keys(): result[k] = self.choicesOriginal[k][0], False else: result[k] = "", False else: result[k] = "HEATER_%s" % v, True return result