Files
Max Gramser e7e173d3b7 Give a lamp's modes a page: the effects, palettes, presets, speed and intensity of a WLED behind its colour card, with a drum picker and the effect's name on the tile (0.2.83)
A light that offers effects gets a sparkles key at the top right of its colour
card. It opens a page with a row per thing the lamp offers, all from Home
Assistant: the light's effect and the select entities of its device (a WLED's
colour palette, preset and playlist) with what they are set to, and a slider per
number entity of the device (speed, intensity). Names are Home Assistant's own
English entity translations, icons its frontend's; nothing about a brand is
hardcoded beyond a preferred order of translation keys.

A row opens LVGL's roller with every name Home Assistant lists at that moment,
asked for when the picker opens (esphome.screen_options, answered with
op: options, one page of names per message), the effects alphabetically with
Solid on top. The check key at the top right sends the choice as one action;
the back key sends nothing. A slider sends number.set_value when let go. While
an effect runs, the tile names it instead of the brightness.

Firmware 0.2.70: effects_page.h (built when it opens, gone when it closes),
Extra.effect/option_rows/number_rows, options_request, a hidden roller widget
so ESPHome compiles LVGL's roller, five firmware-only glyphs. App 0.2.83:
light_effects.py, the effect attribute, the device rows in the state message,
card_options_loop. Checked on the host with a virtual finger (35/35 on both
boards) and compiled for both ESP32 boards; CYD 1,675,424 B (91.3 %).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 21:38:20 +02:00

337 lines
9.5 KiB
C++

#pragma once
// GENERATED by tools/generate_icons.py from screen_manager/app/tile_icons.py; do not edit.
#include <cstdint>
#include <string>
namespace tile_icon {
struct Named { const char *name; uint32_t codepoint; };
// Every glyph the three icon fonts of both boards carry, by Material Design Icons name.
inline constexpr Named NAMES[] = {
{"lightbulb", 0xF0335},
{"lightbulb-group", 0xF1253},
{"ceiling-light", 0xF0769},
{"chandelier", 0xF1793},
{"lamp", 0xF06B5},
{"floor-lamp", 0xF08DD},
{"desk-lamp", 0xF095F},
{"wall-sconce-flat", 0xF091D},
{"light-recessed", 0xF179B},
{"spotlight-beam", 0xF04C9},
{"led-strip-variant", 0xF1051},
{"outdoor-lamp", 0xF1054},
{"home", 0xF02DC},
{"sofa", 0xF04B9},
{"bed", 0xF02E3},
{"silverware-fork-knife", 0xF0A70},
{"chef-hat", 0xF0B7C},
{"shower", 0xF09A0},
{"bathtub", 0xF1818},
{"toilet", 0xF09AB},
{"desk", 0xF1239},
{"garage", 0xF06D9},
{"fireplace", 0xF0E2E},
{"thermometer", 0xF050F},
{"thermostat", 0xF0393},
{"air-conditioner", 0xF001B},
{"radiator", 0xF0438},
{"heat-pump", 0xF1A43},
{"fire", 0xF0238},
{"snowflake", 0xF0717},
{"water-percent", 0xF058E},
{"fan", 0xF0210},
{"ceiling-fan", 0xF1797},
{"air-purifier", 0xF0D44},
{"molecule-co2", 0xF07E4},
{"weather-sunny", 0xF0599},
{"weather-partly-cloudy", 0xF0595},
{"weather-cloudy", 0xF0590},
{"weather-rainy", 0xF0597},
{"weather-snowy", 0xF0598},
{"weather-windy", 0xF059D},
{"weather-night", 0xF0594},
{"weather-sunset-up", 0xF059C},
{"music-note", 0xF0387},
{"music", 0xF075A},
{"playlist-music", 0xF0CB8},
{"album", 0xF0025},
{"record-player", 0xF099A},
{"spotify", 0xF04C7},
{"radio", 0xF0439},
{"podcast", 0xF0994},
{"speaker", 0xF04C3},
{"speaker-multiple", 0xF0D38},
{"soundbar", 0xF17DB},
{"headphones", 0xF02CB},
{"piano", 0xF067D},
{"guitar-acoustic", 0xF0771},
{"television", 0xF0502},
{"projector", 0xF042E},
{"movie-open", 0xF0FCE},
{"cast", 0xF0118},
{"gamepad-variant", 0xF0297},
{"remote-tv", 0xF0EC5},
{"lock", 0xF033E},
{"lock-open-variant", 0xF0FC6},
{"shield-home", 0xF068A},
{"alarm-light", 0xF078F},
{"bell", 0xF009A},
{"doorbell", 0xF12E6},
{"cctv", 0xF07AE},
{"motion-sensor", 0xF0D91},
{"door-closed", 0xF081B},
{"door-open", 0xF081C},
{"window-closed-variant", 0xF11DB},
{"smoke-detector", 0xF0392},
{"water-alert", 0xF1502},
{"washing-machine", 0xF072A},
{"tumble-dryer", 0xF0917},
{"dishwasher", 0xF0AAC},
{"fridge", 0xF0290},
{"stove", 0xF04DE},
{"microwave", 0xF0C99},
{"toaster-oven", 0xF0CD3},
{"coffee-maker", 0xF109F},
{"kettle", 0xF05FA},
{"robot-vacuum", 0xF070D},
{"robot-mower", 0xF11F7},
{"printer-3d", 0xF042B},
{"power-plug", 0xF06A5},
{"power-socket-eu", 0xF07E7},
{"laptop", 0xF0322},
{"router-wireless", 0xF0469},
{"flash", 0xF0241},
{"solar-power", 0xF0A72},
{"solar-panel", 0xF0D9B},
{"home-battery", 0xF1901},
{"battery-high", 0xF12A3},
{"ev-station", 0xF05F1},
{"car-electric", 0xF0B6C},
{"meter-electric", 0xF1A57},
{"meter-gas", 0xF1A59},
{"water", 0xF058C},
{"water-boiler", 0xF0F92},
{"gauge", 0xF029A},
{"window-shutter", 0xF111C},
{"window-shutter-open", 0xF111E},
{"blinds", 0xF00AC},
{"blinds-open", 0xF1011},
{"roller-shade-closed", 0xF1A6C},
{"curtains", 0xF1846},
{"curtains-closed", 0xF1847},
{"awning-outline", 0xF1B88},
{"flower", 0xF024A},
{"tree", 0xF0531},
{"sprout", 0xF0E66},
{"grass", 0xF1510},
{"sprinkler", 0xF105F},
{"pool", 0xF0606},
{"grill", 0xF0E45},
{"mailbox", 0xF06EE},
{"trash-can", 0xF0A79},
{"recycle", 0xF044C},
{"dog", 0xF0A43},
{"cat", 0xF011B},
{"account", 0xF0004},
{"account-group", 0xF0849},
{"account-child", 0xF0A89},
{"home-account", 0xF0826},
{"sleep", 0xF04B2},
{"run", 0xF070E},
{"briefcase", 0xF00D6},
{"car", 0xF010B},
{"bike", 0xF00A3},
{"airplane", 0xF001D},
{"map-marker", 0xF034E},
{"power", 0xF0425},
{"toggle-switch", 0xF0521},
{"gesture-tap-button", 0xF12A8},
{"play", 0xF040A},
{"script-text", 0xF0BC2},
{"palette", 0xF03D8},
{"alarm", 0xF0020},
{"clock-outline", 0xF0150},
{"timer-outline", 0xF051B},
{"calendar", 0xF00ED},
{"bell-ring", 0xF009E},
{"heart", 0xF02D1},
{"alert-outline", 0xF002A},
{"cog", 0xF0493},
{"broom", 0xF00E2},
{"alert-circle-outline", 0xF05D6},
{"check", 0xF012C},
{"pause", 0xF03E4},
{"stop", 0xF04DB},
{"skip-next", 0xF04AD},
{"skip-previous", 0xF04AE},
{"volume-high", 0xF057E},
{"volume-off", 0xF0581},
{"arrow-up", 0xF005D},
{"arrow-down", 0xF0045},
{"arrow-expand-horizontal", 0xF084E},
{"arrow-collapse-horizontal", 0xF084C},
{"home-map-marker", 0xF05F8},
{"plus", 0xF0415},
{"minus", 0xF0374},
{"chevron-left", 0xF0141},
{"chevron-right", 0xF0142},
{"close", 0xF0156},
{"arrow-left", 0xF004D},
{"sun-snowflake-variant", 0xF1A79},
{"thermostat-auto", 0xF1B17},
{"weather-fog", 0xF0591},
{"weather-hail", 0xF0592},
{"weather-lightning", 0xF0593},
{"weather-lightning-rainy", 0xF067E},
{"weather-pouring", 0xF0596},
{"weather-snowy-rainy", 0xF067F},
{"weather-sunset-down", 0xF059B},
{"dots-horizontal", 0xF01D8},
{"arrow-oscillating", 0xF1C91},
{"monitor", 0xF0379},
{"information-outline", 0xF02FD},
{"restart", 0xF0709},
{"lightbulb-off", 0xF0E4F},
{"account-arrow-right", 0xF0B53},
{"air-filter", 0xF0D43},
{"air-humidifier", 0xF1099},
{"air-humidifier-off", 0xF1466},
{"alert-circle", 0xF0028},
{"angle-acute", 0xF0937},
{"arrow-bottom-left", 0xF0042},
{"arrow-bottom-right", 0xF0043},
{"arrow-down-box", 0xF06C0},
{"arrow-left-right", 0xF0E73},
{"arrow-right", 0xF0054},
{"arrow-split-vertical", 0xF093C},
{"arrow-top-left", 0xF005B},
{"arrow-top-right", 0xF005C},
{"arrow-up-box", 0xF06C3},
{"audio-video", 0xF093D},
{"audio-video-off", 0xF11B6},
{"battery", 0xF0079},
{"battery-10", 0xF007A},
{"battery-20", 0xF007B},
{"battery-30", 0xF007C},
{"battery-40", 0xF007D},
{"battery-50", 0xF007E},
{"battery-60", 0xF007F},
{"battery-70", 0xF0080},
{"battery-80", 0xF0081},
{"battery-90", 0xF0082},
{"battery-alert", 0xF0083},
{"battery-charging", 0xF0084},
{"battery-outline", 0xF008E},
{"battery-unknown", 0xF0091},
{"blinds-horizontal", 0xF1A2B},
{"blinds-horizontal-closed", 0xF1A2C},
{"bluetooth", 0xF00AF},
{"bluetooth-connect", 0xF00B1},
{"brightness-5", 0xF00DE},
{"brightness-7", 0xF00E0},
{"button-pointer", 0xF1B50},
{"car-battery", 0xF010C},
{"car-coolant-level", 0xF1019},
{"cash", 0xF0114},
{"cast-connected", 0xF0119},
{"cast-off", 0xF078A},
{"check-circle", 0xF05E0},
{"check-circle-outline", 0xF05E1},
{"check-network-outline", 0xF0C54},
{"checkbox-marked-circle", 0xF0133},
{"circle-slice-8", 0xF0AA5},
{"clock", 0xF0954},
{"clock-start", 0xF0155},
{"close-circle-outline", 0xF015A},
{"close-network-outline", 0xF0C5F},
{"compass-rose", 0xF1382},
{"crop-portrait", 0xF01A1},
{"crosshairs-question", 0xF1136},
{"current-ac", 0xF1480},
{"database", 0xF01BC},
{"ear-hearing", 0xF07C5},
{"eye", 0xF0208},
{"eye-check", 0xF0D04},
{"fan-off", 0xF081D},
{"format-list-bulleted", 0xF0279},
{"garage-open", 0xF06DA},
{"gate", 0xF0299},
{"gate-open", 0xF116A},
{"home-outline", 0xF06A1},
{"lan-connect", 0xF0318},
{"lan-disconnect", 0xF0319},
{"lightning-bolt", 0xF140B},
{"lock-alert", 0xF08EE},
{"lock-clock", 0xF097F},
{"lock-open", 0xF033F},
{"molecule", 0xF0BAC},
{"molecule-co", 0xF12FE},
{"motion-sensor-off", 0xF1435},
{"music-note-off", 0xF038A},
{"octagon", 0xF03C3},
{"package", 0xF03D3},
{"package-up", 0xF03D5},
{"ph", 0xF17C5},
{"pipe-valve", 0xF184D},
{"power-plug-off", 0xF06A6},
{"progress-clock", 0xF0996},
{"projector-off", 0xF1A23},
{"radioactive", 0xF043C},
{"ray-vertex", 0xF0445},
{"roller-shade", 0xF1A6B},
{"script-text-play", 0xF1727},
{"security", 0xF0483},
{"shield", 0xF0498},
{"shield-airplane", 0xF06BB},
{"shield-lock", 0xF099D},
{"shield-moon", 0xF1828},
{"shield-off", 0xF099E},
{"shield-outline", 0xF0499},
{"sine-wave", 0xF095B},
{"smoke-detector-alert", 0xF192E},
{"smoke-detector-variant", 0xF180B},
{"smoke-detector-variant-alert", 0xF1930},
{"speaker-off", 0xF04C4},
{"speaker-pause", 0xF1B73},
{"speaker-play", 0xF1B72},
{"speedometer", 0xF04C5},
{"creation", 0xF0674},
{"palette-outline", 0xF0E0C},
{"playlist-play", 0xF0411},
{"play-speed", 0xF08FF},
{"brightness-6", 0xF00DF},
{"spoon-sugar", 0xF1429},
{"sprout-outline", 0xF0E67},
{"square", 0xF0764},
{"square-outline", 0xF0763},
{"storage-tank", 0xF1A75},
{"sun-wireless", 0xF17FE},
{"television-off", 0xF083B},
{"television-pause", 0xF0F89},
{"television-play", 0xF0ECF},
{"texture-box", 0xF0FE6},
{"thermometer-lines", 0xF0510},
{"toggle-switch-variant", 0xF1A25},
{"toggle-switch-variant-off", 0xF1A26},
{"transmission-tower", 0xF0D3E},
{"vibrate", 0xF0566},
{"water-boiler-off", 0xF11B4},
{"water-off", 0xF058D},
{"water-opacity", 0xF1855},
{"weight", 0xF05A1},
{"wifi", 0xF05A9},
{"window-closed", 0xF05AE},
{"window-open", 0xF05B1},
};
inline constexpr size_t NAME_COUNT = sizeof(NAMES) / sizeof(NAMES[0]);
// Codepoint of a name the fonts carry; 0 for any other name.
inline uint32_t named(const std::string &name) {
for (const auto &entry : NAMES) if (name == entry.name) return entry.codepoint;
return 0;
}
// True when the fonts carry this codepoint, so a label can draw it.
inline bool carried(uint32_t codepoint) {
for (const auto &entry : NAMES) if (entry.codepoint == codepoint) return true;
return false;
}
} // namespace tile_icon