diff --git a/configtool/addheaterdlg.py b/configtool/addheaterdlg.py index b3d782b..c7d2924 100644 --- a/configtool/addheaterdlg.py +++ b/configtool/addheaterdlg.py @@ -4,7 +4,8 @@ from configtool.data import BSIZESMALL, offsetChLabel, offsetTcLabel class AddHeaterDlg(wx.Dialog): - def __init__(self, parent, names, pins, font): + def __init__(self, parent, names, pins, font, + name = "", pin = "", pwm = "1"): wx.Dialog.__init__(self, parent, wx.ID_ANY, "Add heater", size = (400, 204)) self.SetFont(font) self.Bind(wx.EVT_CLOSE, self.onCancel) @@ -12,7 +13,7 @@ class AddHeaterDlg(wx.Dialog): self.names = names self.choices = pins - self.nameValid = False + self.nameValid = (name != "") sz = wx.BoxSizer(wx.VERTICAL) gsz = wx.GridBagSizer() @@ -24,9 +25,10 @@ class AddHeaterDlg(wx.Dialog): st.SetFont(font) lsz.Add(st, 1, wx.TOP, offsetTcLabel) - self.tcName = wx.TextCtrl(self, wx.ID_ANY, "") + self.tcName = wx.TextCtrl(self, wx.ID_ANY, name) self.tcName.SetFont(font) - self.tcName.SetBackgroundColour("pink") + if not name: + self.tcName.SetBackgroundColour("pink") self.tcName.Bind(wx.EVT_TEXT, self.onNameEntry) lsz.Add(self.tcName) self.tcName.SetToolTipString("Enter a unique name for this heater.") @@ -42,7 +44,11 @@ class AddHeaterDlg(wx.Dialog): self.chPin = wx.Choice(self, wx.ID_ANY, choices = pins) self.chPin.SetFont(font) self.chPin.Bind(wx.EVT_CHOICE, self.onChoice) - self.chPin.SetSelection(0) + i = self.chPin.FindString(pin) + if i == wx.NOT_FOUND: + self.chPin.SetSelection(0) + else: + self.chPin.SetSelection(i) lsz.Add(self.chPin) self.chPin.SetToolTipString("Choose a pin for this heater.") @@ -50,6 +56,7 @@ class AddHeaterDlg(wx.Dialog): self.cbPwm = wx.CheckBox(self, wx.ID_ANY, "PWM") self.cbPwm.SetFont(font) + self.cbPwm.SetValue(int(pwm) != 0) self.cbPwm.SetToolTipString("Use Pulse Width Modulation in case the " "choosen pin allows to do so.") @@ -66,7 +73,6 @@ class AddHeaterDlg(wx.Dialog): self.bSave.SetFont(font) self.bSave.Bind(wx.EVT_BUTTON, self.onSave) bsz.Add(self.bSave) - self.bSave.Enable(False) bsz.AddSpacer(30, 100) @@ -79,6 +85,7 @@ class AddHeaterDlg(wx.Dialog): sz.AddSpacer((10, 10)) self.SetSizer(sz) + self.checkDlgValidity() self.Fit() def onNameEntry(self, evt): diff --git a/configtool/heaterspage.py b/configtool/heaterspage.py index 783472c..f62932f 100644 --- a/configtool/heaterspage.py +++ b/configtool/heaterspage.py @@ -25,23 +25,34 @@ class HeatersPage(wx.Panel, Page): sz.AddSpacer((20, 20), pos = (1, 2)) bsz = wx.BoxSizer(wx.VERTICAL) + self.bAdd = wx.Button(self, wx.ID_ANY, "Add", size = BSIZESMALL) self.bAdd.SetBackgroundColour(self.deco.getBackgroundColour()) self.bAdd.SetFont(font) self.Bind(wx.EVT_BUTTON, self.doAdd, self.bAdd) self.bAdd.SetToolTipString("Add a heater to the configuration.") - bsz.Add(self.bAdd) bsz.AddSpacer((10, 10)) + + self.bModify = wx.Button(self, wx.ID_ANY, "Modify", size = BSIZESMALL) + self.bModify.SetBackgroundColour(self.deco.getBackgroundColour()) + self.bModify.SetFont(font) + self.bModify.Enable(False) + self.Bind(wx.EVT_BUTTON, self.doModify, self.bModify) + self.bModify.SetToolTipString("Modify the selected heater.") + bsz.Add(self.bModify) + + bsz.AddSpacer((10, 10)) + self.bDelete = wx.Button(self, wx.ID_ANY, "Delete", size = BSIZESMALL) self.bDelete.SetBackgroundColour(self.deco.getBackgroundColour()) self.bDelete.SetFont(font) self.bDelete.Enable(False) self.Bind(wx.EVT_BUTTON, self.doDelete, self.bDelete) - bsz.Add(self.bDelete) self.bDelete.SetToolTipString("Remove the selected heater from the " "configuration.") + bsz.Add(self.bDelete) sz.Add(bsz, pos = (1, 3)) @@ -56,8 +67,10 @@ class HeatersPage(wx.Panel, Page): self.selection = n if n is None: self.bDelete.Enable(False) + self.bModify.Enable(False) else: self.bDelete.Enable(True) + self.bModify.Enable(True) def doAdd(self, evt): nm = [] @@ -80,6 +93,33 @@ class HeatersPage(wx.Panel, Page): self.parent.setHeaters(self.heaters) self.assertModified(True) + def doModify(self, evt): + if self.selection is None: + return + + nm = [] + for s in self.heaters: + nm.append(s[0]) + + h = self.heaters[self.selection] + + dlg = AddHeaterDlg(self, nm, self.validPins, self.font, + name = h[0], pin = h[1], pwm = h[2]) + rc = dlg.ShowModal() + if rc == wx.ID_OK: + ht = dlg.getValues() + + dlg.Destroy() + + if rc != wx.ID_OK: + return + + self.heaters[self.selection] = ht + self.lb.updateList(self.heaters) + self.validateTable() + self.parent.setHeaters(self.heaters) + self.assertModified(True) + def doDelete(self, evt): if self.selection is None: return