Files
klubhaus-doorbell/sketches/doorbell-touch-esp32-32e/Dashboard.h
2026-02-16 19:05:13 -08:00

54 lines
1.3 KiB
C++

#pragma once
#include <TFT_eSPI.h>
// Grid layout constants
#define DASH_COLS 3
#define DASH_ROWS 2
#define DASH_MARGIN 8
#define DASH_TOP_BAR 40
// Tile dimensions (calculated for 480x320)
#define TILE_W ((480 - (DASH_COLS + 1) * DASH_MARGIN) / DASH_COLS) // ~148
#define TILE_H ((320 - DASH_TOP_BAR - (DASH_ROWS + 1) * DASH_MARGIN) / DASH_ROWS) // ~128
// Tile IDs
enum TileID : uint8_t {
TILE_LAST_ALERT = 0,
TILE_STATS,
TILE_NETWORK,
TILE_MUTE,
TILE_HISTORY,
TILE_SYSTEM,
TILE_COUNT
};
struct TileData {
const char* icon; // emoji/symbol character
const char* label; // tile name
char value[32]; // dynamic value text
char sub[32]; // secondary line
uint16_t bgColor;
uint16_t fgColor;
bool dirty; // needs redraw
};
class Dashboard {
public:
Dashboard(TFT_eSPI& tft);
void begin();
void drawAll();
void drawTopBar(const char* time, int rssi, bool wifiOk);
void updateTile(TileID id, const char* value, const char* sub = nullptr);
int handleTouch(int x, int y); // returns TileID or -1
private:
TFT_eSPI& _tft;
TFT_eSprite _sprite;
TileData _tiles[TILE_COUNT];
void drawTile(TileID id);
void tilePosition(TileID id, int& x, int& y);
};