Multi screen messages will display a "next page" indicator
if a next page follows.
This commit is contained in:
parent
50a0ca8519
commit
fe61647e68
|
|
@ -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?
|
||||||
|
|
|
||||||
|
|
@ -461,6 +461,24 @@ void lcd_set_custom_characters_arrows()
|
||||||
|
|
||||||
lcd.createChar(1, arrdown);
|
lcd.createChar(1, arrdown);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lcd_set_custom_characters_nextpage()
|
||||||
|
{
|
||||||
|
|
||||||
|
byte arrdown[8] = {
|
||||||
|
B00000,
|
||||||
|
B00000,
|
||||||
|
B10001,
|
||||||
|
B01010,
|
||||||
|
B00100,
|
||||||
|
B10001,
|
||||||
|
B01010,
|
||||||
|
B00100
|
||||||
|
};
|
||||||
|
|
||||||
|
lcd.createChar(1, arrdown);
|
||||||
|
}
|
||||||
|
|
||||||
void lcd_set_custom_characters_degree()
|
void lcd_set_custom_characters_degree()
|
||||||
{
|
{
|
||||||
byte degree[8] = {
|
byte degree[8] = {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue