MarlinUI multi-language support (#20725)
This commit is contained in:
@ -54,6 +54,7 @@
|
||||
#include "../../sd/cardreader.h"
|
||||
#include "../../module/temperature.h"
|
||||
#include "../../module/printcounter.h"
|
||||
#include "../../MarlinCore.h"
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
#include "../../libs/duration_t.h"
|
||||
@ -455,20 +456,22 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
|
||||
inline void draw_boxed_string(const u8g_uint_t x, const u8g_uint_t y, PGM_P const pstr, const bool inv) {
|
||||
const u8g_uint_t len = utf8_strlen_P(pstr),
|
||||
by = (y + 1) * (MENU_FONT_HEIGHT);
|
||||
const pixel_len_t bw = len * (MENU_FONT_WIDTH), bx = x * (MENU_FONT_WIDTH);
|
||||
const u8g_uint_t prop = USE_WIDE_GLYPH ? 2 : 1;
|
||||
const pixel_len_t bw = len * prop * (MENU_FONT_WIDTH), bx = x * prop * (MENU_FONT_WIDTH);
|
||||
if (inv) {
|
||||
u8g.setColorIndex(1);
|
||||
u8g.drawBox(bx - 1, by - (MENU_FONT_ASCENT) + 1, bw + 2, MENU_FONT_HEIGHT - 1);
|
||||
u8g.drawBox(bx / prop - 1, by - (MENU_FONT_ASCENT) + 1, bw / prop + 2, MENU_FONT_HEIGHT - 1);
|
||||
u8g.setColorIndex(0);
|
||||
}
|
||||
lcd_put_u8str_P(bx, by, pstr);
|
||||
lcd_put_u8str_P(bx / prop, by, pstr);
|
||||
if (inv) u8g.setColorIndex(1);
|
||||
}
|
||||
|
||||
void MenuItem_confirm::draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string/*=nullptr*/, PGM_P const suff/*=nullptr*/) {
|
||||
ui.draw_select_screen_prompt(pref, string, suff);
|
||||
draw_boxed_string(1, LCD_HEIGHT - 1, no, !yesno);
|
||||
draw_boxed_string(LCD_WIDTH - (utf8_strlen_P(yes) + 1), LCD_HEIGHT - 1, yes, yesno);
|
||||
const u8g_uint_t xpos = (LCD_WIDTH) / (USE_WIDE_GLYPH ? 2 : 1);
|
||||
draw_boxed_string(xpos - (utf8_strlen_P(yes) + 1), LCD_HEIGHT - 1, yes, yesno);
|
||||
}
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
|
@ -64,7 +64,6 @@ static const char assets[][LONG_FILENAME_LENGTH] = {
|
||||
"bmp_speed255.bin",
|
||||
"bmp_speed127.bin",
|
||||
"bmp_speed0.bin",
|
||||
"bmp_speed0.bin",
|
||||
|
||||
"bmp_bed.bin",
|
||||
"bmp_step1_degree.bin",
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
#if HAS_WIRED_LCD && !HAS_GRAPHICAL_TFT
|
||||
|
||||
#include "marlinui.h"
|
||||
#include "lcdprint.h"
|
||||
|
||||
/**
|
||||
|
@ -78,6 +78,10 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if HAS_MULTI_LANGUAGE
|
||||
uint8_t MarlinUI::language; // Initialized by settings.load()
|
||||
#endif
|
||||
|
||||
#if ENABLED(SOUND_MENU_ITEM)
|
||||
bool MarlinUI::buzzer_enabled = true;
|
||||
#endif
|
||||
|
@ -178,6 +178,17 @@ public:
|
||||
TERN_(HAS_LCD_MENU, currentScreen = status_screen);
|
||||
}
|
||||
|
||||
#if HAS_MULTI_LANGUAGE
|
||||
static uint8_t language;
|
||||
static inline void set_language(const uint8_t lang) {
|
||||
if (lang < NUM_LANGUAGES) {
|
||||
language = lang;
|
||||
return_to_status();
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ENABLED(SOUND_MENU_ITEM)
|
||||
static bool buzzer_enabled; // Initialized by settings.load()
|
||||
#else
|
||||
|
59
Marlin/src/lcd/menu/menu_language.cpp
Normal file
59
Marlin/src/lcd/menu/menu_language.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
/**
|
||||
* Marlin 3D Printer Firmware
|
||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
*
|
||||
* Based on Sprinter and grbl.
|
||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
//
|
||||
// Language Selection Menu
|
||||
//
|
||||
|
||||
#include "../../inc/MarlinConfig.h"
|
||||
|
||||
#if HAS_MULTI_LANGUAGE
|
||||
|
||||
#include "menu_item.h"
|
||||
#include "../../MarlinCore.h"
|
||||
#include "../../module/settings.h"
|
||||
|
||||
static void set_lcd_language(const uint8_t inlang) {
|
||||
ui.set_language(inlang);
|
||||
(void)settings.save();
|
||||
}
|
||||
|
||||
void menu_language() {
|
||||
START_MENU();
|
||||
BACK_ITEM(MSG_MAIN);
|
||||
|
||||
MENU_ITEM_P(function, GET_LANG(LCD_LANGUAGE )::LANGUAGE, []{ set_lcd_language(0); });
|
||||
MENU_ITEM_P(function, GET_LANG(LCD_LANGUAGE_2)::LANGUAGE, []{ set_lcd_language(1); });
|
||||
#if NUM_LANGUAGES > 2
|
||||
MENU_ITEM_P(function, GET_LANG(LCD_LANGUAGE_3)::LANGUAGE, []{ set_lcd_language(2); });
|
||||
#if NUM_LANGUAGES > 3
|
||||
MENU_ITEM_P(function, GET_LANG(LCD_LANGUAGE_4)::LANGUAGE, []{ set_lcd_language(3); });
|
||||
#if NUM_LANGUAGES > 4
|
||||
MENU_ITEM_P(function, GET_LANG(LCD_LANGUAGE_5)::LANGUAGE, []{ set_lcd_language(4); });
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
END_MENU();
|
||||
}
|
||||
|
||||
#endif // HAS_MULTI_LANGUAGE
|
@ -97,6 +97,10 @@ void menu_configuration();
|
||||
void menu_spindle_laser();
|
||||
#endif
|
||||
|
||||
#if HAS_MULTI_LANGUAGE
|
||||
void menu_language();
|
||||
#endif
|
||||
|
||||
extern const char M21_STR[];
|
||||
|
||||
void menu_main() {
|
||||
@ -325,6 +329,10 @@ void menu_main() {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if HAS_MULTI_LANGUAGE
|
||||
SUBMENU(LANGUAGE, menu_language);
|
||||
#endif
|
||||
|
||||
END_MENU();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user