# 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

### 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} MOVE=1

### 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: gcode.move_xpos
input_min: 0
input_max: 200.0
input_step: 10.0
gcode:
    G90
    G1 X{0:.1f} F2400

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

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

[menu __control __move_10mm __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: 10.0
gcode:
    M83
    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: gcode.move_xpos
input_min: 0
input_max: 200.0
input_step: 1.0
gcode:
    G90
    G1 X{0:.1f} F2400

[menu __control __move_1mm __axis_y]
type: input
name: "Y:{0:05.1f} "
parameter: gcode.move_ypos
input_min: 0
input_max: 200.0
input_step: 1.0
gcode:
    G90
    G1 Y{0:.1f} F2400

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

[menu __control __move_1mm __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: 1.0
gcode:
    M83
    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: gcode.move_xpos
input_min: 0
input_max: 200.0
input_step: 0.1
gcode:
    G90
    G1 X{0:.1f} F2400

[menu __control __move_01mm __axis_y]
type: input
name: "Y:{0:05.1f} "
parameter: gcode.move_ypos
input_min: 0
input_max: 200.0
input_step: 0.1
gcode:
    G90
    G1 Y{0:.1f} F2400

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

[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:
    M83
    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: extruder.is_enabled
name: "Ex0:{0:4.0f} T"
parameter: extruder.temperature

[menu __temp __hotend0_target]
type: input
enable: extruder.is_enabled
name: "{0:4.0f}"
parameter: extruder.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: extruder.is_enabled,heater_bed.is_enabled
name: Preheat all
gcode:
    M140 S60
    M104 S200

[menu __temp __preheat_pla __hotend]
type: command
enable: extruder.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: extruder.is_enabled,heater_bed.is_enabled
name: Preheat all
gcode:
    M140 S110
    M104 S245

[menu __temp __preheat_abs __hotend]
type: command
enable: extruder.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: extruder.is_enabled,heater_bed.is_enabled
name: Cooldown all
gcode:
    M104 S0
    M140 S0

[menu __temp __cooldown __hotend]
type: command
enable: extruder.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: {0:.1f}
parameter: 0
input_step: 0.1
gcode:
    M83
    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, extruder.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