chiark / gitweb /
Merge tag '15.01-RC7' into upstream
[cura.git] / Cura / gui / configWizard.py
index f6295745bffab48a7b05d989b9be641502618f8b..a4fb81ca01d3527994ef39a6d8afb31de39bb4ec 100644 (file)
@@ -224,67 +224,42 @@ class InfoPage(wx.wizard.WizardPageSimple):
        def StoreData(self):
                pass
 
-
-class FirstInfoPage(InfoPage):
-       def __init__(self, parent, addNew):
-               if addNew:
-                       super(FirstInfoPage, self).__init__(parent, _("Add new machine wizard"))
-               else:
-                       super(FirstInfoPage, self).__init__(parent, _("First time run wizard"))
-                       self.AddText(_("Welcome, and thanks for trying Cura!"))
-                       self.AddSeperator()
-               self.AddText(_("This wizard will help you in setting up Cura for your machine."))
-               if not addNew:
-                       self.AddSeperator()
-                       self._language_option = self.AddCombo(_("Select your language:"), map(lambda o: o[1], resources.getLanguageOptions()))
-               else:
-                       self._language_option = None
-               # self.AddText(_("This wizard will help you with the following steps:"))
-               # self.AddText(_("* Configure Cura for your machine"))
-               # self.AddText(_("* Optionally upgrade your firmware"))
-               # self.AddText(_("* Optionally check if your machine is working safely"))
-               # self.AddText(_("* Optionally level your printer bed"))
-
-               #self.AddText('* Calibrate your machine')
-               #self.AddText('* Do your first print')
-
-       def AllowBack(self):
-               return False
-
-       def StoreData(self):
-               if self._language_option is not None:
-                       profile.putPreference('language', self._language_option.GetValue())
-                       resources.setupLocalization(self._language_option.GetValue())
-
 class PrintrbotPage(InfoPage):
        def __init__(self, parent):
-               self._printer_info = {
-                       # X, Y, Z, Filament Diameter, PrintTemperature, Print Speed, Travel Speed, Retract speed, Retract amount
-                       "Original": (130, 130, 130, 2.95, 208, 40, 70, 30, 1),
-                       "Simple Maker's Edition v1": (100, 100, 100, 1.75, 208, 40, 70, 30, 1),
-                       "Simple Maker's Edition v2 (2013 Printrbot Simple)": (100, 100, 100, 1.75, 208, 40, 70, 30, 1),
-                       "Simple Maker's Edition v3 (2014 Printrbot Simple)": (100, 100, 100, 1.75, 208, 40, 70, 30, 1),
-                       "Simple Maker's Edition v4 (Model 1405)": (100, 100, 100, 1.75, 208, 40, 70, 30, 1),
-                       "Simple Metal": (150, 150, 150, 1.75, 208, 40, 70, 30, 1),
-                       "Jr v1": (150, 100, 80, 1.75, 208, 40, 70, 30, 1),
-                       "Jr v2": (150, 150, 150, 1.75, 208, 40, 70, 30, 1),
-                       "LC v2": (150, 150, 150, 1.75, 208, 40, 70, 30, 1),
-                       "Plus v2": (200, 200, 200, 1.75, 208, 40, 70, 30, 1),
-                       "Plus v2.1": (200, 200, 200, 1.75, 208, 40, 70, 30, 1),
-                       "Plus v2.2 (Model 1404/140422)": (250, 250, 250, 1.75, 208, 40, 70, 30, 1),
-                       "Plus v2.3 (Model 140501)": (250, 250, 250, 1.75, 208, 40, 70, 30, 1),
-                       "Plus v2.4 (Model 140507)": (250, 250, 250, 1.75, 208, 40, 70, 30, 1),
-               }
+               self._printer_info = [
+                       # X, Y, Z, Nozzle Size, Filament Diameter, PrintTemperature, Print Speed, Travel Speed, Retract speed, Retract amount, use bed level sensor
+                       ("Simple Metal", 150, 150, 150, 0.4, 1.75, 208, 40, 70, 30, 1, True),
+                       ("Metal Plus", 250, 250, 250, 0.4, 1.75, 208, 40, 70, 30, 1, True),
+                       ("Simple Makers Kit", 100, 100, 100, 0.4, 1.75, 208, 40, 70, 30, 1, True),
+                       (":" + _("Older models"),),
+                       ("Original", 130, 130, 130, 0.5, 2.95, 208, 40, 70, 30, 1, False),
+                       ("Simple Maker's Edition v1", 100, 100, 100, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Simple Maker's Edition v2 (2013 Printrbot Simple)", 100, 100, 100, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Simple Maker's Edition v3 (2014 Printrbot Simple)", 100, 100, 100, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Simple Maker's Edition v4 (Model 1405)", 100, 100, 100, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Jr v1", 150, 100, 80, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Jr v2", 150, 150, 150, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("LC v2", 150, 150, 150, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Plus v2", 200, 200, 200, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Plus v2.1", 200, 200, 200, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Plus v2.2 (Model 1404/140422)", 250, 250, 250, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Plus v2.3 (Model 140501)", 250, 250, 250, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Plus v2.4 (Model 140507)", 250, 250, 250, 0.5, 1.75, 208, 40, 70, 30, 1, False),
+                       ("Go v2 Large", 609, 305, 305, 0.5, 1.75, 208, 35, 70, 30, 1, False),
+               ]
 
                super(PrintrbotPage, self).__init__(parent, _("Printrbot Selection"))
+               self.AddBitmap(wx.Bitmap(resources.getPathForImage('Printrbot_logo.png')))
                self.AddText(_("Select which Printrbot machine you have:"))
-               keys = self._printer_info.keys()
-               keys.sort()
                self._items = []
-               for name in keys:
-                       item = self.AddRadioButton(name)
-                       item.data = self._printer_info[name]
-                       self._items.append(item)
+               for printer in self._printer_info:
+                       if printer[0].startswith(":"):
+                               self.AddSeperator()
+                               self.AddText(printer[0][1:])
+                       else:
+                               item = self.AddRadioButton(printer[0])
+                               item.data = printer[1:]
+                               self._items.append(item)
 
        def StoreData(self):
                profile.putMachineSetting('machine_name', 'Printrbot ???')
@@ -295,13 +270,13 @@ class PrintrbotPage(InfoPage):
                                profile.putMachineSetting('machine_width', data[0])
                                profile.putMachineSetting('machine_depth', data[1])
                                profile.putMachineSetting('machine_height', data[2])
-                               profile.putProfileSetting('nozzle_size', '0.5')
-                               profile.putProfileSetting('filament_diameter', data[3])
-                               profile.putProfileSetting('print_temperature', data[4])
-                               profile.putProfileSetting('print_speed', data[5])
-                               profile.putProfileSetting('travel_speed', data[6])
-                               profile.putProfileSetting('retraction_speed', data[7])
-                               profile.putProfileSetting('retraction_amount', data[8])
+                               profile.putProfileSetting('nozzle_size', data[3])
+                               profile.putProfileSetting('filament_diameter', data[4])
+                               profile.putProfileSetting('print_temperature', data[5])
+                               profile.putProfileSetting('print_speed', data[6])
+                               profile.putProfileSetting('travel_speed', data[7])
+                               profile.putProfileSetting('retraction_speed', data[8])
+                               profile.putProfileSetting('retraction_amount', data[9])
                                profile.putProfileSetting('wall_thickness', float(profile.getProfileSettingFloat('nozzle_size')) * 2)
                                profile.putMachineSetting('has_heated_bed', 'False')
                                profile.putMachineSetting('machine_center_is_zero', 'False')
@@ -310,6 +285,32 @@ class PrintrbotPage(InfoPage):
                                profile.putMachineSetting('extruder_head_size_max_x', '0')
                                profile.putMachineSetting('extruder_head_size_max_y', '0')
                                profile.putMachineSetting('extruder_head_size_height', '0')
+                               if data[10]:
+                                       profile.setAlterationFile('start.gcode', """;Sliced at: {day} {date} {time}
+;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}
+;Print time: {print_time}
+;Filament used: {filament_amount}m {filament_weight}g
+;Filament cost: {filament_cost}
+;M190 S{print_bed_temperature} ;Uncomment to add your own bed temperature line
+;M109 S{print_temperature} ;Uncomment to add your own temperature line
+G21        ;metric values
+G90        ;absolute positioning
+M82        ;set extruder to absolute mode
+M107       ;start with the fan off
+
+G28 X0 Y0  ;move X/Y to min endstops
+G28 Z0     ;move Z to min endstops
+G29        ;Run the auto bed leveling
+
+G1 Z15.0 F{travel_speed} ;move the platform down 15mm
+
+G92 E0                  ;zero the extruded length
+G1 F200 E3              ;extrude 3mm of feed stock
+G92 E0                  ;zero the extruded length again
+G1 F{travel_speed}
+;Put printing message on LCD screen
+M117 Printing...
+""")
 
 class OtherMachineSelectPage(InfoPage):
        def __init__(self, parent):
@@ -385,27 +386,27 @@ class MachineSelectPage(InfoPage):
                super(MachineSelectPage, self).__init__(parent, _("Select your machine"))
                self.AddText(_("What kind of machine do you have:"))
 
-               self.Ultimaker2Radio = self.AddRadioButton("Ultimaker2", style=wx.RB_GROUP)
-               self.Ultimaker2Radio.SetValue(True)
+               self.LulzbotMiniRadio = self.AddRadioButton("LulzBot Mini", style=wx.RB_GROUP)
+               self.LulzbotMiniRadio.Bind(wx.EVT_RADIOBUTTON, self.OnLulzbotSelect)
+               self.LulzbotMiniRadio.SetValue(True)
+               self.LulzbotTaz5Radio = self.AddRadioButton("LulzBot TAZ 5")
+               self.LulzbotTaz5Radio.Bind(wx.EVT_RADIOBUTTON, self.OnLulzbotSelect)
+               self.LulzbotTaz4Radio = self.AddRadioButton("LulzBot TAZ 4")
+               self.LulzbotTaz4Radio.Bind(wx.EVT_RADIOBUTTON, self.OnLulzbotSelect)
+               self.Ultimaker2Radio = self.AddRadioButton("Ultimaker2")
                self.Ultimaker2Radio.Bind(wx.EVT_RADIOBUTTON, self.OnUltimaker2Select)
+               self.Ultimaker2ExtRadio = self.AddRadioButton("Ultimaker2extended")
+               self.Ultimaker2ExtRadio.Bind(wx.EVT_RADIOBUTTON, self.OnUltimaker2Select)
+               self.Ultimaker2GoRadio = self.AddRadioButton("Ultimaker2go")
+               self.Ultimaker2GoRadio.Bind(wx.EVT_RADIOBUTTON, self.OnUltimaker2Select)
                self.UltimakerRadio = self.AddRadioButton("Ultimaker Original")
                self.UltimakerRadio.Bind(wx.EVT_RADIOBUTTON, self.OnUltimakerSelect)
                self.UltimakerOPRadio = self.AddRadioButton("Ultimaker Original+")
                self.UltimakerOPRadio.Bind(wx.EVT_RADIOBUTTON, self.OnUltimakerOPSelect)
                self.PrintrbotRadio = self.AddRadioButton("Printrbot")
                self.PrintrbotRadio.Bind(wx.EVT_RADIOBUTTON, self.OnPrintrbotSelect)
-               self.LulzbotTazRadio = self.AddRadioButton("Lulzbot TAZ")
-               self.LulzbotTazRadio.Bind(wx.EVT_RADIOBUTTON, self.OnLulzbotSelect)
-               self.LulzbotMiniRadio = self.AddRadioButton("Lulzbot Mini")
-               self.LulzbotMiniRadio.Bind(wx.EVT_RADIOBUTTON, self.OnLulzbotSelect)
                self.OtherRadio = self.AddRadioButton(_("Other (Ex: RepRap, MakerBot, Witbox)"))
                self.OtherRadio.Bind(wx.EVT_RADIOBUTTON, self.OnOtherSelect)
-               self.AddSeperator()
-               self.AddText(_("The collection of anonymous usage information helps with the continued improvement of Cura."))
-               self.AddText(_("This does NOT submit your models online nor gathers any privacy related information."))
-               self.SubmitUserStats = self.AddCheckbox(_("Submit anonymous usage information:"))
-               self.AddText(_("For full details see: http://wiki.ultimaker.com/Cura:stats"))
-               self.SubmitUserStats.SetValue(True)
 
        def OnUltimaker2Select(self, e):
                wx.wizard.WizardPageSimple.Chain(self, self.GetParent().ultimaker2ReadyPage)
@@ -426,19 +427,34 @@ class MachineSelectPage(InfoPage):
                wx.wizard.WizardPageSimple.Chain(self, self.GetParent().otherMachineSelectPage)
 
        def AllowNext(self):
-               wx.wizard.WizardPageSimple.Chain(self, self.GetParent().ultimaker2ReadyPage)
+               wx.wizard.WizardPageSimple.Chain(self, self.GetParent().lulzbotReadyPage)
                return True
 
        def StoreData(self):
                profile.putProfileSetting('retraction_enable', 'True')
-               if self.Ultimaker2Radio.GetValue():
-                       profile.putMachineSetting('machine_width', '230')
-                       profile.putMachineSetting('machine_depth', '225')
-                       profile.putMachineSetting('machine_height', '205')
-                       profile.putMachineSetting('machine_name', 'ultimaker2')
-                       profile.putMachineSetting('machine_type', 'ultimaker2')
+               if self.Ultimaker2Radio.GetValue() or self.Ultimaker2GoRadio.GetValue() or self.Ultimaker2ExtRadio.GetValue():
+                       if self.Ultimaker2Radio.GetValue():
+                               profile.putMachineSetting('machine_width', '230')
+                               profile.putMachineSetting('machine_depth', '225')
+                               profile.putMachineSetting('machine_height', '205')
+                               profile.putMachineSetting('machine_name', 'ultimaker2')
+                               profile.putMachineSetting('machine_type', 'ultimaker2')
+                               profile.putMachineSetting('has_heated_bed', 'True')
+                       if self.Ultimaker2GoRadio.GetValue():
+                               profile.putMachineSetting('machine_width', '120')
+                               profile.putMachineSetting('machine_depth', '120')
+                               profile.putMachineSetting('machine_height', '115')
+                               profile.putMachineSetting('machine_name', 'ultimaker2go')
+                               profile.putMachineSetting('machine_type', 'ultimaker2go')
+                               profile.putMachineSetting('has_heated_bed', 'False')
+                       if self.Ultimaker2ExtRadio.GetValue():
+                               profile.putMachineSetting('machine_width', '230')
+                               profile.putMachineSetting('machine_depth', '225')
+                               profile.putMachineSetting('machine_height', '305')
+                               profile.putMachineSetting('machine_name', 'ultimaker2extended')
+                               profile.putMachineSetting('machine_type', 'ultimaker2extended')
+                               profile.putMachineSetting('has_heated_bed', 'False')
                        profile.putMachineSetting('machine_center_is_zero', 'False')
-                       profile.putMachineSetting('has_heated_bed', 'True')
                        profile.putMachineSetting('gcode_flavor', 'UltiGCode')
                        profile.putMachineSetting('extruder_head_size_min_x', '40.0')
                        profile.putMachineSetting('extruder_head_size_min_y', '10.0')
@@ -480,20 +496,31 @@ class MachineSelectPage(InfoPage):
                        profile.putMachineSetting('has_heated_bed', 'True')
                        profile.putMachineSetting('extruder_amount', '1')
                        profile.putProfileSetting('retraction_enable', 'True')
-               elif self.LulzbotTazRadio.GetValue() or self.LulzbotMiniRadio.GetValue():
-                       if self.LulzbotTazRadio.GetValue():
+               elif self.LulzbotTaz4Radio.GetValue() or self.LulzbotTaz5Radio.GetValue() or self.LulzbotMiniRadio.GetValue():
+                       if self.LulzbotTaz4Radio.GetValue():
+                               profile.putMachineSetting('machine_width', '298')
+                               profile.putMachineSetting('machine_depth', '275')
+                               profile.putMachineSetting('machine_height', '250')
+                               profile.putProfileSetting('nozzle_size', '0.35')
+                               profile.putMachineSetting('machine_name', 'LulzBot TAZ 4')
+                               profile.putMachineSetting('machine_type', 'lulzbot_TAZ_4')
+                               profile.putMachineSetting('serial_baud', '115200')
+                       elif self.LulzbotTaz5Radio.GetValue():
                                profile.putMachineSetting('machine_width', '298')
                                profile.putMachineSetting('machine_depth', '275')
                                profile.putMachineSetting('machine_height', '250')
                                profile.putProfileSetting('nozzle_size', '0.35')
-                               profile.putMachineSetting('machine_name', 'Lulzbot TAZ')
+                               profile.putMachineSetting('machine_name', 'LulzBot TAZ 5')
+                               profile.putMachineSetting('machine_type', 'lulzbot_TAZ_5')
+                               profile.putMachineSetting('serial_baud', '115200')
                        else:
-                               profile.putMachineSetting('machine_width', '160')
-                               profile.putMachineSetting('machine_depth', '160')
-                               profile.putMachineSetting('machine_height', '160')
+                               profile.putMachineSetting('machine_width', '155')
+                               profile.putMachineSetting('machine_depth', '155')
+                               profile.putMachineSetting('machine_height', '163')
                                profile.putProfileSetting('nozzle_size', '0.5')
-                               profile.putMachineSetting('machine_name', 'Lulzbot Mini')
-                       profile.putMachineSetting('machine_type', 'Aleph Objects')
+                               profile.putMachineSetting('machine_name', 'LulzBot Mini')
+                               profile.putMachineSetting('machine_type', 'lulzbot_mini')
+                               profile.putMachineSetting('serial_baud', '115200')
                        profile.putMachineSetting('machine_center_is_zero', 'False')
                        profile.putMachineSetting('gcode_flavor', 'RepRap (Marlin/Sprinter)')
                        profile.putMachineSetting('has_heated_bed', 'True')
@@ -502,6 +529,7 @@ class MachineSelectPage(InfoPage):
                        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.putPreference('startMode', 'Simple')
                else:
                        profile.putMachineSetting('machine_width', '80')
                        profile.putMachineSetting('machine_depth', '80')
@@ -513,11 +541,6 @@ class MachineSelectPage(InfoPage):
                        profile.putProfileSetting('nozzle_size', '0.5')
                profile.checkAndUpdateMachineName()
                profile.putProfileSetting('wall_thickness', float(profile.getProfileSetting('nozzle_size')) * 2)
-               if self.SubmitUserStats.GetValue():
-                       profile.putPreference('submit_slice_information', 'True')
-               else:
-                       profile.putPreference('submit_slice_information', 'False')
-
 
 class SelectParts(InfoPage):
        def __init__(self, parent):
@@ -558,7 +581,7 @@ class UltimakerFirmwareUpgradePage(InfoPage):
                self.AddText(_("The firmware shipping with new Ultimakers works, but upgrades\nhave been made to make better prints, and make calibration easier."))
                self.AddHiddenSeperator()
                self.AddText(_("Cura requires these new features and thus\nyour firmware will most likely need to be upgraded.\nYou will get the chance to do so now."))
-               upgradeButton, skipUpgradeButton = self.AddDualButton('Upgrade to Marlin firmware', 'Skip upgrade')
+               upgradeButton, skipUpgradeButton = self.AddDualButton(_('Upgrade to Marlin firmware'), _('Skip upgrade'))
                upgradeButton.Bind(wx.EVT_BUTTON, self.OnUpgradeClick)
                skipUpgradeButton.Bind(wx.EVT_BUTTON, self.OnSkipClick)
                self.AddHiddenSeperator()
@@ -976,18 +999,25 @@ class Ultimaker2ReadyPage(InfoPage):
 
 class LulzbotReadyPage(InfoPage):
        def __init__(self, parent):
-               super(LulzbotReadyPage, self).__init__(parent, _("Lulzbot TAZ/Mini"))
-               self.AddText(_('Cura is now ready to be used with your Lulzbot.'))
+               super(LulzbotReadyPage, self).__init__(parent, _("LulzBot TAZ/Mini"))
+               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 configWizard(wx.wizard.Wizard):
+class ConfigWizard(wx.wizard.Wizard):
        def __init__(self, addNew = False):
-               super(configWizard, self).__init__(None, -1, _("Configuration Wizard"))
+               super(ConfigWizard, self).__init__(None, -1, _("Configuration Wizard"))
+
+               self._old_machine_index = int(profile.getPreferenceFloat('active_machine'))
+               if addNew:
+                       profile.setActiveMachine(profile.getMachineCount())
 
                self.Bind(wx.wizard.EVT_WIZARD_PAGE_CHANGED, self.OnPageChanged)
                self.Bind(wx.wizard.EVT_WIZARD_PAGE_CHANGING, self.OnPageChanging)
+               self.Bind(wx.wizard.EVT_WIZARD_CANCEL, self.OnCancel)
 
-               self.firstInfoPage = FirstInfoPage(self, addNew)
                self.machineSelectPage = MachineSelectPage(self)
                self.ultimakerSelectParts = SelectParts(self)
                self.ultimakerFirmwareUpgradePage = UltimakerFirmwareUpgradePage(self)
@@ -1004,7 +1034,6 @@ class configWizard(wx.wizard.Wizard):
                self.ultimaker2ReadyPage = Ultimaker2ReadyPage(self)
                self.lulzbotReadyPage = LulzbotReadyPage(self)
 
-               wx.wizard.WizardPageSimple.Chain(self.firstInfoPage, self.machineSelectPage)
                #wx.wizard.WizardPageSimple.Chain(self.machineSelectPage, self.ultimaker2ReadyPage)
                wx.wizard.WizardPageSimple.Chain(self.machineSelectPage, self.ultimakerSelectParts)
                wx.wizard.WizardPageSimple.Chain(self.ultimakerSelectParts, self.ultimakerFirmwareUpgradePage)
@@ -1014,10 +1043,10 @@ class configWizard(wx.wizard.Wizard):
                wx.wizard.WizardPageSimple.Chain(self.printrbotSelectType, self.otherMachineInfoPage)
                wx.wizard.WizardPageSimple.Chain(self.otherMachineSelectPage, self.customRepRapInfoPage)
 
-               self.FitToPage(self.firstInfoPage)
-               self.GetPageAreaSizer().Add(self.firstInfoPage)
+               self.FitToPage(self.machineSelectPage)
+               self.GetPageAreaSizer().Add(self.machineSelectPage)
 
-               self.RunWizard(self.firstInfoPage)
+               self.RunWizard(self.machineSelectPage)
                self.Destroy()
 
        def OnPageChanging(self, e):
@@ -1033,6 +1062,9 @@ class configWizard(wx.wizard.Wizard):
                else:
                        self.FindWindowById(wx.ID_BACKWARD).Disable()
 
+       def OnCancel(self, e):
+               profile.setActiveMachine(self._old_machine_index)
+
 class bedLevelWizardMain(InfoPage):
        def __init__(self, parent):
                super(bedLevelWizardMain, self).__init__(parent, _("Bed leveling wizard"))
@@ -1265,7 +1297,7 @@ class bedLevelWizardMain(InfoPage):
 
 class headOffsetCalibrationPage(InfoPage):
        def __init__(self, parent):
-               super(headOffsetCalibrationPage, self).__init__(parent, "Printer head offset calibration")
+               super(headOffsetCalibrationPage, self).__init__(parent, _("Printer head offset calibration"))
 
                self.AddText(_('This wizard will help you in calibrating the printer head offsets of your dual extrusion machine'))
                self.AddSeperator()