🎨 Axis name string interpolation, with examples (#22879)
This commit is contained in:
		
							parent
							
								
									854ce63358
								
							
						
					
					
						commit
						1de265ea5d
					
				| @ -43,9 +43,11 @@ uint8_t read_byte(uint8_t *byte) { return *byte; } | ||||
| /**
 | ||||
|  * Add a string, applying substitutions for the following characters: | ||||
|  * | ||||
|  *   $ displays the clipped C-string given by the itemString argument | ||||
|  *   = 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 | ||||
|  */ | ||||
| void DWIN_String::add(uint8_t *string, const int8_t index, uint8_t *itemString/*=nullptr*/) { | ||||
|   wchar_t wchar; | ||||
| @ -62,17 +64,15 @@ void DWIN_String::add(uint8_t *string, const int8_t index, uint8_t *itemString/* | ||||
|         if (inum >= 10) { add_character('0' + (inum / 10)); inum %= 10; } | ||||
|         add_character('0' + inum); | ||||
|       } | ||||
|       else { | ||||
|       else | ||||
|         add(index == -2 ? GET_TEXT(MSG_CHAMBER) : GET_TEXT(MSG_BED)); | ||||
|       } | ||||
|       continue; | ||||
|     } | ||||
|     else if (ch == '$' && itemString) { | ||||
|     else if (ch == '$' && itemString) | ||||
|       add(itemString); | ||||
|       continue; | ||||
|     } | ||||
| 
 | ||||
|     add_character(ch); | ||||
|     else if (ch == '@') | ||||
|       add_character(axis_codes[index]); | ||||
|     else | ||||
|       add_character(ch); | ||||
|   } | ||||
|   eol(); | ||||
| } | ||||
|  | ||||
| @ -129,9 +129,8 @@ namespace Language_cz { | ||||
|   LSTR MSG_IDEX_MODE_DUPLICATE            = _UxGT("Duplikace"); | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Zrcadlení"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Plná kontrola"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2. tryska X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2. tryska Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2. tryska Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2. tryska @"); | ||||
| 
 | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("Provádím G29"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("UBL nástroje"); | ||||
|  | ||||
| @ -121,9 +121,8 @@ namespace Language_de { | ||||
|   LSTR MSG_IDEX_MODE_DUPLICATE            = _UxGT("Duplizieren"); | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Spiegelkopie"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("vollstä. Kontrolle"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2. Düse X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2. Düse Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2. Düse Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2. Düse @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("G29 ausführen"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("UBL-Werkzeuge"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("Unified Bed Leveling"); | ||||
|  | ||||
| @ -30,9 +30,11 @@ | ||||
|  * Substitutions are applied for the following characters when used | ||||
|  * in menu items that call lcd_put_u8str_ind_P with an index: | ||||
|  * | ||||
|  *   $ displays an inserted C-string | ||||
|  *   = 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 | ||||
|  */ | ||||
| 
 | ||||
| #define en 1234 | ||||
| @ -72,12 +74,7 @@ namespace Language_en { | ||||
|   LSTR MSG_PROGRESS_BAR_TEST              = _UxGT("Progress Bar Test"); | ||||
|   LSTR MSG_HOMING                         = _UxGT("Homing"); | ||||
|   LSTR MSG_AUTO_HOME                      = _UxGT("Auto Home"); | ||||
|   LSTR MSG_AUTO_HOME_X                    = _UxGT("Home X"); | ||||
|   LSTR MSG_AUTO_HOME_Y                    = _UxGT("Home Y"); | ||||
|   LSTR MSG_AUTO_HOME_Z                    = _UxGT("Home Z"); | ||||
|   LSTR MSG_AUTO_HOME_I                    = _UxGT("Home ") LCD_STR_I; | ||||
|   LSTR MSG_AUTO_HOME_J                    = _UxGT("Home ") LCD_STR_J; | ||||
|   LSTR MSG_AUTO_HOME_K                    = _UxGT("Home ") LCD_STR_K; | ||||
|   LSTR MSG_AUTO_HOME_A                    = _UxGT("Home @"); | ||||
|   LSTR MSG_FILAMENT_SET                   = _UxGT("Filament Settings"); | ||||
|   LSTR MSG_FILAMENT_MAN                   = _UxGT("Filament Management"); | ||||
|   LSTR MSG_LEVBED_FL                      = _UxGT("Front Left"); | ||||
| @ -175,9 +172,8 @@ namespace Language_en { | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Mirrored Copy"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Full Control"); | ||||
|   LSTR MSG_IDEX_DUPE_GAP                  = _UxGT("Duplicate X-Gap"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2nd Nozzle X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2nd Nozzle Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2nd Nozzle Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2nd Nozzle @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("Doing G29"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("UBL Tools"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("Unified Bed Leveling"); | ||||
| @ -279,7 +275,7 @@ namespace Language_en { | ||||
| 
 | ||||
|   LSTR MSG_MOVING                         = _UxGT("Moving..."); | ||||
|   LSTR MSG_FREE_XY                        = _UxGT("Free XY"); | ||||
|   LSTR MSG_MOVE_X                         = _UxGT("Move X"); | ||||
|   LSTR MSG_MOVE_X                         = _UxGT("Move X"); // Used by draw_edit_screen
 | ||||
|   LSTR MSG_MOVE_Y                         = _UxGT("Move Y"); | ||||
|   LSTR MSG_MOVE_Z                         = _UxGT("Move Z"); | ||||
|   LSTR MSG_MOVE_I                         = _UxGT("Move ") LCD_STR_I; | ||||
| @ -303,6 +299,7 @@ namespace Language_en { | ||||
|   LSTR MSG_MAXSPEED_Y                     = _UxGT("Max ") LCD_STR_B _UxGT(" Speed"); | ||||
|   LSTR MSG_MAXSPEED_Z                     = _UxGT("Max ") LCD_STR_C _UxGT(" Speed"); | ||||
|   LSTR MSG_MAXSPEED_E                     = _UxGT("Max ") LCD_STR_E _UxGT(" Speed"); | ||||
|   LSTR MSG_MAXSPEED_A                     = _UxGT("Max @ Speed"); | ||||
|   LSTR MSG_BED_Z                          = _UxGT("Bed Z"); | ||||
|   LSTR MSG_NOZZLE                         = _UxGT("Nozzle"); | ||||
|   LSTR MSG_NOZZLE_N                       = _UxGT("Nozzle ~"); | ||||
|  | ||||
| @ -124,9 +124,8 @@ namespace Language_es { | ||||
|   LSTR MSG_IDEX_MODE_DUPLICATE            = _UxGT("Duplicar"); | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Copia Reflejada"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Control Total"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2ª Fusor X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2ª Fusor Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2ª Fusor Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2ª Fusor @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("Hacer G29"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("Herramientas UBL"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("Nivelado UBL"); | ||||
|  | ||||
| @ -134,9 +134,8 @@ namespace Language_fr { | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Copie miroir"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Contrôle complet"); | ||||
|   LSTR MSG_OFFSETS_MENU                   = _UxGT("Offsets Outil"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("Buse 2 X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("Buse 2 Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("Buse 2 Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("Buse 2 @"); | ||||
|   LSTR MSG_G26_HEATING_BED                = _UxGT("G26: Chauffage du lit"); | ||||
|   LSTR MSG_G26_HEATING_NOZZLE             = _UxGT("Buse en chauffe..."); | ||||
|   LSTR MSG_G26_MANUAL_PRIME               = _UxGT("Amorce manuelle..."); | ||||
|  | ||||
| @ -121,9 +121,8 @@ namespace Language_gl { | ||||
|   LSTR MSG_IDEX_MODE_DUPLICATE            = _UxGT("Duplicación"); | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Copia Espello"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Control Total"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2º Bico X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2º Bico Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2º Bico Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2º Bico @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("Executando G29"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("Ferramentas UBL"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("Unified Bed Leveling"); | ||||
|  | ||||
| @ -156,9 +156,8 @@ namespace Language_hu { | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Tükrözött másolás"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Teljes felügyelet"); | ||||
|   LSTR MSG_IDEX_DUPE_GAP                  = _UxGT("X-hézag másolása"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2. fej X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2. fej Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2. fej Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2. fej @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("Szintezz! G29"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("UBL eszköz"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("Egységes ágy szint"); | ||||
|  | ||||
| @ -30,9 +30,11 @@ | ||||
|  * Substitutions are applied for the following characters when used | ||||
|  * in menu items that call lcd_put_u8str_ind_P with an index: | ||||
|  * | ||||
|  *   $ displays an inserted C-string | ||||
|  *   = 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 | ||||
|  */ | ||||
| 
 | ||||
| #define DISPLAY_CHARSET_ISO10646_1 | ||||
| @ -160,9 +162,8 @@ namespace Language_it { | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Copia speculare"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Pieno controllo"); | ||||
|   LSTR MSG_IDEX_DUPE_GAP                  = _UxGT("X-Gap-X duplicato"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2° ugello X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2° ugello Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2° ugello Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2° ugello @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("G29 in corso"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("Strumenti UBL"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("Livel.letto unificato"); | ||||
|  | ||||
| @ -30,9 +30,11 @@ | ||||
|  * Substitutions are applied for the following characters when used | ||||
|  * in menu items that call lcd_put_u8str_ind_P with an index: | ||||
|  * | ||||
|  *   $ displays an inserted C-string | ||||
|  *   = 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 | ||||
|  */ | ||||
| 
 | ||||
| #define DISPLAY_CHARSET_ISO10646_PL | ||||
| @ -133,9 +135,8 @@ namespace Language_pl { | ||||
|   LSTR MSG_IDEX_MODE_DUPLICATE            = _UxGT("Duplikowanie"); | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Kopia lustrzana"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Pełne sterowanie"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2ga dysza X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2ga dysza Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2ga dysza Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2ga dysza @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("Wykonywanie G29"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("Narzędzia UBL"); | ||||
|   LSTR MSG_LCD_TILTING_MESH               = _UxGT("Punkt pochylenia"); | ||||
|  | ||||
| @ -111,9 +111,8 @@ namespace Language_pt_br { | ||||
|   LSTR MSG_IDEX_MODE_DUPLICATE            = _UxGT("Duplicação"); | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Cópia espelhada"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Controle Total"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2o bico X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2o bico Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2o bico Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2o bico @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("Executando G29"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("Ferramentas UBL"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("Nivel. Mesa Unif."); | ||||
|  | ||||
| @ -120,9 +120,8 @@ namespace Language_ro { | ||||
|   LSTR MSG_IDEX_MODE_DUPLICATE            = _UxGT("Duplication"); | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Mirrored Copy"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Full Control"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2nd Nozzle X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2nd Nozzle Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2nd Nozzle Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2nd Nozzle @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("Doing G29"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("UBL Tools"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("Unified Bed Leveling"); | ||||
|  | ||||
| @ -197,9 +197,8 @@ namespace Language_ru { | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL              = _UxGT("Полный контроль"); | ||||
|   LSTR MSG_IDEX_DUPE_GAP                    = _UxGT("Дублировать X-зазор"); | ||||
| 
 | ||||
|   LSTR MSG_HOTEND_OFFSET_X                  = _UxGT("2-е сопло X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                  = _UxGT("2-е сопло Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                  = _UxGT("2-е сопло Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                  = _UxGT("2-е сопло @"); | ||||
| 
 | ||||
|   LSTR MSG_UBL_DOING_G29                    = _UxGT("Выполняем G29"); | ||||
|   LSTR MSG_UBL_TOOLS                        = _UxGT("Инструменты UBL"); | ||||
|  | ||||
| @ -34,9 +34,11 @@ | ||||
|  * Substitutions are applied for the following characters when used | ||||
|  * in menu items that call lcd_put_u8str_ind_P with an index: | ||||
|  * | ||||
|  *   $ displays an inserted C-string | ||||
|  *   = 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 | ||||
|  */ | ||||
| #define DISPLAY_CHARSET_ISO10646_SK | ||||
| 
 | ||||
| @ -172,9 +174,8 @@ namespace Language_sk { | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Zrkadlená kópia"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Plná kontrola"); | ||||
|   LSTR MSG_IDEX_DUPE_GAP                  = _UxGT("Duplik. medz.-X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2. tryska X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2. tryska Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2. tryska Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2. tryska @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("Vykonávam G29"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("Nástroje UBL"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("UBL rovnanie"); | ||||
| @ -300,6 +301,7 @@ namespace Language_sk { | ||||
|   LSTR MSG_MAXSPEED_Y                     = _UxGT("Max rýchl. ") LCD_STR_B; | ||||
|   LSTR MSG_MAXSPEED_Z                     = _UxGT("Max rýchl. ") LCD_STR_C; | ||||
|   LSTR MSG_MAXSPEED_E                     = _UxGT("Max rýchl. ") LCD_STR_E; | ||||
|   LSTR MSG_MAXSPEED_A                     = _UxGT("Max rýchl. @"); | ||||
|   LSTR MSG_BED_Z                          = _UxGT("Výška podl."); | ||||
|   LSTR MSG_NOZZLE                         = _UxGT("Tryska"); | ||||
|   LSTR MSG_NOZZLE_N                       = _UxGT("Tryska ~"); | ||||
|  | ||||
| @ -145,9 +145,8 @@ namespace Language_sv { | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Speglad Kopia"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Full Kontroll"); | ||||
|   LSTR MSG_IDEX_DUPE_GAP                  = _UxGT("Duplicera X-Avstånd"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2:a Munstycke X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2:a Munstycke Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2:a Munstycke Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2:a Munstycke @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("Utför G29"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("UBL Verktyg"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("Enad Bädd Nivellering (UBL)"); | ||||
|  | ||||
| @ -123,9 +123,8 @@ namespace Language_tr { | ||||
|   LSTR MSG_IDEX_MODE_DUPLICATE            = _UxGT("Kopyala"); | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Yansıtılmış kopya"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Tam Kontrol"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2. nozul X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2. nozul Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2. nozul Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2. nozul @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("G29 Çalışıyor"); | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("UBL Araçları"); | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("UBL Yatak Hizalama"); | ||||
|  | ||||
| @ -198,9 +198,8 @@ namespace Language_uk { | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL              = _UxGT("Повний контроль"); | ||||
|   LSTR MSG_IDEX_DUPE_GAP                    = _UxGT("Дублюв. X-проміжок"); | ||||
| 
 | ||||
|   LSTR MSG_HOTEND_OFFSET_X                  = _UxGT("Друге сопло X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                  = _UxGT("Друге сопло Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                  = _UxGT("Друге сопло Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                  = _UxGT("Друге сопло @"); | ||||
| 
 | ||||
|   LSTR MSG_UBL_DOING_G29                    = _UxGT("Виконується G29"); | ||||
|   LSTR MSG_UBL_TOOLS                        = _UxGT("Інструменти UBL"); | ||||
|  | ||||
| @ -119,9 +119,8 @@ namespace Language_zh_CN { | ||||
|   LSTR MSG_IDEX_MODE_DUPLICATE            = _UxGT("复制"); | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("镜像复制"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("完全控制"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("第二喷头是X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("第二喷头是Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("第二喷头是Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("第二喷头是@"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("执行G29");     // "Doing G29"
 | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("UBL工具");     // "UBL Tools"
 | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("统一热床调平(UBL)");     // "Unified Bed Leveling"
 | ||||
|  | ||||
| @ -116,9 +116,8 @@ namespace Language_zh_TW { | ||||
|   LSTR MSG_IDEX_MODE_DUPLICATE            = _UxGT("Duplication"); | ||||
|   LSTR MSG_IDEX_MODE_MIRRORED_COPY        = _UxGT("Mirrored Copy"); | ||||
|   LSTR MSG_IDEX_MODE_FULL_CTRL            = _UxGT("Full Control"); | ||||
|   LSTR MSG_HOTEND_OFFSET_X                = _UxGT("2nd Nozzle X"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Y                = _UxGT("2nd Nozzle Y"); | ||||
|   LSTR MSG_HOTEND_OFFSET_Z                = _UxGT("2nd Nozzle Z"); | ||||
|   LSTR MSG_HOTEND_OFFSET_A                = _UxGT("2nd Nozzle @"); | ||||
|   LSTR MSG_UBL_DOING_G29                  = _UxGT("執行G29");     // "Doing G29"
 | ||||
|   LSTR MSG_UBL_TOOLS                      = _UxGT("UBL工具");     // "UBL Tools"
 | ||||
|   LSTR MSG_UBL_LEVEL_BED                  = _UxGT("統一熱床調平(UBL)");     // "Unified Bed Leveling"
 | ||||
|  | ||||
| @ -36,9 +36,11 @@ | ||||
|  * | ||||
|  * Print a string with an index substituted within it: | ||||
|  * | ||||
|  *   $ displays the clipped C-string given by the inStr argument | ||||
|  *   = 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 | ||||
|  */ | ||||
| lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) { | ||||
|   const uint8_t prop = USE_WIDE_GLYPH ? 2 : 1; | ||||
| @ -72,6 +74,10 @@ lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const i | ||||
|     else if (ch == '$' && inStr) { | ||||
|       n -= lcd_put_u8str_max_P(inStr, n * (MENU_FONT_WIDTH)) / (MENU_FONT_WIDTH); | ||||
|     } | ||||
|     else if (ch == '@') { | ||||
|       lcd_put_wchar(axis_codes[ind]); | ||||
|       n--; | ||||
|     } | ||||
|     else { | ||||
|       lcd_put_wchar(ch); | ||||
|       n -= ch > 255 ? prop : 1; | ||||
|  | ||||
| @ -103,42 +103,28 @@ void MarlinUI::_goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, const bool is_b | ||||
| /////////// Menu Editing Actions ///////////
 | ||||
| ////////////////////////////////////////////
 | ||||
| 
 | ||||
| /**
 | ||||
|  * Functions for editing single values | ||||
|  * | ||||
|  * The "DEFINE_MENU_EDIT_ITEM" macro generates the classes needed to edit a numerical value. | ||||
|  * | ||||
|  * The prerequisite is that in the header the type was already declared: | ||||
|  * | ||||
|  *   DEFINE_MENU_EDIT_ITEM_TYPE(int3, int16_t, i16tostr3rj, 1) | ||||
|  * | ||||
|  * For example, DEFINE_MENU_EDIT_ITEM(int3) expands into: | ||||
|  * | ||||
|  *   template class TMenuEditItem<MenuEditItemInfo_int3> | ||||
|  * | ||||
|  * You can then use one of the menu macros to present the edit interface: | ||||
|  *   EDIT_ITEM(int3, MSG_SPEED, &feedrate_percentage, 10, 999) | ||||
|  * | ||||
|  * This expands into a more primitive menu item: | ||||
|  *  _MENU_ITEM_P(int3, false, GET_TEXT(MSG_SPEED), &feedrate_percentage, 10, 999) | ||||
|  * | ||||
|  * ...which calls: | ||||
|  *       MenuItem_int3::action(plabel, &feedrate_percentage, 10, 999) | ||||
|  *       MenuItem_int3::draw(encoderLine == _thisItemNr, _lcdLineNr, plabel, &feedrate_percentage, 10, 999) | ||||
|  */ | ||||
| // All Edit Screens run the same way, but `draw_edit_screen` is implementation-specific
 | ||||
| void MenuEditItemBase::edit_screen(strfunc_t strfunc, loadfunc_t loadfunc) { | ||||
|   // Reset repeat_delay for Touch Buttons
 | ||||
|   TERN_(HAS_TOUCH_BUTTONS, ui.repeat_delay = BUTTON_DELAY_EDIT); | ||||
|   // Constrain ui.encoderPosition to 0 ... maxEditValue (calculated in encoder steps)
 | ||||
|   if (int32_t(ui.encoderPosition) < 0) ui.encoderPosition = 0; | ||||
|   if (int32_t(ui.encoderPosition) > maxEditValue) ui.encoderPosition = maxEditValue; | ||||
|   // If drawing is flagged then redraw the (whole) edit screen
 | ||||
|   if (ui.should_draw()) | ||||
|     draw_edit_screen(strfunc(ui.encoderPosition + minEditValue)); | ||||
|   // If there was a click or "live editing" and encoder moved...
 | ||||
|   if (ui.lcd_clicked || (liveEdit && ui.should_draw())) { | ||||
|     // Pass the editValue pointer to the loadfunc along with the encoder plus min
 | ||||
|     if (editValue) loadfunc(editValue, ui.encoderPosition + minEditValue); | ||||
|     // If a callbackFunc was set, call it for click or always for "live editing"
 | ||||
|     if (callbackFunc && (liveEdit || ui.lcd_clicked)) (*callbackFunc)(); | ||||
|     // Use up the click to finish editing and go to the previous screen
 | ||||
|     if (ui.use_click()) ui.goto_previous_screen(); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| // Going to an edit screen sets up some persistent values first
 | ||||
| void MenuEditItemBase::goto_edit_screen( | ||||
|   PGM_P const el,         // Edit label
 | ||||
|   void * const ev,        // Edit value pointer
 | ||||
|  | ||||
| @ -60,7 +60,9 @@ class MenuItemBase { | ||||
|     // Store the index of the item ahead of use by indexed items
 | ||||
|     FORCE_INLINE static void init(const int8_t ind=0, PGM_P const pstr=nullptr) { itemIndex = ind; itemString = pstr; } | ||||
| 
 | ||||
|     // Implementation-specific:
 | ||||
|     // Draw an item either selected (pre_char) or not (space) with post_char
 | ||||
|     // Menus may set up itemIndex, itemString and pass them to string-building or string-emitting functions
 | ||||
|     static void _draw(const bool sel, const uint8_t row, PGM_P const pstr, const char pre_char, const char post_char); | ||||
| 
 | ||||
|     // Draw an item either selected ('>') or not (space) with post_char
 | ||||
| @ -167,11 +169,11 @@ class MenuEditItemBase : public MenuItemBase { | ||||
|     ); | ||||
|     static void edit_screen(strfunc_t, loadfunc_t); // Edit value handler
 | ||||
|   public: | ||||
|     // Implemented for HD44780 and DOGM
 | ||||
|     // Implementation-specific:
 | ||||
|     // Draw the current item at specified row with edit data
 | ||||
|     static void draw(const bool sel, const uint8_t row, PGM_P const pstr, const char * const inStr, const bool pgm=false); | ||||
| 
 | ||||
|     // Implemented for HD44780 and DOGM
 | ||||
|     // Implementation-specific:
 | ||||
|     // This low-level method is good to draw from anywhere
 | ||||
|     static void draw_edit_screen(PGM_P const pstr, const char * const value); | ||||
| 
 | ||||
|  | ||||
| @ -174,12 +174,12 @@ void menu_advanced_settings(); | ||||
|     START_MENU(); | ||||
|     BACK_ITEM(MSG_CONFIGURATION); | ||||
|     #if ENABLED(DUAL_X_CARRIAGE) | ||||
|       EDIT_ITEM_FAST(float42_52, MSG_HOTEND_OFFSET_X, &hotend_offset[1].x, float(X2_HOME_POS - 25), float(X2_HOME_POS + 25), _recalc_offsets); | ||||
|       EDIT_ITEM_FAST_N(float42_52, X_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].x, float(X2_HOME_POS - 25), float(X2_HOME_POS + 25), _recalc_offsets); | ||||
|     #else | ||||
|       EDIT_ITEM_FAST(float42_52, MSG_HOTEND_OFFSET_X, &hotend_offset[1].x, -99.0, 99.0, _recalc_offsets); | ||||
|       EDIT_ITEM_FAST_N(float42_52, X_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].x, -99.0, 99.0, _recalc_offsets); | ||||
|     #endif | ||||
|     EDIT_ITEM_FAST(float42_52, MSG_HOTEND_OFFSET_Y, &hotend_offset[1].y, -99.0, 99.0, _recalc_offsets); | ||||
|     EDIT_ITEM_FAST(float42_52, MSG_HOTEND_OFFSET_Z, &hotend_offset[1].z, Z_PROBE_LOW_POINT, 10.0, _recalc_offsets); | ||||
|     EDIT_ITEM_FAST_N(float42_52, Y_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].y, -99.0, 99.0, _recalc_offsets); | ||||
|     EDIT_ITEM_FAST_N(float42_52, Z_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].z, Z_PROBE_LOW_POINT, 10.0, _recalc_offsets); | ||||
|     #if ENABLED(EEPROM_SETTINGS) | ||||
|       ACTION_ITEM(MSG_STORE_EEPROM, ui.store_settings); | ||||
|     #endif | ||||
|  | ||||
| @ -106,9 +106,23 @@ class TMenuEditItem : MenuEditItemBase { | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| // Provide a set of Edit Item Types which encompass a primitive
 | ||||
| // type, a string function, and a scale factor for edit and display.
 | ||||
| // These items call the Edit Item draw method passing the prepared string.
 | ||||
| /**
 | ||||
|  * DEFINE_MENU_EDIT_ITEM_TYPE(int3, int16_t, i16tostr3rj, 1) | ||||
|  * | ||||
|  * Define struct types for use by EDIT_ITEM(...) macros, which encompass | ||||
|  * a primitive storage type, a string function, and a scale factor for edit / display. | ||||
|  * The EDIT_ITEM macros take care of calling action and draw methods as needed. | ||||
|  * | ||||
|  * For example, DEFINE_MENU_EDIT_ITEM_TYPE(percent, uint8_t, ui8tostr4pctrj, 100.f/255.f, +0.5f) expands into: | ||||
|  * | ||||
|  *   struct MenuEditItemInfo_percent { | ||||
|  *     typedef uint8_t type_t; | ||||
|  *     static inline float scale(const_float_t value)   { return value * (100.f/255.f) +0.5f; } | ||||
|  *     static inline float unscale(const_float_t value) { return value / (100.f/255.f) +0.5f; } | ||||
|  *     static inline const char* strfunc(const_float_t value) { return ui8tostr4pctrj(_DOFIX(uint8_t,value)); } | ||||
|  *   }; | ||||
|  *   typedef TMenuEditItem<MenuEditItemInfo_percent> MenuItem_percent | ||||
|  */ | ||||
| #define __DOFIXfloat PROBE() | ||||
| #define _DOFIX(TYPE,V) TYPE(TERN(IS_PROBE(__DOFIX##TYPE),FIXFLOAT(V),(V))) | ||||
| #define DEFINE_MENU_EDIT_ITEM_TYPE(NAME, TYPE, STRFUNC, SCALE, ETC...) \ | ||||
|  | ||||
| @ -329,21 +329,21 @@ void menu_move() { | ||||
|     BACK_ITEM(MSG_MOTION); | ||||
| 
 | ||||
|     GCODES_ITEM(MSG_AUTO_HOME, G28_STR); | ||||
|     GCODES_ITEM(MSG_AUTO_HOME_X, PSTR("G28X")); | ||||
|     GCODES_ITEM_N(X_AXIS, MSG_AUTO_HOME_A, PSTR("G28X")); | ||||
|     #if HAS_Y_AXIS | ||||
|       GCODES_ITEM(MSG_AUTO_HOME_Y, PSTR("G28Y")); | ||||
|       GCODES_ITEM_N(Y_AXIS, MSG_AUTO_HOME_A, PSTR("G28Y")); | ||||
|     #endif | ||||
|     #if HAS_Z_AXIS | ||||
|       GCODES_ITEM(MSG_AUTO_HOME_Z, PSTR("G28Z")); | ||||
|       GCODES_ITEM_N(Z_AXIS, MSG_AUTO_HOME_A, PSTR("G28Z")); | ||||
|     #endif | ||||
|     #if LINEAR_AXES >= 4 | ||||
|       GCODES_ITEM(MSG_AUTO_HOME_I, PSTR("G28" AXIS4_STR)); | ||||
|       GCODES_ITEM_N(I_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS4_STR)); | ||||
|     #endif | ||||
|     #if LINEAR_AXES >= 5 | ||||
|       GCODES_ITEM(MSG_AUTO_HOME_J, PSTR("G28" AXIS5_STR)); | ||||
|       GCODES_ITEM_N(J_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS5_STR)); | ||||
|     #endif | ||||
|     #if LINEAR_AXES >= 6 | ||||
|       GCODES_ITEM(MSG_AUTO_HOME_K, PSTR("G28" AXIS6_STR)); | ||||
|       GCODES_ITEM_N(K_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS6_STR)); | ||||
|     #endif | ||||
| 
 | ||||
|     END_MENU(); | ||||
| @ -382,21 +382,21 @@ void menu_motion() { | ||||
|   #else | ||||
|     GCODES_ITEM(MSG_AUTO_HOME, G28_STR); | ||||
|     #if ENABLED(INDIVIDUAL_AXIS_HOMING_MENU) | ||||
|       GCODES_ITEM(MSG_AUTO_HOME_X, PSTR("G28X")); | ||||
|       GCODES_ITEM_N(X_AXIS, MSG_AUTO_HOME_A, PSTR("G28X")); | ||||
|       #if HAS_Y_AXIS | ||||
|         GCODES_ITEM(MSG_AUTO_HOME_Y, PSTR("G28Y")); | ||||
|         GCODES_ITEM_N(Y_AXIS, MSG_AUTO_HOME_A, PSTR("G28Y")); | ||||
|       #endif | ||||
|       #if HAS_Z_AXIS | ||||
|         GCODES_ITEM(MSG_AUTO_HOME_Z, PSTR("G28Z")); | ||||
|         GCODES_ITEM_N(Z_AXIS, MSG_AUTO_HOME_A, PSTR("G28Z")); | ||||
|       #endif | ||||
|       #if LINEAR_AXES >= 4 | ||||
|         GCODES_ITEM(MSG_AUTO_HOME_I, PSTR("G28" AXIS4_STR)); | ||||
|         GCODES_ITEM_N(I_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS4_STR)); | ||||
|       #endif | ||||
|       #if LINEAR_AXES >= 5 | ||||
|         GCODES_ITEM(MSG_AUTO_HOME_J, PSTR("G28" AXIS5_STR)); | ||||
|         GCODES_ITEM_N(J_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS5_STR)); | ||||
|       #endif | ||||
|       #if LINEAR_AXES >= 6 | ||||
|         GCODES_ITEM(MSG_AUTO_HOME_K, PSTR("G28" AXIS6_STR)); | ||||
|         GCODES_ITEM_N(K_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS6_STR)); | ||||
|       #endif | ||||
|     #endif | ||||
|   #endif | ||||
|  | ||||
| @ -89,11 +89,13 @@ uint8_t read_byte(uint8_t *byte) { return *byte; } | ||||
| /**
 | ||||
|  * Add a string, applying substitutions for the following characters: | ||||
|  * | ||||
|  *   $ displays an inserted C-string given by the itemString parameter | ||||
|  *   = 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 | ||||
|  */ | ||||
| void TFT_String::add(uint8_t *string, int8_t index, uint8_t *itemString) { | ||||
| void TFT_String::add(uint8_t *string, int8_t index, uint8_t *itemString/*=nullptr*/) { | ||||
|   wchar_t wchar; | ||||
| 
 | ||||
|   while (*string) { | ||||
| @ -108,17 +110,15 @@ void TFT_String::add(uint8_t *string, int8_t index, uint8_t *itemString) { | ||||
|         if (inum >= 10) { add_character('0' + (inum / 10)); inum %= 10; } | ||||
|         add_character('0' + inum); | ||||
|       } | ||||
|       else { | ||||
|       else | ||||
|         add(index == -2 ? GET_TEXT(MSG_CHAMBER) : GET_TEXT(MSG_BED)); | ||||
|       } | ||||
|       continue; | ||||
|     } | ||||
|     else if (ch == '$' && itemString) { | ||||
|     else if (ch == '$' && itemString) | ||||
|       add(itemString); | ||||
|       continue; | ||||
|     } | ||||
| 
 | ||||
|     add_character(ch); | ||||
|     else if (ch == '@') | ||||
|       add_character(axis_codes[index]); | ||||
|     else | ||||
|       add_character(ch); | ||||
|   } | ||||
|   eol(); | ||||
| } | ||||
| @ -150,9 +150,8 @@ void TFT_String::rtrim(uint8_t character) { | ||||
|       span -= glyph(data[length])->DWidth; | ||||
|       eol(); | ||||
|     } | ||||
|     else { | ||||
|     else | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user