e7e173d3b7
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>
337 lines
9.5 KiB
C++
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
|