diff --git a/src/main.cpp b/src/main.cpp index acd7590..655f042 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -167,7 +167,8 @@ unsigned long lastHistoryRefresh = 0; enum ScreenState { SCREEN_DASHBOARD, SCREEN_CUSTOMIZE_STOCKS, - SCREEN_CUSTOMIZE_INDICES + SCREEN_CUSTOMIZE_INDICES, + SCREEN_WIFI_CONFIG }; ScreenState currentScreen = SCREEN_DASHBOARD; @@ -589,6 +590,65 @@ void drawIndexCustomizeScreen() { lcd.drawString("CANCEL", SCREEN_WIDTH - 95, SCREEN_HEIGHT - 30); } +void drawWifiConfigScreen() { + lcd.fillScreen(TFT_BLACK); + + lcd.fillSmoothRoundRect(0, 0, SCREEN_WIDTH, 50, 8, TFT_ORANGE); + lcd.setTextColor(TFT_WHITE, TFT_ORANGE); + lcd.setFont(&fonts::DejaVu24); + lcd.setTextDatum(textdatum_t::middle_center); + lcd.drawString("WIFI CONFIGURATION", SCREEN_WIDTH / 2, 25); + + preferences.begin("wifi", true); + String currentSsid = preferences.getString("ssid", ""); + preferences.end(); + + lcd.setTextColor(TFT_WHITE, TFT_BLACK); + lcd.setFont(&fonts::DejaVu18); + lcd.setTextDatum(textdatum_t::middle_left); + lcd.drawString("Current SSID:", 100, 80); + + lcd.fillSmoothRoundRect(100, 100, 600, 40, 6, TFT_DARKGRAY); + lcd.setTextColor(TFT_WHITE, TFT_DARKGRAY); + lcd.setTextDatum(textdatum_t::middle_left); + if (currentSsid.length() > 0) { + lcd.drawString(currentSsid, 120, 120); + } else { + lcd.setTextColor(TFT_GRAY, TFT_DARKGRAY); + lcd.drawString("(not configured)", 120, 120); + } + + lcd.setTextColor(TFT_WHITE, TFT_BLACK); + lcd.drawString("New SSID:", 100, 170); + + lcd.fillSmoothRoundRect(100, 190, 600, 40, 6, TFT_ORANGE); + lcd.setTextColor(TFT_WHITE, TFT_ORANGE); + lcd.setTextDatum(textdatum_t::middle_left); + String ssidDisplay = String(keyboardBuffer); + if (ssidDisplay.length() == 0) ssidDisplay = "_"; + lcd.drawString(ssidDisplay, 120, 210); + + lcd.setTextColor(TFT_WHITE, TFT_BLACK); + lcd.drawString("Password:", 100, 260); + + lcd.fillSmoothRoundRect(100, 280, 600, 40, 6, TFT_DARKGRAY); + lcd.setTextColor(TFT_GRAY, TFT_DARKGRAY); + lcd.setTextDatum(textdatum_t::middle_left); + lcd.drawString("(tap to enter)", 120, 300); + + drawKeyboard(350); + + lcd.fillSmoothRoundRect(100, SCREEN_HEIGHT - 50, 150, 40, 8, TFT_GRAY); + lcd.setTextColor(TFT_WHITE, TFT_GRAY); + lcd.setFont(&fonts::DejaVu18); + lcd.setTextDatum(textdatum_t::middle_center); + lcd.drawString("BACK", 175, SCREEN_HEIGHT - 30); + + lcd.fillSmoothRoundRect(SCREEN_WIDTH - 250, SCREEN_HEIGHT - 50, 150, 40, 8, TFT_GREEN); + lcd.setTextColor(TFT_WHITE, TFT_GREEN); + lcd.drawString("SAVE", SCREEN_WIDTH - 175, SCREEN_HEIGHT - 30); +} + void drawDashboard() { lcd.fillScreen(TFT_BLACK); @@ -766,6 +826,36 @@ bool handleStockCustomizeTouch(int32_t x, int32_t y) { return false; } +bool handleWifiConfigTouch(int32_t x, int32_t y) { + if (x >= 100 && x < 250 && y >= SCREEN_HEIGHT - 50 && y < SCREEN_HEIGHT - 10) { + currentScreen = SCREEN_DASHBOARD; + needsRefresh = true; + return true; + } + + if (x >= SCREEN_WIDTH - 250 && x < SCREEN_WIDTH - 100 && y >= SCREEN_HEIGHT - 50 && y < SCREEN_HEIGHT - 10) { + if (keyboardPos > 0) { + preferences.begin("wifi", false); + preferences.putString("ssid", keyboardBuffer); + preferences.end(); + currentScreen = SCREEN_DASHBOARD; + needsRefresh = true; + } + return true; + } + + if (x >= 100 && x < 700 && y >= 190 && y < 230) { + return true; + } + + int keyboardY = 350; + if (handleKeyboardTouch(x, y, keyboardY)) { + return true; + } + + return false; +} + bool handleIndexCustomizeTouch(int32_t x, int32_t y) { int listY = 60; int itemHeight = 40; @@ -872,7 +962,14 @@ bool handleDashboardTouch(int32_t x, int32_t y) { keyboardBuffer[0] = '\0'; return true; } - + + if (x >= 20 && x < 200 && y >= SCREEN_HEIGHT - 40 && y < SCREEN_HEIGHT) { + currentScreen = SCREEN_WIFI_CONFIG; + keyboardPos = 0; + keyboardBuffer[0] = '\0'; + return true; + } + return true; } @@ -974,6 +1071,9 @@ void loop() { case SCREEN_CUSTOMIZE_INDICES: handleIndexCustomizeTouch(x, y); break; + case SCREEN_WIFI_CONFIG: + handleWifiConfigTouch(x, y); + break; } if (!needsRefresh) { @@ -989,6 +1089,9 @@ void loop() { case SCREEN_CUSTOMIZE_INDICES: drawIndexCustomizeScreen(); break; + case SCREEN_WIFI_CONFIG: + drawWifiConfigScreen(); + break; } }