Browse Source

🎨 Simplify move menus with substitution

Scott Lahteine 2 years ago
parent
commit
975c8f4b77
2 changed files with 23 additions and 58 deletions
  1. 1
    1
      Marlin/src/lcd/menu/menu_advanced.cpp
  2. 22
    57
      Marlin/src/lcd/menu/menu_motion.cpp

+ 1
- 1
Marlin/src/lcd/menu/menu_advanced.cpp View File

@@ -483,7 +483,7 @@ void menu_backlash();
483 483
     // M204 T Travel Acceleration
484 484
     EDIT_ITEM_FAST(float5_25, MSG_A_TRAVEL, &planner.settings.travel_acceleration, 25, max_accel);
485 485
 
486
-    #define EDIT_AMAX(Q,L) EDIT_ITEM_FAST(long5_25, MSG_AMAX_##Q, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, max_accel_edit_scaled[_AXIS(Q)], []{ planner.reset_acceleration_rates(); })
486
+    #define EDIT_AMAX(Q,L) EDIT_ITEM_FAST_N(long5_25, _AXIS(Q), MSG_AMAX_N, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, max_accel_edit_scaled[_AXIS(Q)], []{ planner.reset_acceleration_rates(); })
487 487
     NUM_AXIS_CODE(
488 488
       EDIT_AMAX(A, 100), EDIT_AMAX(B, 100), EDIT_AMAX(C, 10),
489 489
       EDIT_AMAX(I,  10), EDIT_AMAX(J,  10), EDIT_AMAX(K, 10),

+ 22
- 57
Marlin/src/lcd/menu/menu_motion.cpp View File

@@ -54,9 +54,7 @@
54 54
 // "Motion" > "Move Axis" submenu
55 55
 //
56 56
 
57
-// TODO: Use substitution here with MSG_MOVE_N
58
-
59
-static void _lcd_move_xyz(FSTR_P const name, const AxisEnum axis) {
57
+static void _lcd_move_xyz(const AxisEnum axis) {
60 58
   if (ui.use_click()) return ui.goto_previous_screen_no_defer();
61 59
   if (ui.encoderPosition && !ui.manual_move.processing) {
62 60
     // Get motion limit from software endstops, if any
@@ -83,37 +81,20 @@ static void _lcd_move_xyz(FSTR_P const name, const AxisEnum axis) {
83 81
     const float pos = ui.manual_move.axis_value(axis);
84 82
     if (parser.using_inch_units()) {
85 83
       const float imp_pos = LINEAR_UNIT(pos);
86
-      MenuEditItemBase::draw_edit_screen(name, ftostr63(imp_pos));
84
+      MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_MOVE_N), ftostr63(imp_pos));
87 85
     }
88 86
     else
89
-      MenuEditItemBase::draw_edit_screen(name, ui.manual_move.menu_scale >= 0.1f ? (LARGE_AREA_TEST ? ftostr51sign(pos) : ftostr41sign(pos)) : ftostr63(pos));
87
+      MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_MOVE_N), ui.manual_move.menu_scale >= 0.1f ? (LARGE_AREA_TEST ? ftostr51sign(pos) : ftostr41sign(pos)) : ftostr63(pos));
90 88
   }
91 89
 }
92
-void lcd_move_x() { _lcd_move_xyz(GET_TEXT_F(MSG_MOVE_X), X_AXIS); }
93
-#if HAS_Y_AXIS
94
-  void lcd_move_y() { _lcd_move_xyz(GET_TEXT_F(MSG_MOVE_Y), Y_AXIS); }
95
-#endif
96
-#if HAS_Z_AXIS
97
-  void lcd_move_z() { _lcd_move_xyz(GET_TEXT_F(MSG_MOVE_Z), Z_AXIS); }
98
-#endif
99
-#if HAS_I_AXIS
100
-  void lcd_move_i() { _lcd_move_xyz(GET_TEXT_F(MSG_MOVE_I), I_AXIS); }
101
-#endif
102
-#if HAS_J_AXIS
103
-  void lcd_move_j() { _lcd_move_xyz(GET_TEXT_F(MSG_MOVE_J), J_AXIS); }
104
-#endif
105
-#if HAS_K_AXIS
106
-  void lcd_move_k() { _lcd_move_xyz(GET_TEXT_F(MSG_MOVE_K), K_AXIS); }
107
-#endif
108
-#if HAS_U_AXIS
109
-  void lcd_move_u() { _lcd_move_xyz(GET_TEXT_F(MSG_MOVE_U), U_AXIS); }
110
-#endif
111
-#if HAS_V_AXIS
112
-  void lcd_move_v() { _lcd_move_xyz(GET_TEXT_F(MSG_MOVE_V), V_AXIS); }
113
-#endif
114
-#if HAS_W_AXIS
115
-  void lcd_move_w() { _lcd_move_xyz(GET_TEXT_F(MSG_MOVE_W), W_AXIS); }
116
-#endif
90
+
91
+void _lcd_move_axis_n() { _lcd_move_xyz(AxisEnum(MenuItemBase::itemIndex)); }
92
+
93
+// Move functions for non-menu code that hasn't set itemIndex (e.g., keypad)
94
+void lcd_move_axis(const AxisEnum axis) { MenuEditItemBase::itemIndex = int8_t(axis); _lcd_move_axis_n(); }
95
+
96
+// Move Z easy accessor
97
+void lcd_move_z() { lcd_move_axis(Z_AXIS); }
117 98
 
118 99
 #if E_MANUAL
119 100
 
@@ -200,6 +181,8 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
200 181
   END_MENU();
201 182
 }
202 183
 
184
+void _menu_move_n_distance() { _menu_move_distance(AxisEnum(MenuItemBase::itemIndex), _lcd_move_axis_n); }
185
+
203 186
 #if E_MANUAL
204 187
 
205 188
   inline void _goto_menu_move_distance_e() {
@@ -230,38 +213,20 @@ void menu_move() {
230 213
     EDIT_ITEM(bool, MSG_LCD_SOFT_ENDSTOPS, &soft_endstop._enabled);
231 214
   #endif
232 215
 
216
+  // Move submenu for each axis
233 217
   if (NONE(IS_KINEMATIC, NO_MOTION_BEFORE_HOMING) || all_axes_homed()) {
234 218
     if (TERN1(DELTA, current_position.z <= delta_clip_start_height)) {
235
-      SUBMENU(MSG_MOVE_X, []{ _menu_move_distance(X_AXIS, lcd_move_x); });
236
-      #if HAS_Y_AXIS
237
-        SUBMENU(MSG_MOVE_Y, []{ _menu_move_distance(Y_AXIS, lcd_move_y); });
238
-      #endif
219
+      for (uint8_t a = X_AXIS; a <= min(int(Y_AXIS), NUM_AXES - 1); a++)
220
+        SUBMENU_N(a, MSG_MOVE_N, _menu_move_n_distance);
239 221
     }
240
-    #if ENABLED(DELTA)
241
-      else
222
+    else {
223
+      #if ENABLED(DELTA)
242 224
         ACTION_ITEM(MSG_FREE_XY, []{ line_to_z(delta_clip_start_height); ui.synchronize(); });
243
-    #endif
244
-
225
+      #endif
226
+    }
245 227
     #if HAS_Z_AXIS
246
-      SUBMENU(MSG_MOVE_Z, []{ _menu_move_distance(Z_AXIS, lcd_move_z); });
247
-    #endif
248
-    #if HAS_I_AXIS
249
-      SUBMENU(MSG_MOVE_I, []{ _menu_move_distance(I_AXIS, lcd_move_i); });
250
-    #endif
251
-    #if HAS_J_AXIS
252
-      SUBMENU(MSG_MOVE_J, []{ _menu_move_distance(J_AXIS, lcd_move_j); });
253
-    #endif
254
-    #if HAS_K_AXIS
255
-      SUBMENU(MSG_MOVE_K, []{ _menu_move_distance(K_AXIS, lcd_move_k); });
256
-    #endif
257
-    #if HAS_U_AXIS
258
-      SUBMENU(MSG_MOVE_U, []{ _menu_move_distance(U_AXIS, lcd_move_u); });
259
-    #endif
260
-    #if HAS_V_AXIS
261
-      SUBMENU(MSG_MOVE_V, []{ _menu_move_distance(V_AXIS, lcd_move_v); });
262
-    #endif
263
-    #if HAS_W_AXIS
264
-      SUBMENU(MSG_MOVE_W, []{ _menu_move_distance(W_AXIS, lcd_move_w); });
228
+      for (uint8_t a = Z_AXIS; a < NUM_AXES; a++)
229
+        SUBMENU_N(a, MSG_MOVE_N, _menu_move_n_distance);
265 230
     #endif
266 231
   }
267 232
   else

Loading…
Cancel
Save