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.defaultBaud = '115200'

        self.bauds = ['19200', '38400', '57600', self.defaultBaud]

        self.labels = {
            'XONXOFF': "XON/XOFF Flow Control",
            'BAUD': "Baud Rate:",
            'USB_SERIAL': "USB Serial"
        }

        sz = wx.GridBagSizer()
        sz.AddSpacer((20, 40), pos=(0, 0))

        k = 'USB_SERIAL'
        cb = self.addCheckBox(k, self.onUSBCheckBox)
        sz.Add(cb, pos=(1, 1))

        ch = self.addChoice('BAUD', self.bauds,
                            self.bauds.index(self.defaultBaud), 80,
                            self.onChoice)
        sz.Add(ch, pos=(1, 3))

        cb = self.addCheckBox('XONXOFF', self.onCheckBox)
        sz.Add(cb, pos=(3, 3))

        sz.AddSpacer((100, 10), pos=(2, 2))

        self.SetSizer(sz)
        self.enableAll(False)
예제 #2
0
    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.labels = {'F_CPU': "CPU Clock Rate:", 'CPU': "Processor Type:"}
        self.clocks = []
        self.processors = []

        sz = wx.GridBagSizer()
        sz.AddSpacer((20, 40), pos=(0, 0))

        k = 'F_CPU'
        ch = self.addChoice(k,
                            self.clocks,
                            0,
                            100,
                            self.onChoice,
                            size=(140, -1))
        sz.Add(ch, pos=(1, 1))
        sz.AddSpacer((100, 10), pos=(1, 2))

        k = 'CPU'
        ch = self.addChoice(k,
                            self.processors,
                            0,
                            100,
                            self.onChoice,
                            size=(140, -1))
        sz.Add(ch, pos=(1, 3))

        self.SetSizer(sz)
        self.enableAll(False)
  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.defaultBaud = '115200'

    self.bauds = ['19200', '38400', '57600', self.defaultBaud]

    self.labels = {'XONXOFF': "XON/XOFF Flow Control", 'BAUD': "Baud Rate:",
                   'USB_SERIAL': "USB Serial"}

    sz = wx.GridBagSizer()
    sz.AddSpacer((20, 40), pos = (0, 0))

    k = 'USB_SERIAL'
    cb = self.addCheckBox(k, self.onUSBCheckBox)
    sz.Add(cb, pos = (1, 1))

    ch = self.addChoice('BAUD', self.bauds, self.bauds.index(self.defaultBaud),
                        80, self.onChoice)
    sz.Add(ch, pos = (1, 3))

    cb = self.addCheckBox('XONXOFF', self.onCheckBox)
    sz.Add(cb, pos = (3, 3))

    sz.AddSpacer((100, 10), pos = (2, 2))

    self.SetSizer(sz)
    self.enableAll(False)
예제 #4
0
  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.labels = {'DISPLAY_BUS': "Display Bus:",
                   'DISPLAY_TYPE': "Display Type:",
                   'DISPLAY_BUS_4BIT': "Direct with 4 pins",
                   'DISPLAY_BUS_8BIT': "Direct with 8 pins",
                   'DISPLAY_BUS_I2C': "I²C ( = TWI)",
                   'DISPLAY_BUS_SPI': "SPI",
                   'DISPLAY_TYPE_SSD1306': "SSD1306 O-LED, 128x32",
                   'DISPLAY_TYPE_LCD1302': "LCD 1302"}

    sz = wx.GridBagSizer()
    sz.AddSpacer((20, 40), pos = (0, 0))

    ch = self.addBoolChoice('DISPLAY_BUS', True, 100, self.onBusChoice,
                            size = (160, -1))
    sz.Add(ch, pos = (1, 1))
    sz.AddSpacer((100, 10), pos = (1, 2))

    ch = self.addBoolChoice('DISPLAY_TYPE', False, 100, self.onChoice,
                            size = (200, -1))
    sz.Add(ch, pos = (1, 3))

    self.SetSizer(sz)
    self.enableAll(False)
예제 #5
0
    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.defaultBaud = "115200"

        self.bauds = ["19200", "38400", "57600", "115200", "230400", "250000"]

        self.labels = {
            "XONXOFF": "XON/XOFF Flow Control",
            "BAUD": "Baud Rate:",
            "USB_SERIAL": "USB Serial",
        }

        sz = wx.GridBagSizer()
        sz.Add((20, 40), pos=(0, 0))

        k = "USB_SERIAL"
        cb = self.addCheckBox(k, self.onUSBCheckBox)
        sz.Add(cb, pos=(1, 1))

        ch = self.addChoice("BAUD", self.bauds,
                            self.bauds.index(self.defaultBaud), 80,
                            self.onChoice)
        sz.Add(ch, pos=(1, 3))

        cb = self.addCheckBox("XONXOFF", self.onCheckBox)
        sz.Add(cb, pos=(3, 3))

        sz.Add((100, 10), pos=(2, 2))

        self.SetSizer(sz)
        self.enableAll(False)
예제 #6
0
  def __init__(self, parent, nb, idPg, heatersPage, font):
    wx.Panel.__init__(self, nb, wx.ID_ANY)
    Page.__init__(self, font)
    self.parent = parent
    self.heatersPage = heatersPage
    self.font = font
    self.id = idPg

    self.sensorTypeKeys = {'TT_MAX6675': 'TEMP_MAX6675',
                           'TT_THERMISTOR': 'TEMP_THERMISTOR',
                           'TT_AD595': 'TEMP_AD595', 'TT_PT100': 'TEMP_PT100',
                           'TT_INTERCOM': 'TEMP_INTERCOM'}
    self.labels = {'TEMP_MAX6675': "MAX6675", 'TEMP_THERMISTOR': "Thermistor",
                   'TEMP_AD595': "AD595", 'TEMP_PT100': "PT100",
                   'TEMP_INTERCOM': "Intercom"}

    self.validPins = pinNames

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

    self.sensors = []

    self.lb = SensorList(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.Enable(False)
    self.bAdd.SetToolTipString("Add a sensor 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)
    bsz.Add(self.bModify)
    self.bModify.SetToolTipString("Modify the selected temperature sensor.")

    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 temperature sensor "
                                  "from the configuration.")

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

    self.SetSizer(sz)
    self.enableAll(False)
예제 #7
0
  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.labels = {'F_CPU': "CPU Clock Rate:", 'CPU': "Processor Type:"}
    self.clocks = []
    self.processors = []

    sz = wx.GridBagSizer()
    sz.AddSpacer((20, 40), pos = (0, 0))

    k = 'F_CPU'
    ch = self.addChoice(k, self.clocks, 0, 100, self.onChoice, size = (140, -1))
    sz.Add(ch, pos = (1, 1))
    sz.AddSpacer((100, 10), pos = (1, 2))

    k = 'CPU'
    ch = self.addChoice(k, self.processors, 0, 100, self.onChoice,
                        size = (140, -1))
    sz.Add(ch, pos = (1, 3))

    self.SetSizer(sz)
    self.enableAll(False)
예제 #8
0
    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)
예제 #9
0
  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)
예제 #10
0
    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.labels = {
            "DISPLAY_BUS": "Display Bus:",
            "DISPLAY_TYPE": "Display Type:",
            "DISPLAY_BUS_4BIT": "Direct with 4 pins",
            "DISPLAY_BUS_8BIT": "Direct with 8 pins",
            "DISPLAY_BUS_I2C": "I²C ( = TWI)",
            "DISPLAY_BUS_SPI": "SPI",
            "DISPLAY_TYPE_SSD1306": "SSD1306 O-LED, 128x32 pixels",
            "DISPLAY_TYPE_HD44780": "HD44780 or 1602A, 16x2 characters",
            "DISPLAY_RS_PIN": "RS pin",
            "DISPLAY_RW_PIN": "R/W pin",
            "DISPLAY_E_PIN": "E pin",
            "DISPLAY_D4_PIN": "D4 pin",
            "DISPLAY_D5_PIN": "D5 pin",
            "DISPLAY_D6_PIN": "D6 pin",
            "DISPLAY_D7_PIN": "D7 pin",
        }

        sz = wx.GridBagSizer()
        sz.Add((20, 40), pos=(0, 0))

        ch = self.addBoolChoice(
            "DISPLAY_BUS", True, 100, self.onBusChoice, size=(160, -1)
        )
        sz.Add(ch, pos=(1, 1))
        sz.Add((100, 10), pos=(1, 2))

        ch = self.addBoolChoice(
            "DISPLAY_TYPE", False, 100, self.onChoice, size=(240, -1)
        )
        sz.Add(ch, pos=(1, 3))

        b = wx.StaticBox(self, wx.ID_ANY, "Direct 4-bit Bus Pins:")
        b.SetFont(font)
        self.pinbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        self.pinbox.Add((5, 5))
        for k in (
            "DISPLAY_RS_PIN",
            "DISPLAY_RW_PIN",
            "DISPLAY_E_PIN",
            "DISPLAY_D4_PIN",
            "DISPLAY_D5_PIN",
            "DISPLAY_D6_PIN",
            "DISPLAY_D7_PIN",
        ):
            tc = self.addPinChoice(k, 200)
            self.pinbox.Add(tc)
            self.pinbox.Add((5, 5))
        sz.Add(self.pinbox, pos=(3, 1))

        self.SetSizer(sz)
        self.enableAll(False)
예제 #11
0
  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.labels = {'DISPLAY_BUS': "Display Bus:",
                   'DISPLAY_TYPE': "Display Type:",
                   'DISPLAY_BUS_4BIT': "Direct with 4 pins",
                   'DISPLAY_BUS_8BIT': "Direct with 8 pins",
                   'DISPLAY_BUS_I2C': "I²C ( = TWI)",
                   'DISPLAY_BUS_SPI': "SPI",
                   'DISPLAY_TYPE_SSD1306': "SSD1306 O-LED, 128x32 pixels",
                   'DISPLAY_TYPE_HD44780': "HD44780 or 1602A, 16x2 characters",
                   'DISPLAY_RS_PIN': "RS pin",
                   'DISPLAY_RW_PIN': "R/W pin",
                   'DISPLAY_E_PIN': "E pin",
                   'DISPLAY_D4_PIN': "D4 pin",
                   'DISPLAY_D5_PIN': "D5 pin",
                   'DISPLAY_D6_PIN': "D6 pin",
                   'DISPLAY_D7_PIN': "D7 pin"}

    sz = wx.GridBagSizer()
    sz.AddSpacer((20, 40), pos = (0, 0))

    ch = self.addBoolChoice('DISPLAY_BUS', True, 100, self.onBusChoice,
                            size = (160, -1))
    sz.Add(ch, pos = (1, 1))
    sz.AddSpacer((100, 10), pos = (1, 2))

    ch = self.addBoolChoice('DISPLAY_TYPE', False, 100, self.onChoice,
                            size = (240, -1))
    sz.Add(ch, pos = (1, 3))

    b = wx.StaticBox(self, wx.ID_ANY, "Direct 4-bit Bus Pins:")
    b.SetFont(font)
    self.pinbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    self.pinbox.AddSpacer((5, 5))
    for k in ('DISPLAY_RS_PIN', 'DISPLAY_RW_PIN', 'DISPLAY_E_PIN',
              'DISPLAY_D4_PIN', 'DISPLAY_D5_PIN', 'DISPLAY_D6_PIN',
              'DISPLAY_D7_PIN'):
      tc = self.addPinChoice(k, 200)
      self.pinbox.Add(tc)
      self.pinbox.AddSpacer((5, 5))
    sz.Add(self.pinbox, pos = (3, 1))

    self.SetSizer(sz)
    self.enableAll(False)
예제 #12
0
    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.labels = {
            'DISPLAY_BUS': "Display Bus:",
            'DISPLAY_TYPE': "Display Type:",
            'DISPLAY_BUS_4BIT': "Direct with 4 pins",
            'DISPLAY_BUS_8BIT': "Direct with 8 pins",
            'DISPLAY_BUS_I2C': "I²C ( = TWI)",
            'DISPLAY_BUS_SPI': "SPI",
            'DISPLAY_TYPE_SSD1306': "SSD1306 O-LED, 128x32",
            'DISPLAY_TYPE_LCD1302': "LCD 1302"
        }

        sz = wx.GridBagSizer()
        sz.AddSpacer((20, 40), pos=(0, 0))

        ch = self.addBoolChoice('DISPLAY_BUS',
                                True,
                                100,
                                self.onBusChoice,
                                size=(160, -1))
        sz.Add(ch, pos=(1, 1))
        sz.AddSpacer((100, 10), pos=(1, 2))

        ch = self.addBoolChoice('DISPLAY_TYPE',
                                False,
                                100,
                                self.onChoice,
                                size=(200, -1))
        sz.Add(ch, pos=(1, 3))

        self.SetSizer(sz)
        self.enableAll(False)
예제 #13
0
    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

        pinXkeys = [('X_STEP_PIN', 2), ('X_DIR_PIN', 2), ('X_MIN_PIN', 2),
                    ('X_MAX_PIN', 2), ('X_ENABLE_PIN', 2), ('X_INVERT_DIR', 1),
                    ('X_INVERT_MIN', 1), ('X_INVERT_MAX', 1),
                    ('X_INVERT_ENABLE', 1)]
        pinYkeys = [('Y_STEP_PIN', 2), ('Y_DIR_PIN', 2), ('Y_MIN_PIN', 2),
                    ('Y_MAX_PIN', 2), ('Y_ENABLE_PIN', 2), ('Y_INVERT_DIR', 1),
                    ('Y_INVERT_MIN', 1), ('Y_INVERT_MAX', 1),
                    ('Y_INVERT_ENABLE', 1)]
        pinZkeys = [('Z_STEP_PIN', 2), ('Z_DIR_PIN', 2), ('Z_MIN_PIN', 2),
                    ('Z_MAX_PIN', 2), ('Z_ENABLE_PIN', 2), ('Z_INVERT_DIR', 1),
                    ('Z_INVERT_MIN', 1), ('Z_INVERT_MAX', 1),
                    ('Z_INVERT_ENABLE', 1)]
        pinEkeys = [('E_STEP_PIN', 2), ('E_DIR_PIN', 2), ('E_ENABLE_PIN', 2),
                    ('E_INVERT_DIR', 1), ('E_INVERT_ENABLE', 1)]

        self.labels = {
            'X_STEP_PIN': "Step Pin:",
            'X_DIR_PIN': "Direction Pin:",
            'X_MIN_PIN': "Minimum Pin:",
            'X_MAX_PIN': "Maximum Pin:",
            'X_ENABLE_PIN': "Enable Pin:",
            'X_INVERT_DIR': "Invert Direction",
            'X_INVERT_MIN': "Invert Minimum",
            'X_INVERT_MAX': "Invert Maximum",
            'X_INVERT_ENABLE': "Invert Enable",
            'Y_STEP_PIN': "Step Pin:",
            'Y_DIR_PIN': "Direction Pin:",
            'Y_MIN_PIN': "Minimum Pin:",
            'Y_MAX_PIN': "Maximum Pin:",
            'Y_ENABLE_PIN': "Enable Pin:",
            'Y_INVERT_DIR': "Invert Direction",
            'Y_INVERT_MIN': "Invert Minimum",
            'Y_INVERT_MAX': "Invert Maximum",
            'Y_INVERT_ENABLE': "Invert Enable",
            'Z_STEP_PIN': "Step Pin:",
            'Z_DIR_PIN': "Direction Pin:",
            'Z_MIN_PIN': "Minimum Pin:",
            'Z_MAX_PIN': "Maximum Pin:",
            'Z_ENABLE_PIN': "Enable Pin:",
            'Z_INVERT_DIR': "Invert Direction",
            'Z_INVERT_MIN': "Invert Minimum",
            'Z_INVERT_MAX': "Invert Maximum",
            'Z_INVERT_ENABLE': "Invert Enable",
            'E_STEP_PIN': "Step Pin:",
            'E_DIR_PIN': "Direction Pin:",
            'E_ENABLE_PIN': "Enable Pin:",
            'E_INVERT_DIR': "Invert Direction",
            'E_INVERT_ENABLE': "Invert Enable",
            'PS_ON_PIN': "PSU On Pin:",
            'PS_MOSFET_PIN': "PSU MOSFET Pin:",
            'STEPPER_ENABLE_PIN': "Stepper Enable Pin:",
            'STEPPER_INVERT_ENABLE': "Stepper Invert Enable",
            'DEBUG_LED_PIN': "Debug LED Pin:"
        }

        labelWidth = 120

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

        b = wx.StaticBox(self, wx.ID_ANY, "X Axis")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k, ctype in pinXkeys:
            if ctype == 0:
                tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin)
                sbox.Add(tc)
            elif ctype == 2:
                tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
                sbox.Add(tc)
            else:
                cb = self.addCheckBox(k, self.onCheckBox)
                sbox.Add(cb, 1, wx.LEFT, 30)

            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(1, 1))

        b = wx.StaticBox(self, wx.ID_ANY, "Y Axis")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k, ctype in pinYkeys:
            if ctype == 0:
                tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin)
                sbox.Add(tc)
            elif ctype == 2:
                tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
                sbox.Add(tc)
            else:
                cb = self.addCheckBox(k, self.onCheckBox)
                sbox.Add(cb, 1, wx.LEFT, 30)

            sbox.AddSpacer((5, 5))

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

        b = wx.StaticBox(self, wx.ID_ANY, "Z Axis")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k, ctype in pinZkeys:
            if ctype == 0:
                tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin)
                sbox.Add(tc)
            elif ctype == 2:
                tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
                sbox.Add(tc)
            else:
                cb = self.addCheckBox(k, self.onCheckBox)
                sbox.Add(cb, 1, wx.LEFT, 30)

            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(1, 5))

        b = wx.StaticBox(self, wx.ID_ANY, "E Axis")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k, ctype in pinEkeys:
            if ctype == 0:
                tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin)
                sbox.Add(tc)
            elif ctype == 2:
                tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
                sbox.Add(tc)
            else:
                cb = self.addCheckBox(k, self.onCheckBox)
                sbox.Add(cb, 1, wx.LEFT, 30)

            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(1, 7))

        k = "STEPPER_ENABLE_PIN"
        tc = self.addPinChoice(k, "", pinNames, True, labelWidth + 20)
        sz.Add(tc, pos=(3, 1))

        sz.AddSpacer((10, 10), pos=(4, 1))

        k = "STEPPER_INVERT_ENABLE"
        cb = self.addCheckBox(k, self.onCheckBox)
        sz.Add(cb, pos=(5, 1), flag=wx.ALIGN_CENTER_HORIZONTAL)

        k = "PS_ON_PIN"
        tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
        sz.Add(tc, pos=(3, 3))

        k = "PS_MOSFET_PIN"
        tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
        sz.Add(tc, pos=(5, 3))

        k = "DEBUG_LED_PIN"
        tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
        sz.Add(tc, pos=(3, 7))

        self.SetSizer(sz)
        self.enableAll(False)
예제 #14
0
    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",
            '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 = "<none>"
        self.heaterNames = [self.heaterNameNone]
        self.boardHeaters = []
        self.processors = []

        sz = wx.GridBagSizer()
        sz.AddSpacer((20, 40), pos=(0, 0))
        sz.AddSpacer((40, 40), pos=(0, 2))
        sz.AddSpacer((40, 40), pos=(0, 4))
        sz.AddSpacer((20, 30), pos=(1, 0))
        sz.AddSpacer((20, 30), pos=(2, 0))
        sz.AddSpacer((20, 30), pos=(3, 0))
        sz.AddSpacer((20, 30), pos=(4, 0))
        sz.AddSpacer((20, 30), pos=(5, 0))
        sz.AddSpacer((20, 30), pos=(6, 0))
        sz.AddSpacer((20, 30), pos=(7, 0))
        sz.AddSpacer((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))

        b = wx.StaticBox(self, wx.ID_ANY, "BANG BANG Bed Control")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))

        k = 'BANG_BANG'
        cb = self.addCheckBox(k, self.onCheckBox)
        sbox.Add(cb, 1, wx.LEFT, 60)
        sbox.AddSpacer((5, 20))

        k = 'BANG_BANG_ON'
        tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger)
        sbox.Add(tc)
        sbox.AddSpacer((5, 5))

        k = 'BANG_BANG_OFF'
        tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger)
        sbox.Add(tc)
        sbox.AddSpacer((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.AddSpacer((5, 5))

        k = 'DC_EXTRUDER'
        ch = self.addChoice(k, self.heaterNames, 0, 60, self.onChoice)
        sbox.Add(ch)
        sbox.AddSpacer((5, 5))

        k = 'DC_EXTRUDER_PWM'
        tc = self.addTextCtrl(k, 60, self.onTextCtrlInteger)
        sbox.Add(tc)
        sbox.AddSpacer((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.onTextCtrlEWMA)
        sz.Add(tc, pos=(8, 5))

        self.SetSizer(sz)
        self.enableAll(False)
예제 #15
0
    def __init__(self, parent, nb, idPg, heatersPage, font):
        wx.Panel.__init__(self, nb, wx.ID_ANY)
        Page.__init__(self, font)
        self.parent = parent
        self.heatersPage = heatersPage
        self.font = font
        self.id = idPg

        self.sensorTypeKeys = {
            'TT_MAX6675': 'TEMP_MAX6675',
            'TT_THERMISTOR': 'TEMP_THERMISTOR',
            'TT_AD595': 'TEMP_AD595',
            'TT_PT100': 'TEMP_PT100',
            'TT_INTERCOM': 'TEMP_INTERCOM'
        }
        self.labels = {
            'TEMP_MAX6675': "MAX6675",
            'TEMP_THERMISTOR': "Thermistor",
            'TEMP_AD595': "AD595",
            'TEMP_PT100': "PT100",
            'TEMP_INTERCOM': "Intercom"
        }

        self.validPins = pinNames

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

        self.sensors = []

        self.lb = SensorList(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.Enable(False)
        self.bAdd.SetToolTipString("Add a sensor 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)
        bsz.Add(self.bModify)
        self.bModify.SetToolTipString(
            "Modify the selected temperature sensor.")

        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 temperature sensor "
                                      "from the configuration.")

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

        self.SetSizer(sz)
        self.enableAll(False)
예제 #16
0
    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

        pinXkeys = [
            ("X_STEP_PIN", 2),
            ("X_DIR_PIN", 2),
            ("X_MIN_PIN", 2),
            ("X_MAX_PIN", 2),
            ("X_ENABLE_PIN", 2),
            ("X_INVERT_DIR", 1),
            ("X_INVERT_MIN", 1),
            ("X_INVERT_MAX", 1),
            ("X_INVERT_ENABLE", 1),
        ]
        pinYkeys = [
            ("Y_STEP_PIN", 2),
            ("Y_DIR_PIN", 2),
            ("Y_MIN_PIN", 2),
            ("Y_MAX_PIN", 2),
            ("Y_ENABLE_PIN", 2),
            ("Y_INVERT_DIR", 1),
            ("Y_INVERT_MIN", 1),
            ("Y_INVERT_MAX", 1),
            ("Y_INVERT_ENABLE", 1),
        ]
        pinZkeys = [
            ("Z_STEP_PIN", 2),
            ("Z_DIR_PIN", 2),
            ("Z_MIN_PIN", 2),
            ("Z_MAX_PIN", 2),
            ("Z_ENABLE_PIN", 2),
            ("Z_INVERT_DIR", 1),
            ("Z_INVERT_MIN", 1),
            ("Z_INVERT_MAX", 1),
            ("Z_INVERT_ENABLE", 1),
        ]
        pinEkeys = [
            ("E_STEP_PIN", 2),
            ("E_DIR_PIN", 2),
            ("E_ENABLE_PIN", 2),
            ("E_INVERT_DIR", 1),
            ("E_INVERT_ENABLE", 1),
        ]

        self.labels = {
            "X_STEP_PIN": "Step Pin:",
            "X_DIR_PIN": "Direction Pin:",
            "X_MIN_PIN": "Minimum Pin:",
            "X_MAX_PIN": "Maximum Pin:",
            "X_ENABLE_PIN": "Enable Pin:",
            "X_INVERT_DIR": "Invert Direction",
            "X_INVERT_MIN": "Invert Minimum",
            "X_INVERT_MAX": "Invert Maximum",
            "X_INVERT_ENABLE": "Invert Enable",
            "Y_STEP_PIN": "Step Pin:",
            "Y_DIR_PIN": "Direction Pin:",
            "Y_MIN_PIN": "Minimum Pin:",
            "Y_MAX_PIN": "Maximum Pin:",
            "Y_ENABLE_PIN": "Enable Pin:",
            "Y_INVERT_DIR": "Invert Direction",
            "Y_INVERT_MIN": "Invert Minimum",
            "Y_INVERT_MAX": "Invert Maximum",
            "Y_INVERT_ENABLE": "Invert Enable",
            "Z_STEP_PIN": "Step Pin:",
            "Z_DIR_PIN": "Direction Pin:",
            "Z_MIN_PIN": "Minimum Pin:",
            "Z_MAX_PIN": "Maximum Pin:",
            "Z_ENABLE_PIN": "Enable Pin:",
            "Z_INVERT_DIR": "Invert Direction",
            "Z_INVERT_MIN": "Invert Minimum",
            "Z_INVERT_MAX": "Invert Maximum",
            "Z_INVERT_ENABLE": "Invert Enable",
            "E_STEP_PIN": "Step Pin:",
            "E_DIR_PIN": "Direction Pin:",
            "E_ENABLE_PIN": "Enable Pin:",
            "E_INVERT_DIR": "Invert Direction",
            "E_INVERT_ENABLE": "Invert Enable",
            "PS_ON_PIN": "PSU On Pin:",
            "PS_MOSFET_PIN": "PSU MOSFET Pin:",
            "STEPPER_ENABLE_PIN": "Stepper Enable Pin:",
            "STEPPER_INVERT_ENABLE": "Stepper Invert Enable",
            "DEBUG_LED_PIN": "Debug LED Pin:",
        }

        labelWidth = 120

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

        b = wx.StaticBox(self, wx.ID_ANY, "X Axis")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k, ctype in pinXkeys:
            if ctype == 0:
                tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin)
                sbox.Add(tc)
            elif ctype == 2:
                tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
                sbox.Add(tc)
            else:
                cb = self.addCheckBox(k, self.onCheckBox)
                sbox.Add(cb, 1, wx.LEFT, 30)

            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(1, 1))

        b = wx.StaticBox(self, wx.ID_ANY, "Y Axis")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k, ctype in pinYkeys:
            if ctype == 0:
                tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin)
                sbox.Add(tc)
            elif ctype == 2:
                tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
                sbox.Add(tc)
            else:
                cb = self.addCheckBox(k, self.onCheckBox)
                sbox.Add(cb, 1, wx.LEFT, 30)

            sbox.AddSpacer((5, 5))

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

        b = wx.StaticBox(self, wx.ID_ANY, "Z Axis")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k, ctype in pinZkeys:
            if ctype == 0:
                tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin)
                sbox.Add(tc)
            elif ctype == 2:
                tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
                sbox.Add(tc)
            else:
                cb = self.addCheckBox(k, self.onCheckBox)
                sbox.Add(cb, 1, wx.LEFT, 30)

            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(1, 5))

        b = wx.StaticBox(self, wx.ID_ANY, "E Axis")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k, ctype in pinEkeys:
            if ctype == 0:
                tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin)
                sbox.Add(tc)
            elif ctype == 2:
                tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
                sbox.Add(tc)
            else:
                cb = self.addCheckBox(k, self.onCheckBox)
                sbox.Add(cb, 1, wx.LEFT, 30)

            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(1, 7))

        k = "STEPPER_ENABLE_PIN"
        tc = self.addPinChoice(k, "", pinNames, True, labelWidth + 20)
        sz.Add(tc, pos=(3, 1))

        sz.AddSpacer((10, 10), pos=(4, 1))

        k = "STEPPER_INVERT_ENABLE"
        cb = self.addCheckBox(k, self.onCheckBox)
        sz.Add(cb, pos=(5, 1), flag=wx.ALIGN_CENTER_HORIZONTAL)

        k = "PS_ON_PIN"
        tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
        sz.Add(tc, pos=(3, 3))

        k = "PS_MOSFET_PIN"
        tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
        sz.Add(tc, pos=(5, 3))

        k = "DEBUG_LED_PIN"
        tc = self.addPinChoice(k, "", pinNames, True, labelWidth)
        sz.Add(tc, pos=(3, 7))

        self.SetSizer(sz)
        self.enableAll(False)
예제 #17
0
  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.accTypeKeys = ['ACCELERATION_REPRAP', 'ACCELERATION_RAMPING',
                        'ACCELERATION_TEMPORAL']
    self.jerkKeys = ['MAX_JERK_X', 'MAX_JERK_Y', 'MAX_JERK_Z', 'MAX_JERK_E']

    self.labels = {'ACCELERATION_REPRAP': "RepRap",
                   'ACCELERATION_RAMPING': "Ramping",
                   'ACCELERATION_TEMPORAL': "Temporal",
                   'ACCELERATION': "Acceleration:",
                   'LOOKAHEAD': "Look Ahead",
                   'MAX_JERK_X': "X:", 'MAX_JERK_Y': "Y:", 'MAX_JERK_Z': "Z:",
                   'MAX_JERK_E': "E:"}

    sz = wx.GridBagSizer()
    sz.AddSpacer((20, 40), pos = (0, 0))
    b = wx.StaticBox(self, wx.ID_ANY, "Acceleration Type")
    b.SetFont(font)
    sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    sbox.AddSpacer((5, 5))
    style = wx.RB_GROUP
    for k in self.accTypeKeys:
      rb = self.addRadioButton(k, style, self.onAccTypeSelect, b)
      style = 0

      sbox.Add(rb, 1, wx.LEFT + wx.RIGHT, 16)
      sbox.AddSpacer((5, 5))

    self.rbNone = wx.RadioButton(self, wx.ID_ANY, "None", style = style)
    self.rbNone.SetFont(font)
    self.rbNone.SetValue(True)
    self.Bind(wx.EVT_RADIOBUTTON, self.onAccTypeSelect, self.rbNone)
    sbox.Add(self.rbNone, 1, wx.LEFT + wx.RIGHT, 16)
    sbox.AddSpacer((5, 5))
    sz.Add(sbox, pos = (1, 1))

    b = wx.StaticBox(self, wx.ID_ANY, "Ramping Parameters")
    b.SetFont(font)
    sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    sbox.AddSpacer((5, 5))

    k = 'ACCELERATION'
    tc = self.addTextCtrl(k, 80, self.onTextCtrlFloat)
    self.textControls[k].Enable(False)

    sbox.Add(tc)
    sbox.AddSpacer((5, 5))

    k = 'LOOKAHEAD'
    cb = self.addCheckBox(k, self.onCheckBox)
    self.checkBoxes[k].Enable(False)

    sbox.Add(cb, 1, wx.ALIGN_CENTER_HORIZONTAL)
    sbox.AddSpacer((5, 5))

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

    b = wx.StaticBox(self, wx.ID_ANY, "Maximum Jerk")
    b.SetFont(font)
    sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    sbox.AddSpacer((5, 5))
    for k in self.jerkKeys:
      tc = self.addTextCtrl(k, 40, self.onTextCtrlInteger)

      sbox.Add(tc)
      sbox.AddSpacer((5, 5))

    sz.AddSpacer((80, 20), pos = (1, 4))
    sz.Add(sbox, pos = (1, 5))

    self.SetSizer(sz)
    self.enableAll(False)
    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.accTypeKeys = [
            'ACCELERATION_REPRAP', 'ACCELERATION_RAMPING',
            'ACCELERATION_TEMPORAL'
        ]
        self.jerkKeys = [
            'MAX_JERK_X', 'MAX_JERK_Y', 'MAX_JERK_Z', 'MAX_JERK_E'
        ]

        self.labels = {
            'ACCELERATION_REPRAP': "RepRap",
            'ACCELERATION_RAMPING': "Ramping",
            'ACCELERATION_TEMPORAL': "Temporal",
            'ACCELERATION': "Acceleration:",
            'LOOKAHEAD': "Look Ahead",
            'MAX_JERK_X': "X:",
            'MAX_JERK_Y': "Y:",
            'MAX_JERK_Z': "Z:",
            'MAX_JERK_E': "E:"
        }

        sz = wx.GridBagSizer()
        sz.AddSpacer((20, 40), pos=(0, 0))
        b = wx.StaticBox(self, wx.ID_ANY, "Acceleration Type")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        style = wx.RB_GROUP
        for k in self.accTypeKeys:
            rb = self.addRadioButton(k, style, self.onAccTypeSelect, b)
            style = 0

            sbox.Add(rb, 1, wx.LEFT + wx.RIGHT, 16)
            sbox.AddSpacer((5, 5))

        self.rbNone = wx.RadioButton(self, wx.ID_ANY, "None", style=style)
        self.rbNone.SetFont(font)
        self.rbNone.SetValue(True)
        self.Bind(wx.EVT_RADIOBUTTON, self.onAccTypeSelect, self.rbNone)
        sbox.Add(self.rbNone, 1, wx.LEFT + wx.RIGHT, 16)
        sbox.AddSpacer((5, 5))
        sz.Add(sbox, pos=(1, 1))

        b = wx.StaticBox(self, wx.ID_ANY, "Ramping Parameters")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))

        k = 'ACCELERATION'
        tc = self.addTextCtrl(k, 80, self.onTextCtrlFloat)
        self.textControls[k].Enable(False)

        sbox.Add(tc)
        sbox.AddSpacer((5, 5))

        k = 'LOOKAHEAD'
        cb = self.addCheckBox(k, self.onCheckBox)
        self.checkBoxes[k].Enable(False)

        sbox.Add(cb, 1, wx.ALIGN_CENTER_HORIZONTAL)
        sbox.AddSpacer((5, 5))

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

        b = wx.StaticBox(self, wx.ID_ANY, "Maximum Jerk")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k in self.jerkKeys:
            tc = self.addTextCtrl(k, 40, self.onTextCtrlInteger)

            sbox.Add(tc)
            sbox.AddSpacer((5, 5))

        sz.AddSpacer((80, 20), pos=(1, 4))
        sz.Add(sbox, pos=(1, 5))

        self.SetSizer(sz)
        self.enableAll(False)
예제 #19
0
  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",
                   '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 = "<none>"
    self.heaterNames = [self.heaterNameNone]
    self.boardHeaters = []
    self.processors = []

    sz = wx.GridBagSizer()
    sz.AddSpacer((20, 40), pos = (0, 0))
    sz.AddSpacer((40, 40), pos = (0, 2))
    sz.AddSpacer((40, 40), pos = (0, 4))
    sz.AddSpacer((20, 30), pos = (1, 0))
    sz.AddSpacer((20, 30), pos = (2, 0))
    sz.AddSpacer((20, 30), pos = (3, 0))
    sz.AddSpacer((20, 30), pos = (4, 0))
    sz.AddSpacer((20, 30), pos = (5, 0))
    sz.AddSpacer((20, 30), pos = (6, 0))
    sz.AddSpacer((20, 30), pos = (7, 0))
    sz.AddSpacer((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))

    b = wx.StaticBox(self, wx.ID_ANY, "BANG BANG Bed Control")
    b.SetFont(font)
    sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    sbox.AddSpacer((5, 5))

    k = 'BANG_BANG'
    cb = self.addCheckBox(k, self.onCheckBox)
    sbox.Add(cb, 1, wx.LEFT, 60)
    sbox.AddSpacer((5, 20))

    k = 'BANG_BANG_ON'
    tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger)
    sbox.Add(tc)
    sbox.AddSpacer((5, 5))

    k = 'BANG_BANG_OFF'
    tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger)
    sbox.Add(tc)
    sbox.AddSpacer((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.AddSpacer((5, 5))

    k = 'DC_EXTRUDER'
    ch = self.addChoice(k, self.heaterNames, 0, 60, self.onChoice)
    sbox.Add(ch)
    sbox.AddSpacer((5, 5))

    k = 'DC_EXTRUDER_PWM'
    tc = self.addTextCtrl(k, 60, self.onTextCtrlInteger)
    sbox.Add(tc)
    sbox.AddSpacer((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.onTextCtrlEWMA)
    sz.Add(tc, pos = (8, 5))

    self.SetSizer(sz)
    self.enableAll(False)
예제 #20
0
    def __init__(self, parent, nb, idPg, font):
        wx.Panel.__init__(self, nb, wx.ID_ANY)
        Page.__init__(self, font)
        self.id = idPg
        self.parent = parent
        self.font = font

        self.spmKeys = [
            'STEPS_PER_M_X', 'STEPS_PER_M_Y', 'STEPS_PER_M_Z', 'STEPS_PER_M_E'
        ]

        self.mfrKeys = [
            'MAXIMUM_FEEDRATE_X', 'MAXIMUM_FEEDRATE_Y', 'MAXIMUM_FEEDRATE_Z',
            'MAXIMUM_FEEDRATE_E'
        ]

        self.msrKeys = [
            'SEARCH_FEEDRATE_X', 'SEARCH_FEEDRATE_Y', 'SEARCH_FEEDRATE_Z'
        ]

        self.eclKeys = [
            'ENDSTOP_CLEARANCE_X', 'ENDSTOP_CLEARANCE_Y', 'ENDSTOP_CLEARANCE_Z'
        ]

        self.minmaxKeys = [
            'X_MIN', 'X_MAX', 'Y_MIN', 'Y_MAX', 'Z_MIN', 'Z_MAX'
        ]

        self.kinematicsKeys = ['KINEMATICS_STRAIGHT', 'KINEMATICS_COREXY']

        self.labels = {
            'STEPS_PER_M_X': "X:",
            'STEPS_PER_M_Y': "Y:",
            'STEPS_PER_M_Z': "Z:",
            'STEPS_PER_M_E': "E:",
            'MAXIMUM_FEEDRATE_X': "X:",
            'MAXIMUM_FEEDRATE_Y': "Y:",
            'MAXIMUM_FEEDRATE_Z': "Z:",
            'MAXIMUM_FEEDRATE_E': "E:",
            'SEARCH_FEEDRATE_X': "X:",
            'SEARCH_FEEDRATE_Y': "Y:",
            'SEARCH_FEEDRATE_Z': "Z:",
            'ENDSTOP_CLEARANCE_X': "X:",
            'ENDSTOP_CLEARANCE_Y': "Y:",
            'ENDSTOP_CLEARANCE_Z': "Z:",
            'X_MIN': "Min X:",
            'X_MAX': "Max X:",
            'Y_MIN': "Min Y:",
            'Y_MAX': "Max Y:",
            'Z_MIN': "Min Z:",
            'Z_MAX': "Max Z:",
            'E_ABSOLUTE': "Absolute E Coordinates",
            'KINEMATICS_STRAIGHT': "Straight",
            'KINEMATICS_COREXY': "CoreXY"
        }

        labelWidth = 40

        sz = wx.GridBagSizer()
        sz.AddSpacer((10, 10), pos=(0, 0))
        sz.AddSpacer((90, 10), pos=(0, 4))

        b = wx.StaticBox(self, wx.ID_ANY, "Steps Per Meter")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k in self.spmKeys:
            tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
            sbox.Add(tc)
            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(1, 1))

        b = wx.StaticBox(self, wx.ID_ANY, "Maximum Feedrate")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k in self.mfrKeys:
            tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
            sbox.Add(tc)
            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(1, 5))

        b = wx.StaticBox(self, wx.ID_ANY, "Search Feedrate")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k in self.msrKeys:
            tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
            sbox.Add(tc)
            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(1, 7))

        b = wx.StaticBox(self, wx.ID_ANY, "Endstop Clearance")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k in self.eclKeys:
            tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
            sbox.Add(tc)
            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(3, 5))

        b = wx.StaticBox(self, wx.ID_ANY, "Travel Limits")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        for k in self.minmaxKeys:
            tc = self.addTextCtrl(k, labelWidth + 20, self.onTextCtrlFloat)
            sbox.Add(tc)
            sbox.AddSpacer((5, 5))

        sz.Add(sbox, pos=(3, 7))

        vsz = wx.BoxSizer(wx.VERTICAL)

        b = wx.StaticBox(self, wx.ID_ANY, "Kinematics")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.AddSpacer((5, 5))
        style = wx.RB_GROUP
        for k in self.kinematicsKeys:
            rb = self.addRadioButton(k, style, self.onKinematicsSelect, b)
            style = 0

            sbox.Add(rb, 1, wx.LEFT + wx.RIGHT, 16)
            sbox.AddSpacer((5, 5))

        vsz.Add(sbox, 1, wx.LEFT, 40)

        cb = self.addCheckBox('E_ABSOLUTE', self.onCheckBox)

        vsz.Add(cb, 1, wx.LEFT, 40)

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

        bsz = wx.BoxSizer(wx.VERTICAL)
        b = wx.Button(self, wx.ID_ANY, "Calculate\nBelt Driven", size=BSIZE)
        b.SetBackgroundColour(self.deco.getBackgroundColour())
        b.SetFont(font)
        b.SetToolTipString(
            "Open the calculator for axes that are belt-driven.")
        self.Bind(wx.EVT_BUTTON, self.onCalcBelt, b)
        self.bCalcBelt = b

        bsz.Add(b, 1, wx.ALL, 5)
        b = wx.Button(self, wx.ID_ANY, "Calculate\nScrew Driven", size=BSIZE)
        b.SetBackgroundColour(self.deco.getBackgroundColour())
        b.SetFont(font)
        bsz.Add(b, 1, wx.ALL, 5)
        b.SetToolTipString(
            "Open the calculator for axes that are screw-driven.")
        self.Bind(wx.EVT_BUTTON, self.onCalcScrew, b)
        self.bCalcScrew = b

        sz.Add(bsz, pos=(1, 3))
        self.enableAll(False)
        self.SetSizer(sz)
예제 #21
0
  def __init__(self, parent, nb, idPg, font):
    wx.Panel.__init__(self, nb, wx.ID_ANY)
    Page.__init__(self, font)
    self.id = idPg
    self.parent = parent
    self.font = font

    self.spmKeys = ['STEPS_PER_M_X', 'STEPS_PER_M_Y', 'STEPS_PER_M_Z',
                    'STEPS_PER_M_E']

    self.mfrKeys = ['MAXIMUM_FEEDRATE_X', 'MAXIMUM_FEEDRATE_Y',
                    'MAXIMUM_FEEDRATE_Z', 'MAXIMUM_FEEDRATE_E']

    self.msrKeys = ['SEARCH_FEEDRATE_X', 'SEARCH_FEEDRATE_Y',
                    'SEARCH_FEEDRATE_Z']

    self.eclKeys = ['ENDSTOP_CLEARANCE_X', 'ENDSTOP_CLEARANCE_Y',
                    'ENDSTOP_CLEARANCE_Z']

    self.minmaxKeys = ['X_MIN', 'X_MAX', 'Y_MIN', 'Y_MAX', 'Z_MIN', 'Z_MAX']

    self.kinematicsKeys = ['KINEMATICS_STRAIGHT', 'KINEMATICS_COREXY']

    self.labels = {'STEPS_PER_M_X': "X:", 'STEPS_PER_M_Y': "Y:",
                   'STEPS_PER_M_Z': "Z:", 'STEPS_PER_M_E' : "E:",
                   'MAXIMUM_FEEDRATE_X': "X:", 'MAXIMUM_FEEDRATE_Y': "Y:",
                   'MAXIMUM_FEEDRATE_Z': "Z:", 'MAXIMUM_FEEDRATE_E': "E:",
                   'SEARCH_FEEDRATE_X': "X:", 'SEARCH_FEEDRATE_Y': "Y:",
                   'SEARCH_FEEDRATE_Z': "Z:",
                   'ENDSTOP_CLEARANCE_X': "X:", 'ENDSTOP_CLEARANCE_Y': "Y:",
                   'ENDSTOP_CLEARANCE_Z': "Z:",
                   'X_MIN': "Min X:", 'X_MAX': "Max X:", 'Y_MIN': "Min Y:",
                   'Y_MAX': "Max Y:", 'Z_MIN': "Min Z:", 'Z_MAX': "Max Z:",
                   'E_ABSOLUTE': "Absolute E Coordinates",
                   'KINEMATICS_STRAIGHT': "Straight",
                   'KINEMATICS_COREXY': "CoreXY"}

    labelWidth = 40;

    sz = wx.GridBagSizer()
    sz.AddSpacer((10, 10), pos = (0, 0))
    sz.AddSpacer((90, 10), pos = (0, 4))

    b = wx.StaticBox(self, wx.ID_ANY, "Steps Per Meter")
    b.SetFont(font)
    sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    sbox.AddSpacer((5, 5))
    for k in self.spmKeys:
      tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
      sbox.Add(tc)
      sbox.AddSpacer((5, 5))

    sz.Add(sbox, pos = (1, 1))

    b = wx.StaticBox(self, wx.ID_ANY, "Maximum Feedrate")
    b.SetFont(font)
    sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    sbox.AddSpacer((5, 5))
    for k in self.mfrKeys:
      tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
      sbox.Add(tc)
      sbox.AddSpacer((5, 5))

    sz.Add(sbox, pos = (1, 5))

    b = wx.StaticBox(self, wx.ID_ANY, "Search Feedrate")
    b.SetFont(font)
    sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    sbox.AddSpacer((5, 5))
    for k in self.msrKeys:
      tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
      sbox.Add(tc)
      sbox.AddSpacer((5, 5))

    sz.Add(sbox, pos = (1, 7))

    b = wx.StaticBox(self, wx.ID_ANY, "Endstop Clearance")
    b.SetFont(font)
    sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    sbox.AddSpacer((5, 5))
    for k in self.eclKeys:
      tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
      sbox.Add(tc)
      sbox.AddSpacer((5, 5))

    sz.Add(sbox, pos = (3, 5))

    b = wx.StaticBox(self, wx.ID_ANY, "Travel Limits")
    b.SetFont(font)
    sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    sbox.AddSpacer((5, 5))
    for k in self.minmaxKeys:
      tc = self.addTextCtrl(k, labelWidth + 20, self.onTextCtrlFloat)
      sbox.Add(tc)
      sbox.AddSpacer((5, 5))

    sz.Add(sbox, pos = (3, 7))

    vsz = wx.BoxSizer(wx.VERTICAL)

    b = wx.StaticBox(self, wx.ID_ANY, "Kinematics")
    b.SetFont(font)
    sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
    sbox.AddSpacer((5, 5))
    style = wx.RB_GROUP
    for k in self.kinematicsKeys:
      rb = self.addRadioButton(k, style, self.onKinematicsSelect, b)
      style = 0

      sbox.Add(rb, 1, wx.LEFT + wx.RIGHT, 16)
      sbox.AddSpacer((5, 5))

    vsz.Add(sbox, 1, wx.LEFT, 40)

    cb = self.addCheckBox('E_ABSOLUTE', self.onCheckBox)

    vsz.Add(cb, 1, wx.LEFT, 40)

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

    bsz = wx.BoxSizer(wx.VERTICAL)
    b = wx.Button(self, wx.ID_ANY, "Calculate\nBelt Driven", size = BSIZE)
    b.SetBackgroundColour(self.deco.getBackgroundColour())
    b.SetFont(font)
    b.SetToolTipString("Open the calculator for axes that are belt-driven.")
    self.Bind(wx.EVT_BUTTON, self.onCalcBelt, b)
    self.bCalcBelt = b

    bsz.Add(b, 1, wx.ALL, 5)
    b = wx.Button(self, wx.ID_ANY, "Calculate\nScrew Driven", size = BSIZE)
    b.SetBackgroundColour(self.deco.getBackgroundColour())
    b.SetFont(font)
    bsz.Add(b, 1, wx.ALL, 5)
    b.SetToolTipString("Open the calculator for axes that are screw-driven.")
    self.Bind(wx.EVT_BUTTON, self.onCalcScrew, b)
    self.bCalcScrew = b

    sz.Add(bsz, pos = (1, 3))
    self.enableAll(False)
    self.SetSizer(sz)
    def __init__(self, parent, nb, idPg, font):
        wx.Panel.__init__(self, nb, wx.ID_ANY)
        Page.__init__(self, font)
        self.id = idPg
        self.parent = parent
        self.font = font

        self.homing = []

        self.spmKeys = [
            "STEPS_PER_M_X",
            "STEPS_PER_M_Y",
            "STEPS_PER_M_Z",
            "STEPS_PER_M_E",
        ]

        self.mfrKeys = [
            "MAXIMUM_FEEDRATE_X",
            "MAXIMUM_FEEDRATE_Y",
            "MAXIMUM_FEEDRATE_Z",
            "MAXIMUM_FEEDRATE_E",
        ]

        self.msrKeys = [
            "SEARCH_FEEDRATE_X", "SEARCH_FEEDRATE_Y", "SEARCH_FEEDRATE_Z"
        ]

        self.eclKeys = [
            "ENDSTOP_CLEARANCE_X",
            "ENDSTOP_CLEARANCE_Y",
            "ENDSTOP_CLEARANCE_Z",
        ]

        self.minmaxKeys = [
            "X_MIN", "X_MAX", "Y_MIN", "Y_MAX", "Z_MIN", "Z_MAX"
        ]

        self.kinematicsKeys = ["KINEMATICS_STRAIGHT", "KINEMATICS_COREXY"]

        self.homingKeys = [
            "HOMING_STEP1",
            "HOMING_STEP2",
            "HOMING_STEP3",
            "HOMING_STEP4",
        ]

        self.labels = {
            "STEPS_PER_M_X": "X:",
            "STEPS_PER_M_Y": "Y:",
            "STEPS_PER_M_Z": "Z:",
            "STEPS_PER_M_E": "E:",
            "MAXIMUM_FEEDRATE_X": "X:",
            "MAXIMUM_FEEDRATE_Y": "Y:",
            "MAXIMUM_FEEDRATE_Z": "Z:",
            "MAXIMUM_FEEDRATE_E": "E:",
            "SEARCH_FEEDRATE_X": "X:",
            "SEARCH_FEEDRATE_Y": "Y:",
            "SEARCH_FEEDRATE_Z": "Z:",
            "ENDSTOP_CLEARANCE_X": "X:",
            "ENDSTOP_CLEARANCE_Y": "Y:",
            "ENDSTOP_CLEARANCE_Z": "Z:",
            "X_MIN": "Min X:",
            "X_MAX": "Max X:",
            "Y_MIN": "Min Y:",
            "Y_MAX": "Max Y:",
            "Z_MIN": "Min Z:",
            "Z_MAX": "Max Z:",
            "E_ABSOLUTE": "Absolute E Coordinates",
            "KINEMATICS_STRAIGHT": "Straight",
            "KINEMATICS_COREXY": "CoreXY",
            "HOMING_STEP1": "Step 1:",
            "HOMING_STEP2": "Step 2:",
            "HOMING_STEP3": "Step 3:",
            "HOMING_STEP4": "Step 4:",
            "none": "-",
            "x_negative": "X min",
            "x_positive": "X max",
            "y_negative": "Y min",
            "y_positive": "Y max",
            "z_negative": "Z min",
            "z_positive": "Z max",
        }

        labelWidth = 40

        sz = wx.GridBagSizer()
        sz.Add((10, 10), pos=(0, 0))
        sz.Add((90, 10), pos=(0, 4))

        b = wx.StaticBox(self, wx.ID_ANY, "Steps Per Meter")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.Add((5, 5))
        for k in self.spmKeys:
            tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
            sbox.Add(tc)
            sbox.Add((5, 5))

        sz.Add(sbox, pos=(1, 1))

        b = wx.StaticBox(self, wx.ID_ANY, "Maximum Feedrate")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.Add((5, 5))
        for k in self.mfrKeys:
            tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
            sbox.Add(tc)
            sbox.Add((5, 5))

        sz.Add(sbox, pos=(1, 5))

        b = wx.StaticBox(self, wx.ID_ANY, "Search Feedrate")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.Add((5, 5))
        for k in self.msrKeys:
            tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
            sbox.Add(tc)
            sbox.Add((5, 5))

        sz.Add(sbox, pos=(1, 7))

        b = wx.StaticBox(self, wx.ID_ANY, "Endstop Clearance")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.Add((5, 5))
        for k in self.eclKeys:
            tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
            sbox.Add(tc)
            sbox.Add((5, 5))

        sz.Add(sbox, pos=(3, 5))

        b = wx.StaticBox(self, wx.ID_ANY, "Travel Limits")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.Add((5, 5))
        for k in self.minmaxKeys:
            tc = self.addTextCtrl(k, labelWidth + 20, self.onTextCtrlFloat)
            sbox.Add(tc)
            sbox.Add((5, 5))

        sz.Add(sbox, pos=(3, 7))

        vsz = wx.BoxSizer(wx.VERTICAL)

        b = wx.StaticBox(self, wx.ID_ANY, "Kinematics")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.Add((5, 5))
        style = wx.RB_GROUP
        for k in self.kinematicsKeys:
            rb = self.addRadioButton(k, style, self.onKinematicsSelect, b)
            style = 0

            sbox.Add(rb, 1, wx.LEFT + wx.RIGHT, 16)
            sbox.Add((5, 5))

        vsz.Add(sbox, 1, wx.LEFT, 40)

        cb = self.addCheckBox("E_ABSOLUTE", self.onCheckBox)

        vsz.Add(cb, 1, wx.LEFT, 40)

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

        bsz = wx.BoxSizer(wx.VERTICAL)
        b = wx.Button(self, wx.ID_ANY, "Calculate\nBelt Driven", size=BSIZE)
        b.SetBackgroundColour(self.deco.getBackgroundColour())
        b.SetFont(font)
        b.SetToolTip("Open the calculator for axes that are belt-driven.")
        self.Bind(wx.EVT_BUTTON, self.onCalcBelt, b)
        self.bCalcBelt = b

        bsz.Add(b, 1, wx.ALL, 5)
        b = wx.Button(self, wx.ID_ANY, "Calculate\nScrew Driven", size=BSIZE)
        b.SetBackgroundColour(self.deco.getBackgroundColour())
        b.SetFont(font)
        bsz.Add(b, 1, wx.ALL, 5)
        b.SetToolTip("Open the calculator for axes that are screw-driven.")
        self.Bind(wx.EVT_BUTTON, self.onCalcScrew, b)
        self.bCalcScrew = b

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

        b = wx.StaticBox(self, wx.ID_ANY, "Homing Order")
        b.SetFont(font)
        sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
        sbox.Add((5, 5))
        for k in self.homingKeys:
            tc = self.addChoice(k, self.homing, 0, labelWidth + 20,
                                self.onChoice)
            sbox.Add(tc)
            sbox.Add((5, 5))
        sz.Add(sbox, pos=(3, 3))

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