diff --git a/configtool/displaypage.py b/configtool/displaypage.py index 5f5dd13..e1bf0bd 100644 --- a/configtool/displaypage.py +++ b/configtool/displaypage.py @@ -9,55 +9,20 @@ class DisplayPage(wx.Panel, Page): self.parent = parent self.id = idPg - self.displayBusKeys = ['DISPLAY_BUS_4BIT', 'DISPLAY_BUS_8BIT', - 'DISPLAY_BUS_I2C', 'DISPLAY_BUS_SPI'] - - self.displayTypeKeys = ['DISPLAY_TYPE_SSD1306', 'DISPLAY_TYPE_LCD1302'] - self.labels = {'DISPLAY_BUS': "Display Bus:", 'DISPLAY_TYPE': "Display Type:"} sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos = (0, 0)) - k = 'DISPLAY_BUS' - ch = self.addChoice(k, ['(disabled)'] + self.displayBusKeys, 0, 100, - self.onChoice, size = (140, -1)) + ch = self.addBoolChoice('DISPLAY_BUS', True, 100, self.onChoice, + size = (140, -1)) sz.Add(ch, pos = (1, 1)) sz.AddSpacer((100, 10), pos = (1, 2)) - k = 'DISPLAY_TYPE' - ch = self.addChoice(k, self.displayTypeKeys, 0, 100, self.onChoice, - size = (200, -1)) + ch = self.addBoolChoice('DISPLAY_TYPE', False, 100, self.onChoice, + size = (200, -1)) sz.Add(ch, pos = (1, 3)) self.SetSizer(sz) self.enableAll(False) - - def insertValues(self, cfgValues): - Page.insertValues(self, cfgValues) - - k = 'DISPLAY_BUS' - for tag in self.displayBusKeys: - if tag in cfgValues.keys() and cfgValues[tag]: - self.setChoice(k, cfgValues, tag) - break - - k = 'DISPLAY_TYPE' - for tag in self.displayTypeKeys: - if tag in cfgValues.keys() and cfgValues[tag]: - self.setChoice(k, cfgValues, tag) - break - - def getValues(self): - result = Page.getValues(self) - - # Convert values to a set of booleans. - for k in self.choices: - del result[k] - - choice = self.choices[k] - for i in range(choice.GetCount()): - result[choice.GetString(i)] = (i == choice.GetSelection()) - - return result diff --git a/configtool/page.py b/configtool/page.py index 7506cdb..b75d450 100644 --- a/configtool/page.py +++ b/configtool/page.py @@ -17,6 +17,7 @@ class Page: self.radioButtonBoxes = {} self.choices = {} self.choicesOriginal = {} + self.boolChoices = {} self.deco = Decoration() self.font = font @@ -116,6 +117,30 @@ class Page: return lsz + # addChoice handles #defines with value, this handles choices for + # sets of boolean #defines. + def addBoolChoice(self, name, allowBlank, labelWidth, validator, + size = (-1, -1)): + lsz = wx.BoxSizer(wx.HORIZONTAL) + st = wx.StaticText(self, wx.ID_ANY, self.labels[name], + size = (labelWidth, -1), style = wx.ALIGN_RIGHT) + st.SetFont(self.font) + lsz.Add(st, 1, wx.TOP, offsetChLabel) + + ch = wx.Choice(self, wx.ID_ANY, size = size, name = name) + ch.SetBackgroundColour(self.deco.getBackgroundColour()) + ch.SetFont(self.font) + ch.Bind(wx.EVT_CHOICE, validator) + + if allowBlank: + ch.Append("(none)") + ch.SetSelection(0) + + lsz.Add(ch) + self.boolChoices[name] = ch + + return lsz + def setChoice(self, name, cfgValues, default): if name in cfgValues.keys() and cfgValues[name][1] == True: bv = cfgValues[name][0] @@ -235,6 +260,21 @@ class Page: else: print "Key " + k + " not found in config data." + for k in self.boolChoices.keys(): + choice = self.boolChoices[k] + + # Remove items left behind from the previous configuration. + while (choice.GetCount() and + not choice.GetString(choice.GetCount() - 1).startswith('(')): + choice.Delete(choice.GetCount() - 1) + + # Add items found in this configuration. + for cfg in cfgValues.keys(): + if cfg.startswith(k): + choice.Append(cfg) + if cfgValues[cfg]: + choice.SetSelection(choice.GetCount() - 1) + self.assertModified(False) def getValues(self): @@ -262,6 +302,13 @@ class Page: v = self.choices[k].GetSelection() result[k] = self.choices[k].GetString(v), True + for k in self.boolChoices.keys(): + choice = self.boolChoices[k] + for i in range(choice.GetCount()): + s = choice.GetString(i) + if not s.startswith('('): + result[s] = (i == choice.GetSelection()) + return result def assertModified(self, flag):