chiark / gitweb /
Initial fakeouts for Mangrove
[cura.git] / Cura / gui / configWizard.py
index 0377d6d84013887067a9750ece40df758718784c..b5d8fa92f5f3d1300186eb7df39162fd53b49e09 100644 (file)
@@ -15,6 +15,7 @@ from Cura.util import machineCom
 from Cura.util import profile
 from Cura.util import gcodeGenerator
 from Cura.util import resources
+from Cura.util import version
 
 
 class InfoBox(wx.Panel):
@@ -155,6 +156,16 @@ class ImageButton(wx.Panel):
                                if ImageButton.__last_group__ == self:
                                        ImageButton.__last_group__ = None
 
+       def TriggerGroupCallbacks(self):
+               if self.group:
+                       for ib in ImageButton.__groups__[self.group]:
+                               if ib.GetValue() and ib.callback:
+                                       ib.callback()
+                                       break
+               else:
+                       if self.GetValue() and self.callback:
+                               self.callback()
+
        def OnLeftClick(self, e):
                self.SetValue(True)
 
@@ -1094,8 +1105,6 @@ class LulzbotMachineSelectPage(InfoPage):
 
        def __init__(self, parent):
                super(LulzbotMachineSelectPage, self).__init__(parent, _("Select your machine"))
-               self.AddBitmap(wx.Bitmap(resources.getPathForImage('Lulzbot_logo.png')))
-               self.AddText(_("Select your printer :"))
 
                self.panel = self.AddPanel()
 
@@ -1103,16 +1112,22 @@ class LulzbotMachineSelectPage(InfoPage):
                self.LulzbotMini = self.AddImageButton(self.panel, 0, 0, _("LulzBot Mini"),
                                                                                           'Lulzbot_mini.jpg', image_size, style=ImageButton.IB_GROUP)
                self.LulzbotMini.OnSelected(self.OnLulzbotMiniSelected)
-               self.LulzbotMini.SetValue(True)
-               self.LulzbotTaz5 = self.AddImageButton(self.panel, 0, 1, _("LulzBot TAZ 5"),
+               
+               self.LulzbotTaz6 = self.AddImageButton(self.panel, 0, 1, _("LulzBot TAZ 6"),
+                                                                                          'Lulzbot_TAZ6.jpg', image_size)
+               self.LulzbotTaz6.OnSelected(self.OnLulzbotTaz6Selected)
+               
+               self.LulzbotTaz = self.AddImageButton(self.panel, 1, 0, _("LulzBot TAZ 4 or 5"),
                                                                                           'Lulzbot_TAZ5.jpg', image_size)
-               self.LulzbotTaz5.OnSelected(self.OnLulzbotTazSelected)
-               self.LulzbotTaz4 = self.AddImageButton(self.panel, 1, 0, _("LulzBot TAZ 4"),
-                                                                                          'Lulzbot_TAZ4.jpg', image_size)
-               self.LulzbotTaz4.OnSelected(self.OnLulzbotTazSelected)
+               self.LulzbotTaz.OnSelected(self.OnLulzbotTazSelected)
+               
                self.OtherPrinters = self.AddImageButton(self.panel, 1, 1, _("Other Printers"),
                                                                                                 'Generic-3D-Printer.png', image_size)
                self.OtherPrinters.OnSelected(self.OnOthersSelected)
+               self.LulzbotMini.SetValue(True)
+
+       def OnPageShown(self):
+               self.LulzbotMini.TriggerGroupCallbacks()
 
        def OnOthersSelected(self):
                wx.wizard.WizardPageSimple.Chain(self, self.GetParent().machineSelectPage)
@@ -1120,10 +1135,13 @@ class LulzbotMachineSelectPage(InfoPage):
        def OnLulzbotMiniSelected(self):
                wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotMiniToolheadPage)
                wx.wizard.WizardPageSimple.Chain(self.GetParent().lulzbotMiniToolheadPage,
-                                                                                self.GetParent().lulzbotFirmwarePage)
+                                                                                self.GetParent().lulzbotReadyPage)
+
+       def OnLulzbotTaz6Selected(self):
+               wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotTaz6SelectPage)
 
        def OnLulzbotTazSelected(self):
-               wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotTazHotendPage)
+               wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotTazSelectPage)
 
        def AllowNext(self):
                return True
@@ -1132,27 +1150,19 @@ class LulzbotMachineSelectPage(InfoPage):
                return False
 
        def StoreData(self):
-               if self.LulzbotTaz4.GetValue() or self.LulzbotTaz5.GetValue() or self.LulzbotMini.GetValue():
-                       if self.LulzbotTaz4.GetValue():
-                               # Nozzle size will be set in the toolhead selection page
-                               # We set the machine_type here so later pages can differenciate between TAZ 4 and 5
-                               profile.putMachineSetting('machine_width', '290')
-                               profile.putMachineSetting('machine_depth', '275')
-                               profile.putMachineSetting('machine_height', '250')
-                               profile.putMachineSetting('machine_type', 'lulzbot_TAZ_4')
-                               profile.putMachineSetting('machine_name', 'LulzBot TAZ 4')
-                               profile.putMachineSetting('serial_baud', '115200')
-                       elif self.LulzbotTaz5.GetValue():
-                               # Nozzle size will be set in the toolhead selection page
-                               # We set the machine_type here so later pages can differenciate between TAZ 4 and 5
-                               profile.putMachineSetting('machine_type', 'lulzbot_TAZ_5')
-                               profile.putMachineSetting('machine_name', 'LulzBot TAZ 5')
+               if self.LulzbotTaz.GetValue() or self.LulzbotMini.GetValue():
+                       if self.LulzbotTaz.GetValue():
                                profile.putMachineSetting('machine_width', '290')
                                profile.putMachineSetting('machine_depth', '275')
                                profile.putMachineSetting('machine_height', '250')
                                profile.putMachineSetting('serial_baud', '115200')
+                               profile.putMachineSetting('extruder_head_size_min_x', '0.0')
+                               profile.putMachineSetting('extruder_head_size_max_x', '0.0')
+                               profile.putMachineSetting('extruder_head_size_min_y', '0.0')
+                               profile.putMachineSetting('extruder_head_size_max_y', '0.0')
+                               profile.putMachineSetting('extruder_head_size_height', '0.0')
                        else:
-                               # Nozzle size and machine type will be set in the toolhead selection page
+                               # Nozzle diameter and machine type will be set in the toolhead selection page
                                profile.putMachineSetting('machine_name', 'LulzBot Mini')
                                profile.putMachineSetting('machine_width', '155')
                                profile.putMachineSetting('machine_depth', '155')
@@ -1167,11 +1177,6 @@ class LulzbotMachineSelectPage(InfoPage):
                        profile.putMachineSetting('machine_center_is_zero', 'False')
                        profile.putMachineSetting('gcode_flavor', 'RepRap (Marlin/Sprinter)')
                        profile.putMachineSetting('has_heated_bed', 'True')
-                       profile.putMachineSetting('extruder_head_size_min_x', '0.0')
-                       profile.putMachineSetting('extruder_head_size_min_y', '0.0')
-                       profile.putMachineSetting('extruder_head_size_max_x', '0.0')
-                       profile.putMachineSetting('extruder_head_size_max_y', '0.0')
-                       profile.putMachineSetting('extruder_head_size_height', '0.0')
                        profile.putProfileSetting('retraction_enable', 'True')
                        profile.putPreference('startMode', 'Simple')
                        profile.putProfileSetting('wall_thickness', float(profile.getProfileSetting('nozzle_size')) * 2)
@@ -1180,33 +1185,23 @@ class LulzbotMachineSelectPage(InfoPage):
 class LulzbotReadyPage(InfoPage):
        def __init__(self, parent):
                super(LulzbotReadyPage, self).__init__(parent, _("LulzBot TAZ/Mini"))
-               self.AddBitmap(wx.Bitmap(resources.getPathForImage('Lulzbot_logo.png')))
                self.AddText(_('Cura is now ready to be used with your LulzBot 3D printer.'))
                self.AddSeperator()
                self.AddText(_('For more information about using Cura with your LulzBot'))
                self.AddText(_('3D printer, please visit www.LulzBot.com/cura'))
                self.AddSeperator()
 
-class LulzbotToolheadSelectPage(InfoPage):
-       def __init__(self, parent, title):
-               super(LulzbotToolheadSelectPage, self).__init__(parent, title)
-               self.AddBitmap(wx.Bitmap(resources.getPathForImage('Lulzbot_logo.png')))
-               self.AddText(_('Please select your currently installed Tool Head'))
-               txt = self.AddText(_('WARNING: Carefully select the right Tool Head.\nFlashing the firmware with the wrong Tool Head can damage your LulzBot printer.'))
-               txt.SetForegroundColour(wx.RED)
-               self.AddSeperator()
-
-class LulzbotMiniToolheadSelectPage(LulzbotToolheadSelectPage):
+class LulzbotMiniToolheadSelectPage(InfoPage):
        def __init__(self, parent, allowBack = True):
-               super(LulzbotMiniToolheadSelectPage, self).__init__(parent, _("LulzBot Mini Toolhead Selection"))
+               super(LulzbotMiniToolheadSelectPage, self).__init__(parent, _("LulzBot Mini Tool Head Selection"))
 
                self.allowBack = allowBack
                self.panel = self.AddPanel()
                image_size=(LulzbotMachineSelectPage.IMAGE_WIDTH, LulzbotMachineSelectPage.IMAGE_HEIGHT)
-               self.standard = self.AddImageButton(self.panel, 0, 0, _('Single Extruder v2'),
-                                                                                       'Lulzbot_Toolhead_Mini_Standard.jpg', image_size,
+               self.standard = self.AddImageButton(self.panel, 0, 0, _('Standard LulzBot Mini'),
+                                                                                       'Lulzbot_mini.jpg', image_size,
                                                                                        style=ImageButton.IB_GROUP)
-               self.flexy = self.AddImageButton(self.panel, 0, 1, _('Flexystruder v2'),
+               self.flexy = self.AddImageButton(self.panel, 0, 1, _('LulzBot Mini with Flexystruder'),
                                                                                        'Lulzbot_Toolhead_Mini_Flexystruder.jpg', image_size)
                self.standard.SetValue(True)
 
@@ -1217,20 +1212,117 @@ class LulzbotMiniToolheadSelectPage(LulzbotToolheadSelectPage):
                if self.standard.GetValue():
                        profile.putProfileSetting('nozzle_size', '0.5')
                        profile.putMachineSetting('extruder_amount', '1')
-                       profile.putMachineSetting('toolhead', 'Single Extruder V2')
+                       profile.putMachineSetting('toolhead', 'Single Extruder v2')
                        profile.putMachineSetting('toolhead_shortname', '')
                        profile.putMachineSetting('machine_type', 'lulzbot_mini')
                else:
                        profile.putProfileSetting('nozzle_size', '0.6')
                        profile.putMachineSetting('extruder_amount', '1')
-                       profile.putMachineSetting('toolhead', 'Flexystruder V2')
+                       profile.putMachineSetting('toolhead', 'Flexystruder v2')
                        profile.putMachineSetting('toolhead_shortname', 'Flexystruder')
                        profile.putMachineSetting('machine_type', 'lulzbot_mini_flexystruder')
 
+class LulzbotTaz6SelectPage(InfoPage):
+       def __init__(self, parent):
+               super(LulzbotTaz6SelectPage, self).__init__(parent, _("LulzBot TAZ 6 Selection"))
+
+               self.panel = self.AddPanel()
+               image_size=(LulzbotMachineSelectPage.IMAGE_WIDTH, LulzbotMachineSelectPage.IMAGE_HEIGHT)
+               self.taz6 = self.AddImageButton(self.panel, 0, 0, _('Tilapia'),
+                                                                               'Lulzbot_Toolhead_TAZ_Tilapia.jpg', image_size,
+                                                                               style=ImageButton.IB_GROUP)
+               self.taz6.OnSelected(self.OnTilapiaSelected)
+               self.taz6.SetValue(True)
+
+       def OnPageShown(self):
+               self.taz6.TriggerGroupCallbacks()
+
+       def OnTilapiaSelected(self):
+               wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotReadyPage)
+
+       def StoreData(self):
+               profile.putProfileSetting('nozzle_size',  '0.5')
+               profile.putMachineSetting('extruder_amount', '1')
+               profile.putMachineSetting('toolhead', 'Single Extruder Tilapia')
+               profile.putMachineSetting('toolhead_shortname', 'Tilapia')
+               profile.putMachineSetting('machine_type', 'lulzbot_TAZ_6_Single_Tilapia')
+               profile.putMachineSetting('machine_name', 'LulzBot TAZ 6')
+
+class LulzbotTazSelectPage(InfoPage):
+       def __init__(self, parent):
+               super(LulzbotTazSelectPage, self).__init__(parent, _("LulzBot TAZ 4-5 Selection"))
+
+               self.panel = self.AddPanel()
+               image_size=(LulzbotMachineSelectPage.IMAGE_WIDTH, LulzbotMachineSelectPage.IMAGE_HEIGHT)
+               self.taz5 = self.AddImageButton(self.panel, 0, 0, _('Stock TAZ 5 (PEI && v2)'),
+                                                                               'Lulzbot_TAZ_5_Hex_and_PEI.jpg', image_size,
+                                                                               style=ImageButton.IB_GROUP)
+               self.taz5.OnSelected(self.OnTaz5Selected)
+               self.taz4 = self.AddImageButton(self.panel, 0, 1, _('Stock TAZ 4 (PET && v1)'),
+                                                                               'Lulzbot_TAZ_4_Buda_and_PET.jpg', image_size)
+               self.taz4.OnSelected(self.OnTaz4Selected)
+               self.modified = self.AddImageButton(self.panel, 1, 0, _('Modified LulzBot TAZ 4 or 5'),
+                                                                                       'Lulzbot_TAZ5.jpg', image_size)
+               self.modified.OnSelected(self.OnModifiedSelected)
+               self.taz5.SetValue(True)
+
+       def OnPageShown(self):
+               self.taz5.TriggerGroupCallbacks()
+
+       def OnTaz5Selected(self):
+               wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotTaz5NozzleSelectPage)
+               wx.wizard.WizardPageSimple.Chain(self.GetParent().lulzbotTaz5NozzleSelectPage,
+                                                                                self.GetParent().lulzbotReadyPage)
+
+       def OnTaz4Selected(self):
+               wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotReadyPage)
+
+       def OnModifiedSelected(self):
+               wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotTazBedSelectPage)
+               wx.wizard.WizardPageSimple.Chain(self.GetParent().lulzbotTazBedSelectPage,
+                                                                                self.GetParent().lulzbotTazHotendPage)
+
+       def StoreData(self):
+               if self.taz5.GetValue():
+                       profile.putProfileSetting('nozzle_size',  '0.5')
+                       profile.putMachineSetting('extruder_amount', '1')
+                       profile.putMachineSetting('toolhead', 'Single Extruder V2')
+                       profile.putMachineSetting('toolhead_shortname', '')
+                       profile.putMachineSetting('machine_type', 'lulzbot_TAZ_5_SingleV2')
+                       profile.putMachineSetting('machine_name', 'LulzBot TAZ 5')
+               elif self.taz4.GetValue():
+                       profile.putProfileSetting('nozzle_size', '0.35')
+                       profile.putMachineSetting('extruder_amount', '1')
+                       profile.putMachineSetting('toolhead', 'Single Extruder V1')
+                       profile.putMachineSetting('toolhead_shortname', '')
+                       profile.putMachineSetting('machine_type', 'lulzbot_TAZ_4_SingleV1')
+                       profile.putMachineSetting('machine_name', 'LulzBot TAZ 4')
 
-class LulzbotTazToolheadSelectPage(LulzbotToolheadSelectPage):
+class LulzbotTazBedSelectPage(InfoPage):
        def __init__(self, parent):
-               super(LulzbotTazToolheadSelectPage, self).__init__(parent, _("LulzBot TAZ Toolhead Selection"))
+               super(LulzbotTazBedSelectPage, self).__init__(parent, _("Bed Surface"))
+
+               self.panel = self.AddPanel()
+               image_size=(LulzbotMachineSelectPage.IMAGE_WIDTH, LulzbotMachineSelectPage.IMAGE_HEIGHT)
+               self.pei = self.AddImageButton(self.panel, 0, 0, _('PEI'),
+                                                                          'Lulzbot_TAZ_PEI_Bed.jpg', image_size,
+                                                                          style=ImageButton.IB_GROUP)
+               self.pet = self.AddImageButton(self.panel, 0, 1, _('PET'),
+                                                                          'Lulzbot_TAZ_PET_Bed.jpg', image_size)
+               self.pei.SetValue(True)
+
+       def StoreData(self):
+               if self.pei.GetValue():
+                       profile.putMachineSetting('machine_type', 'lulzbot_TAZ_5')
+                       profile.putMachineSetting('machine_name', 'LulzBot TAZ 5')
+               else:
+                       profile.putMachineSetting('machine_type', 'lulzbot_TAZ_4')
+                       profile.putMachineSetting('machine_name', 'LulzBot TAZ 4')
+
+
+class LulzbotTazToolheadSelectPage(InfoPage):
+       def __init__(self, parent):
+               super(LulzbotTazToolheadSelectPage, self).__init__(parent, _("LulzBot TAZ Tool Head Selection"))
 
                self.panel = self.AddPanel()
                image_size=(LulzbotMachineSelectPage.IMAGE_WIDTH, LulzbotMachineSelectPage.IMAGE_HEIGHT)
@@ -1240,7 +1332,7 @@ class LulzbotTazToolheadSelectPage(LulzbotToolheadSelectPage):
                self.flexy = self.AddImageButton(self.panel, 0, 1, _('Flexystruder v1'),
                                                                                        'Lulzbot_Toolhead_TAZ_Flexystruder_v1.jpg', image_size)
                self.dually = self.AddImageButton(self.panel, 1, 0, _('Dual Extruder v1'),
-                                                                                       'Lulzbot_Toolhead_TAZ_Dually_v1.jpg', image_size)
+                                                                                       'Lulzbot_Toolhead_TAZ_Dual_Extruder_v1.jpg', image_size)
                self.flexydually = self.AddImageButton(self.panel, 1, 1, _('FlexyDually v1'),
                                                                                        'Lulzbot_Toolhead_TAZ_FlexyDually_v1.jpg', image_size)
                self.SetVersion(1)
@@ -1252,7 +1344,7 @@ class LulzbotTazToolheadSelectPage(LulzbotToolheadSelectPage):
                self.single.SetLabel(_('Single Extruder v%d' % version))
                self.flexy.SetBitmap(self.GetBitmap('Lulzbot_Toolhead_TAZ_Flexystruder_v%d.jpg' % version, image_size))
                self.flexy.SetLabel(_('Flexystruder v%d' % version))
-               self.dually.SetBitmap(self.GetBitmap('Lulzbot_Toolhead_TAZ_Dually_v%d.jpg' % version, image_size))
+               self.dually.SetBitmap(self.GetBitmap('Lulzbot_Toolhead_TAZ_Dual_Extruder_v%d.jpg' % version, image_size))
                self.dually.SetLabel(_('Dual Extruder v%d' % version))
                self.flexydually.SetBitmap(self.GetBitmap('Lulzbot_Toolhead_TAZ_FlexyDually_v%d.jpg' % version, image_size))
                self.flexydually.SetLabel(_('FlexyDually v%d' % version))
@@ -1273,6 +1365,7 @@ class LulzbotTazToolheadSelectPage(LulzbotToolheadSelectPage):
                                wx.wizard.WizardPageSimple.Chain(self.GetParent().lulzbotTaz5NozzleSelectPage, self.GetParent().lulzbotFirmwarePage)
                        else:
                                wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotFirmwarePage)
+               wx.wizard.WizardPageSimple.Chain(self.GetParent().lulzbotFirmwarePage, self.GetParent().lulzbotReadyPage)
 
        def OnSingleV2(self):
                wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotTaz5NozzleSelectPage)
@@ -1305,8 +1398,8 @@ class LulzbotTazToolheadSelectPage(LulzbotToolheadSelectPage):
                        profile.putMachineSetting('extruder_offset_x1', '0.0')
                        profile.putMachineSetting('extruder_offset_y1', '-50.0' if self.version == 2 else '-52.00')
                        profile.putMachineSetting('toolhead', 'Dual Extruder V%d' % self.version)
-                       profile.putMachineSetting('toolhead_shortname', 'Dually v%d' % self.version)
-                       profile.putMachineSetting('machine_type', 'lulzbot_TAZ_%d_DuallyV%d' % version)
+                       profile.putMachineSetting('toolhead_shortname', 'Dual v%d' % self.version)
+                       profile.putMachineSetting('machine_type', 'lulzbot_TAZ_%d_DualV%d' % version)
                elif self.flexydually.GetValue():
                        profile.putProfileSetting('nozzle_size', '0.6')
                        profile.putMachineSetting('extruder_amount', '2')
@@ -1317,17 +1410,17 @@ class LulzbotTazToolheadSelectPage(LulzbotToolheadSelectPage):
                        profile.putMachineSetting('machine_type', 'lulzbot_TAZ_%d_FlexyDuallyV%d' % version)
 
 
-class LulzbotHotendSelectPage(LulzbotToolheadSelectPage):
+class LulzbotHotendSelectPage(InfoPage):
        def __init__(self, parent, allowBack = True):
-               super(LulzbotHotendSelectPage, self).__init__(parent, _("LulzBot Toolhead Hotend Selection"))
+               super(LulzbotHotendSelectPage, self).__init__(parent, _("LulzBot Tool Head Hot end Selection"))
 
                self.allowBack = allowBack
                self.panel = self.AddPanel()
                image_size=(LulzbotMachineSelectPage.IMAGE_WIDTH, LulzbotMachineSelectPage.IMAGE_HEIGHT)
-               self.v1 = self.AddImageButton(self.panel, 0, 0, _('v1 (Budaschnozzle Hotends)'),
+               self.v1 = self.AddImageButton(self.panel, 0, 0, _('v1 (Budaschnozzle)'),
                                                                                        'Lulzbot_Toolhead_v1.jpg', image_size,
                                                                                        style=ImageButton.IB_GROUP)
-               self.v2 = self.AddImageButton(self.panel, 0, 1, _('v2 (Hexagon Hotends)'),
+               self.v2 = self.AddImageButton(self.panel, 0, 1, _('v2 (LulzBot Hexagon)'),
                                                                                        'Lulzbot_Toolhead_v2.jpg', image_size)
                self.v1.SetValue(True)
 
@@ -1337,20 +1430,20 @@ class LulzbotHotendSelectPage(LulzbotToolheadSelectPage):
        def StoreData(self):
                self.GetParent().lulzbotTazToolheadPage.SetVersion(1 if self.v1.GetValue() else 2)
 
-class LulzbotTaz5NozzleSelectPage(LulzbotToolheadSelectPage):
+class LulzbotTaz5NozzleSelectPage(InfoPage):
        url2='http://lulzbot.com/printer-identification'
 
        def __init__(self, parent):
-               super(LulzbotTaz5NozzleSelectPage, self).__init__(parent, _("LulzBot TAZ Single V2 Nozzle Selection"))
+               super(LulzbotTaz5NozzleSelectPage, self).__init__(parent, _("LulzBot TAZ Single v2 Nozzle Selection"))
 
-               self.AddText(_('Please select your Hexagon hotend\'s nozzle size:'))
+               self.AddText(_('Please select your LulzBot Hexagon Hot End\'s nozzle diameter:'))
                self.Nozzle35Radio = self.AddRadioButton("0.35 mm", style=wx.RB_GROUP)
                self.Nozzle35Radio.SetValue(True)
                self.Nozzle50Radio = self.AddRadioButton("0.5 mm")
                self.AddText(_(' '))
                self.AddSeperator()
 
-               self.AddText(_('If you are not sure which nozzle size you have'))
+               self.AddText(_('If you are not sure which nozzle diameter you have,'))
                self.AddText(_('please check this webpage: '))
                button = self.AddButton(LulzbotTaz5NozzleSelectPage.url2)
                button.Bind(wx.EVT_BUTTON, self.OnUrlClick)
@@ -1365,13 +1458,13 @@ class LulzbotTaz5NozzleSelectPage(LulzbotToolheadSelectPage):
                        taz_version = 5
                if self.Nozzle35Radio.GetValue():
                        profile.putProfileSetting('nozzle_size', '0.35')
-                       profile.putMachineSetting('toolhead', 'Single Extruder V2 (0.35mm nozzle)')
+                       profile.putMachineSetting('toolhead', 'Single Extruder v2 (0.35mm nozzle)')
                        profile.putMachineSetting('toolhead_shortname', '0.35 nozzle')
                        profile.putMachineSetting('machine_type', 'lulzbot_TAZ_%d_035nozzle' % taz_version)
 
                else:
                        profile.putProfileSetting('nozzle_size', '0.5')
-                       profile.putMachineSetting('toolhead', 'Single Extruder V2 (0.5mm nozzle)')
+                       profile.putMachineSetting('toolhead', 'Single Extruder v2 (0.5mm nozzle)')
                        profile.putMachineSetting('toolhead_shortname', '0.5 nozzle')
                        profile.putMachineSetting('machine_type', 'lulzbot_TAZ_%d_05nozzle' % taz_version)
 
@@ -1379,31 +1472,35 @@ class LulzbotFirmwareUpdatePage(InfoPage):
        def __init__(self, parent):
                super(LulzbotFirmwareUpdatePage, self).__init__(parent, _("LulzBot Firmware Update"))
 
-               self.AddBitmap(wx.Bitmap(resources.getPathForImage('Lulzbot_logo.png')))
-
-               self.AddText(_('Your Lulzbot printer\'s firmware will now be updated'))
+               self.AddText(_("Your LulzBot printer\'s firmware will now be updated.\n" +
+               "Note: this will overwrite your existing firmware."))
                self.AddSeperator()
-               self.AddText(_("Firmware is the piece of software running directly on your 3D printer.\nThis firmware controls the stepper motors, regulates the temperature\nand ultimately makes your printer work."))
-               self.AddHiddenSeperator()
-               self.AddText(_("The firmware shipping with new Lulzbot printers works, but upgrades may be available\nwhich improve the functionality of your printer.\nIf you changed your toolhead, you will also need to flash\na new firmware or you may risk damaging the toolhead."))
-               self.AddHiddenSeperator()
-               self.AddText(_("To avoid any possible confusion, make sure to disconnect all printers from your PC\nexpect the printer that you are currently configuring."))
+               self.AddText(_("Follow these steps to prevent writing firmware to the wrong device:\n" +
+                                          "    1) Unplug all USB devices from your computer\n" +
+                                          "    2) Plug your 3D Printer into the computer with a USB cable\n" +
+                                          "    3) Turn on your 3D Printer\n" +
+                                          "    4) Click \"Flash the firmware\""))
                self.AddHiddenSeperator()
                upgradeButton, skipUpgradeButton = self.AddDualButton(_('Flash the firmware'), _('Skip upgrade'))
                upgradeButton.Bind(wx.EVT_BUTTON, self.OnUpgradeClick)
                skipUpgradeButton.Bind(wx.EVT_BUTTON, self.OnSkipClick)
 
        def AllowNext(self):
-               return False
+               return version.isDevVersion()
 
        def OnUpgradeClick(self, e):
                if firmwareInstall.InstallFirmware():
                        self.GetParent().FindWindowById(wx.ID_FORWARD).Enable()
+                       self.GetParent().ShowPage(self.GetNext())
 
        def OnSkipClick(self, e):
-               dlg = wx.MessageDialog(self, _("Are you sure you want to skip the firmware upgrade?\n" +
-                                                                          "It could damage your printer if you changed your toolhead and have not updated thefirmware!"),
-                                                       _('Skip firmware upgrade?'), wx.YES_NO | wx.ICON_EXCLAMATION)
+               dlg = wx.MessageDialog(self,
+                       _("CAUTION: Updating firmware is necessary when changing the\n" \
+                         "tool head on your LulzBot desktop 3D Printer." \
+                         "\n\n" +
+                         "Are you sure you want to skip the firmware update?"),
+                       _('Skip firmware update?'),
+                       wx.YES_NO | wx.ICON_EXCLAMATION)
                skip = dlg.ShowModal() == wx.ID_YES
                dlg.Destroy()
                if skip:
@@ -1412,7 +1509,7 @@ class LulzbotFirmwareUpdatePage(InfoPage):
 
 class LulzbotChangeToolheadWizard(wx.wizard.Wizard):
        def __init__(self):
-               super(LulzbotChangeToolheadWizard, self).__init__(None, -1, _("Change Lulzbot Toolhead Wizard"))
+               super(LulzbotChangeToolheadWizard, self).__init__(None, -1, _("Change LulzBot Tool Head Wizard"))
 
                self._nozzle_size = profile.getProfileSettingFloat('nozzle_size')
                self._machine_name = profile.getMachineSetting('machine_name')
@@ -1429,9 +1526,11 @@ class LulzbotChangeToolheadWizard(wx.wizard.Wizard):
                self.lulzbotTazToolheadPage = LulzbotTazToolheadSelectPage(self)
                self.lulzbotTazHotendPage = LulzbotHotendSelectPage(self, False)
                self.lulzbotTaz5NozzleSelectPage = LulzbotTaz5NozzleSelectPage(self)
+               self.lulzbotTazBedSelectPage = LulzbotTazBedSelectPage(self)
+               self.lulzbotTazSelectPage = LulzbotTazSelectPage(self)
+               self.lulzbotTaz6SelectPage = LulzbotTaz6SelectPage(self)
 
-               wx.wizard.WizardPageSimple.Chain(self.lulzbotMiniToolheadPage, self.lulzbotFirmwarePage)
-               wx.wizard.WizardPageSimple.Chain(self.lulzbotFirmwarePage, self.lulzbotReadyPage)
+               wx.wizard.WizardPageSimple.Chain(self.lulzbotMiniToolheadPage, self.lulzbotReadyPage)
                wx.wizard.WizardPageSimple.Chain(self.lulzbotTazHotendPage, self.lulzbotTazToolheadPage)
 
                if profile.getMachineSetting('machine_type').startswith('lulzbot_mini'):
@@ -1452,6 +1551,8 @@ class LulzbotChangeToolheadWizard(wx.wizard.Wizard):
                        self.FindWindowById(wx.ID_BACKWARD).Enable()
                else:
                        self.FindWindowById(wx.ID_BACKWARD).Disable()
+               if hasattr(e.GetPage(), 'OnPageShown'):
+                       e.GetPage().OnPageShown()
 
        def OnCancel(self, e):
                profile.putProfileSetting('nozzle_size', self._nozzle_size)
@@ -1492,10 +1593,11 @@ class ConfigWizard(wx.wizard.Wizard):
                self.lulzbotTazHotendPage = LulzbotHotendSelectPage(self)
                self.lulzbotTaz5NozzleSelectPage = LulzbotTaz5NozzleSelectPage(self)
                self.lulzbotMachineSelectPage = LulzbotMachineSelectPage(self)
+               self.lulzbotTazBedSelectPage = LulzbotTazBedSelectPage(self)
+               self.lulzbotTazSelectPage = LulzbotTazSelectPage(self)
 
                wx.wizard.WizardPageSimple.Chain(self.lulzbotMachineSelectPage, self.lulzbotMiniToolheadPage)
-               wx.wizard.WizardPageSimple.Chain(self.lulzbotMiniToolheadPage, self.lulzbotFirmwarePage)
-               wx.wizard.WizardPageSimple.Chain(self.lulzbotFirmwarePage, self.lulzbotReadyPage)
+               wx.wizard.WizardPageSimple.Chain(self.lulzbotMiniToolheadPage, self.lulzbotReadyPage)
                wx.wizard.WizardPageSimple.Chain(self.lulzbotTazHotendPage, self.lulzbotTazToolheadPage)
                wx.wizard.WizardPageSimple.Chain(self.machineSelectPage, self.ultimakerSelectParts)
                wx.wizard.WizardPageSimple.Chain(self.ultimakerSelectParts, self.ultimakerFirmwareUpgradePage)
@@ -1519,6 +1621,8 @@ class ConfigWizard(wx.wizard.Wizard):
                        self.FindWindowById(wx.ID_BACKWARD).Enable()
                else:
                        self.FindWindowById(wx.ID_BACKWARD).Disable()
+               if hasattr(e.GetPage(), 'OnPageShown'):
+                       e.GetPage().OnPageShown()
 
        def OnCancel(self, e):
                new_machine_index = int(profile.getPreferenceFloat('active_machine'))