Ejemplo n.º 1
0
class HeatersPage(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.font = font
        self.id = idPg

        self.labels = {'FORCE_SOFTWARE_PWM': "Force software PWM"}

        sz = wx.GridBagSizer()
        sz.AddSpacer((30, 30), pos=(0, 0))

        self.heaters = []
        self.validPins = pinNames

        self.lb = HeaterList(self, font)
        sz.Add(self.lb, pos=(1, 1))
        sz.AddSpacer((20, 20), pos=(1, 2))

        k = 'FORCE_SOFTWARE_PWM'
        cb = self.addCheckBox(k, self.onCheckBox)

        sz.Add(cb, pos=(2, 1))
        sz.AddSpacer((20, 20), pos=(2, 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)
        self.bDelete.SetToolTipString("Remove the selected heater from the "
                                      "configuration.")
        bsz.Add(self.bDelete)

        sz.Add(bsz, pos=(1, 3))

        self.SetSizer(sz)
        self.enableAll(False)

    def enableAll(self, flag=True):
        self.bAdd.Enable(flag)
        Page.enableAll(self, flag)

    def setItemSelected(self, n):
        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 getFreePins(self):
        freePins = [] + self.validPins
        usedPins = []
        for s in self.heaters:
            usedPins.append(s[1])

        for p in usedPins:
            if p in freePins:
                freePins.remove(p)

        return freePins

    def doAdd(self, evt):
        nm = []
        for s in self.heaters:
            nm.append(s[0])

        dlg = AddHeaterDlg(self, nm, self.getFreePins(), self.font)
        rc = dlg.ShowModal()
        if rc == wx.ID_OK:
            ht = dlg.getValues()

        dlg.Destroy()

        if rc != wx.ID_OK:
            return

        self.heaters.append(ht)
        self.lb.updateList(self.heaters)
        self.validateTable()
        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, [h[1]] + self.getFreePins(),
                           self.font,
                           name=h[0],
                           pin=h[1],
                           invert=h[2],
                           pwm=h[3],
                           max_pwm=h[4])
        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

        self.assertModified(True)

        del self.heaters[self.selection]
        self.lb.updateList(self.heaters)
        self.validateTable()
        self.parent.setHeaters(self.heaters)
        self.assertModified(True)

    def setHeaters(self, heaters):
        self.heaters = heaters
        self.lb.updateList(self.heaters)
        self.validateTable()
        self.parent.setHeaters(self.heaters)

    def setCandidatePins(self, plist):
        if not plist or len(plist) == 0:
            self.validPins = pinNames
        else:
            self.validPins = plist

        self.validateTable()

    def heaterNames(self):
        heaterNames = []
        for heater in self.heaters:
            heaterNames.append(heater[0])

        return heaterNames

    def validateTable(self):
        self.lb.setTableValidity(True)
        self.setFieldValidity('HEATERLIST', True)
        for i in range(len(self.heaters)):
            if self.heaters[i][1] not in self.validPins:
                self.lb.setRowValidity(i, False)
                self.setFieldValidity('HEATERLIST', False)

    def setHelpText(self, ht):
        Page.setHelpText(self, ht)

        k = 'DEFINE_HEATER'
        if k in ht.keys():
            self.bAdd.SetToolTipString(ht[k])
Ejemplo n.º 2
0
class HeatersPage(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.font = font
        self.id = idPg

        sz = wx.GridBagSizer()
        sz.AddSpacer((30, 30), pos=(0, 0))

        self.heaters = []
        self.validPins = pinNames

        self.lb = HeaterList(self, font)
        sz.Add(self.lb, pos=(1, 1))
        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)
        self.bDelete.SetToolTipString("Remove the selected heater from the " "configuration.")
        bsz.Add(self.bDelete)

        sz.Add(bsz, pos=(1, 3))

        self.SetSizer(sz)
        self.enableAll(False)

    def enableAll(self, flag=True):
        self.bAdd.Enable(flag)
        Page.enableAll(self, flag)

    def setItemSelected(self, n):
        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 getFreePins(self):
        freePins = [] + self.validPins
        usedPins = []
        for s in self.heaters:
            usedPins.append(s[1])

        for p in usedPins:
            if p in freePins:
                freePins.remove(p)

        return freePins

    def doAdd(self, evt):
        nm = []
        for s in self.heaters:
            nm.append(s[0])

        dlg = AddHeaterDlg(self, nm, self.getFreePins(), self.font)
        rc = dlg.ShowModal()
        if rc == wx.ID_OK:
            ht = dlg.getValues()

        dlg.Destroy()

        if rc != wx.ID_OK:
            return

        self.heaters.append(ht)
        self.lb.updateList(self.heaters)
        self.validateTable()
        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, [h[1]] + self.getFreePins(), 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

        self.assertModified(True)

        del self.heaters[self.selection]
        self.lb.updateList(self.heaters)
        self.validateTable()
        self.parent.setHeaters(self.heaters)
        self.assertModified(True)

    def setHeaters(self, heaters):
        self.heaters = heaters
        self.lb.updateList(self.heaters)
        self.validateTable()
        self.parent.setHeaters(self.heaters)

    def setCandidatePins(self, plist):
        if not plist or len(plist) == 0:
            self.validPins = pinNames
        else:
            self.validPins = plist

        self.validateTable()

    def heaterNames(self):
        heaterNames = []
        for heater in self.heaters:
            heaterNames.append(heater[0])

        return heaterNames

    def validateTable(self):
        self.lb.setTableValidity(True)
        self.setFieldValidity("HEATERLIST", True)
        for i in range(len(self.heaters)):
            if self.heaters[i][1] not in self.validPins:
                self.lb.setRowValidity(i, False)
                self.setFieldValidity("HEATERLIST", False)

    def setHelpText(self, ht):
        Page.setHelpText(self, ht)

        k = "DEFINE_HEATER"
        if k in ht.keys():
            self.bAdd.SetToolTipString(ht[k])