parent
4b0b00c8da
commit
b0ece8f8df
|
@ -1165,12 +1165,12 @@ void MarlinUI::draw_status_screen() {
|
||||||
#endif // ADVANCED_PAUSE_FEATURE
|
#endif // ADVANCED_PAUSE_FEATURE
|
||||||
|
|
||||||
// Draw a static item with no left-right margin required. Centered by default.
|
// Draw a static item with no left-right margin required. Centered by default.
|
||||||
void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) {
|
void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) {
|
||||||
lcd_moveto(0, row);
|
lcd_moveto(0, row);
|
||||||
|
|
||||||
int8_t n = LCD_WIDTH;
|
int8_t n = LCD_WIDTH;
|
||||||
const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL);
|
const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL);
|
||||||
const int8_t plen = fstr ? utf8_strlen(fstr) : 0,
|
const int8_t plen = ftpl ? utf8_strlen(ftpl) : 0,
|
||||||
vlen = vstr ? utf8_strlen(vstr) : 0;
|
vlen = vstr ? utf8_strlen(vstr) : 0;
|
||||||
int8_t pad = (center || full) ? n - plen - vlen : 0;
|
int8_t pad = (center || full) ? n - plen - vlen : 0;
|
||||||
|
|
||||||
|
@ -1178,7 +1178,7 @@ void MarlinUI::draw_status_screen() {
|
||||||
if (center) for (int8_t lpad = pad / 2; lpad > 0; --lpad) { lcd_put_u8str(F(" ")); n--; }
|
if (center) for (int8_t lpad = pad / 2; lpad > 0; --lpad) { lcd_put_u8str(F(" ")); n--; }
|
||||||
|
|
||||||
// Draw as much of the label as fits
|
// Draw as much of the label as fits
|
||||||
if (plen) n -= lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, n - vlen);
|
if (plen) n -= lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, n - vlen);
|
||||||
|
|
||||||
if (vlen && n > 0) {
|
if (vlen && n > 0) {
|
||||||
// SS_FULL: Pad with enough space to justify the value
|
// SS_FULL: Pad with enough space to justify the value
|
||||||
|
|
|
@ -969,7 +969,7 @@ void MarlinUI::draw_status_screen() {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Draw a static item with no left-right margin required. Centered by default.
|
// Draw a static item with no left-right margin required. Centered by default.
|
||||||
void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) {
|
void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) {
|
||||||
if (!PanelDetected) return;
|
if (!PanelDetected) return;
|
||||||
lcd_moveto(0, row);
|
lcd_moveto(0, row);
|
||||||
|
|
||||||
|
@ -1004,25 +1004,25 @@ void MarlinUI::draw_status_screen() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw a generic menu item with pre_char (if selected) and post_char
|
// Draw a generic menu item with pre_char (if selected) and post_char
|
||||||
void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char pre_char, const char post_char) {
|
void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char pre_char, const char post_char) {
|
||||||
if (!PanelDetected) return;
|
if (!PanelDetected) return;
|
||||||
lcd_moveto(0, row);
|
lcd_moveto(0, row);
|
||||||
lcd.write(sel ? pre_char : ' ');
|
lcd.write(sel ? pre_char : ' ');
|
||||||
uint8_t n = LCD_WIDTH - 2;
|
uint8_t n = LCD_WIDTH - 2;
|
||||||
n -= lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, n);
|
n -= lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, n);
|
||||||
for (; n; --n) lcd.write(' ');
|
for (; n; --n) lcd.write(' ');
|
||||||
lcd.write(post_char);
|
lcd.write(post_char);
|
||||||
lcd.print_line();
|
lcd.print_line();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw a menu item with a (potentially) editable value
|
// Draw a menu item with a (potentially) editable value
|
||||||
void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char * const inStr, const bool pgm) {
|
void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm) {
|
||||||
if (!PanelDetected) return;
|
if (!PanelDetected) return;
|
||||||
const uint8_t vlen = inStr ? (pgm ? utf8_strlen_P(inStr) : utf8_strlen(inStr)) : 0;
|
const uint8_t vlen = inStr ? (pgm ? utf8_strlen_P(inStr) : utf8_strlen(inStr)) : 0;
|
||||||
lcd_moveto(0, row);
|
lcd_moveto(0, row);
|
||||||
lcd.write(sel ? LCD_STR_ARROW_RIGHT[0] : ' ');
|
lcd.write(sel ? LCD_STR_ARROW_RIGHT[0] : ' ');
|
||||||
uint8_t n = LCD_WIDTH - 2 - vlen;
|
uint8_t n = LCD_WIDTH - 2 - vlen;
|
||||||
n -= lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, n);
|
n -= lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, n);
|
||||||
if (vlen) {
|
if (vlen) {
|
||||||
lcd.write(':');
|
lcd.write(':');
|
||||||
for (; n; --n) lcd.write(' ');
|
for (; n; --n) lcd.write(' ');
|
||||||
|
|
|
@ -411,8 +411,8 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||||
|
|
||||||
// Draw a static line of text in the same idiom as a menu item
|
// Draw a static line of text in the same idiom as a menu item
|
||||||
void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) {
|
void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) {
|
||||||
|
if (!mark_as_selected(row, style & SS_INVERT)) return;
|
||||||
|
|
||||||
if (mark_as_selected(row, style & SS_INVERT)) {
|
|
||||||
pixel_len_t n = LCD_PIXEL_WIDTH; // pixel width of string allowed
|
pixel_len_t n = LCD_PIXEL_WIDTH; // pixel width of string allowed
|
||||||
|
|
||||||
const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL);
|
const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL);
|
||||||
|
@ -440,22 +440,22 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||||
}
|
}
|
||||||
while (n > MENU_FONT_WIDTH) n -= lcd_put_u8str(F(" "));
|
while (n > MENU_FONT_WIDTH) n -= lcd_put_u8str(F(" "));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Draw a generic menu item
|
// Draw a generic menu item
|
||||||
void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char, const char post_char) {
|
void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char, const char post_char) {
|
||||||
if (mark_as_selected(row, sel)) {
|
if (!mark_as_selected(row, sel)) return;
|
||||||
|
|
||||||
uint8_t n = LCD_WIDTH - 1;
|
uint8_t n = LCD_WIDTH - 1;
|
||||||
n -= lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, n);
|
n -= lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, n);
|
||||||
for (; n; --n) lcd_put_u8str(F(" "));
|
for (; n; --n) lcd_put_u8str(F(" "));
|
||||||
lcd_put_lchar(LCD_PIXEL_WIDTH - (MENU_FONT_WIDTH), row_y2, post_char);
|
lcd_put_lchar(LCD_PIXEL_WIDTH - (MENU_FONT_WIDTH), row_y2, post_char);
|
||||||
lcd_put_u8str(F(" "));
|
lcd_put_u8str(F(" "));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Draw a menu item with an editable value
|
// Draw a menu item with an editable value
|
||||||
void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm) {
|
void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm) {
|
||||||
if (mark_as_selected(row, sel)) {
|
if (!mark_as_selected(row, sel)) return;
|
||||||
|
|
||||||
const uint8_t vallen = (pgm ? utf8_strlen_P(inStr) : utf8_strlen(inStr)),
|
const uint8_t vallen = (pgm ? utf8_strlen_P(inStr) : utf8_strlen(inStr)),
|
||||||
pixelwidth = (pgm ? uxg_GetUtf8StrPixelWidthP(u8g.getU8g(), inStr) : uxg_GetUtf8StrPixelWidth(u8g.getU8g(), inStr));
|
pixelwidth = (pgm ? uxg_GetUtf8StrPixelWidthP(u8g.getU8g(), inStr) : uxg_GetUtf8StrPixelWidth(u8g.getU8g(), inStr));
|
||||||
const u8g_uint_t prop = USE_WIDE_GLYPH ? 2 : 1;
|
const u8g_uint_t prop = USE_WIDE_GLYPH ? 2 : 1;
|
||||||
|
@ -469,7 +469,6 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||||
if (pgm) lcd_put_u8str_P(inStr); else lcd_put_u8str(inStr);
|
if (pgm) lcd_put_u8str_P(inStr); else lcd_put_u8str(inStr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void MenuEditItemBase::draw_edit_screen(FSTR_P const ftpl, const char * const value/*=nullptr*/) {
|
void MenuEditItemBase::draw_edit_screen(FSTR_P const ftpl, const char * const value/*=nullptr*/) {
|
||||||
ui.encoder_direction_normal();
|
ui.encoder_direction_normal();
|
||||||
|
@ -545,14 +544,14 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||||
#if HAS_MEDIA
|
#if HAS_MEDIA
|
||||||
|
|
||||||
void MenuItem_sdbase::draw(const bool sel, const uint8_t row, FSTR_P const, CardReader &theCard, const bool isDir) {
|
void MenuItem_sdbase::draw(const bool sel, const uint8_t row, FSTR_P const, CardReader &theCard, const bool isDir) {
|
||||||
if (mark_as_selected(row, sel)) {
|
if (!mark_as_selected(row, sel)) return;
|
||||||
|
|
||||||
const uint8_t maxlen = LCD_WIDTH - isDir;
|
const uint8_t maxlen = LCD_WIDTH - isDir;
|
||||||
if (isDir) lcd_put_lchar(LCD_STR_FOLDER[0]);
|
if (isDir) lcd_put_lchar(LCD_STR_FOLDER[0]);
|
||||||
const pixel_len_t pixw = maxlen * (MENU_FONT_WIDTH);
|
const pixel_len_t pixw = maxlen * (MENU_FONT_WIDTH);
|
||||||
pixel_len_t n = pixw - lcd_put_u8str_max(ui.scrolled_filename(theCard, maxlen, row, sel), pixw);
|
pixel_len_t n = pixw - lcd_put_u8str_max(ui.scrolled_filename(theCard, maxlen, row, sel), pixw);
|
||||||
for (; n > MENU_FONT_WIDTH; n -= MENU_FONT_WIDTH) lcd_put_u8str(F(" "));
|
for (; n > MENU_FONT_WIDTH; n -= MENU_FONT_WIDTH) lcd_put_u8str(F(" "));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#endif // HAS_MEDIA
|
#endif // HAS_MEDIA
|
||||||
|
|
||||||
|
|
|
@ -308,7 +308,8 @@ void MarlinUI::draw_status_message(const bool blink) {
|
||||||
void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) {
|
void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) {
|
||||||
// Call mark_as_selected to draw a bigger selection box
|
// Call mark_as_selected to draw a bigger selection box
|
||||||
// and draw the text without a background
|
// and draw the text without a background
|
||||||
if (mark_as_selected(row, (bool)(style & SS_INVERT), true)) {
|
if (!mark_as_selected(row, (bool)(style & SS_INVERT), true)) return;
|
||||||
|
|
||||||
ui.set_font(DWIN_FONT_MENU);
|
ui.set_font(DWIN_FONT_MENU);
|
||||||
dwin_font.solid = false;
|
dwin_font.solid = false;
|
||||||
dwin_font.fg = COLOR_WHITE;
|
dwin_font.fg = COLOR_WHITE;
|
||||||
|
@ -349,11 +350,11 @@ void MarlinUI::draw_status_message(const bool blink) {
|
||||||
lcd_moveto(1, row);
|
lcd_moveto(1, row);
|
||||||
lcd_put_dwin_string();
|
lcd_put_dwin_string();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Draw a generic menu item
|
// Draw a generic menu item
|
||||||
void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char, const char post_char) {
|
void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char, const char post_char) {
|
||||||
if (mark_as_selected(row, sel)) {
|
if (!mark_as_selected(row, sel)) return;
|
||||||
|
|
||||||
ui.set_font(DWIN_FONT_MENU);
|
ui.set_font(DWIN_FONT_MENU);
|
||||||
dwin_font.solid = false;
|
dwin_font.solid = false;
|
||||||
dwin_font.fg = COLOR_WHITE;
|
dwin_font.fg = COLOR_WHITE;
|
||||||
|
@ -368,13 +369,13 @@ void MarlinUI::draw_status_message(const bool blink) {
|
||||||
lcd_moveto(1, row);
|
lcd_moveto(1, row);
|
||||||
lcd_put_dwin_string();
|
lcd_put_dwin_string();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Draw a menu item with an editable value
|
// Draw a menu item with an editable value
|
||||||
//
|
//
|
||||||
void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm) {
|
void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm) {
|
||||||
if (mark_as_selected(row, sel)) {
|
if (!mark_as_selected(row, sel)) return;
|
||||||
|
|
||||||
ui.set_font(DWIN_FONT_MENU);
|
ui.set_font(DWIN_FONT_MENU);
|
||||||
dwin_font.solid = false;
|
dwin_font.solid = false;
|
||||||
dwin_font.fg = COLOR_WHITE;
|
dwin_font.fg = COLOR_WHITE;
|
||||||
|
@ -394,7 +395,6 @@ void MarlinUI::draw_status_message(const bool blink) {
|
||||||
lcd_put_dwin_string();
|
lcd_put_dwin_string();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Draw an edit screen with label and current value
|
// Draw an edit screen with label and current value
|
||||||
|
@ -464,7 +464,8 @@ void MarlinUI::draw_status_message(const bool blink) {
|
||||||
#if HAS_MEDIA
|
#if HAS_MEDIA
|
||||||
|
|
||||||
void MenuItem_sdbase::draw(const bool sel, const uint8_t row, FSTR_P const, CardReader &theCard, const bool isDir) {
|
void MenuItem_sdbase::draw(const bool sel, const uint8_t row, FSTR_P const, CardReader &theCard, const bool isDir) {
|
||||||
if (mark_as_selected(row, sel)) {
|
if (!mark_as_selected(row, sel)) return;
|
||||||
|
|
||||||
dwin_string.set();
|
dwin_string.set();
|
||||||
|
|
||||||
uint8_t maxlen = LCD_WIDTH - 1;
|
uint8_t maxlen = LCD_WIDTH - 1;
|
||||||
|
@ -479,7 +480,6 @@ void MarlinUI::draw_status_message(const bool blink) {
|
||||||
lcd_moveto(1, row);
|
lcd_moveto(1, row);
|
||||||
lcd_put_dwin_string();
|
lcd_put_dwin_string();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#endif // HAS_MEDIA
|
#endif // HAS_MEDIA
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,84 @@
|
||||||
#include "marlinui.h"
|
#include "marlinui.h"
|
||||||
#include "lcdprint.h"
|
#include "lcdprint.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* expand_u8str_P
|
||||||
|
*
|
||||||
|
* Expand a string with optional substitutions:
|
||||||
|
*
|
||||||
|
* $ displays the clipped string given by fstr or cstr
|
||||||
|
* { displays '0'....'10' for indexes 0 - 10
|
||||||
|
* ~ displays '1'....'11' for indexes 0 - 10
|
||||||
|
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
|
||||||
|
* @ displays an axis name such as XYZUVW, or E for an extruder
|
||||||
|
*
|
||||||
|
* Return the number of characters emitted
|
||||||
|
*/
|
||||||
|
lcd_uint_t expand_u8str_P(char * const outstr, PGM_P const ptpl, const int8_t ind, const char *cstr/*=nullptr*/, FSTR_P const fstr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) {
|
||||||
|
const uint8_t prop = USE_WIDE_GLYPH ? 2 : 1;
|
||||||
|
const uint8_t *p = (uint8_t*)ptpl;
|
||||||
|
char *o = outstr;
|
||||||
|
int8_t n = maxlen;
|
||||||
|
while (n > 0) {
|
||||||
|
lchar_t wc;
|
||||||
|
p = get_utf8_value_cb(p, read_byte_rom, wc);
|
||||||
|
if (!wc) break;
|
||||||
|
if (wc == '{' || wc == '~' || wc == '*') {
|
||||||
|
if (ind >= 0) {
|
||||||
|
if (wc == '*') { *o++ = 'E'; n--; }
|
||||||
|
if (n) {
|
||||||
|
int8_t inum = ind + ((wc == '{') ? 0 : LCD_FIRST_TOOL);
|
||||||
|
if (inum >= 10) {
|
||||||
|
*o++ = ('0' + (inum / 10)); n--;
|
||||||
|
inum %= 10;
|
||||||
|
}
|
||||||
|
if (n) { *o++ = '0' + inum; n--; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PGM_P const b = ind == -2 ? GET_TEXT(MSG_CHAMBER) : GET_TEXT(MSG_BED);
|
||||||
|
strncpy_P(o, b, n);
|
||||||
|
n -= utf8_strlen_P(b);
|
||||||
|
o += strlen(o);
|
||||||
|
}
|
||||||
|
if (n > 0) {
|
||||||
|
strncpy_P(o, (PGM_P)p, n);
|
||||||
|
n -= utf8_strlen(o);
|
||||||
|
o += strlen(o);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (wc == '$' && fstr) {
|
||||||
|
strncpy_P(o, FTOP(fstr), n);
|
||||||
|
n -= utf8_strlen_P(FTOP(fstr));
|
||||||
|
o += strlen(o);
|
||||||
|
}
|
||||||
|
else if (wc == '$' && cstr) {
|
||||||
|
strncpy(o, cstr, n);
|
||||||
|
n -= utf8_strlen(o);
|
||||||
|
o += strlen(o);
|
||||||
|
}
|
||||||
|
else if (wc == '@') {
|
||||||
|
*o++ = AXIS_CHAR(ind);
|
||||||
|
*o = '\0';
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
else if (wc > 255 && prop == 2) {
|
||||||
|
// Wide glyph support incomplete
|
||||||
|
*((uint16_t*)o) = wc;
|
||||||
|
o += 2;
|
||||||
|
*o = '\0';
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*o++ = wc;
|
||||||
|
*o = '\0';
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxlen - n;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lcd_put_u8str_P
|
* lcd_put_u8str_P
|
||||||
*
|
*
|
||||||
|
|
|
@ -205,14 +205,37 @@ inline int lcd_put_u8str(const lcd_uint_t col, const lcd_uint_t row, FSTR_P cons
|
||||||
return lcd_put_u8str_P(col, row, FTOP(fstr));
|
return lcd_put_u8str_P(col, row, FTOP(fstr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Expand a string with optional substitution
|
||||||
|
* @details Expand a string with optional substitutions:
|
||||||
|
* $ : the clipped string given by fstr or cstr
|
||||||
|
* { : '0'....'10' for indexes 0 - 10
|
||||||
|
* ~ : '1'....'11' for indexes 0 - 10
|
||||||
|
* * : 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
|
||||||
|
* @ : an axis name such as XYZUVW, or E for an extruder
|
||||||
|
*
|
||||||
|
* @param *outstr The output destination buffer
|
||||||
|
* @param ptpl A ROM string (template)
|
||||||
|
* @param ind An index value to use for = ~ * substitution
|
||||||
|
* @param cstr An SRAM C-string to use for $ substitution
|
||||||
|
* @param fstr A ROM F-string to use for $ substitution
|
||||||
|
* @param maxlen The maximum size of the string (in pixels on GLCD)
|
||||||
|
* @return the output width (in pixels on GLCD)
|
||||||
|
*/
|
||||||
|
lcd_uint_t expand_u8str_P(char * const outstr, PGM_P const ptpl, const int8_t ind, const char *cstr=nullptr, FSTR_P const fstr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH);
|
||||||
|
|
||||||
|
inline lcd_uint_t expand_u8str(char * const outstr, FSTR_P const ftpl, const int8_t ind, const char *cstr=nullptr, FSTR_P const fstr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH) {
|
||||||
|
return expand_u8str_P(outstr, FTOP(ftpl), ind, cstr, fstr, maxlen);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Draw a string with optional substitution
|
* @brief Draw a string with optional substitution
|
||||||
* @details Print a string with optional substitutions:
|
* @details Print a string with optional substitutions:
|
||||||
* $ displays the clipped string given by fstr or cstr
|
* $ : the clipped string given by fstr or cstr
|
||||||
* { displays '0'....'10' for indexes 0 - 10
|
* { : '0'....'10' for indexes 0 - 10
|
||||||
* ~ displays '1'....'11' for indexes 0 - 10
|
* ~ : '1'....'11' for indexes 0 - 10
|
||||||
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
|
* * : 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
|
||||||
* @ displays an axis name such as XYZUVW, or E for an extruder
|
* @ : an axis name such as XYZUVW, or E for an extruder
|
||||||
*
|
*
|
||||||
* @param ptpl A ROM string (template)
|
* @param ptpl A ROM string (template)
|
||||||
* @param ind An index value to use for = ~ * substitution
|
* @param ind An index value to use for = ~ * substitution
|
||||||
|
|
|
@ -76,7 +76,7 @@ class MenuItemBase {
|
||||||
// STATIC_ITEM(LABEL,...)
|
// STATIC_ITEM(LABEL,...)
|
||||||
class MenuItem_static : public MenuItemBase {
|
class MenuItem_static : public MenuItemBase {
|
||||||
public:
|
public:
|
||||||
static void draw(const uint8_t row, FSTR_P const fstr, const uint8_t style=SS_DEFAULT, const char *vstr=nullptr);
|
static void draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style=SS_DEFAULT, const char *vstr=nullptr);
|
||||||
};
|
};
|
||||||
|
|
||||||
// BACK_ITEM(LABEL)
|
// BACK_ITEM(LABEL)
|
||||||
|
|
|
@ -78,7 +78,7 @@ void menu_advanced_settings();
|
||||||
|
|
||||||
#if ENABLED(LCD_PROGRESS_BAR_TEST)
|
#if ENABLED(LCD_PROGRESS_BAR_TEST)
|
||||||
|
|
||||||
static void progress_bar_test() {
|
static void screen_progress_bar_test() {
|
||||||
static int8_t bar_percent = 0;
|
static int8_t bar_percent = 0;
|
||||||
if (ui.use_click()) {
|
if (ui.use_click()) {
|
||||||
ui.goto_previous_screen();
|
ui.goto_previous_screen();
|
||||||
|
@ -93,8 +93,8 @@ void menu_advanced_settings();
|
||||||
lcd_moveto(0, LCD_HEIGHT - 1); ui.draw_progress_bar(bar_percent);
|
lcd_moveto(0, LCD_HEIGHT - 1); ui.draw_progress_bar(bar_percent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _progress_bar_test() {
|
void _goto_progress_bar_test() {
|
||||||
ui.goto_screen(progress_bar_test);
|
ui.goto_screen(screen_progress_bar_test);
|
||||||
TERN_(HAS_MARLINUI_HD44780, ui.set_custom_characters(CHARSET_INFO));
|
TERN_(HAS_MARLINUI_HD44780, ui.set_custom_characters(CHARSET_INFO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ void menu_advanced_settings();
|
||||||
#define STOP_MINMAX(A,I) STOP_ITEM(A,I,MIN,"Min") STOP_ITEM(A,I,MAX,"Max")
|
#define STOP_MINMAX(A,I) STOP_ITEM(A,I,MIN,"Min") STOP_ITEM(A,I,MAX,"Max")
|
||||||
#define FIL_ITEM(N) PSTRING_ITEM_N_P(N-1, MSG_FILAMENT_EN, (READ(FIL_RUNOUT##N##_PIN) != FIL_RUNOUT##N##_STATE) ? PSTR("PRESENT") : PSTR("out"), SS_FULL);
|
#define FIL_ITEM(N) PSTRING_ITEM_N_P(N-1, MSG_FILAMENT_EN, (READ(FIL_RUNOUT##N##_PIN) != FIL_RUNOUT##N##_STATE) ? PSTR("PRESENT") : PSTR("out"), SS_FULL);
|
||||||
|
|
||||||
static void endstop_test() {
|
static void screen_endstop_test() {
|
||||||
if (ui.use_click()) {
|
if (ui.use_click()) {
|
||||||
ui.goto_previous_screen();
|
ui.goto_previous_screen();
|
||||||
//endstops.enable_globally(false);
|
//endstops.enable_globally(false);
|
||||||
|
@ -148,11 +148,11 @@ void menu_advanced_settings();
|
||||||
BACK_ITEM(MSG_CONFIGURATION);
|
BACK_ITEM(MSG_CONFIGURATION);
|
||||||
|
|
||||||
#if ENABLED(LCD_PROGRESS_BAR_TEST)
|
#if ENABLED(LCD_PROGRESS_BAR_TEST)
|
||||||
SUBMENU(MSG_PROGRESS_BAR_TEST, _progress_bar_test);
|
SUBMENU(MSG_PROGRESS_BAR_TEST, _goto_progress_bar_test);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(LCD_ENDSTOP_TEST)
|
#if ENABLED(LCD_ENDSTOP_TEST)
|
||||||
SUBMENU(MSG_ENDSTOP_TEST, endstop_test);
|
SUBMENU(MSG_ENDSTOP_TEST, screen_endstop_test);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
END_MENU();
|
END_MENU();
|
||||||
|
|
|
@ -339,10 +339,10 @@ void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const fstr, c
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw a menu item with a (potentially) editable value
|
// Draw a menu item with a (potentially) editable value
|
||||||
void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char * const inStr, const bool pgm) {
|
void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm) {
|
||||||
menu_item(row, sel);
|
menu_item(row, sel);
|
||||||
|
|
||||||
tft_string.set(fstr, itemIndex, itemStringC, itemStringF);
|
tft_string.set(ftpl, itemIndex, itemStringC, itemStringF);
|
||||||
tft.add_text(MENU_TEXT_X, MENU_TEXT_Y, COLOR_MENU_TEXT, tft_string);
|
tft.add_text(MENU_TEXT_X, MENU_TEXT_Y, COLOR_MENU_TEXT, tft_string);
|
||||||
if (inStr) {
|
if (inStr) {
|
||||||
tft_string.set(inStr);
|
tft_string.set(inStr);
|
||||||
|
@ -351,10 +351,10 @@ void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw a static item with no left-right margin required. Centered by default.
|
// Draw a static item with no left-right margin required. Centered by default.
|
||||||
void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) {
|
void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) {
|
||||||
menu_item(row);
|
menu_item(row);
|
||||||
|
|
||||||
tft_string.set(fstr, itemIndex, itemStringC, itemStringF);
|
tft_string.set(ftpl, itemIndex, itemStringC, itemStringF);
|
||||||
|
|
||||||
const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL);
|
const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL);
|
||||||
if (!full || !vstr) {
|
if (!full || !vstr) {
|
||||||
|
|
Loading…
Reference in a new issue