# This file serves as default menu structure.
# See the "example-menu.cfg" file for description of common config parameters.

### DEFAULT MENU ###

### menu main ###
[menu __main]
type: list
name: Main Menu
items:
    __tune
    __octoprint
    __sdcard
    __control
    __temp
    __filament
    __prepare
    __test

### menu tune ###
[menu __tune]
type: list
enable: toolhead.is_printing
name: Tune
items:
    .__speed
    .__flow
    .__offsetz

[menu __tune __speed]
type: input
name: "Speed: {1:3d}%"
parameter: gcode.speed_factor
transform:
    map(0,2,0,200)
input_min: 0
input_max: 2
input_step: 0.01
realtime: true
gcode: M220 S{1:d}

[menu __tune __flow]
type: input
name: "Flow: {1:3d}%"
parameter: gcode.extrude_factor
transform:
    map(0,2,0,200)
input_min: 0
input_max: 2
input_step: 0.01
realtime: true
gcode: M221 S{1:d}

[menu __tune __offsetz]
type: input
name: "Offset Z:{0:05.3f} "
parameter: gcode.homing_zpos
input_min: -5
input_max: 5
input_step: 0.005
realtime: true
gcode: SET_GCODE_OFFSET Z={0:.3f}

### menu octoprint ###
[menu __octoprint]
type: list
name: OctoPrint
items:
    .__pause
    .__resume
    .__abort

[menu __octoprint __pause]
type: command
enable: toolhead.is_printing
name: Pause printing
action: respond action:pause
gcode:

[menu __octoprint __resume]
type: command
enable: !toolhead.is_printing
name: Resume printing
action: respond action:resume
gcode:

[menu __octoprint __abort]
type: command
enable: toolhead.is_printing
name: Abort printing
action: respond action:cancel
gcode:

### menu virtual sdcard ###
[menu __sdcard]
type: vsdcard
name: SD Card
items:
    .__start
    .__resume
    .__pause

[menu __sdcard __start]
type: command
enable: !toolhead.is_printing
name: Start printing
gcode: M24

[menu __sdcard __resume]
type: command
enable: toolhead.is_printing
name: Resume printing
gcode: M24

[menu __sdcard __pause]
type: command
enable: toolhead.is_printing
name: Pause printing
gcode: M25

### menu control ###
[menu __control]
type: list
name: Control
items:
    .__home
    .__homez
    .__homexy
    .__move_10mm
    .__move_1mm
    .__move_01mm
    .__disable
    .__fanonoff
    .__fanspeed
    .__caselightonoff
    .__caselightpwm

[menu __control __home]
type: command
name: Home All
gcode: G28
enable: !toolhead.is_printing

[menu __control __homez]
type: command
enable: !toolhead.is_printing
name: Home Z
gcode: G28 Z

[menu __control __homexy]
type: command
enable: !toolhead.is_printing
name: Home X/Y
gcode: G28 X Y

[menu __control __disable]
type: command
name: Disable steppers
gcode:
    M84
    M18

[menu __control __fanonoff]
type: input
enable: fan.is_enabled
name: Fan {1:3s}
parameter: fan.speed
transform:
    choose('OFF','ON')
    choose(0,255)
input_min: 0
input_max: 1
input_step: 1
gcode: M106 S{2:d}

[menu __control __fanspeed]
type: input
enable: fan.is_enabled
name: Fan speed: {1:3d}%
parameter: fan.speed
transform:
    map(0,1,0,100)
    map(0,1,0,255)
input_min: 0
input_max: 1
input_step: 0.01
gcode: M106 S{2:d}

[menu __control __caselightonoff]
type: input
enable: output_pin.caselight.is_enabled
name: Case light: {1:3s}
parameter: output_pin.caselight.value
transform:
    choose('OFF','ON')
    choose(0,1)
input_min: 0
input_max: 1
input_step: 1
gcode: SET_PIN PIN=caselight VALUE={2}

[menu __control __caselightpwm]
type: input
enable: output_pin.caselight.is_enabled
name: Case light: {0:4.0%}
parameter: output_pin.caselight.value
input_min: 0.0
input_max: 1.0
input_step: 0.01
gcode: SET_PIN PIN=caselight VALUE={0:.2f}

### menu move 10mm ###
[menu __control __move_10mm]
type: list
enable: !toolhead.is_printing
name: Move 10mm
items:
    .__axis_z
    .__axis_x, .__axis_y
    .__axis_e

[menu __control __move_10mm __axis_x]
type: input
name: "X:{0:05.1f} "
parameter: toolhead.xpos
input_min: 0
input_max: 200.0
input_step: 10.0
gcode: G1 X{0:.1f}

[menu __control __move_10mm __axis_y]
type: input
name: "Y:{0:05.1f} "
parameter: toolhead.ypos
input_min: 0
input_max: 200.0
input_step: 10.0
gcode: G1 Y{0:.1f}

[menu __control __move_10mm __axis_z]
type: input
enable: !toolhead.is_printing
name: "Move Z:{0:05.1f}"
parameter: toolhead.zpos
input_min: 0
input_max: 200.0
input_step: 10.0
gcode: G1 Z{0:.1f}

[menu __control __move_10mm __axis_e]
type: input
enable: !toolhead.is_printing
name: "Move E:{0:+06.1f}"
parameter: 0
input_min: -250.0
input_max: 250.0
input_step: 10.0
gcode: G1 E{0:.1f} F240

### menu move 1mm ###
[menu __control __move_1mm]
type: list
enable: !toolhead.is_printing
name: Move 1mm
items:
    .__axis_z
    .__axis_x, .__axis_y
    .__axis_e

[menu __control __move_1mm __axis_x]
type: input
name: "X:{0:05.1f} "
parameter: toolhead.xpos
input_min: 0
input_max: 100.0
input_step: 1.0
gcode: G1 X{0:.1f}

[menu __control __move_1mm __axis_y]
type: input
name: "Y:{0:05.1f} "
parameter: toolhead.ypos
input_min: 0
input_max: 100.0
input_step: 1.0
gcode: G1 Y{0:.1f}

[menu __control __move_1mm __axis_z]
type: input
enable: !toolhead.is_printing
name: "Move Z:{0:05.1f}"
parameter: toolhead.zpos
input_min: 0
input_max: 100.0
input_step: 1.0
gcode: G1 Z{0:.1f}

[menu __control __move_1mm __axis_e]
type: input
enable: !toolhead.is_printing
name: "Move E:{0:+06.1f}"
parameter: 0
input_min: -100.0
input_max: 100.0
input_step: 1.0
gcode: G1 E{0:.1f} F240

### menu move 0.1mm ###
[menu __control __move_01mm]
type: list
enable: !toolhead.is_printing
name: Move 0.1mm
items:
    .__axis_z
    .__axis_x, .__axis_y
    .__axis_e

[menu __control __move_01mm __axis_x]
type: input
name: "X:{0:05.1f} "
parameter: toolhead.xpos
input_min: 0
input_max: 50.0
input_step: 0.1
gcode: G1 X{0:.1f}

[menu __control __move_01mm __axis_y]
type: input
name: "Y:{0:05.1f} "
parameter: toolhead.ypos
input_min: 0
input_max: 50.0
input_step: 0.1
gcode: G1 Y{0:.1f}

[menu __control __move_01mm __axis_z]
type: input
enable: !toolhead.is_printing
name: "Move Z:{0:05.1f}"
parameter: toolhead.zpos
input_min: 0
input_max: 50.0
input_step: 0.1
gcode: G1 Z{0:.1f}

[menu __control __move_01mm __axis_e]
type: input
enable: !toolhead.is_printing
name: "Move E:{0:+06.1f}"
parameter: 0
input_min: -50.0
input_max: 50.0
input_step: 0.1
gcode: G1 E{0:.1f} F240

### menu temperature ###
[menu __temp]
type: list
name: Temperature
items:
    .__hotend0_current, .__hotend0_target
    .__hotend1_current, .__hotend1_target
    .__hotbed_current, .__hotbed_target
    .__preheat_pla
    .__preheat_abs
    .__cooldown

[menu __temp __hotend0_current]
type: item
enable: extruder0.is_enabled
name: "Ex0:{0:4.0f} T"
parameter: extruder0.temperature

[menu __temp __hotend0_target]
type: input
enable: extruder0.is_enabled
name: "{0:4.0f}"
parameter: extruder0.target
input_min: 0
input_max: 250
input_step: 1
input_step2: 10
gcode: M104 T0 S{0:.0f}

[menu __temp __hotend1_current]
type: item
enable: extruder1.is_enabled
name: "Ex1:{0:4.0f} T"
parameter: extruder1.temperature

[menu __temp __hotend1_target]
type: input
enable: extruder1.is_enabled
name: "{0:4.0f}"
parameter: extruder1.target
input_min: 0
input_max: 250
input_step: 1
input_step2: 10
gcode: M104 T1 S{0:.0f}

[menu __temp __hotbed_current]
type: item
enable: heater_bed.is_enabled
name: "Bed:{0:4.0f} T"
parameter: heater_bed.temperature

[menu __temp __hotbed_target]
type: input
enable: heater_bed.is_enabled
name: "{0:4.0f}"
parameter: heater_bed.target
input_min: 0
input_max: 130
input_step: 1
input_step2: 10
gcode: M140 S{0:.0f}

[menu __temp __preheat_pla]
type: list
name: Preheat PLA
items:
    .__all
    .__hotend
    .__hotbed

[menu __temp __preheat_pla __all]
type: command
enable: extruder0.is_enabled,heater_bed.is_enabled
name: Preheat all
gcode:
    M140 S60
    M104 S200

[menu __temp __preheat_pla __hotend]
type: command
enable: extruder0.is_enabled
name: Preheat hotend
gcode: M104 S200

[menu __temp __preheat_pla __hotbed]
type: command
enable: heater_bed.is_enabled
name: Preheat hotbed
gcode: M140 S60

[menu __temp __preheat_abs]
type: list
name: Preheat ABS
items:
    .__all
    .__hotend
    .__hotbed

[menu __temp __preheat_abs __all]
type: command
enable: extruder0.is_enabled,heater_bed.is_enabled
name: Preheat all
gcode:
    M140 S110
    M104 S245

[menu __temp __preheat_abs __hotend]
type: command
enable: extruder0.is_enabled
name: Preheat hotend
gcode: M104 S245

[menu __temp __preheat_abs __hotbed]
type: command
enable: heater_bed.is_enabled
name: Preheat hotbed
gcode: M140 S110

[menu __temp __cooldown]
type: list
name: Cooldown
items:
    .__all
    .__hotend
    .__hotbed

[menu __temp __cooldown __all]
type: command
enable: extruder0.is_enabled,heater_bed.is_enabled
name: Cooldown all
gcode:
    M104 S0
    M140 S0

[menu __temp __cooldown __hotend]
type: command
enable: extruder0.is_enabled
name: Cooldown hotend
gcode: M104 S0

[menu __temp __cooldown __hotbed]
type: command
enable: heater_bed.is_enabled
name: Cooldown hotbed
gcode: M140 S0

### menu filament ###

[menu __filament]
type: list
name: Filament
items:
    __temp __hotend0_current, __temp __hotend0_target
    .__unload
    .__load
    .__feed

[menu __filament __load]
type: command
name: Load Filament
gcode:
    M83
    G1 E50 F1000
    G1 E50 F1000
    G1 E50 F1000
    G1 E50 F1000
    G1 E50 F300
    G1 E50 F300
    M82

[menu __filament __unload]
type: command
name: Unload Filament
gcode:
    M83
    G1 E-50 F1000
    G1 E-50 F1000
    G1 E-50 F1000
    G1 E-50 F1000
    G1 E-50 F1800
    G1 E-50 F1800
    G1 E-50 F1800
    G1 E-50 F1800
    M82

[menu __filament __feed]
type: input
name: Feed Filament: {0:.1f}
parameter: toolhead.epos
input_step: 0.1
gcode: G1 E{0:.1f} F30

### menu prepare ###
[menu __prepare]
type: list
enable: !toolhead.is_printing
name: Prepare
items:
    .__delta_calib
    .__bedprobe
    .__hotend_pid_tuning
    .__hotbed_pid_tuning
    .__host_restart
    .__firmware_restart

[menu __prepare __host_restart]
type: command
enable: !toolhead.is_printing
name: Restart host
gcode: RESTART

[menu __prepare __firmware_restart]
type: command
enable: !toolhead.is_printing
name: Restart FW
gcode: FIRMWARE_RESTART

[menu __prepare __delta_calib]
type: command
enable: !toolhead.is_printing
name: Delta calibrate
gcode: DELTA_CALIBRATE

[menu __prepare __bedprobe]
type: command
enable: !toolhead.is_printing
name: Bed probe
gcode: PROBE

[menu __prepare __hotend_pid_tuning]
type: command
enable: !toolhead.is_printing, extruder0.is_enabled
name: Tune Hotend PID
gcode: PID_CALIBRATE HEATER=extruder TARGET=210 WRITE_FILE=1

[menu __prepare __hotbed_pid_tuning]
type: command
enable: !toolhead.is_printing, heater_bed.is_enabled
name: Tune Hotbed PID
gcode: PID_CALIBRATE HEATER=heater_bed TARGET=60 WRITE_FILE=1

### test menu ###
[menu __test]
type: list
name: Test menu
items:
    .__scroll
    .__dump

[menu __test __scroll]
type: item
name: This is very long item name
width: 18
scroll: true

[menu __test __dump]
type: command
name: Dump parameters
gcode: MENU DO=dump

### info screens ###
[menu __screen2004_static]
type: deck
name: Deck (static)
longpress_menu: __main
items: __card2004_static

[menu __screen2004_input]
type: deck
name: Deck (input)
longpress_menu: __main
items: __card2004_input

[menu __screen1604_static]
type: deck
name: Deck (static)
longpress_menu: __main
items: __card1604_static

[menu __screen1604_input]
type: deck
name: Deck (input)
longpress_menu: __main
items: __card1604_input

[menu __screen_test]
type: deck
name: Deck (test)
longpress_menu: __main
items: __card1, __card2, __card3

### deck cards ###

### special characters for hd44780
# \x00 - thermometer
# \x01 - heater_bed
# \x02 - speed_factor
# \x03 - clock
# \x04 - degrees
# \x05 - usb
# \x06 - sdcard
# \x07 - fan
# \x7e - right arrow

[menu __card2004_static]
type: card
name: Card 20x04
content:
    "\x00{0:3s}\x04\x7e{1:3s}\x04   {2}"
    "\x01{3:3s}\x04\x7e{4:3s}\x04   \xa5{8}"
    "\x07{6}  \x02{5} {7}"
    "{9}"
items:
    __card_hotend0_current
    __card_hotend0_target
    __card_zpos
    __card_hotbed_current
    __card_hotbed_target
    __card_frpeed
    __card_fnspeed
    5,__card_prt_time, __card_usb_progress, __card_sdcard_progress
    __card_status
    __card_msg,__card_xpos|__card_ypos|__card_epos

[menu __card1604_static]
type: card
name: Card 16x04
content:
    "E{0:3s}/{1:3s} {2}"
    "B{3:3s}/{4:3s} fr{5}"
    "fn{6}   {7}"
    "[{8}] {9}"
items:
    __card_hotend0_current
    __card_hotend0_target
    __card_zpos
    __card_hotbed_current
    __card_hotbed_target
    __card_frpeed
    __card_fnspeed
    5,__card_prt_time_2, __card_usb_progress_2, __card_sdcard_progress_2
    __card_status_slim
    __card_msg_slim,__card_xpos|__card_ypos

[menu __card2004_input]
type: card
name: Card 20x04
content:
    "\x00{0:3s}\x04\x7e{1:3s}\x04   {2}"
    "\x01{3:3s}\x04\x7e{4:3s}\x04   \xa5{8}"
    "\x07{6}  \x02{5} {7}"
    "{9}"
items:
    __card_hotend0_current
    __card_hotend0_target_in
    __card_zpos
    __card_hotbed_current
    __card_hotbed_target_in
    __card_frpeed_in
    __card_fnspeed
    5,__card_prt_time, __card_usb_progress, __card_sdcard_progress
    __card_status
    __card_msg,__card_xpos|__card_ypos|__card_epos

[menu __card1604_input]
type: card
name: Card 16x04
content:
    "E{0:3s}/{1:3s} {2}"
    "B{3:3s}/{4:3s} fr{5}"
    "fn{6}   {7}"
    "[{8}] {9}"
items:
    __card_hotend0_current
    __card_hotend0_target_in
    __card_zpos
    __card_hotbed_current
    __card_hotbed_target_in
    __card_frpeed_in
    __card_fnspeed
    5,__card_prt_time_2, __card_usb_progress_2, __card_sdcard_progress_2
    __card_status_slim
    __card_msg,__card_xpos|__card_ypos

[menu __card1]
type: card
name: Card 1
content:
    "E0:{0:3s}/{1:3s} B:{4:3s}/{5:3s}"
    "E1:{2:3s}/{3:3s} {6}"
    "Fr{7}Fn{8} {9}"
    "{10}"

items:
    __card_hotend0_current
    __card_hotend0_target
    __card_hotend1_current
    __card_hotend1_target
    __card_hotbed_current
    __card_hotbed_target
    __card_zpos
    __card_frpeed_in
    __card_fnspeed_in
    5,__card_prt_time, __card_usb_progress, __card_sdcard_progress
    __card_msg

[menu __card2]
type: card
name: Card 2
content:
    "E:{0:3s}/{1:3s} B:{2:3s}/{3:3s}"
    "{4}{5}{6}"
    "Fr{7} {8} T{9}"
    "{10}"
items:
    __card_hotend0_current
    __card_hotend0_target
    __card_hotbed_current
    __card_hotbed_target
    __card_xpos
    __card_ypos
    __card_zpos
    __card_frpeed_in
    __card_usb_progress_2, __card_sdcard_progress_2
    __card_prt_time_2
    __card_msg

[menu __card3]
type: card
name: Card 3
content:
    "Example card :)"
    "Try this menu."
    "({0})"
items:
    __test

### card items ###

[menu __card_hotend0_current]
type: item
enable: extruder0.is_enabled
name: "{1:3.0f}"
parameter: extruder0.temperature
transform: abs()

[menu __card_hotend0_target]
type: item
enable: extruder0.is_enabled
name: "{1:3.0f}"
parameter: extruder0.target
transform: abs()

[menu __card_hotend0_target_in]
type: input
enable: extruder0.is_enabled
name: "{1:3.0f}"
parameter: extruder0.target
transform: abs()
input_min: 0
input_max: 250
input_step: 1
gcode: M104 T0 S{0:.0f}

[menu __card_hotend1_current]
type: item
enable: extruder1.is_enabled
name: "{1:3.0f}"
parameter: extruder1.temperature
transform: abs()

[menu __card_hotend1_target]
type: item
enable: extruder1.is_enabled
name: "{1:3.0f}"
parameter: extruder1.target
transform: abs()

[menu __card_hotend1_target_in]
type: input
enable: extruder1.is_enabled
name: "{1:3.0f}"
parameter: extruder1.target
transform: abs()
input_min: 0
input_max: 250
input_step: 1
gcode: M104 T1 S{0:.0f}

[menu __card_hotbed_current]
type: item
enable: heater_bed.is_enabled
name: "{1:3.0f}"
parameter: heater_bed.temperature
transform: abs()

[menu __card_hotbed_target]
type: item
enable: heater_bed.is_enabled
name: "{1:3.0f}"
parameter: heater_bed.target
transform: abs()

[menu __card_hotbed_target_in]
type: input
enable: heater_bed.is_enabled
name: "{1:3.0f}"
parameter: heater_bed.target
transform: abs()
input_min: 0
input_max: 250
input_step: 1
gcode: M140 S{0:.0f}

[menu __card_zpos]
type: item
name: "Z{0:06.2f}"
parameter: toolhead.zpos

[menu __card_xpos]
type: item
name: "X{0:05.1f}{2}"
parameter: toolhead.xpos, menu.is20xx
transform:
    1.choose('',' ')

[menu __card_ypos]
type: item
name: "Y{0:05.1f}{2}"
parameter: toolhead.ypos, menu.is20xx
transform:
    1.choose('',' ')

[menu __card_epos]
type: item
name: "E{0:05.1f}{2}"
parameter: toolhead.epos, menu.is20xx
transform:
    1.choose('',' ')

[menu __card_frpeed]
type: item
name: "{0:4.0%}"
parameter: gcode.speed_factor

[menu __card_fnspeed]
type: item
name: "{0:4.0%}"
parameter: fan.speed

[menu __card_frpeed_in]
type: input
name: "{0:4.0%}"
parameter: gcode.speed_factor
transform:
    map(0,1,0,255)
input_min: 0
input_max: 1
input_step: 0.01
gcode: M220 S{1:d}

[menu __card_fnspeed_in]
type: input
enable: fan.is_enabled
name: "{0:4.0%}"
parameter: fan.speed
transform:
    map(0,1,0,255)
input_min: 0
input_max: 1
input_step: 0.01
gcode: M106 S{1:d}

[menu __card_prt_time]
type: item
name: "\x03{1:02d}:{2:02d}"
transform:
    minutes()
    seconds()
parameter: toolhead.printing_time

[menu __card_prt_time_2]
type: item
name: "T{1:02d}:{2:02d}"
transform:
    minutes()
    seconds()
parameter: toolhead.printing_time

[menu __card_usb_progress]
type: item
enable: !virtual_sdcard.progress, display.progress
name: "\x05{0:3.0f}%"
parameter: display.progress

[menu __card_sdcard_progress]
type: item
enable: virtual_sdcard.is_enabled, virtual_sdcard.progress
name: "\x06{0:3.0f}%"
parameter: virtual_sdcard.progress

[menu __card_usb_progress_2]
type: item
#enable: !virtual_sdcard.progress,display.progress
name: "pr{0:3.0f}%"
parameter: display.progress

[menu __card_sdcard_progress_2]
type: item
enable: virtual_sdcard.is_enabled, virtual_sdcard.progress
name: "pr{0:3.0f}%"
parameter: virtual_sdcard.progress

[menu __card_msg]
enable: display.message
type: item
scroll: true
width: 20
name: "{0}"
parameter: display.message

[menu __card_msg_slim]
enable: display.message
type: item
scroll: true
width: 12
name: "{0}"
parameter: display.message

[menu __card_status]
type: item
name: "{0}"
width: 5
parameter: toolhead.status

[menu __card_status_slim]
type: item
name: "{0}"
width: 1
parameter: toolhead.status