|
@@ -1525,6 +1525,7 @@ const char* lcd_display_message_fullscreen_P(const char *msg, uint8_t &nlines)
|
|
lcd.setCursor(0, 0);
|
|
lcd.setCursor(0, 0);
|
|
const char *msgend = msg;
|
|
const char *msgend = msg;
|
|
uint8_t row = 0;
|
|
uint8_t row = 0;
|
|
|
|
+ bool multi_screen = false;
|
|
for (; row < 4; ++ row) {
|
|
for (; row < 4; ++ row) {
|
|
while (pgm_is_whitespace(msg))
|
|
while (pgm_is_whitespace(msg))
|
|
++ msg;
|
|
++ msg;
|
|
@@ -1532,10 +1533,20 @@ const char* lcd_display_message_fullscreen_P(const char *msg, uint8_t &nlines)
|
|
// End of the message.
|
|
// End of the message.
|
|
break;
|
|
break;
|
|
lcd.setCursor(0, row);
|
|
lcd.setCursor(0, row);
|
|
- const char *msgend2 = msg + min(strlen_P(msg), 20);
|
|
|
|
|
|
+ uint8_t linelen = min(strlen_P(msg), 20);
|
|
|
|
+ const char *msgend2 = msg + linelen;
|
|
msgend = msgend2;
|
|
msgend = msgend2;
|
|
|
|
+ if (row == 3 && linelen == 20) {
|
|
|
|
+ // Last line of the display, full line shall be displayed.
|
|
|
|
+ // Find out, whether this message will be split into multiple screens.
|
|
|
|
+ while (pgm_is_whitespace(msgend))
|
|
|
|
+ ++ msgend;
|
|
|
|
+ multi_screen = pgm_read_byte(msgend) != 0;
|
|
|
|
+ if (multi_screen)
|
|
|
|
+ msgend = (msgend2 -= 2);
|
|
|
|
+ }
|
|
if (pgm_read_byte(msgend) != 0 && ! pgm_is_whitespace(msgend) && ! pgm_is_interpunction(msgend)) {
|
|
if (pgm_read_byte(msgend) != 0 && ! pgm_is_whitespace(msgend) && ! pgm_is_interpunction(msgend)) {
|
|
- // Splitting a word. Find the start of the current word.
|
|
|
|
|
|
+ // Splitting a word. Find the start of the current word.
|
|
while (msgend > msg && ! pgm_is_whitespace(msgend - 1))
|
|
while (msgend > msg && ! pgm_is_whitespace(msgend - 1))
|
|
-- msgend;
|
|
-- msgend;
|
|
if (msgend == msg)
|
|
if (msgend == msg)
|
|
@@ -1550,8 +1561,17 @@ const char* lcd_display_message_fullscreen_P(const char *msg, uint8_t &nlines)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (multi_screen) {
|
|
|
|
+ // Display the "next screen" indicator character.
|
|
|
|
+ // lcd_set_custom_characters_arrows();
|
|
|
|
+ lcd_set_custom_characters_nextpage();
|
|
|
|
+ lcd.setCursor(19, 3);
|
|
|
|
+ // Display the down arrow.
|
|
|
|
+ lcd.print(char(1));
|
|
|
|
+ }
|
|
|
|
+
|
|
nlines = row;
|
|
nlines = row;
|
|
- return (pgm_read_byte(msgend) == 0) ? NULL : msgend;
|
|
|
|
|
|
+ return multi_screen ? msgend : NULL;
|
|
}
|
|
}
|
|
|
|
|
|
void lcd_show_fullscreen_message_and_wait_P(const char *msg)
|
|
void lcd_show_fullscreen_message_and_wait_P(const char *msg)
|
|
@@ -2250,9 +2270,6 @@ void lcd_mylang_drawmenu(int cursor) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-void lcd_set_custom_characters_arrows();
|
|
|
|
-void lcd_set_custom_characters_degree();
|
|
|
|
-
|
|
|
|
void lcd_mylang_drawcursor(int cursor) {
|
|
void lcd_mylang_drawcursor(int cursor) {
|
|
|
|
|
|
if (cursor==1) lcd.setCursor(0, 1);
|
|
if (cursor==1) lcd.setCursor(0, 1);
|
|
@@ -3313,6 +3330,14 @@ void lcd_update_enable(bool enabled)
|
|
lcd_next_update_millis = millis() - 1;
|
|
lcd_next_update_millis = millis() - 1;
|
|
// Full update.
|
|
// Full update.
|
|
lcd_implementation_clear();
|
|
lcd_implementation_clear();
|
|
|
|
+ #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT)
|
|
|
|
+ lcd_set_custom_characters(currentMenu == lcd_status_screen);
|
|
|
|
+ #else
|
|
|
|
+ if (currentMenu == lcd_status_screen)
|
|
|
|
+ lcd_set_custom_characters_degree();
|
|
|
|
+ else
|
|
|
|
+ lcd_set_custom_characters_arrows();
|
|
|
|
+ #endif
|
|
lcd_update(2);
|
|
lcd_update(2);
|
|
} else {
|
|
} else {
|
|
// Clear the LCD always, or let it to the caller?
|
|
// Clear the LCD always, or let it to the caller?
|