|
@@ -24,6 +24,8 @@
|
24
|
24
|
#include "../ultralcd.h"
|
25
|
25
|
#include "../../inc/MarlinConfig.h"
|
26
|
26
|
|
|
27
|
+#include "limits.h"
|
|
28
|
+
|
27
|
29
|
extern int8_t encoderLine, encoderTopLine, screen_items;
|
28
|
30
|
extern bool screen_changed;
|
29
|
31
|
|
|
@@ -54,9 +56,9 @@ DECLARE_MENU_EDIT_TYPE(float, float3, ftostr3, 1 ); // 123
|
54
|
56
|
DECLARE_MENU_EDIT_TYPE(float, float52, ftostr52, 100 ); // 123.45
|
55
|
57
|
DECLARE_MENU_EDIT_TYPE(float, float43, ftostr43sign, 1000 ); // 1.234
|
56
|
58
|
DECLARE_MENU_EDIT_TYPE(float, float5, ftostr5rj, 0.01f ); // 12345 right-justified
|
57
|
|
-DECLARE_MENU_EDIT_TYPE(float, float51, ftostr51sign, 10 ); // +1234.5
|
|
59
|
+DECLARE_MENU_EDIT_TYPE(float, float51, ftostr51rj, 10 ); // 1234.5 right-justified
|
|
60
|
+DECLARE_MENU_EDIT_TYPE(float, float51sign, ftostr51sign, 10 ); // +1234.5
|
58
|
61
|
DECLARE_MENU_EDIT_TYPE(float, float52sign, ftostr52sign, 100 ); // +123.45
|
59
|
|
-DECLARE_MENU_EDIT_TYPE(float, float62, ftostr62rj, 100 ); // 1234.56 right-justified
|
60
|
62
|
DECLARE_MENU_EDIT_TYPE(uint32_t, long5, ftostr5rj, 0.01f ); // 12345 right-justified
|
61
|
63
|
|
62
|
64
|
////////////////////////////////////////////
|
|
@@ -119,9 +121,9 @@ DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float3); // 123 right-justif
|
119
|
121
|
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float52); // 123.45
|
120
|
122
|
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float43); // 1.234
|
121
|
123
|
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float5); // 12345 right-justified
|
122
|
|
-DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float51); // +1234.5
|
|
124
|
+DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float51); // 1234.5 right-justified
|
|
125
|
+DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float51sign); // +1234.5
|
123
|
126
|
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float52sign); // +123.45
|
124
|
|
-DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float62); // 1234.56 right-justified
|
125
|
127
|
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(long5); // 12345 right-justified
|
126
|
128
|
|
127
|
129
|
#define draw_menu_item_edit_bool(sel, row, pstr, pstr2, data, ...) DRAW_BOOL_SETTING(sel, row, pstr, data)
|
|
@@ -179,8 +181,10 @@ class TMenuItem : MenuItemBase {
|
179
|
181
|
static char* to_string(const int16_t value) { return NAME::strfunc(unscale(value)); }
|
180
|
182
|
public:
|
181
|
183
|
static void action_edit(PGM_P const pstr, type_t * const ptr, const type_t minValue, const type_t maxValue, const screenFunc_t callback=NULL, const bool live=false) {
|
182
|
|
- const int16_t minv = scale(minValue);
|
183
|
|
- init(pstr, ptr, minv, int16_t(scale(maxValue)) - minv, int16_t(scale(*ptr)) - minv, edit, callback, live);
|
|
184
|
+ // Make sure minv and maxv fit within int16_t
|
|
185
|
+ const int16_t minv = MAX(scale(minValue), INT_MIN),
|
|
186
|
+ maxv = MIN(scale(maxValue), INT_MAX);
|
|
187
|
+ init(pstr, ptr, minv, maxv - minv, scale(*ptr) - minv, edit, callback, live);
|
184
|
188
|
}
|
185
|
189
|
static void edit() { MenuItemBase::edit(to_string, load); }
|
186
|
190
|
};
|
|
@@ -199,8 +203,8 @@ DECLARE_MENU_EDIT_ITEM(float52);
|
199
|
203
|
DECLARE_MENU_EDIT_ITEM(float43);
|
200
|
204
|
DECLARE_MENU_EDIT_ITEM(float5);
|
201
|
205
|
DECLARE_MENU_EDIT_ITEM(float51);
|
|
206
|
+DECLARE_MENU_EDIT_ITEM(float51sign);
|
202
|
207
|
DECLARE_MENU_EDIT_ITEM(float52sign);
|
203
|
|
-DECLARE_MENU_EDIT_ITEM(float62);
|
204
|
208
|
DECLARE_MENU_EDIT_ITEM(long5);
|
205
|
209
|
|
206
|
210
|
class MenuItem_bool {
|