From 55f560260fecea83fc3befa81a32d0651b11550c Mon Sep 17 00:00:00 2001 From: Nico Tonnhofer Date: Sun, 2 Dec 2018 11:57:53 +0100 Subject: [PATCH] configtool: with commandline it is not necessary to have wx e.g. the regressiontests will work without wx --- configtool.py | 4 +- configtool/gui.py | 3 +- configtool/settings.py | 182 ------------------------------------- configtool/settingsdlg.py | 185 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 189 insertions(+), 185 deletions(-) create mode 100644 configtool/settingsdlg.py diff --git a/configtool.py b/configtool.py index 558afd1..7f8609e 100755 --- a/configtool.py +++ b/configtool.py @@ -25,11 +25,9 @@ import os.path import inspect from configtool.settings import Settings -from configtool.gui import StartGui from configtool.board import Board from configtool.printer import Printer - cmdFolder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe()))[0])) @@ -182,4 +180,6 @@ def CommandLine(argv): if __name__ == '__main__': CommandLine(sys.argv[1:]) + + from configtool.gui import StartGui StartGui(getSettings()) diff --git a/configtool/gui.py b/configtool/gui.py index 06128d3..983e582 100644 --- a/configtool/gui.py +++ b/configtool/gui.py @@ -14,7 +14,8 @@ import os.path from configtool.data import reHelpText from configtool.decoration import Decoration -from configtool.settings import Settings, SettingsDlg +from configtool.settings import Settings +from configtool.settingsdlg import SettingsDlg from configtool.printerpanel import PrinterPanel from configtool.boardpanel import BoardPanel from configtool.build import Build, Upload diff --git a/configtool/settings.py b/configtool/settings.py index 4cf9611..17d7d50 100644 --- a/configtool/settings.py +++ b/configtool/settings.py @@ -1,26 +1,11 @@ import ConfigParser import os -import wx from configtool.data import BSIZESMALL, offsetTcLabel INIFILE = "configtool.ini" DEFAULT_INIFILE = "configtool.default.ini" -ARDUINODIR = 0 -CFLAGS = 1 -LDFLAGS = 2 -OBJCOPYFLAGS= 3 -PROGRAMMER = 4 -PROGRAMFLAGS = 5 -PORT = 6 -UPLOADSPEED = 7 -NUMTEMPS = 8 -MINADC = 9 -MAXADC = 10 -T0 = 11 -R1 = 12 - class Settings: def __init__(self, app, folder, ini=None): @@ -141,170 +126,3 @@ class Settings: return True - -class SettingsDlg(wx.Dialog): - def __init__(self, parent, settings): - wx.Dialog.__init__(self, parent, wx.ID_ANY, "Modify settings", - size = (500, 300)) - self.SetFont(settings.font) - self.settings = settings - - self.modified = False - - self.Bind(wx.EVT_CLOSE, self.onExit) - - htArdDir = "Path to the Arduino IDE folder. Configtool will figure the " \ - "details on where to find avr-gcc and avrdude inside there." \ - "\n\nIf empty, the system wide installed tools will be used." - htCFlags = "Flags passed into the avr-gcc compiler. These flags can " \ - "have 3 different variables embedded within them:" \ - "\n\n %F_CPU% will be replaced by the value of the CPU " \ - "Clock Rate." \ - "\n\n %CPU% will be replaced by the value of the CPU. " \ - "\n\n %ALNAME% is the name of the source file being " \ - "compiled with the .c extension replaced by .al.\n\n" \ - "Note: the flag -save-temps=obj does not appear to be a " \ - "valid flag for some compiler versions. Omit the \"=obj\", " \ - "omit the flag entirely, or simply ignore the related warnings." - htLDFlags = "Flags passed to avr-gcc to be passed on to the linker." - htObjCopy = "Flags passed to avr-objcopy." - htProgrammer = "The programmer type - passed to avrdude." - htProgramFlags = "Extra flags passed to avrdude." - htPort = "The port to which the controller is connected. Typically a " \ - "path starting with /dev/... on Linux or Mac OS X, or some " \ - "COM... on Windows." - htSpeed = "The baud rate with which to communicate with the bootloader." - htNumTemps = "The number of entries generated for the thermistor tables. " \ - "Higher numbers slightly increase temperature reading " \ - "accuracy, but also cost binary size. Default is 25." - htMinAdc = "The minimum ADC value returned by the thermistor. Typically 0." - htMaxAdc = "The maximum ADC value returned by the thermistor. " \ - "Typically 1023 (maximum of 10-bit ADCs)." - htT0 = "The T0 value used for thermistor table calculation. Typically 25." - htR1 = "The R1 value used for thermistor table calculation. Typically 0." - - # This table MUST be in the same order as the constants defined at - # the top of this file. - self.fields = [["Arduino Directory", settings.arduinodir, htArdDir], - ["C Compiler Flags", settings.cflags, htCFlags], - ["LD Flags", settings.ldflags, htLDFlags], - ["Object Copy Flags", settings.objcopyflags, htObjCopy], - ["AVR Programmer", settings.programmer, htProgrammer], - ["AVR Upload Flags", settings.programflags, htProgramFlags], - ["Port", settings.port, htPort], - ["Upload Speed", settings.uploadspeed, htSpeed], - ["Number of Temps", settings.numTemps, htNumTemps], - ["Minimum ADC value", settings.minAdc, htMinAdc], - ["Maximum ADC value", settings.maxAdc, htMaxAdc], - ["T0", settings.t0, htT0], - ["R1", settings.r1, htR1]] - - self.teList = [] - - hsz = wx.BoxSizer(wx.HORIZONTAL) - hsz.AddSpacer((10, 10)) - - sz = wx.BoxSizer(wx.VERTICAL) - sz.AddSpacer((10, 10)) - - labelWidth = 140 - for f in self.fields: - lsz = wx.BoxSizer(wx.HORIZONTAL) - t = wx.StaticText(self, wx.ID_ANY, f[0], size = (labelWidth, -1), - style = wx.ALIGN_RIGHT) - t.SetFont(settings.font) - lsz.Add(t, 1, wx.TOP, offsetTcLabel) - - lsz.AddSpacer((8, 8)) - - te = wx.TextCtrl(self, wx.ID_ANY, f[1], size = (600, -1)) - te.Bind(wx.EVT_TEXT, self.onTextCtrl) - te.SetToolTipString(f[2]) - lsz.Add(te) - self.teList.append(te) - - sz.Add(lsz) - sz.AddSpacer((10, 10)) - - sz.AddSpacer((20, 20)) - - bsz = wx.BoxSizer(wx.HORIZONTAL) - b = wx.Button(self, wx.ID_ANY, "Save", size = BSIZESMALL) - b.SetFont(settings.font) - self.Bind(wx.EVT_BUTTON, self.onSave, b) - bsz.Add(b) - self.bSave = b - bsz.AddSpacer((5, 5)) - - b = wx.Button(self, wx.ID_ANY, "Exit", size = BSIZESMALL) - b.SetFont(settings.font) - self.Bind(wx.EVT_BUTTON, self.onExit, b) - bsz.Add(b) - self.bExit = b - - sz.Add(bsz, 1, wx.ALIGN_CENTER_HORIZONTAL) - sz.AddSpacer((10, 10)) - - hsz.Add(sz) - hsz.AddSpacer((10, 10)) - - self.SetSizer(hsz) - self.setModified(False) - - self.Fit() - - def setModified(self, flag): - self.modified = flag - if flag: - self.bSave.Enable(True) - self.bExit.SetLabel("Cancel") - else: - self.bSave.Enable(False) - self.bExit.SetLabel("Exit") - - def onTextCtrl(self, evt): - self.setModified(True) - evt.Skip() - - def onSave(self, evt): - self.saveValues() - self.EndModal(wx.ID_OK) - - def saveValues(self): - self.settings.arduinodir = self.teList[ARDUINODIR].GetValue() - self.settings.cflags = self.teList[CFLAGS].GetValue() - self.settings.ldflags = self.teList[LDFLAGS].GetValue() - self.settings.objcopyflags = self.teList[OBJCOPYFLAGS].GetValue() - self.settings.programmer = self.teList[PROGRAMMER].GetValue() - self.settings.programflags = self.teList[PROGRAMFLAGS].GetValue() - self.settings.port = self.teList[PORT].GetValue() - self.settings.uploadspeed = self.teList[UPLOADSPEED].GetValue() - self.settings.numTemps = self.teList[NUMTEMPS].GetValue() - self.settings.minAdc = self.teList[MINADC].GetValue() - self.settings.maxAdc = self.teList[MAXADC].GetValue() - self.settings.t0 = self.teList[T0].GetValue() - self.settings.r1 = self.teList[R1].GetValue() - - self.settings.saveSettings() - - def onExit(self, evt): - if not self.confirmLoseChanges("exit"): - return - self.EndModal(wx.ID_EXIT) - - def confirmLoseChanges(self, msg): - if not self.modified: - return True - - dlg = wx.MessageDialog(self, "Are you sure you want to " + msg + "?\n" - "There are changes to your settings that " - "will be lost.", - "Changes pending", - wx.YES_NO | wx.NO_DEFAULT | wx.ICON_INFORMATION) - rc = dlg.ShowModal() - dlg.Destroy() - - if rc != wx.ID_YES: - return False - - return True diff --git a/configtool/settingsdlg.py b/configtool/settingsdlg.py new file mode 100644 index 0000000..b07a560 --- /dev/null +++ b/configtool/settingsdlg.py @@ -0,0 +1,185 @@ + +import wx +from configtool.data import BSIZESMALL, offsetTcLabel + +ARDUINODIR = 0 +CFLAGS = 1 +LDFLAGS = 2 +OBJCOPYFLAGS= 3 +PROGRAMMER = 4 +PROGRAMFLAGS = 5 +PORT = 6 +UPLOADSPEED = 7 +NUMTEMPS = 8 +MINADC = 9 +MAXADC = 10 +T0 = 11 +R1 = 12 + + +class SettingsDlg(wx.Dialog): + def __init__(self, parent, settings): + wx.Dialog.__init__(self, parent, wx.ID_ANY, "Modify settings", + size = (500, 300)) + self.SetFont(settings.font) + self.settings = settings + + self.modified = False + + self.Bind(wx.EVT_CLOSE, self.onExit) + + htArdDir = "Path to the Arduino IDE folder. Configtool will figure the " \ + "details on where to find avr-gcc and avrdude inside there." \ + "\n\nIf empty, the system wide installed tools will be used." + htCFlags = "Flags passed into the avr-gcc compiler. These flags can " \ + "have 3 different variables embedded within them:" \ + "\n\n %F_CPU% will be replaced by the value of the CPU " \ + "Clock Rate." \ + "\n\n %CPU% will be replaced by the value of the CPU. " \ + "\n\n %ALNAME% is the name of the source file being " \ + "compiled with the .c extension replaced by .al.\n\n" \ + "Note: the flag -save-temps=obj does not appear to be a " \ + "valid flag for some compiler versions. Omit the \"=obj\", " \ + "omit the flag entirely, or simply ignore the related warnings." + htLDFlags = "Flags passed to avr-gcc to be passed on to the linker." + htObjCopy = "Flags passed to avr-objcopy." + htProgrammer = "The programmer type - passed to avrdude." + htProgramFlags = "Extra flags passed to avrdude." + htPort = "The port to which the controller is connected. Typically a " \ + "path starting with /dev/... on Linux or Mac OS X, or some " \ + "COM... on Windows." + htSpeed = "The baud rate with which to communicate with the bootloader." + htNumTemps = "The number of entries generated for the thermistor tables. " \ + "Higher numbers slightly increase temperature reading " \ + "accuracy, but also cost binary size. Default is 25." + htMinAdc = "The minimum ADC value returned by the thermistor. Typically 0." + htMaxAdc = "The maximum ADC value returned by the thermistor. " \ + "Typically 1023 (maximum of 10-bit ADCs)." + htT0 = "The T0 value used for thermistor table calculation. Typically 25." + htR1 = "The R1 value used for thermistor table calculation. Typically 0." + + # This table MUST be in the same order as the constants defined at + # the top of this file. + self.fields = [["Arduino Directory", settings.arduinodir, htArdDir], + ["C Compiler Flags", settings.cflags, htCFlags], + ["LD Flags", settings.ldflags, htLDFlags], + ["Object Copy Flags", settings.objcopyflags, htObjCopy], + ["AVR Programmer", settings.programmer, htProgrammer], + ["AVR Upload Flags", settings.programflags, htProgramFlags], + ["Port", settings.port, htPort], + ["Upload Speed", settings.uploadspeed, htSpeed], + ["Number of Temps", settings.numTemps, htNumTemps], + ["Minimum ADC value", settings.minAdc, htMinAdc], + ["Maximum ADC value", settings.maxAdc, htMaxAdc], + ["T0", settings.t0, htT0], + ["R1", settings.r1, htR1]] + + self.teList = [] + + hsz = wx.BoxSizer(wx.HORIZONTAL) + hsz.AddSpacer((10, 10)) + + sz = wx.BoxSizer(wx.VERTICAL) + sz.AddSpacer((10, 10)) + + labelWidth = 140 + for f in self.fields: + lsz = wx.BoxSizer(wx.HORIZONTAL) + t = wx.StaticText(self, wx.ID_ANY, f[0], size = (labelWidth, -1), + style = wx.ALIGN_RIGHT) + t.SetFont(settings.font) + lsz.Add(t, 1, wx.TOP, offsetTcLabel) + + lsz.AddSpacer((8, 8)) + + te = wx.TextCtrl(self, wx.ID_ANY, f[1], size = (600, -1)) + te.Bind(wx.EVT_TEXT, self.onTextCtrl) + te.SetToolTipString(f[2]) + lsz.Add(te) + self.teList.append(te) + + sz.Add(lsz) + sz.AddSpacer((10, 10)) + + sz.AddSpacer((20, 20)) + + bsz = wx.BoxSizer(wx.HORIZONTAL) + b = wx.Button(self, wx.ID_ANY, "Save", size = BSIZESMALL) + b.SetFont(settings.font) + self.Bind(wx.EVT_BUTTON, self.onSave, b) + bsz.Add(b) + self.bSave = b + bsz.AddSpacer((5, 5)) + + b = wx.Button(self, wx.ID_ANY, "Exit", size = BSIZESMALL) + b.SetFont(settings.font) + self.Bind(wx.EVT_BUTTON, self.onExit, b) + bsz.Add(b) + self.bExit = b + + sz.Add(bsz, 1, wx.ALIGN_CENTER_HORIZONTAL) + sz.AddSpacer((10, 10)) + + hsz.Add(sz) + hsz.AddSpacer((10, 10)) + + self.SetSizer(hsz) + self.setModified(False) + + self.Fit() + + def setModified(self, flag): + self.modified = flag + if flag: + self.bSave.Enable(True) + self.bExit.SetLabel("Cancel") + else: + self.bSave.Enable(False) + self.bExit.SetLabel("Exit") + + def onTextCtrl(self, evt): + self.setModified(True) + evt.Skip() + + def onSave(self, evt): + self.saveValues() + self.EndModal(wx.ID_OK) + + def saveValues(self): + self.settings.arduinodir = self.teList[ARDUINODIR].GetValue() + self.settings.cflags = self.teList[CFLAGS].GetValue() + self.settings.ldflags = self.teList[LDFLAGS].GetValue() + self.settings.objcopyflags = self.teList[OBJCOPYFLAGS].GetValue() + self.settings.programmer = self.teList[PROGRAMMER].GetValue() + self.settings.programflags = self.teList[PROGRAMFLAGS].GetValue() + self.settings.port = self.teList[PORT].GetValue() + self.settings.uploadspeed = self.teList[UPLOADSPEED].GetValue() + self.settings.numTemps = self.teList[NUMTEMPS].GetValue() + self.settings.minAdc = self.teList[MINADC].GetValue() + self.settings.maxAdc = self.teList[MAXADC].GetValue() + self.settings.t0 = self.teList[T0].GetValue() + self.settings.r1 = self.teList[R1].GetValue() + + self.settings.saveSettings() + + def onExit(self, evt): + if not self.confirmLoseChanges("exit"): + return + self.EndModal(wx.ID_EXIT) + + def confirmLoseChanges(self, msg): + if not self.modified: + return True + + dlg = wx.MessageDialog(self, "Are you sure you want to " + msg + "?\n" + "There are changes to your settings that " + "will be lost.", + "Changes pending", + wx.YES_NO | wx.NO_DEFAULT | wx.ICON_INFORMATION) + rc = dlg.ShowModal() + dlg.Destroy() + + if rc != wx.ID_YES: + return False + + return True