diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index d6f0e87..ba6a193 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -350,6 +350,7 @@ TFT_eSprite EONSprite = TFT_eSprite(&tft); TFT_eSprite RTPlusSprite = TFT_eSprite(&tft); TFT_eSprite AFSprite = TFT_eSprite(&tft); TFT_eSprite SquelchSprite = TFT_eSprite(&tft); +TFT_eSprite MenuInfobox = TFT_eSprite(&tft); WiFiConnect wc; WiFiServer Server(7373); @@ -515,6 +516,7 @@ void setup() { RTPlusSprite.createSprite(172, 19); AFSprite.createSprite(172, 19); SquelchSprite.createSprite(47, 19); + MenuInfobox.createSprite(292, 80); RadiotextSprite.setTextDatum(TL_DATUM); FrequencySprite.setTextDatum(TR_DATUM); @@ -523,8 +525,10 @@ void setup() { RTPlusSprite.setTextDatum(TL_DATUM); AFSprite.setTextDatum(TL_DATUM); SquelchSprite.setTextDatum(TL_DATUM); + MenuInfobox.setTextDatum(TC_DATUM); FrequencySprite.loadFont(FREQFONT); + if (language == LANGUAGE_CHS) { RadiotextSprite.loadFont(FONT16_CHS); AdvRadiotextSprite.loadFont(FONT16_CHS); @@ -532,6 +536,7 @@ void setup() { RTPlusSprite.loadFont(FONT16_CHS); AFSprite.loadFont(FONT16_CHS); SquelchSprite.loadFont(FONT16_CHS); + MenuInfobox.loadFont(FONT28_CHS); } else { RadiotextSprite.loadFont(FONT16); AdvRadiotextSprite.loadFont(FONT16); @@ -539,6 +544,7 @@ void setup() { RTPlusSprite.loadFont(FONT16); AFSprite.loadFont(FONT16); SquelchSprite.loadFont(FONT16); + MenuInfobox.loadFont(FONT28); } if (digitalRead(BWBUTTON) == LOW && digitalRead(ROTARY_BUTTON) == HIGH) { @@ -1872,6 +1878,7 @@ void ModeButtonPress() { RTPlusSprite.unloadFont(); AFSprite.unloadFont(); SquelchSprite.unloadFont(); + MenuInfobox.unloadFont(); if (language == LANGUAGE_CHS) { RadiotextSprite.loadFont(FONT16_CHS); AdvRadiotextSprite.loadFont(FONT16_CHS); @@ -1879,6 +1886,7 @@ void ModeButtonPress() { RTPlusSprite.loadFont(FONT16_CHS); AFSprite.loadFont(FONT16_CHS); SquelchSprite.loadFont(FONT16_CHS); + MenuInfobox.loadFont(FONT28_CHS); } else { RadiotextSprite.loadFont(FONT16); AdvRadiotextSprite.loadFont(FONT16); @@ -1886,6 +1894,7 @@ void ModeButtonPress() { RTPlusSprite.loadFont(FONT16); AFSprite.loadFont(FONT16); SquelchSprite.loadFont(FONT16); + MenuInfobox.loadFont(FONT28); } doBandSelectionFM(); doBandSelectionAM(); @@ -3386,7 +3395,7 @@ void DefaultSettings(byte userhardwaremodel) { EEPROM.commit(); } -void tftReplace(int8_t offset, const String & textold, const String & text, int16_t x, int16_t y, int color, int smoothcolor, uint8_t fontsize) { +void tftReplace(int8_t offset, const String &textold, const String &text, int16_t x, int16_t y, int color, int smoothcolor, uint8_t fontsize) { const uint8_t *selectedFont = nullptr; if (language == LANGUAGE_CHS) { if (fontsize == 16) selectedFont = FONT16_CHS; @@ -3422,10 +3431,13 @@ void tftReplace(int8_t offset, const String & textold, const String & text, int1 case 1: tft.setTextDatum(TR_DATUM); break; } - tft.drawString(text, x, y); + String modifiedText = text; + modifiedText.replace("\n", " "); + + tft.drawString(modifiedText, x, y); } -void tftPrint(int8_t offset, const String & text, int16_t x, int16_t y, int color, int smoothcolor, uint8_t fontsize) { +void tftPrint(int8_t offset, const String &text, int16_t x, int16_t y, int color, int smoothcolor, uint8_t fontsize) { const uint8_t *selectedFont = nullptr; if (language == LANGUAGE_CHS) { if (fontsize == 16) selectedFont = FONT16_CHS; @@ -3452,7 +3464,10 @@ void tftPrint(int8_t offset, const String & text, int16_t x, int16_t y, int colo case 1: tft.setTextDatum(TR_DATUM); break; } - tft.drawString(text, x, y, 1); + String modifiedText = text; + modifiedText.replace("\n", " "); + + tft.drawString(modifiedText, x, y, 1); } void deepSleep() { diff --git a/src/gui.cpp b/src/gui.cpp index 087d9cd..08287e4 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -2041,7 +2041,7 @@ void DoMenu() { case MAINSETTINGS: switch (menuoption) { case ITEM1: - tftPrint(0, myLanguage[language][108], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][108]); switch (hardwaremodel) { case BASE_ILI9341: tftPrint(0, myLanguage[language][109], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case PORTABLE_ILI9341: tftPrint(0, myLanguage[language][110], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2051,51 +2051,50 @@ void DoMenu() { break; case ITEM2: - tftPrint(0, myLanguage[language][107], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][107]); if (touchrotating) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM3: - tftPrint(0, myLanguage[language][206], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][206]); if (spispeed == SPI_SPEED_DEFAULT) tftPrint(0, String(myLanguage[language][78]) + " " + String(SPI_FREQUENCY / 1000000, DEC) + " Mhz", 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, String(spispeed * 10 , DEC) + " Mhz", 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; - } break; case AUDIOSETTINGS: switch (menuoption) { case ITEM1: - tftPrint(0, myLanguage[language][10], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][10]); tftPrint(-1, "dB", 170, 118, ActiveColor, ActiveColorSmooth, 28); if (VolSet > 0) tftPrint(1, "+" + String(VolSet, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(1, String(VolSet, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM2: - tftPrint(0, myLanguage[language][45], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][45]); if (edgebeep) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM3: - tftPrint(0, myLanguage[language][67], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][67]); if (audiomode) tftPrint(0, "MPX", 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, "Stereo", 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM4: - tftPrint(0, myLanguage[language][15], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][15]); if (StereoLevel != 0) tftPrint(-1, "dBμV", 170, 118, ActiveColor, ActiveColorSmooth, 28); if (StereoLevel != 0) tftPrint(1, String(StereoLevel, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM5: - tftPrint(0, myLanguage[language][16], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][16]); if (HighCutLevel != 0) tftPrint(-1, "Hz", 170, 118, ActiveColor, ActiveColorSmooth, 28); if (HighCutLevel != 0) tftPrint(1, String(HighCutLevel * 100, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM6: - tftPrint(0, myLanguage[language][17], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][17]); if (HighCutOffset != 0) tftPrint(-1, "dBμV", 170, 118, ActiveColor, ActiveColorSmooth, 28); if (HighCutOffset != 0) tftPrint(1, String(HighCutOffset, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2105,39 +2104,39 @@ void DoMenu() { case DISPLAYSETTINGS: switch (menuoption) { case ITEM1: - tftPrint(0, myLanguage[language][40], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][40]); tftPrint(0, myLanguage[language][0], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM2: - tftPrint(0, myLanguage[language][19], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][19]); tftPrint(-1, "%", 170, 118, ActiveColor, ActiveColorSmooth, 28); tftPrint(1, String(ContrastSet, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM3: - tftPrint(0, myLanguage[language][62], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][62]); if (showsquelch) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM4: - tftPrint(0, myLanguage[language][63], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][63]); if (showmodulation) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM5: - tftPrint(0, myLanguage[language][77], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][77]); tftPrint(0, CurrentThemeString, 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM6: - tftPrint(0, myLanguage[language][91], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][91]); if (screensaverset) tftPrint(-1, myLanguage[language][92], 170, 118, PrimaryColor, PrimaryColorSmooth, 28); if (!screensaverset) tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(1, String(screensaverOptions[screensaverset], DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM7: - tftPrint(0, myLanguage[language][74], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][74]); switch (poweroptions) { case LCD_OFF: tftPrint(0, myLanguage[language][76], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case LCD_BRIGHTNESS_1_PERCENT: tftPrint(0, myLanguage[language][94], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2148,7 +2147,7 @@ void DoMenu() { break; case ITEM8: - tftPrint(0, myLanguage[language][173], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][173]); switch (batteryoptions) { case BATTERY_NONE: tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case BATTERY_VALUE: tftPrint(0, myLanguage[language][174], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2158,12 +2157,12 @@ void DoMenu() { break; case ITEM9: - tftPrint(0, myLanguage[language][98], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][98]); tftPrint(0, unitString[unit], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM10: - tftPrint(0, myLanguage[language][75], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][75]); if (tot != 0) tftPrint(0, String(tot) + " " + myLanguage[language][205], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; } @@ -2172,7 +2171,7 @@ void DoMenu() { case RDSSETTINGS: switch (menuoption) { case ITEM1: - tftPrint(0, myLanguage[language][38], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][38]); switch (showrdserrors) { case 0: tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case 1: tftPrint(0, myLanguage[language][200], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2182,28 +2181,28 @@ void DoMenu() { break; case ITEM2: - tftPrint(0, myLanguage[language][46], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][46]); if (region == REGION_EU) tftPrint(0, myLanguage[language][47], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); if (region == REGION_US) tftPrint(0, myLanguage[language][48], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM3: - tftPrint(0, myLanguage[language][49], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][49]); if (radio.rds.underscore) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM4: - tftPrint(0, myLanguage[language][60], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][60]); if (radio.rds.filter) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM5: - tftPrint(0, myLanguage[language][61], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][61]); if (radio.rds.pierrors) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM6: - tftPrint(0, myLanguage[language][99], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][99]); switch (af) { case 0: tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case 1: tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2212,17 +2211,17 @@ void DoMenu() { break; case ITEM7: - tftPrint(0, myLanguage[language][176], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][176]); if (radio.rds.rtbuffer) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM8: - tftPrint(0, myLanguage[language][196], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][196]); if (radio.rds.sortaf) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM9: - tftPrint(0, myLanguage[language][203], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][203]); if (radio.rds.fastps) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; } @@ -2231,25 +2230,25 @@ void DoMenu() { case FMSETTINGS: switch (menuoption) { case ITEM1: - tftPrint(0, myLanguage[language][11], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][11]); tftPrint(-1, "MHz", 170, 118, ActiveColor, ActiveColorSmooth, 28); tftPrint(1, String(ConverterSet, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM2: - tftPrint(0, myLanguage[language][12], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][12]); tftPrint(-1, "MHz", 170, 118, ActiveColor, ActiveColorSmooth, 28); tftPrint(1, String(LowEdgeSet / 10 + ConverterSet, DEC) + "." + String(LowEdgeSet % 10 + ConverterSet, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM3: - tftPrint(0, myLanguage[language][13], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][13]); tftPrint(-1, "MHz", 170, 118, ActiveColor, ActiveColorSmooth, 28); tftPrint(1, String(HighEdgeSet / 10 + ConverterSet, DEC) + "." + String(HighEdgeSet % 10 + ConverterSet, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM4: - tftPrint(0, myLanguage[language][14], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][14]); tftPrint(-1, "dB", 170, 118, ActiveColor, ActiveColorSmooth, 28); tftPrint(-1, "dBμV", 190, 165, ActiveColor, ActiveColorSmooth, 28); if (LevelOffset > 0) tftPrint(1, "+" + String(LevelOffset, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(1, String(LevelOffset, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); @@ -2258,25 +2257,25 @@ void DoMenu() { break; case ITEM5: - tftPrint(0, myLanguage[language][18], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][18]); tftPrint(-1, "dBμV", 155, 118, ActiveColor, ActiveColorSmooth, 28); tftPrint(1, String(LowLevelSet, DEC), 145, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM6: - tftPrint(0, myLanguage[language][43], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][43]); if (softmutefm) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM7: - tftPrint(0, myLanguage[language][65], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][65]); if (fmnb != 0) tftPrint(-1, "%", 170, 118, PrimaryColor, PrimaryColorSmooth, 28); if (fmnb != 0) tftPrint(1, String(fmnb, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM8: tftPrint(-1, "KHz", 170, 118, ActiveColor, ActiveColorSmooth, 28); - tftPrint(0, myLanguage[language][90], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][90]); switch (fmdefaultstepsize) { case 0: tftPrint(1, String(FREQ_FM_STEP_50K * 10, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case 1: tftPrint(1, String(FREQ_FM_STEP_100K * 10, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2285,7 +2284,7 @@ void DoMenu() { break; case ITEM9: - tftPrint(0, myLanguage[language][100], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][100]); switch (bandFM) { case FM_BAND_ALL: tftPrint(0, myLanguage[language][105] + String(",") + myLanguage[language][106], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case FM_BAND_OIRT: tftPrint(0, myLanguage[language][106], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2294,7 +2293,7 @@ void DoMenu() { break; case ITEM10: - tftPrint(0, myLanguage[language][199], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][199]); if (fmdeemphasis != DEEMPHASIS_NONE) tftPrint(1, String((fmdeemphasis == DEEMPHASIS_50 ? FM_DEEMPHASIS_50 : FM_DEEMPHASIS_75), DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(1, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); if (fmdeemphasis != DEEMPHASIS_NONE) tftPrint(-1, "μs", 170, 118, ActiveColor, PrimaryColorSmooth, 28); break; @@ -2305,24 +2304,24 @@ void DoMenu() { case AMSETTINGS: switch (menuoption) { case ITEM1: - tftPrint(0, myLanguage[language][44], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][44]); if (softmuteam) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM2: - tftPrint(0, myLanguage[language][64], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][64]); if (amnb != 0) tftPrint(-1, "%", 170, 118, PrimaryColor, PrimaryColorSmooth, 28); if (amnb != 0) tftPrint(1, String(amnb, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM3: - tftPrint(0, myLanguage[language][97], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][97]); tftPrint(-1, "dB", 170, 118, ActiveColor, ActiveColorSmooth, 28); if (AMLevelOffset > 0) tftPrint(1, "+" + String(AMLevelOffset, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(1, String(AMLevelOffset, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM4: - tftPrint(0, myLanguage[language][101], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][101]); switch (bandAM) { case AM_BAND_ALL: tftPrint(0, myLanguage[language][102] + String(",") + myLanguage[language][103] + String(",") + myLanguage[language][104], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case AM_BAND_LW_MW: tftPrint(0, myLanguage[language][102] + String(",") + myLanguage[language][103], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2335,22 +2334,22 @@ void DoMenu() { break; case ITEM5: - tftPrint(0, myLanguage[language][59], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][59]); if (showSWMIBand) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM6: - tftPrint(0, myLanguage[language][186], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][186]); if (amcodect != 0) tftPrint(0, String(amcodect, DEC) + " %", 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM7: - tftPrint(0, myLanguage[language][188], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][188]); tftPrint(0, String(amcodectcount, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM8: - tftPrint(0, myLanguage[language][198], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][198]); if (amrfagc != 0) tftPrint(-1, "dB", 170, 118, PrimaryColor, PrimaryColorSmooth, 28); if (amrfagc != 0) tftPrint(1, String(amrfagc, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2361,12 +2360,12 @@ void DoMenu() { case CONNECTIVITY: switch (menuoption) { case ITEM1: - tftPrint(0, myLanguage[language][50], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][50]); if (USBmode) tftPrint(0, "RDS Spy", 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, "XDRGTK", 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; case ITEM2: - tftPrint(0, myLanguage[language][51], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][51]); if (wifi) tftPrint(0, myLanguage[language][42], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); else tftPrint(0, myLanguage[language][30], 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; @@ -2394,7 +2393,7 @@ void DoMenu() { case ITEM4: if (wifi) { - tftPrint(0, myLanguage[language][58], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][58]); tftPrint(0, String(WiFi.localIP()[0]) + "." + String(WiFi.localIP()[1]) + "." + String(WiFi.localIP()[2]) + "." + String(subnetclient, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); } else { menuopen = false; @@ -2403,7 +2402,7 @@ void DoMenu() { break; case ITEM5: - tftPrint(0, myLanguage[language][197], 155, 78, ActiveColor, ActiveColorSmooth, 28); + Infoboxprint(myLanguage[language][197]); tftPrint(0, String(stationlistid, DEC), 155, 118, PrimaryColor, PrimaryColorSmooth, 28); break; } @@ -2421,3 +2420,37 @@ void DoMenu() { BuildMenu(); } } + +void Infoboxprint(const char* input) { + int length = strlen(input); + int newlineIndex = -1; + + for (int i = 0; i < length; i++) { + if (input[i] == '\n') { + newlineIndex = i; + break; + } + } + + MenuInfobox.fillSprite(BackgroundColor); + MenuInfobox.setTextColor(ActiveColor, ActiveColorSmooth, false); + + if (newlineIndex != -1) { + char* line1 = (char*)malloc((newlineIndex + 1) * sizeof(char)); + strncpy(line1, input, newlineIndex); + line1[newlineIndex] = '\0'; + + char* line2 = (char*)malloc((length - newlineIndex) * sizeof(char)); + strcpy(line2, input + newlineIndex + 1); + + MenuInfobox.drawString(line1, 146, 15); + MenuInfobox.drawString(line2, 146, 45); + + free(line1); + free(line2); + } else { + MenuInfobox.drawString(input, 146, 15); + } + + MenuInfobox.pushSprite(14, 34); +} \ No newline at end of file diff --git a/src/gui.h b/src/gui.h index c2cf6fd..24f950a 100644 --- a/src/gui.h +++ b/src/gui.h @@ -164,6 +164,7 @@ extern unsigned int mappedfreqold[20]; extern TFT_eSPI tft; extern TEF6686 radio; extern WiFiConnect wc; +extern TFT_eSprite MenuInfobox; void BuildAFScreen(); void BuildMenu(); @@ -173,6 +174,7 @@ void MenuUp(); void MenuDown(); void DoMenu(); void doTheme(); +void Infoboxprint(const char* input); extern void ShowFreq(int mode); extern void ShowBandSelectionFM(bool notglanceview, bool normaldisplay);