🎨 ExtUI "user click" and other tweaks (#22122)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
		
				
					committed by
					
						
						Scott Lahteine
					
				
			
			
				
	
			
			
			
						parent
						
							56355159c6
						
					
				
				
					commit
					d84e2d6e29
				
			@@ -47,6 +47,7 @@
 | 
			
		||||
 | 
			
		||||
#include "../marlinui.h"
 | 
			
		||||
#include "../../gcode/queue.h"
 | 
			
		||||
#include "../../gcode/gcode.h"
 | 
			
		||||
#include "../../module/motion.h"
 | 
			
		||||
#include "../../module/planner.h"
 | 
			
		||||
#include "../../module/probe.h"
 | 
			
		||||
@@ -353,14 +354,9 @@ namespace ExtUI {
 | 
			
		||||
 | 
			
		||||
  extruder_t getTool(const uint8_t extruder) {
 | 
			
		||||
    switch (extruder) {
 | 
			
		||||
      case 7:  return E7;
 | 
			
		||||
      case 6:  return E6;
 | 
			
		||||
      case 5:  return E5;
 | 
			
		||||
      case 4:  return E4;
 | 
			
		||||
      case 3:  return E3;
 | 
			
		||||
      case 2:  return E2;
 | 
			
		||||
      case 1:  return E1;
 | 
			
		||||
      default: return E0;
 | 
			
		||||
      default:
 | 
			
		||||
      case 0: return E0; case 1: return E1; case 2: return E2; case 3: return E3;
 | 
			
		||||
      case 4: return E4; case 5: return E5; case 6: return E6; case 7: return E7;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -372,8 +368,8 @@ namespace ExtUI {
 | 
			
		||||
    switch (axis) {
 | 
			
		||||
      #if IS_KINEMATIC || ENABLED(NO_MOTION_BEFORE_HOMING)
 | 
			
		||||
        case X: return axis_should_home(X_AXIS);
 | 
			
		||||
        case Y: return axis_should_home(Y_AXIS);
 | 
			
		||||
        case Z: return axis_should_home(Z_AXIS);
 | 
			
		||||
        OPTCODE(HAS_Y_AXIS, case Y: return axis_should_home(Y_AXIS))
 | 
			
		||||
        OPTCODE(HAS_Z_AXIS, case Z: return axis_should_home(Z_AXIS))
 | 
			
		||||
      #else
 | 
			
		||||
        case X: case Y: case Z: return true;
 | 
			
		||||
      #endif
 | 
			
		||||
@@ -385,6 +381,8 @@ namespace ExtUI {
 | 
			
		||||
    return !thermalManager.tooColdToExtrude(extruder - E0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GcodeSuite::MarlinBusyState getMachineBusyState() { return TERN0(HOST_KEEPALIVE_FEATURE, GcodeSuite::busy_state); }
 | 
			
		||||
 | 
			
		||||
  #if HAS_SOFTWARE_ENDSTOPS
 | 
			
		||||
    bool getSoftEndstopState() { return soft_endstop._enabled; }
 | 
			
		||||
    void setSoftEndstopState(const bool value) { soft_endstop._enabled = value; }
 | 
			
		||||
@@ -396,18 +394,27 @@ namespace ExtUI {
 | 
			
		||||
        #if AXIS_IS_TMC(X)
 | 
			
		||||
          case X: return stepperX.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(X2)
 | 
			
		||||
          case X2: return stepperX2.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(Y)
 | 
			
		||||
          case Y: return stepperY.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(Y2)
 | 
			
		||||
          case Y2: return stepperY2.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(Z)
 | 
			
		||||
          case Z: return stepperZ.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(I)
 | 
			
		||||
          case I: return stepperI.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(J)
 | 
			
		||||
          case J: return stepperJ.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(K)
 | 
			
		||||
          case K: return stepperK.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(X2)
 | 
			
		||||
          case X2: return stepperX2.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(Y2)
 | 
			
		||||
          case Y2: return stepperY2.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(Z2)
 | 
			
		||||
          case Z2: return stepperZ2.getMilliamps();
 | 
			
		||||
        #endif
 | 
			
		||||
@@ -450,18 +457,27 @@ namespace ExtUI {
 | 
			
		||||
        #if AXIS_IS_TMC(X)
 | 
			
		||||
          case X: stepperX.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(X2)
 | 
			
		||||
          case X2: stepperX2.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(Y)
 | 
			
		||||
          case Y: stepperY.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(Y2)
 | 
			
		||||
          case Y2: stepperY2.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(Z)
 | 
			
		||||
          case Z: stepperZ.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(I)
 | 
			
		||||
          case I: stepperI.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(J)
 | 
			
		||||
          case J: stepperJ.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(K)
 | 
			
		||||
          case K: stepperK.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(X2)
 | 
			
		||||
          case X2: stepperX2.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(Y2)
 | 
			
		||||
          case Y2: stepperY2.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if AXIS_IS_TMC(Z2)
 | 
			
		||||
          case Z2: stepperZ2.rms_current(constrain(mA, 400, 1500)); break;
 | 
			
		||||
        #endif
 | 
			
		||||
@@ -501,66 +517,59 @@ namespace ExtUI {
 | 
			
		||||
 | 
			
		||||
    int getTMCBumpSensitivity(const axis_t axis) {
 | 
			
		||||
      switch (axis) {
 | 
			
		||||
        #if ENABLED(X_SENSORLESS)
 | 
			
		||||
          case X:  return stepperX.homing_threshold();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if ENABLED(X2_SENSORLESS)
 | 
			
		||||
          case X2: return stepperX2.homing_threshold();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if ENABLED(Y_SENSORLESS)
 | 
			
		||||
          case Y:  return stepperY.homing_threshold();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if ENABLED(Y2_SENSORLESS)
 | 
			
		||||
          case Y2: return stepperY2.homing_threshold();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if ENABLED(Z_SENSORLESS)
 | 
			
		||||
          case Z:  return stepperZ.homing_threshold();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if ENABLED(Z2_SENSORLESS)
 | 
			
		||||
          case Z2: return stepperZ2.homing_threshold();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if ENABLED(Z3_SENSORLESS)
 | 
			
		||||
          case Z3: return stepperZ3.homing_threshold();
 | 
			
		||||
        #endif
 | 
			
		||||
        #if ENABLED(Z4_SENSORLESS)
 | 
			
		||||
          case Z4: return stepperZ4.homing_threshold();
 | 
			
		||||
        #endif
 | 
			
		||||
        OPTCODE(X_SENSORLESS,  case X:  return stepperX.homing_threshold())
 | 
			
		||||
        OPTCODE(Y_SENSORLESS,  case Y:  return stepperY.homing_threshold())
 | 
			
		||||
        OPTCODE(Z_SENSORLESS,  case Z:  return stepperZ.homing_threshold())
 | 
			
		||||
        OPTCODE(I_SENSORLESS,  case I:  return stepperI.homing_threshold())
 | 
			
		||||
        OPTCODE(J_SENSORLESS,  case J:  return stepperJ.homing_threshold())
 | 
			
		||||
        OPTCODE(K_SENSORLESS,  case K:  return stepperK.homing_threshold())
 | 
			
		||||
        OPTCODE(X2_SENSORLESS, case X2: return stepperX2.homing_threshold())
 | 
			
		||||
        OPTCODE(Y2_SENSORLESS, case Y2: return stepperY2.homing_threshold())
 | 
			
		||||
        OPTCODE(Z2_SENSORLESS, case Z2: return stepperZ2.homing_threshold())
 | 
			
		||||
        OPTCODE(Z3_SENSORLESS, case Z3: return stepperZ3.homing_threshold())
 | 
			
		||||
        OPTCODE(Z4_SENSORLESS, case Z4: return stepperZ4.homing_threshold())
 | 
			
		||||
        default: return 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void setTMCBumpSensitivity(const_float_t value, const axis_t axis) {
 | 
			
		||||
      switch (axis) {
 | 
			
		||||
        #if X_SENSORLESS || Y_SENSORLESS || Z_SENSORLESS
 | 
			
		||||
          #if X_SENSORLESS
 | 
			
		||||
            case X:  stepperX.homing_threshold(value);  break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if X2_SENSORLESS
 | 
			
		||||
            case X2: stepperX2.homing_threshold(value); break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if Y_SENSORLESS
 | 
			
		||||
            case Y: stepperY.homing_threshold(value); break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if Y2_SENSORLESS
 | 
			
		||||
            case Y2: stepperY2.homing_threshold(value); break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if Z_SENSORLESS
 | 
			
		||||
            case Z: stepperZ.homing_threshold(value); break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if Z2_SENSORLESS
 | 
			
		||||
            case Z2: stepperZ2.homing_threshold(value); break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if Z3_SENSORLESS
 | 
			
		||||
            case Z3: stepperZ3.homing_threshold(value); break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if Z4_SENSORLESS
 | 
			
		||||
            case Z4: stepperZ4.homing_threshold(value); break;
 | 
			
		||||
          #endif
 | 
			
		||||
        #else
 | 
			
		||||
          UNUSED(value);
 | 
			
		||||
        #if X_SENSORLESS
 | 
			
		||||
          case X: stepperX.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if Y_SENSORLESS
 | 
			
		||||
          case Y: stepperY.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if Z_SENSORLESS
 | 
			
		||||
          case Z: stepperZ.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if I_SENSORLESS
 | 
			
		||||
          case I: stepperI.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if J_SENSORLESS
 | 
			
		||||
          case J: stepperJ.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if K_SENSORLESS
 | 
			
		||||
          case K: stepperK.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if X2_SENSORLESS
 | 
			
		||||
          case X2: stepperX2.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if Y2_SENSORLESS
 | 
			
		||||
          case Y2: stepperY2.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if Z2_SENSORLESS
 | 
			
		||||
          case Z2: stepperZ2.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if Z3_SENSORLESS
 | 
			
		||||
          case Z3: stepperZ3.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if Z4_SENSORLESS
 | 
			
		||||
          case Z4: stepperZ4.homing_threshold(value); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        default: break;
 | 
			
		||||
      }
 | 
			
		||||
      UNUSED(value);
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
@@ -661,9 +670,7 @@ namespace ExtUI {
 | 
			
		||||
 | 
			
		||||
  #if HAS_JUNCTION_DEVIATION
 | 
			
		||||
 | 
			
		||||
    float getJunctionDeviation_mm() {
 | 
			
		||||
      return planner.junction_deviation_mm;
 | 
			
		||||
    }
 | 
			
		||||
    float getJunctionDeviation_mm() { return planner.junction_deviation_mm; }
 | 
			
		||||
 | 
			
		||||
    void setJunctionDeviation_mm(const_float_t value) {
 | 
			
		||||
      planner.junction_deviation_mm = constrain(value, 0.001, 0.3);
 | 
			
		||||
@@ -682,7 +689,7 @@ namespace ExtUI {
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #if PREHEAT_COUNT
 | 
			
		||||
      uint16_t getMaterial_preset_E(const uint16_t index) { return ui.material_preset[index].hotend_temp; }
 | 
			
		||||
    uint16_t getMaterial_preset_E(const uint16_t index) { return ui.material_preset[index].hotend_temp; }
 | 
			
		||||
    #if HAS_HEATED_BED
 | 
			
		||||
      uint16_t getMaterial_preset_B(const uint16_t index) { return ui.material_preset[index].bed_temp; }
 | 
			
		||||
    #endif
 | 
			
		||||
@@ -709,9 +716,13 @@ namespace ExtUI {
 | 
			
		||||
      switch (axis) {
 | 
			
		||||
        #if ENABLED(BABYSTEP_XY)
 | 
			
		||||
          case X: babystep.add_steps(X_AXIS, steps); break;
 | 
			
		||||
          case Y: babystep.add_steps(Y_AXIS, steps); break;
 | 
			
		||||
          #if HAS_Y_AXIS
 | 
			
		||||
            case Y: babystep.add_steps(Y_AXIS, steps); break;
 | 
			
		||||
          #endif
 | 
			
		||||
        #endif
 | 
			
		||||
        #if HAS_Z_AXIS
 | 
			
		||||
          case Z: babystep.add_steps(Z_AXIS, steps); break;
 | 
			
		||||
        #endif
 | 
			
		||||
        case Z: babystep.add_steps(Z_AXIS, steps); break;
 | 
			
		||||
        default: return false;
 | 
			
		||||
      };
 | 
			
		||||
      return true;
 | 
			
		||||
@@ -750,8 +761,8 @@ namespace ExtUI {
 | 
			
		||||
              hotend_offset[e][axis] += mm;
 | 
			
		||||
 | 
			
		||||
          normalizeNozzleOffset(X);
 | 
			
		||||
          normalizeNozzleOffset(Y);
 | 
			
		||||
          normalizeNozzleOffset(Z);
 | 
			
		||||
          TERN_(HAS_Y_AXIS, normalizeNozzleOffset(Y));
 | 
			
		||||
          TERN_(HAS_Z_AXIS, normalizeNozzleOffset(Z));
 | 
			
		||||
        }
 | 
			
		||||
      #else
 | 
			
		||||
        UNUSED(linked_nozzles);
 | 
			
		||||
@@ -1014,8 +1025,7 @@ namespace ExtUI {
 | 
			
		||||
    TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool awaitingUserConfirm() { return wait_for_user; }
 | 
			
		||||
 | 
			
		||||
  bool awaitingUserConfirm() { return TERN0(HAS_RESUME_CONTINUE, wait_for_user); }
 | 
			
		||||
  void setUserConfirmed() { TERN_(HAS_RESUME_CONTINUE, wait_for_user = false); }
 | 
			
		||||
 | 
			
		||||
  void printFile(const char *filename) {
 | 
			
		||||
@@ -1038,9 +1048,9 @@ namespace ExtUI {
 | 
			
		||||
 | 
			
		||||
  bool isMediaInserted() { return TERN0(SDSUPPORT, IS_SD_INSERTED() && card.isMounted()); }
 | 
			
		||||
 | 
			
		||||
  void pausePrint() { ui.pause_print(); }
 | 
			
		||||
  void pausePrint()  { ui.pause_print(); }
 | 
			
		||||
  void resumePrint() { ui.resume_print(); }
 | 
			
		||||
  void stopPrint() { ui.abort_print(); }
 | 
			
		||||
  void stopPrint()   { ui.abort_print(); }
 | 
			
		||||
 | 
			
		||||
  void onUserConfirmRequired_P(PGM_P const pstr) {
 | 
			
		||||
    char msg[strlen_P(pstr) + 1];
 | 
			
		||||
 
 | 
			
		||||
@@ -44,6 +44,7 @@
 | 
			
		||||
 | 
			
		||||
#include "../../inc/MarlinConfig.h"
 | 
			
		||||
#include "../marlinui.h"
 | 
			
		||||
#include "../../gcode/gcode.h"
 | 
			
		||||
 | 
			
		||||
namespace ExtUI {
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +54,7 @@ namespace ExtUI {
 | 
			
		||||
 | 
			
		||||
  static constexpr size_t eeprom_data_size = 48;
 | 
			
		||||
 | 
			
		||||
  enum axis_t     : uint8_t { X, Y, Z, X2, Y2, Z2, Z3, Z4 };
 | 
			
		||||
  enum axis_t     : uint8_t { X, Y, Z, I, J, K, X2, Y2, Z2, Z3, Z4 };
 | 
			
		||||
  enum extruder_t : uint8_t { E0, E1, E2, E3, E4, E5, E6, E7 };
 | 
			
		||||
  enum heater_t   : uint8_t { H0, H1, H2, H3, H4, H5, BED, CHAMBER, COOLER };
 | 
			
		||||
  enum fan_t      : uint8_t { FAN0, FAN1, FAN2, FAN3, FAN4, FAN5, FAN6, FAN7 };
 | 
			
		||||
@@ -78,6 +79,8 @@ namespace ExtUI {
 | 
			
		||||
  void injectCommands(char * const);
 | 
			
		||||
  bool commandsInQueue();
 | 
			
		||||
 | 
			
		||||
  GcodeSuite::MarlinBusyState getMachineBusyState();
 | 
			
		||||
 | 
			
		||||
  bool isHeaterIdle(const heater_t);
 | 
			
		||||
  bool isHeaterIdle(const extruder_t);
 | 
			
		||||
  void enableHeater(const heater_t);
 | 
			
		||||
@@ -125,6 +128,7 @@ namespace ExtUI {
 | 
			
		||||
  float getAxisMaxAcceleration_mm_s2(const extruder_t);
 | 
			
		||||
  feedRate_t getMinFeedrate_mm_s();
 | 
			
		||||
  feedRate_t getMinTravelFeedrate_mm_s();
 | 
			
		||||
  feedRate_t getFeedrate_mm_s();
 | 
			
		||||
  float getPrintingAcceleration_mm_s2();
 | 
			
		||||
  float getRetractAcceleration_mm_s2();
 | 
			
		||||
  float getTravelAcceleration_mm_s2();
 | 
			
		||||
@@ -186,6 +190,8 @@ namespace ExtUI {
 | 
			
		||||
    void setHostResponse(const uint8_t);
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  inline void simulateUserClick() { ui.lcd_clicked = true; }
 | 
			
		||||
 | 
			
		||||
  #if ENABLED(PRINTCOUNTER)
 | 
			
		||||
    char* getFailedPrints_str(char buffer[21]);
 | 
			
		||||
    char* getTotalPrints_str(char buffer[21]);
 | 
			
		||||
 
 | 
			
		||||
@@ -223,6 +223,10 @@ millis_t MarlinUI::next_button_update_ms; // = 0
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if EITHER(HAS_LCD_MENU, EXTENSIBLE_UI)
 | 
			
		||||
  bool MarlinUI::lcd_clicked;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if HAS_LCD_MENU
 | 
			
		||||
  #include "menu/menu.h"
 | 
			
		||||
 | 
			
		||||
@@ -247,14 +251,6 @@ millis_t MarlinUI::next_button_update_ms; // = 0
 | 
			
		||||
    uint8_t MarlinUI::repeat_delay;
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  bool MarlinUI::lcd_clicked;
 | 
			
		||||
 | 
			
		||||
  bool MarlinUI::use_click() {
 | 
			
		||||
    const bool click = lcd_clicked;
 | 
			
		||||
    lcd_clicked = false;
 | 
			
		||||
    return click;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #if EITHER(AUTO_BED_LEVELING_UBL, G26_MESH_VALIDATION)
 | 
			
		||||
 | 
			
		||||
    bool MarlinUI::external_control; // = false
 | 
			
		||||
 
 | 
			
		||||
@@ -474,9 +474,6 @@ public:
 | 
			
		||||
    static void set_selection(const bool sel) { selection = sel; }
 | 
			
		||||
    static bool update_selection();
 | 
			
		||||
 | 
			
		||||
    static bool lcd_clicked;
 | 
			
		||||
    static bool use_click();
 | 
			
		||||
 | 
			
		||||
    static void synchronize(PGM_P const msg=nullptr);
 | 
			
		||||
 | 
			
		||||
    static screenFunc_t currentScreen;
 | 
			
		||||
@@ -527,12 +524,23 @@ public:
 | 
			
		||||
 | 
			
		||||
  #elif HAS_WIRED_LCD
 | 
			
		||||
 | 
			
		||||
    static constexpr bool lcd_clicked = false;
 | 
			
		||||
    static constexpr bool on_status_screen() { return true; }
 | 
			
		||||
    FORCE_INLINE static void run_current_screen() { status_screen(); }
 | 
			
		||||
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #if EITHER(HAS_LCD_MENU, EXTENSIBLE_UI)
 | 
			
		||||
    static bool lcd_clicked;
 | 
			
		||||
    static inline bool use_click() {
 | 
			
		||||
      const bool click = lcd_clicked;
 | 
			
		||||
      lcd_clicked = false;
 | 
			
		||||
      return click;
 | 
			
		||||
    }
 | 
			
		||||
  #else
 | 
			
		||||
    static constexpr bool lcd_clicked = false;
 | 
			
		||||
    static inline bool use_click() { return false; }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #if BOTH(HAS_LCD_MENU, ADVANCED_PAUSE_FEATURE)
 | 
			
		||||
    static void pause_show_message(const PauseMessage message, const PauseMode mode=PAUSE_MODE_SAME, const uint8_t extruder=active_extruder);
 | 
			
		||||
  #else
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user