# Happy Hare KlipperScreen menus. Don't remove this line, installer needs it! # # Copyright (C) 2023-2025 moggieuk#6538 (discord) # moggieuk@hotmail.com # # Menu options: # name, icon, panel, method, confirm, enable, params, style, NEW: show_disabled, refresh_on # # Additional functionality added with this MMU Happy Hare fork: # # Options: # show_disabled - True will cause 'enable' logic to show button disabled rather than not display it # refresh_on - List of printer variables to monitor real time for 'show_disabled' # # Menu name: # can specify multiple roots, e.g. [menu __main,__print mymenu] # will duplicate on both __main and __print menus # (no space after comman) # # Useful for custom single purpose use (like dedicated SpoolMan display on filament rack) # you can make any panel "sticky" (never changes without navigation) by adding the following. # Caution: only intended for monitoring panels - NO NAVIGATION # [main] # sticky_panel: # [menu __main,__print mmu] name: {{ gettext('MMU') }} icon: mmu_carrot panel: mmu_main enable: {{ printer.mmu is defined and not klipperscreen.side_mmu_shortcut }} [menu __main,__print mmu ttg] name: {{ gettext('Manage TTG...') }} icon: mmu_ttg_map panel: mmu_toolmap [menu __main,__print mmu filaments] name: {{ gettext('Filaments...') }} icon: mmu_filaments panel: mmu_filaments [menu __main,__print mmu spoolman] name: {{ gettext('Spoolman...') }} icon: spoolman panel: mmu_spoolman enable: {{ moonraker.spoolman }} show_disabled: True [menu __main,__print mmu tools] name: {{ gettext('Load Tool...') }} icon: extruder enable: {{ printer.mmu.print_state != "printing" }} show_disabled: True refresh_on: printer.mmu.print_state # Generated menus for each tool/gate... [menu __main,__print mmu tools T0] name: {{ gettext('T0') }} icon: mmu_t0 method: printer.gcode.script params: { "script":"MMU_CHANGE_TOOL TOOL=0 QUIET=1" } enable: {{ (printer.mmu.tool != 0 or (printer.mmu.tool == 0 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[0] != 0 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 0 }} show_disabled: True refresh_on: printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action [menu __main,__print mmu tools T1] name: {{ gettext('T1') }} icon: mmu_t1 method: printer.gcode.script params: { "script":"MMU_CHANGE_TOOL TOOL=1 QUIET=1" } enable: {{ (printer.mmu.tool != 1 or (printer.mmu.tool == 1 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[1] != 0 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 1 }} show_disabled: True refresh_on: printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action [menu __main,__print mmu tools T2] name: {{ gettext('T2') }} icon: mmu_t2 method: printer.gcode.script params: { "script":"MMU_CHANGE_TOOL TOOL=2 QUIET=1" } enable: {{ (printer.mmu.tool != 2 or (printer.mmu.tool == 2 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[2] != 0 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 2 }} show_disabled: True refresh_on: printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action [menu __main,__print mmu tools T3] name: {{ gettext('T3') }} icon: mmu_t3 method: printer.gcode.script params: { "script":"MMU_CHANGE_TOOL TOOL=3 QUIET=1" } enable: {{ (printer.mmu.tool != 3 or (printer.mmu.tool == 3 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[3] != 0 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 3 }} show_disabled: True refresh_on: printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action [menu __main,__print mmu tools T4] name: {{ gettext('T4') }} icon: mmu_t4 method: printer.gcode.script params: { "script":"MMU_CHANGE_TOOL TOOL=4 QUIET=1" } enable: {{ (printer.mmu.tool != 4 or (printer.mmu.tool == 4 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[4] != 0 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 4 }} show_disabled: True refresh_on: printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action [menu __main,__print mmu tools T5] name: {{ gettext('T5') }} icon: mmu_t5 method: printer.gcode.script params: { "script":"MMU_CHANGE_TOOL TOOL=5 QUIET=1" } enable: {{ (printer.mmu.tool != 5 or (printer.mmu.tool == 5 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[5] != 0 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 5 }} show_disabled: True refresh_on: printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action [menu __main,__print mmu tools T6] name: {{ gettext('T6') }} icon: mmu_t6 method: printer.gcode.script params: { "script":"MMU_CHANGE_TOOL TOOL=6 QUIET=1" } enable: {{ (printer.mmu.tool != 6 or (printer.mmu.tool == 6 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[6] != 0 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 6 }} show_disabled: True refresh_on: printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action [menu __main,__print mmu tools T7] name: {{ gettext('T7') }} icon: mmu_t7 method: printer.gcode.script params: { "script":"MMU_CHANGE_TOOL TOOL=7 QUIET=1" } enable: {{ (printer.mmu.tool != 7 or (printer.mmu.tool == 7 and printer.mmu.filament != "Loaded")) and printer.mmu.gate_status[7] != 0 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 7 }} show_disabled: True refresh_on: printer.mmu.tool, printer.mmu.gate_status, printer.mmu.filament, printer.mmu.action [menu __main,__print mmu preload_gates] name: {{ gettext('Preload Gate...') }} icon: mmu_reset enable: {{ printer.mmu.print_state != "printing" }} show_disabled: True refresh_on: printer.mmu.print_state # Generated menus for each tool/gate... [menu __main,__print mmu preload_gates PG0] name: {{ gettext('Preload Gate #0') }} icon: mmu_reset method: printer.gcode.script params: { "script":"MMU_PRELOAD GATE=0" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 0 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu preload_gates PG1] name: {{ gettext('Preload Gate #1') }} icon: mmu_reset method: printer.gcode.script params: { "script":"MMU_PRELOAD GATE=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 1 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu preload_gates PG2] name: {{ gettext('Preload Gate #2') }} icon: mmu_reset method: printer.gcode.script params: { "script":"MMU_PRELOAD GATE=2" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 2 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu preload_gates PG3] name: {{ gettext('Preload Gate #3') }} icon: mmu_reset method: printer.gcode.script params: { "script":"MMU_PRELOAD GATE=3" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 3 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu preload_gates PG4] name: {{ gettext('Preload Gate #4') }} icon: mmu_reset method: printer.gcode.script params: { "script":"MMU_PRELOAD GATE=4" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 4 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu preload_gates PG5] name: {{ gettext('Preload Gate #5') }} icon: mmu_reset method: printer.gcode.script params: { "script":"MMU_PRELOAD GATE=5" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 5 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu preload_gates PG6] name: {{ gettext('Preload Gate #6') }} icon: mmu_reset method: printer.gcode.script params: { "script":"MMU_PRELOAD GATE=6" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 6 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu preload_gates PG7] name: {{ gettext('Preload Gate #7') }} icon: mmu_reset method: printer.gcode.script params: { "script":"MMU_PRELOAD GATE=7" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 7 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu eject_gates] name: {{ gettext('Eject Gate...') }} icon: mmu_eject enable: {{ printer.mmu.print_state != "printing" }} show_disabled: True refresh_on: printer.mmu.print_state # Generated menus for each tool/gate... [menu __main,__print mmu eject_gates G0] name: {{ gettext('Eject Gate #0') }} icon: mmu_eject method: printer.gcode.script params: { "script":"MMU_EJECT FORCE=1 GATE=0" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.gate_status[0] != 0 and printer.mmu.num_gates > 0 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main,__print mmu eject_gates G1] name: {{ gettext('Eject Gate #1') }} icon: mmu_eject method: printer.gcode.script params: { "script":"MMU_EJECT FORCE=1 GATE=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.gate_status[1] != 0 and printer.mmu.num_gates > 1 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main,__print mmu eject_gates G2] name: {{ gettext('Eject Gate #2') }} icon: mmu_eject method: printer.gcode.script params: { "script":"MMU_EJECT FORCE=1 GATE=2" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.gate_status[2] != 0 and printer.mmu.num_gates > 2 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main,__print mmu eject_gates G3] name: {{ gettext('Eject Gate #3') }} icon: mmu_eject method: printer.gcode.script params: { "script":"MMU_EJECT FORCE=1 GATE=3" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.gate_status[3] != 0 and printer.mmu.num_gates > 3 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main,__print mmu eject_gates G4] name: {{ gettext('Eject Gate #4') }} icon: mmu_eject method: printer.gcode.script params: { "script":"MMU_EJECT FORCE=1 GATE=4" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.gate_status[4] != 0 and printer.mmu.num_gates > 4 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main,__print mmu eject_gates G5] name: {{ gettext('Eject Gate #5') }} icon: mmu_eject method: printer.gcode.script params: { "script":"MMU_EJECT FORCE=1 GATE=5" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.gate_status[5] != 0 and printer.mmu.num_gates > 5 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main,__print mmu eject_gates G6] name: {{ gettext('Eject Gate #6') }} icon: mmu_eject method: printer.gcode.script params: { "script":"MMU_EJECT FORCE=1 GATE=6" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.gate_status[6] != 0 and printer.mmu.num_gates > 6 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main,__print mmu eject_gates G7] name: {{ gettext('Eject Gate #7') }} icon: mmu_eject method: printer.gcode.script params: { "script":"MMU_EJECT FORCE=1 GATE=7" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.gate_status[7] != 0 and printer.mmu.num_gates > 7 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main,__print mmu check_gates] name: {{ gettext('Check Gate...') }} icon: mmu_checkgates enable: {{ printer.mmu.print_state != "printing" }} show_disabled: True refresh_on: printer.mmu.print_state # Generated menus for each tool/gate... [menu __main,__print mmu check_gates CG0] name: {{ gettext('Check Gate #0') }} icon: mmu_checkgate0 method: printer.gcode.script params: { "script":"MMU_CHECK_GATE GATE=0 QUIET=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 0 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu check_gates CG1] name: {{ gettext('Check Gate #1') }} icon: mmu_checkgate1 method: printer.gcode.script params: { "script":"MMU_CHECK_GATE GATE=1 QUIET=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 1 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu check_gates CG2] name: {{ gettext('Check Gate #2') }} icon: mmu_checkgate2 method: printer.gcode.script params: { "script":"MMU_CHECK_GATE GATE=2 QUIET=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 2 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu check_gates CG3] name: {{ gettext('Check Gate #3') }} icon: mmu_checkgate3 method: printer.gcode.script params: { "script":"MMU_CHECK_GATE GATE=3 QUIET=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 3 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu check_gates CG4] name: {{ gettext('Check Gate #4') }} icon: mmu_checkgate4 method: printer.gcode.script params: { "script":"MMU_CHECK_GATE GATE=4 QUIET=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 4 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu check_gates CG5] name: {{ gettext('Check Gate #5') }} icon: mmu_checkgate5 method: printer.gcode.script params: { "script":"MMU_CHECK_GATE GATE=5 QUIET=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 5 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu check_gates CG6] name: {{ gettext('Check Gate #6') }} icon: mmu_checkgate6 method: printer.gcode.script params: { "script":"MMU_CHECK_GATE GATE=6 QUIET=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 6 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu check_gates CG7] name: {{ gettext('Check Gate #7') }} icon: mmu_checkgate7 method: printer.gcode.script params: { "script":"MMU_CHECK_GATE GATE=7 QUIET=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 7 }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu select_gates] name: {{ gettext('Select Gate...') }} icon: mmu_select_gate enable: {{ printer.mmu.print_state != "printing" }} show_disabled: True refresh_on: printer.mmu.print_state # Example: to just select the tool (not load) #[menu __main,__print mmu select_tools] #name: {{ gettext('Select Tool...') }} #icon: extruder #enable: {{ printer.mmu.print_state != "printing" }} #show_disabled: True #refresh_on: printer.mmu.print_state # #MMU_iter_select_tools [menu __main,__print mmu select_gates bypass}] name: {{ gettext('Select Bypass') }} icon: mmu_select_bypass method: printer.gcode.script params: {"script":"MMU_SELECT_BYPASS"} enable: {{ printer.mmu.gate != -2 and printer.mmu.has_bypass }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.has_bypass # Generated menus for each tool/gate... [menu __main,__print mmu select_gates G0] name: {{ gettext('Select Gate #0') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=0" } enable: {{ printer.mmu.gate != 0 and printer.mmu.num_gates > 0 }} show_disabled: True refresh_on: printer.mmu.gate [menu __main,__print mmu select_gates G1] name: {{ gettext('Select Gate #1') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=1" } enable: {{ printer.mmu.gate != 1 and printer.mmu.num_gates > 1 }} show_disabled: True refresh_on: printer.mmu.gate [menu __main,__print mmu select_gates G2] name: {{ gettext('Select Gate #2') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=2" } enable: {{ printer.mmu.gate != 2 and printer.mmu.num_gates > 2 }} show_disabled: True refresh_on: printer.mmu.gate [menu __main,__print mmu select_gates G3] name: {{ gettext('Select Gate #3') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=3" } enable: {{ printer.mmu.gate != 3 and printer.mmu.num_gates > 3 }} show_disabled: True refresh_on: printer.mmu.gate [menu __main,__print mmu select_gates G4] name: {{ gettext('Select Gate #4') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=4" } enable: {{ printer.mmu.gate != 4 and printer.mmu.num_gates > 4 }} show_disabled: True refresh_on: printer.mmu.gate [menu __main,__print mmu select_gates G5] name: {{ gettext('Select Gate #5') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=5" } enable: {{ printer.mmu.gate != 5 and printer.mmu.num_gates > 5 }} show_disabled: True refresh_on: printer.mmu.gate [menu __main,__print mmu select_gates G6] name: {{ gettext('Select Gate #6') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=6" } enable: {{ printer.mmu.gate != 6 and printer.mmu.num_gates > 6 }} show_disabled: True refresh_on: printer.mmu.gate [menu __main,__print mmu select_gates G7] name: {{ gettext('Select Gate #7') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=7" } enable: {{ printer.mmu.gate != 7 and printer.mmu.num_gates > 7 }} show_disabled: True refresh_on: printer.mmu.gate [menu __main,__print mmu status] name: {{ gettext('Display Status') }} icon: info method: printer.gcode.script params: {"script":"MMU_STATUS"} enable: {{ printer.mmu.action == "Idle" }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu print] name: {{ gettext('Print Stats') }} icon: mmu_status method: printer.gcode.script params: {"script":"MMU_STATS"} enable: {{ printer.mmu.action == "Idle" }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu reset] name: {{ gettext('Reset Stats') }} icon: mmu_stats_reset method: printer.gcode.script confirm: Are you sure you want to reset MMU statistics? params: {"script":"MMU_STATS RESET=1"} enable: {{ printer.mmu.action == "Idle" }} show_disabled: True refresh_on: printer.mmu.action [menu __main,__print mmu enable_endless_spool] name: {{ gettext('Enable E.Spool') }} icon: mmu_enable_endless_spool method: printer.gcode.script params: {"script":"MMU_ENDLESS_SPOOL ENABLE=1"} enable: {{ printer.mmu.endless_spool == 0 }} show_disabled: True refresh_on: printer.mmu.endless_spool [menu __main,__print mmu disable_endless_spool] name: {{ gettext('Disable E.Spool') }} icon: mmu_disable_endless_spool method: printer.gcode.script params: {"script":"MMU_ENDLESS_SPOOL ENABLE=0"} enable: {{ printer.mmu.endless_spool == 1 }} show_disabled: True refresh_on: printer.mmu.endless_spool [menu __main,__print mmu led_disable] name: {{ gettext('Disable LED') }} icon: mmu_led_disable method: printer.gcode.script params: {"script":"MMU_LED ENABLE=0 QUIET=1"} enable: {{ printer.mmu.enabled and not printer.mmu.print_state == "standby" }} show_disabled: True refresh_on: printer.mmu.enabled, printer.mmu.print_state [menu __main,__print mmu led_gate_status] name: {{ gettext('LED Gate Status') }} icon: mmu_led_gate_status method: printer.gcode.script params: {"script":"MMU_LED ENABLE=1 EXIT_EFFECT=gate_status QUIET=1"} enable: {{ printer.mmu.enabled and not printer.mmu.print_state == "standby" }} show_disabled: True refresh_on: printer.mmu.enabled, printer.mmu.print_state [menu __main,__print mmu led_filament_color] name: {{ gettext('LED Fil. Color') }} icon: mmu_led_filament_color method: printer.gcode.script params: {"script":"MMU_LED ENABLE=1 EXIT_EFFECT=filament_color QUIET=1"} enable: {{ printer.mmu.enabled and not printer.mmu.print_state == "standby" }} show_disabled: True refresh_on: printer.mmu.enabled, printer.mmu.print_state # Example: User added ... [menu __main,__print mmu spare1] name: {{ gettext('user def') }} icon: mmu_carrot enable: False show_disabled: False # Examples: for basic management #[menu __main,__print mmu home] #name: {{ gettext('Home Selector') }} #icon: home #method: printer.gcode.script #params: {"script":"MMU_HOME"} # #[menu __main,__print mmu servoup] #name: {{ gettext('Servo UP') }} #icon: arrow-up #method: printer.gcode.script #params: {"script":"MMU_SERVO POS=up"} #enable: {{ printer.mmu.servo != "Up" }} #show_disabled: True #refresh_on: printer.mmu.servo # #[menu __main,__print mmu servodown] #name: {{ gettext('Servo Down') }} #icon: arrow-down #method: printer.gcode.script #params: {"script":"MMU_SERVO POS=down"} #enable: {{ printer.mmu.servo != "Down" }} #show_disabled: True #refresh_on: printer.mmu.servo # #[menu __main,__print mmu motoroff] #name: {{ gettext('Disable Motors') }} #icon: motor-off #method: printer.gcode.script #confirm: "This will invalidate selector position and require rehoming. Are you sure?" #params: {"script":"MMU_MOTORS_OFF"} # # ---------- MMU Manage submenu end # ---------- MMU config/calibration menu # [menu __main more mmu_calib] name: {{ gettext('MMU Setup') }} icon: mmu_gear enable: {{ printer.mmu is defined }} [menu __main more mmu_calib home] name: {{ gettext('Home') }} icon: home method: printer.gcode.script params: {"script":"MMU_HOME"} enable: {{ printer.mmu.selector_type and printer.mmu.selector_type != "VirtualSelector" }} show_disabled: True [menu __main more mmu_calib select_gates] name: {{ gettext('Select Gate...') }} icon: mmu_select_gate # Generated menus for each tool/gate... [menu __main more mmu_calib select_gates G0] name: {{ gettext('Select Gate #0') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=0" } enable: {{ printer.mmu.gate != 0 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 0 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main more mmu_calib select_gates G1] name: {{ gettext('Select Gate #1') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=1" } enable: {{ printer.mmu.gate != 1 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 1 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main more mmu_calib select_gates G2] name: {{ gettext('Select Gate #2') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=2" } enable: {{ printer.mmu.gate != 2 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 2 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main more mmu_calib select_gates G3] name: {{ gettext('Select Gate #3') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=3" } enable: {{ printer.mmu.gate != 3 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 3 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main more mmu_calib select_gates G4] name: {{ gettext('Select Gate #4') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=4" } enable: {{ printer.mmu.gate != 4 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 4 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main more mmu_calib select_gates G5] name: {{ gettext('Select Gate #5') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=5" } enable: {{ printer.mmu.gate != 5 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 5 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main more mmu_calib select_gates G6] name: {{ gettext('Select Gate #6') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=6" } enable: {{ printer.mmu.gate != 6 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 6 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main more mmu_calib select_gates G7] name: {{ gettext('Select Gate #7') }} icon: mmu_select_gate method: printer.gcode.script params: { "script":"MMU_SELECT GATE=7" } enable: {{ printer.mmu.gate != 7 and printer.mmu.action == "Idle" and printer.mmu.num_gates > 7 }} show_disabled: True refresh_on: printer.mmu.gate, printer.mmu.action [menu __main more mmu_calib grip] name: {{ gettext('Test Grip') }} icon: mmu_grip method: printer.gcode.script params: {"script":"MMU_TEST_GRIP"} [menu __main more mmu_calib formtip] name: {{ gettext('Form Tip') }} icon: mmu_formtip method: printer.gcode.script params: {"script":"MMU_FORM_TIP"} [menu __main more mmu_calib servoup] name: {{ gettext('Servo UP') }} icon: arrow-up method: printer.gcode.script params: {"script":"MMU_SERVO POS=up"} enable: {{ printer.mmu.selector_type and printer.mmu.selector_type != "VirtualSelector" and printer.mmu.servo != "Up" }} show_disabled: True refresh_on: printer.mmu.servo [menu __main more mmu_calib servomove] name: {{ gettext('Servo MOVE') }} icon: arrow-right method: printer.gcode.script params: {"script":"MMU_SERVO POS=move"} enable: {{ printer.mmu.selector_type and printer.mmu.selector_type != "VirtualSelector" and printer.mmu.servo != "Move" }} show_disabled: True refresh_on: printer.mmu.servo [menu __main more mmu_calib servodown] name: {{ gettext('Servo DOWN') }} icon: arrow-down method: printer.gcode.script params: {"script":"MMU_SERVO POS=down"} enable: {{ printer.mmu.selector_type and printer.mmu.selector_type != "VirtualSelector" and printer.mmu.servo != "Down" }} show_disabled: True refresh_on: printer.mmu.servo [menu __main more mmu_calib encoder] name: {{ gettext('Cal. Encoder') }} icon: mmu_encodercal method: printer.gcode.script params: {"script":"MMU_CALIBRATE_ENCODER"} [menu __main more mmu_calib all] name: {{ gettext('Calibrate ALL') }} icon: extruder method: printer.gcode.script confirm: This will calibrate all gates. Are you sure? params: {"script":"MMU_CALIBRATE_GATES ALL=1"} [menu __main more mmu_calib gate] name: {{ gettext('Cal. Gate...') }} icon: mmu_calibrate # Generated menus for each tool/gate... [menu __main more mmu_calib gate CG0] name: {{ gettext('Calibrate #0') }} icon: mmu_calibrate method: printer.gcode.script params: { "script":"MMU_CALIBRATE_GATES GATE=0" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 0 }} show_disabled: True refresh_on: printer.mmu.action [menu __main more mmu_calib gate CG1] name: {{ gettext('Calibrate #1') }} icon: mmu_calibrate method: printer.gcode.script params: { "script":"MMU_CALIBRATE_GATES GATE=1" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 1 }} show_disabled: True refresh_on: printer.mmu.action [menu __main more mmu_calib gate CG2] name: {{ gettext('Calibrate #2') }} icon: mmu_calibrate method: printer.gcode.script params: { "script":"MMU_CALIBRATE_GATES GATE=2" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 2 }} show_disabled: True refresh_on: printer.mmu.action [menu __main more mmu_calib gate CG3] name: {{ gettext('Calibrate #3') }} icon: mmu_calibrate method: printer.gcode.script params: { "script":"MMU_CALIBRATE_GATES GATE=3" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 3 }} show_disabled: True refresh_on: printer.mmu.action [menu __main more mmu_calib gate CG4] name: {{ gettext('Calibrate #4') }} icon: mmu_calibrate method: printer.gcode.script params: { "script":"MMU_CALIBRATE_GATES GATE=4" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 4 }} show_disabled: True refresh_on: printer.mmu.action [menu __main more mmu_calib gate CG5] name: {{ gettext('Calibrate #5') }} icon: mmu_calibrate method: printer.gcode.script params: { "script":"MMU_CALIBRATE_GATES GATE=5" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 5 }} show_disabled: True refresh_on: printer.mmu.action [menu __main more mmu_calib gate CG6] name: {{ gettext('Calibrate #6') }} icon: mmu_calibrate method: printer.gcode.script params: { "script":"MMU_CALIBRATE_GATES GATE=6" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 6 }} show_disabled: True refresh_on: printer.mmu.action [menu __main more mmu_calib gate CG7] name: {{ gettext('Calibrate #7') }} icon: mmu_calibrate method: printer.gcode.script params: { "script":"MMU_CALIBRATE_GATES GATE=7" } enable: {{ printer.mmu.action == "Idle" and printer.mmu.num_gates > 7 }} show_disabled: True refresh_on: printer.mmu.action # # ---------- MMU config/calibration end