From 6a8b74a65245e5041069a4863fe66d4091a6a289 Mon Sep 17 00:00:00 2001 From: Thomas Peterson Date: Mon, 2 Feb 2026 17:16:23 +0100 Subject: [PATCH] Backup --- .../RoomCardWidget.cpp.FA613078500AD19C.idx | Bin 11326 -> 11514 bytes .../index/SdCard.cpp.485103BC6CBAC699.idx | Bin 7192 -> 7192 bytes .../WidgetConfig.cpp.FD56F9F36C29A5DA.idx | Bin 12862 -> 14508 bytes .../WidgetConfig.hpp.CAEFE2EEEB2A6996.idx | Bin 17280 -> 18036 bytes .../WidgetFactory.cpp.1026CAEFCA630F22.idx | Bin 3580 -> 3696 bytes .../WidgetManager.cpp.D8CE609DC911F13E.idx | Bin 55998 -> 61932 bytes .../index/main.cpp.7C677863E2582AB3.idx | Bin 7996 -> 8640 bytes main/WidgetConfig.cpp | 9 +- main/WidgetConfig.hpp | 6 +- main/WidgetManager.cpp | 14 + main/widgets/RoomCardWidget.cpp | 373 ++++++++++++++++-- main/widgets/RoomCardWidget.hpp | 22 +- web-interface/src/components/SidebarRight.vue | 16 +- .../src/components/WidgetElement.vue | 106 ++++- web-interface/src/constants.js | 2 + web-interface/src/utils.js | 8 + 16 files changed, 500 insertions(+), 56 deletions(-) diff --git a/.cache/clangd/index/RoomCardWidget.cpp.FA613078500AD19C.idx b/.cache/clangd/index/RoomCardWidget.cpp.FA613078500AD19C.idx index b333027a31bd8dc859ec88aaa74161cc13399245..cb965a0b9036e4469c1b8fac3646ee0b57964b0d 100644 GIT binary patch delta 7127 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 QHf^4H)y(Sm#w~^a1M$%rUH||9 diff --git a/.cache/clangd/index/SdCard.cpp.485103BC6CBAC699.idx b/.cache/clangd/index/SdCard.cpp.485103BC6CBAC699.idx index 9e3876560fc130a45867d7dc3aafc414fb41497f..8658428ecc6e3d3a4a06161233c77b52a5c51269 100644 GIT binary patch delta 48 zcmV-00MGxJIG8xF6bTT{HFBr(Gx8q+49Ec|7$+>V3<=){vjY*_2?(o$U4e;j|5LN) G8ZiN^N)gup delta 56 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 bRW)@DO)Y%`u`;c48Qnoy=n7&!30C+Y*U->M delta 7112 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 diff --git a/.cache/clangd/index/WidgetConfig.hpp.CAEFE2EEEB2A6996.idx b/.cache/clangd/index/WidgetConfig.hpp.CAEFE2EEEB2A6996.idx index 374d28d7157ae16aa850f5f5f377b8c89da7e504..c4b43ebc70ddb88ec9d7e8e7d7757284e094a1f4 100644 GIT binary patch literal 18036 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 literal 17280 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 literal 3580 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 diff --git a/.cache/clangd/index/WidgetManager.cpp.D8CE609DC911F13E.idx b/.cache/clangd/index/WidgetManager.cpp.D8CE609DC911F13E.idx index 6a7ec3f95421e3ba57d1b1a0be02a5cb90c45805..4d2b1d912976f0d8eb7a1e885c94e529e043c309 100644 GIT binary patch literal 61932 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 H^TPiF^{f$B literal 55998 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 dEMaBmAaimp;};NQ!V3>iW~hGckD5(y1Ni9GeB z!H}teQc)_DBzk!C`<`0I@4KwuTEG9hYjrxGZSQ^d-e;eE_W9bFo0zDH69`88&FKLi zVQx$W0)c}43k?hLF<>DOHmVW`^x~F6mx$3SzQ1N2x+j&khYy7YdTkW9IUaD{w>kCC z`EE8g#?%3(-TL**^AX(N2f7DFhV|bW2OnMDM{%utHVR&WI2k9(dW8)0)_=aVGwT25 z!1W@3m&fEK9sOLwxlSEwb5l{znEb!ovO(nN%$$`4mD}Dz8PP7@&M2(+NOS;PF ztaqeSDW|$~yrcdMR7^By@G{p*6I&e5&wa#r$6IT2&D{4rE@8^rI&l{UdSWA8>06Iq ziurKo*!$0$InLHxYccssFddUE75D8H;(WC~gvG1v+Jz<6sp*j(#n-i?cW454tjR0FmVq&!6vZ&@wl&LFgm`(CI5+GNfzmV(U zaXgjXWLDeJ(D>A7-}(aymApsg0C#uBNH#^pdem=c@m9ARZr)O%xz{T8H&3ha>agaelN?zf0 znMsoR$@k?t`*w&_PnJKv9aghG&)-3~(pU2OfUfMZrZ~ed%)x0jSr)~Iaxc-x1sXZ; z?{&5CpWcuelt{IV!(tdlO({2}=wXWl^ljqZpH0{^d-JX^>l8pJ-{QMM_=*iqWLjBV8ZESal7PluJ z&X@LRKie>!`zG&Ng0B1Z`gfO8uV3zYtUOn(7MvV;&GggW99z$vg>b|A^~C4JZJKHo zffD14Qj)nnT&m29{uyDl(c1^pLfGQ63zFuw?LXGbNZN$H&6JkBPqS>>cq09266=OD zp0a0*ZxrRnUOjGf_~zZs-66jGq9v|3)E~WGdf`b8t{ZzMnw4J}c2!Rxqvn>}iS8TK zr{{pLdDdl?_cm`o)_1kpOI%3tFaKVtHCs3BLklQ(4!JpK6<8Ux?(^}T5k@n-{bzNm z7OeV|{T}N(TdM5bS!y(UqVr_Ni3tY>GUrOij?w_RbpLHl^k6}|>T5?LQ*)h0I!9WD z--QL(YMUD$ISmbwNpT;Wr1L zQNOccPh75S*q$fXTi06YlN#~*Z_{h@<04aukCeQYl~Q{AHcsSB&ZsSDWjwK<}&e*q+J$R8GH% z)V;QjpOlxGiYz#5kH;_{O}aI8P_H~y{cq{9f4+jD?3kgRr}4+gQt62^cT3x24|p}k z+w+pS5k^-H3HHQB3~Gob9iX$|ik17!0rqt@axuT9=RO!+&B<&(8T)T(o!Ag)~q!!d;Z}!S<_U^MU=U85czogbccTjj6i_gyhb) z37Px$Z9A~*zTZi~5#dZ{KlwdW*TsxCmNs>~W5Vkae>YA#xb9;Zb9SZFP$F9a3v08% zW|ntia;(jt|9ag{tyRm`uIM@)!fAGvzERaZFnxX}b4KCp)q?L5irk8YHs7xHfBfn? zT^$iTe{Fbcly8RKu+6tV#%*IUZ4)XkQEbzPS5){j8*7RqqW-KqpBMOTs`TZAlHAfC z>pBC*Gk-rlVtQL~w)cMGXI-yZ)hnaUgZ{g34(?0i%By$fb!)2o${@L|P@OV+{ojv8 zM-$`jnjJVgGd~l)Z^iY9-TwV1FONRDzHnae)B~dq?dX~J1q(A>-(Gm7#9n&ju#);% z%|@~4WX5Lu;qUU1!3^K@#(RR6%IbK|9$!pRtr=2qc~W09!Jd7$oJ()uVMDs(d|1!h zw0jM4ADY6S*wXaLje{jcl`S=24u?thXDsX7^nIy-Z8e?V zp$t!z>*t)GySKFPr=7~|?o;%gP%nt*J#^%*1>L`f=Ae3MOI74|W)T z`Jse|#KY4I;D|U@c3BE(QVK3|Fx>vBB!Uz{=>>2^EF6az$2&U~>RA|Ce<%@KC&t|i z;D|W%G%G?w8XpgFF+BUJ#Cp9osTaTzu?(y?eY^ZtYLbKD=}(p@Viaa991%;1hiB+9 z%rFY@uY62@$-scAFejNyqIhD^kK`wb7PFo#(`3K7$PAczfxN7|5n^**Wb?T>FT)Dy zw9T|X5WOLtv7$Ipi4|aaw1`^Vh+Y={rYbCiN`iE0c4=Nj|97;)+psW$9nxKiuIy;t zj>*ztzsyVQP``?*iWB0`KgX9i`&5X$mVRYh)*C|o2QqX=g{ZOt@vjkA67PM{mY>KE zmy2SGVnG2D`IbE`8_^-K)*U0of$N`jF9@z(?q1$rCt+5C@DH;&T`99 zG{b^qv6=uFbR;>h!aGa%f|l~?EIIe$$^<;Of=>~`Y~umGULHP7y}%%BwFH`cae7SpvYme_C$Lw9E1VG zK_{XU{;w`X7d&($y5XTG(Gw2?iGg?+L=3{iSf<$32xJ{Jk35?^wq@lx0Ve#30R`=7ocL3VJFCVh0FbALsx* zaS=5-U)AIF3x@ZG@8DyRv_$W<;nh&I$~JUt@P&y@BhqA0WVS~iiD?>{Jpk#uMRu#A zgePwq(wSTk3|gz_>7lGZT^lR{?nHMsloeRSVCRO;FXIj`o$j7G z>;~)wI^sGsB>vGimqP>n zX;ypz+;rG4p`2+O83~^wI~KBGbl8I-ItF16hJ&!_!a>+&;UH|Qa1gdtI0)M+9E5EZ z4#Kty2Vq-UbHc3_ekA7K0P(v1_4SJR_V&XDH8BRpUAeBU= zAc)xjUuvjmB+K;b7sU~4;pxUdeP+B~SL(+3)-q$_fHe8>^X#&dbI0^*mUgM1`DE~Hak<|wUjy7elg3vdbWAo{w{iZj~d7we(p zuz^P|U=TL&2wI0~>c`7B)leZNl&77SSz|Xm_x`>I&;( zpSgejP+;I@;UBCRTO44D1Dxo>3QFJp!613D0WK>~lovBv29_5IX$wq3D#Hr4f;w*KL+Vc^!2Fa zyJbzy+-SS$7E~L-6v2klfa3AxYmj(l>sqxHA3&b(UfDZ8$~MV#)oe`Mo8&Eytcn8l z&kW;p+JC_!lpY`OFHcE*JB*kNm(1#uu7t{6m8E*P1Ja#|&fF*z{n5RwhxYb%!iYIY zJ8VF73`R0VvY^}9*p)vx>Y!}b+LKh|GOpBCN_+G}t(fy~Nc`AsPJz(kWBrg$<)N;= zd!zf^h161_2O%Bi14_(iGRnS_p3et=!5w+AG`;^_{DsHRW%zvrxvZI!9zizv{`5x? zq6kVLI>u%~F~LJGiWeRRPy+BUgg-pv3RvKWrmPvmqrd`OGnMhPm%x;`1``vZJ*il;+)t;Iw($&aMdV z4^Z5h;w+5Rit4RIyNt3-K)NrY!6BkRP*oj3*cPF{8-g$%&4}UkfTcIKQLZ{%QANvG~et+ZU z_i^)1+`Jt(AHdBY;N}l;^Lw~?A8y`-n|I*mcX9J>+`Q+%bI=QpUD&c{H^VK+^*3k- zcR@cG03Dzk+y_0N6FdZuzyr_+x&XHLqyNh73)t@uFxU)kft!Glfs30=;SmrN5*85^ z6PJ*bItH@93G5#A^AGU$@eMRFH8VEB?fff{fTTmaSJD!2@)Ks~qy8o_zc1R5|GnV8qHvXR(1IC=T_ SS%~YegFB!O+yI~j5dH&=?zHRx diff --git a/main/WidgetConfig.cpp b/main/WidgetConfig.cpp index 173bc58..b732e00 100644 --- a/main/WidgetConfig.cpp +++ b/main/WidgetConfig.cpp @@ -108,6 +108,8 @@ void WidgetConfig::serialize(uint8_t* buf) const { buf[pos++] = subButtonCount; buf[pos++] = subButtonSize; buf[pos++] = subButtonDistance; + buf[pos++] = subButtonOpacity; + buf[pos++] = cardStyle; for (size_t i = 0; i < MAX_SUBBUTTONS; ++i) { const SubButtonConfig& sb = subButtons[i]; buf[pos++] = sb.iconCodepoint & 0xFF; @@ -253,17 +255,22 @@ void WidgetConfig::deserialize(const uint8_t* buf) { } // RoomCard sub-buttons - if (pos + 3 <= SERIALIZED_SIZE) { + if (pos + 5 <= SERIALIZED_SIZE) { subButtonCount = buf[pos++]; if (subButtonCount > MAX_SUBBUTTONS) subButtonCount = MAX_SUBBUTTONS; subButtonSize = buf[pos++]; if (subButtonSize == 0) subButtonSize = 40; // Default subButtonDistance = buf[pos++]; if (subButtonDistance == 0) subButtonDistance = 80; // Default 80px + subButtonOpacity = buf[pos++]; + if (subButtonOpacity == 0) subButtonOpacity = 255; // Default fully opaque + cardStyle = buf[pos++]; // 0=Bubble, 1=Tile } else { subButtonCount = 0; subButtonSize = 40; subButtonDistance = 80; + subButtonOpacity = 255; + cardStyle = 0; // Default to Bubble style } for (size_t i = 0; i < MAX_SUBBUTTONS; ++i) { diff --git a/main/WidgetConfig.hpp b/main/WidgetConfig.hpp index 0bf58b4..4680094 100644 --- a/main/WidgetConfig.hpp +++ b/main/WidgetConfig.hpp @@ -256,11 +256,13 @@ struct WidgetConfig { uint8_t subButtonCount; uint8_t subButtonSize; // Sub-button size in pixels (default 40) uint8_t subButtonDistance; // Distance from center in pixels (default 80) + uint8_t subButtonOpacity; // Sub-button opacity 0-255 (default 255) + uint8_t cardStyle; // 0=Bubble (round), 1=Tile (rectangular) SubButtonConfig subButtons[MAX_SUBBUTTONS]; // Serialization size (fixed for NVS storage) - // 197 + 1 (subButtonCount) + 1 (subButtonSize) + 1 (subButtonDistance) + 120 (6 subButtons * 20) = 320 - static constexpr size_t SERIALIZED_SIZE = 320; + // 197 + 1 (subButtonCount) + 1 (subButtonSize) + 1 (subButtonDistance) + 1 (subButtonOpacity) + 1 (cardStyle) + 120 (6 subButtons * 20) = 322 + static constexpr size_t SERIALIZED_SIZE = 322; void serialize(uint8_t* buf) const; void deserialize(const uint8_t* buf); diff --git a/main/WidgetManager.cpp b/main/WidgetManager.cpp index c01a23a..696cabf 100644 --- a/main/WidgetManager.cpp +++ b/main/WidgetManager.cpp @@ -1608,6 +1608,8 @@ void WidgetManager::getConfigJson(char* buf, size_t bufSize) const { if (w.type == WidgetType::ROOMCARD) { cJSON_AddNumberToObject(widget, "subButtonSize", w.subButtonSize); cJSON_AddNumberToObject(widget, "subButtonDistance", w.subButtonDistance); + cJSON_AddNumberToObject(widget, "subButtonOpacity", w.subButtonOpacity); + cJSON_AddNumberToObject(widget, "cardStyle", w.cardStyle); } if (w.type == WidgetType::ROOMCARD && w.subButtonCount > 0) { cJSON* subButtons = cJSON_AddArrayToObject(widget, "subButtons"); @@ -1956,6 +1958,18 @@ bool WidgetManager::updateConfigFromJson(const char* json) { } else { w.subButtonDistance = 80; // Default 80px } + cJSON* subButtonOpacity = cJSON_GetObjectItem(widget, "subButtonOpacity"); + if (cJSON_IsNumber(subButtonOpacity)) { + w.subButtonOpacity = subButtonOpacity->valueint; + } else { + w.subButtonOpacity = 255; // Default fully opaque + } + cJSON* cardStyle = cJSON_GetObjectItem(widget, "cardStyle"); + if (cJSON_IsNumber(cardStyle)) { + w.cardStyle = cardStyle->valueint; + } else { + w.cardStyle = 0; // Default to Bubble style + } // RoomCard sub-buttons cJSON* subButtons = cJSON_GetObjectItem(widget, "subButtons"); diff --git a/main/widgets/RoomCardWidget.cpp b/main/widgets/RoomCardWidget.cpp index 72ef22d..b6347cd 100644 --- a/main/widgets/RoomCardWidget.cpp +++ b/main/widgets/RoomCardWidget.cpp @@ -14,11 +14,39 @@ RoomCardWidget::RoomCardWidget(const WidgetConfig& config) { roomName_[0] = '\0'; tempFormat_[0] = '\0'; + subtitle_[0] = '\0'; + humidityFormat_[0] = '\0'; for (size_t i = 0; i < MAX_SUBBUTTONS; ++i) { subButtonStates_[i] = false; } } +RoomCardWidget::~RoomCardWidget() { + // Sub-buttons are on screen parent, not on obj_, so delete them explicitly + for (size_t i = 0; i < MAX_SUBBUTTONS; ++i) { + if (subButtonObjs_[i] && lv_obj_is_valid(subButtonObjs_[i])) { + lv_obj_delete(subButtonObjs_[i]); + subButtonObjs_[i] = nullptr; + } + } +} + +void RoomCardWidget::clearLvglObject() { + // Clear sub-button pointers (they'll be deleted when screen is cleaned) + for (size_t i = 0; i < MAX_SUBBUTTONS; ++i) { + subButtonObjs_[i] = nullptr; + subButtonIcons_[i] = nullptr; + } + bubble_ = nullptr; + roomIcon_ = nullptr; + roomLabel_ = nullptr; + tempLabel_ = nullptr; + subtitleLabel_ = nullptr; + humidityLabel_ = nullptr; + decorIcon_ = nullptr; + obj_ = nullptr; +} + int RoomCardWidget::encodeUtf8(uint32_t codepoint, char* buf) { if (codepoint < 0x80) { buf[0] = static_cast(codepoint); @@ -50,7 +78,11 @@ int RoomCardWidget::encodeUtf8(uint32_t codepoint, char* buf) { void RoomCardWidget::parseText() { roomName_[0] = '\0'; tempFormat_[0] = '\0'; + subtitle_[0] = '\0'; + humidityFormat_[0] = '\0'; + // Format for Bubble: "RoomName\nTempFormat" + // Format for Tile: "RoomName\nSubtitle" (temp/humidity via text2/text3) const char* text = config_.text; if (text && text[0] != '\0') { const char* newline = strchr(text, '\n'); @@ -59,13 +91,33 @@ void RoomCardWidget::parseText() { if (nameLen >= MAX_TEXT_LEN) nameLen = MAX_TEXT_LEN - 1; memcpy(roomName_, text, nameLen); roomName_[nameLen] = '\0'; - strncpy(tempFormat_, newline + 1, MAX_TEXT_LEN - 1); - tempFormat_[MAX_TEXT_LEN - 1] = '\0'; + + if (config_.cardStyle == 0) { + // Bubble: second line is temp format + strncpy(tempFormat_, newline + 1, MAX_TEXT_LEN - 1); + tempFormat_[MAX_TEXT_LEN - 1] = '\0'; + } else { + // Tile: second line is subtitle + strncpy(subtitle_, newline + 1, MAX_TEXT_LEN - 1); + subtitle_[MAX_TEXT_LEN - 1] = '\0'; + } } else { strncpy(roomName_, text, MAX_TEXT_LEN - 1); roomName_[MAX_TEXT_LEN - 1] = '\0'; } } + + // For Tile style, use text2 for temp format and text3 for humidity + if (config_.cardStyle == 1) { + if (config_.text2[0] != '\0') { + strncpy(tempFormat_, config_.text2, MAX_FORMAT_LEN - 1); + tempFormat_[MAX_FORMAT_LEN - 1] = '\0'; + } + if (config_.text3[0] != '\0') { + strncpy(humidityFormat_, config_.text3, MAX_FORMAT_LEN - 1); + humidityFormat_[MAX_FORMAT_LEN - 1] = '\0'; + } + } } void RoomCardWidget::calculateSubButtonPosition(SubButtonPosition pos, int16_t& x, int16_t& y) { @@ -86,26 +138,46 @@ void RoomCardWidget::calculateSubButtonPosition(SubButtonPosition pos, int16_t& y = centerY + static_cast(orbitRadius * sinf(angle)) - subBtnSize / 2; } +void RoomCardWidget::calculateSubButtonPositionTile(uint8_t index, int16_t& x, int16_t& y) { + // For Tile layout: buttons are stacked vertically on the right side + int16_t subBtnSize = config_.subButtonSize > 0 ? config_.subButtonSize : 40; + int16_t gap = 10; // Gap between buttons + int16_t padding = 12; // Padding from edge + + x = config_.width - subBtnSize - padding; + y = padding + index * (subBtnSize + gap); +} + lv_obj_t* RoomCardWidget::create(lv_obj_t* parent) { parseText(); + // Store parent for sub-buttons (they're created on screen level to avoid clipping) + screenParent_ = parent; + // Create main container obj_ = lv_obj_create(parent); lv_obj_remove_style_all(obj_); lv_obj_set_pos(obj_, config_.x, config_.y); lv_obj_set_size(obj_, config_.width, config_.height); lv_obj_clear_flag(obj_, LV_OBJ_FLAG_SCROLLABLE); + lv_obj_add_flag(obj_, LV_OBJ_FLAG_CLICKABLE); - // Create central bubble first - createCentralBubble(); + // Add click handler for navigation + lv_obj_add_event_cb(obj_, bubbleClickCallback, LV_EVENT_CLICKED, this); - // Create sub-buttons - createSubButtons(); + // Create layout based on card style + if (config_.cardStyle == 1) { + createTileLayout(); + createSubButtonsTile(); + } else { + createBubbleLayout(); + createSubButtons(); + } return obj_; } -void RoomCardWidget::createCentralBubble() { +void RoomCardWidget::createBubbleLayout() { // Calculate bubble size (80% of widget size, circular) int16_t minSide = config_.width < config_.height ? config_.width : config_.height; int16_t bubbleSize = (minSide * 80) / 100; @@ -154,6 +226,94 @@ void RoomCardWidget::createCentralBubble() { lv_obj_add_event_cb(bubble_, bubbleClickCallback, LV_EVENT_CLICKED, this); } +void RoomCardWidget::createTileLayout() { + // Tile style: rectangular card with rounded corners + lv_obj_set_style_radius(obj_, config_.borderRadius > 0 ? config_.borderRadius : 16, 0); + lv_obj_set_style_bg_opa(obj_, config_.bgOpacity, 0); + lv_obj_set_style_bg_color(obj_, lv_color_hex(config_.bgColor.toLvColor()), 0); + lv_obj_set_style_clip_corner(obj_, true, 0); + + int16_t padding = 16; + + // Room name (top-left, large) + roomLabel_ = lv_label_create(obj_); + lv_obj_clear_flag(roomLabel_, LV_OBJ_FLAG_CLICKABLE); + lv_label_set_text(roomLabel_, roomName_); + lv_obj_set_pos(roomLabel_, padding, padding); + + // Subtitle (below room name, smaller) + if (subtitle_[0] != '\0') { + subtitleLabel_ = lv_label_create(obj_); + lv_obj_clear_flag(subtitleLabel_, LV_OBJ_FLAG_CLICKABLE); + lv_label_set_text(subtitleLabel_, subtitle_); + lv_obj_set_pos(subtitleLabel_, padding, padding + 28); + } + + // Temperature row (with thermometer icon) + if (tempFormat_[0] != '\0') { + // Container for temp icon + value + lv_obj_t* tempRow = lv_obj_create(obj_); + lv_obj_remove_style_all(tempRow); + lv_obj_set_size(tempRow, LV_SIZE_CONTENT, LV_SIZE_CONTENT); + lv_obj_set_pos(tempRow, padding, padding + 56); + lv_obj_set_flex_flow(tempRow, LV_FLEX_FLOW_ROW); + lv_obj_set_flex_align(tempRow, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); + lv_obj_set_style_pad_gap(tempRow, 4, 0); + lv_obj_clear_flag(tempRow, LV_OBJ_FLAG_SCROLLABLE); + lv_obj_clear_flag(tempRow, LV_OBJ_FLAG_CLICKABLE); + + // Thermometer icon (U+E1FF or similar) + if (Fonts::hasIconFont()) { + lv_obj_t* tempIcon = lv_label_create(tempRow); + lv_obj_clear_flag(tempIcon, LV_OBJ_FLAG_CLICKABLE); + char iconText[5]; + encodeUtf8(0xf076, iconText); // thermometer icon + lv_label_set_text(tempIcon, iconText); + } + + tempLabel_ = lv_label_create(tempRow); + lv_obj_clear_flag(tempLabel_, LV_OBJ_FLAG_CLICKABLE); + lv_label_set_text(tempLabel_, "--"); + } + + // Humidity row (with water drop icon) + if (humidityFormat_[0] != '\0') { + lv_obj_t* humRow = lv_obj_create(obj_); + lv_obj_remove_style_all(humRow); + lv_obj_set_size(humRow, LV_SIZE_CONTENT, LV_SIZE_CONTENT); + lv_obj_set_pos(humRow, padding + 80, padding + 56); // Next to temp + lv_obj_set_flex_flow(humRow, LV_FLEX_FLOW_ROW); + lv_obj_set_flex_align(humRow, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); + lv_obj_set_style_pad_gap(humRow, 4, 0); + lv_obj_clear_flag(humRow, LV_OBJ_FLAG_SCROLLABLE); + lv_obj_clear_flag(humRow, LV_OBJ_FLAG_CLICKABLE); + + // Water drop icon + if (Fonts::hasIconFont()) { + lv_obj_t* humIcon = lv_label_create(humRow); + lv_obj_clear_flag(humIcon, LV_OBJ_FLAG_CLICKABLE); + char iconText[5]; + encodeUtf8(0xe798, iconText); // humidity/water icon + lv_label_set_text(humIcon, iconText); + } + + humidityLabel_ = lv_label_create(humRow); + lv_obj_clear_flag(humidityLabel_, LV_OBJ_FLAG_CLICKABLE); + lv_label_set_text(humidityLabel_, "--"); + } + + // Large decorative icon (bottom-left, partially visible) + if (config_.iconCodepoint > 0 && Fonts::hasIconFont()) { + decorIcon_ = lv_label_create(obj_); + lv_obj_clear_flag(decorIcon_, LV_OBJ_FLAG_CLICKABLE); + char iconText[5]; + encodeUtf8(config_.iconCodepoint, iconText); + lv_label_set_text(decorIcon_, iconText); + // Position at bottom-left, slightly outside + lv_obj_set_pos(decorIcon_, -20, config_.height - 100); + } +} + void RoomCardWidget::createSubButtons() { // Sub-button size (configurable, default 40) int16_t subBtnSize = config_.subButtonSize > 0 ? config_.subButtonSize : 40; @@ -162,8 +322,8 @@ void RoomCardWidget::createSubButtons() { const SubButtonConfig& cfg = config_.subButtons[i]; if (!cfg.enabled) continue; - // Create sub-button object - lv_obj_t* btn = lv_obj_create(obj_); + // Create sub-button on screen parent (not on widget container) to avoid clipping + lv_obj_t* btn = lv_obj_create(screenParent_); lv_obj_remove_style_all(btn); lv_obj_set_size(btn, subBtnSize, subBtnSize); lv_obj_clear_flag(btn, LV_OBJ_FLAG_SCROLLABLE); @@ -171,12 +331,64 @@ void RoomCardWidget::createSubButtons() { // Circular shape lv_obj_set_style_radius(btn, LV_RADIUS_CIRCLE, 0); - lv_obj_set_style_bg_opa(btn, 255, 0); + lv_obj_set_style_bg_opa(btn, config_.subButtonOpacity, 0); - // Position using circle geometry - int16_t x, y; - calculateSubButtonPosition(cfg.position, x, y); - lv_obj_set_pos(btn, x, y); + // Position using circle geometry (relative to widget center) + int16_t relX, relY; + calculateSubButtonPosition(cfg.position, relX, relY); + // Convert to absolute screen position + int16_t absX = config_.x + relX; + int16_t absY = config_.y + relY; + lv_obj_set_pos(btn, absX, absY); + + // Create icon + if (cfg.iconCodepoint > 0 && Fonts::hasIconFont()) { + lv_obj_t* icon = lv_label_create(btn); + lv_obj_clear_flag(icon, LV_OBJ_FLAG_CLICKABLE); + char iconText[5]; + encodeUtf8(cfg.iconCodepoint, iconText); + lv_label_set_text(icon, iconText); + lv_obj_center(icon); + subButtonIcons_[i] = icon; + } + + // Store index in user_data for click handler + lv_obj_set_user_data(btn, reinterpret_cast(static_cast(i))); + lv_obj_add_event_cb(btn, subButtonClickCallback, LV_EVENT_CLICKED, this); + + subButtonObjs_[i] = btn; + subButtonStates_[i] = false; + + // Apply initial color (OFF state) + updateSubButtonColor(i); + } +} + +void RoomCardWidget::createSubButtonsTile() { + // For Tile layout: buttons are positioned on the right side, vertically stacked + int16_t subBtnSize = config_.subButtonSize > 0 ? config_.subButtonSize : 40; + + for (uint8_t i = 0; i < config_.subButtonCount && i < MAX_SUBBUTTONS; ++i) { + const SubButtonConfig& cfg = config_.subButtons[i]; + if (!cfg.enabled) continue; + + // Create sub-button on screen parent + lv_obj_t* btn = lv_obj_create(screenParent_); + lv_obj_remove_style_all(btn); + lv_obj_set_size(btn, subBtnSize, subBtnSize); + lv_obj_clear_flag(btn, LV_OBJ_FLAG_SCROLLABLE); + lv_obj_add_flag(btn, LV_OBJ_FLAG_CLICKABLE); + + // Circular shape + lv_obj_set_style_radius(btn, LV_RADIUS_CIRCLE, 0); + lv_obj_set_style_bg_opa(btn, config_.subButtonOpacity, 0); + + // Position on right side + int16_t relX, relY; + calculateSubButtonPositionTile(i, relX, relY); + int16_t absX = config_.x + relX; + int16_t absY = config_.y + relY; + lv_obj_set_pos(btn, absX, absY); // Create icon if (cfg.iconCodepoint > 0 && Fonts::hasIconFont()) { @@ -204,42 +416,109 @@ void RoomCardWidget::createSubButtons() { void RoomCardWidget::applyStyle() { if (!obj_) return; - // Apply shadow to bubble if enabled - if (bubble_ && config_.shadow.enabled) { - lv_obj_set_style_shadow_width(bubble_, config_.shadow.blur, 0); - lv_obj_set_style_shadow_ofs_x(bubble_, config_.shadow.offsetX, 0); - lv_obj_set_style_shadow_ofs_y(bubble_, config_.shadow.offsetY, 0); - lv_obj_set_style_shadow_color(bubble_, lv_color_hex(config_.shadow.color.toLvColor()), 0); - lv_obj_set_style_shadow_opa(bubble_, 255, 0); - } - - // Font sizes - const lv_font_t* iconFont = Fonts::iconFont(config_.iconSize); - const lv_font_t* textFont = Fonts::bySizeIndex(config_.fontSize); - const lv_font_t* labelFont = Fonts::bySizeIndex(config_.fontSize > 0 ? config_.fontSize - 1 : 0); lv_color_t textColor = lv_color_hex(config_.textColor.toLvColor()); - // Style room icon - if (roomIcon_ && iconFont) { - lv_obj_set_style_text_font(roomIcon_, iconFont, 0); - lv_obj_set_style_text_color(roomIcon_, textColor, 0); - } + if (config_.cardStyle == 1) { + // Tile style + // Apply border if shadow is enabled (used as accent border) + if (config_.shadow.enabled) { + lv_obj_set_style_border_width(obj_, 3, 0); + lv_obj_set_style_border_color(obj_, lv_color_hex(config_.shadow.color.toLvColor()), 0); + lv_obj_set_style_border_opa(obj_, 255, 0); + } - // Style temperature - if (tempLabel_ && textFont) { - lv_obj_set_style_text_font(tempLabel_, textFont, 0); - lv_obj_set_style_text_color(tempLabel_, textColor, 0); - } + // Room name - large font + if (roomLabel_) { + const lv_font_t* nameFont = Fonts::bySizeIndex(config_.fontSize); + lv_obj_set_style_text_font(roomLabel_, nameFont, 0); + lv_obj_set_style_text_color(roomLabel_, textColor, 0); + } - // Style room label - if (roomLabel_ && labelFont) { - lv_obj_set_style_text_font(roomLabel_, labelFont, 0); - lv_obj_set_style_text_color(roomLabel_, lv_color_hex(config_.textColor.toLvColor()), 0); - lv_obj_set_style_text_opa(roomLabel_, 180, 0); // Slightly dimmed + // Subtitle - smaller, dimmed + if (subtitleLabel_) { + const lv_font_t* subFont = Fonts::bySizeIndex(config_.fontSize > 1 ? config_.fontSize - 2 : 0); + lv_obj_set_style_text_font(subtitleLabel_, subFont, 0); + lv_obj_set_style_text_color(subtitleLabel_, textColor, 0); + lv_obj_set_style_text_opa(subtitleLabel_, 150, 0); + } + + // Temp and humidity - medium font + const lv_font_t* valueFont = Fonts::bySizeIndex(config_.fontSize > 0 ? config_.fontSize - 1 : 0); + const lv_font_t* iconFont = Fonts::iconFont(1); // Small icons + + if (tempLabel_) { + lv_obj_set_style_text_font(tempLabel_, valueFont, 0); + lv_obj_set_style_text_color(tempLabel_, textColor, 0); + // Style the icon in the same row + lv_obj_t* parent = lv_obj_get_parent(tempLabel_); + if (parent && lv_obj_get_child_count(parent) > 0) { + lv_obj_t* iconLabel = lv_obj_get_child(parent, 0); + if (iconLabel && iconFont) { + lv_obj_set_style_text_font(iconLabel, iconFont, 0); + lv_obj_set_style_text_color(iconLabel, textColor, 0); + } + } + } + + if (humidityLabel_) { + lv_obj_set_style_text_font(humidityLabel_, valueFont, 0); + lv_obj_set_style_text_color(humidityLabel_, textColor, 0); + lv_obj_t* parent = lv_obj_get_parent(humidityLabel_); + if (parent && lv_obj_get_child_count(parent) > 0) { + lv_obj_t* iconLabel = lv_obj_get_child(parent, 0); + if (iconLabel && iconFont) { + lv_obj_set_style_text_font(iconLabel, iconFont, 0); + lv_obj_set_style_text_color(iconLabel, textColor, 0); + } + } + } + + // Large decorative icon + if (decorIcon_) { + const lv_font_t* bigIconFont = Fonts::iconFont(5); // Largest icon + if (bigIconFont) { + lv_obj_set_style_text_font(decorIcon_, bigIconFont, 0); + lv_obj_set_style_text_color(decorIcon_, textColor, 0); + lv_obj_set_style_text_opa(decorIcon_, 60, 0); // Very transparent + } + } + } else { + // Bubble style + // Apply shadow to bubble if enabled + if (bubble_ && config_.shadow.enabled) { + lv_obj_set_style_shadow_width(bubble_, config_.shadow.blur, 0); + lv_obj_set_style_shadow_ofs_x(bubble_, config_.shadow.offsetX, 0); + lv_obj_set_style_shadow_ofs_y(bubble_, config_.shadow.offsetY, 0); + lv_obj_set_style_shadow_color(bubble_, lv_color_hex(config_.shadow.color.toLvColor()), 0); + lv_obj_set_style_shadow_opa(bubble_, 255, 0); + } + + // Font sizes + const lv_font_t* iconFont = Fonts::iconFont(config_.iconSize); + const lv_font_t* textFont = Fonts::bySizeIndex(config_.fontSize); + const lv_font_t* labelFont = Fonts::bySizeIndex(config_.fontSize > 0 ? config_.fontSize - 1 : 0); + + // Style room icon + if (roomIcon_ && iconFont) { + lv_obj_set_style_text_font(roomIcon_, iconFont, 0); + lv_obj_set_style_text_color(roomIcon_, textColor, 0); + } + + // Style temperature + if (tempLabel_ && textFont) { + lv_obj_set_style_text_font(tempLabel_, textFont, 0); + lv_obj_set_style_text_color(tempLabel_, textColor, 0); + } + + // Style room label + if (roomLabel_ && labelFont) { + lv_obj_set_style_text_font(roomLabel_, labelFont, 0); + lv_obj_set_style_text_color(roomLabel_, textColor, 0); + lv_obj_set_style_text_opa(roomLabel_, 180, 0); // Slightly dimmed + } } // Style sub-buttons - adjust icon size based on button size - // subButtonSize: 30-40 -> font 1, 41-55 -> font 2, 56+ -> font 3 uint8_t subBtnFontIdx = 1; // Default small if (config_.subButtonSize > 55) { subBtnFontIdx = 3; @@ -272,6 +551,14 @@ void RoomCardWidget::updateTemperature(float value) { lv_label_set_text(tempLabel_, buf); } +void RoomCardWidget::updateHumidity(float value) { + if (!humidityLabel_ || humidityFormat_[0] == '\0') return; + + char buf[32]; + snprintf(buf, sizeof(buf), humidityFormat_, value); + lv_label_set_text(humidityLabel_, buf); +} + void RoomCardWidget::onKnxValue(float value) { cachedPrimaryValue_ = value; hasCachedPrimary_ = true; diff --git a/main/widgets/RoomCardWidget.hpp b/main/widgets/RoomCardWidget.hpp index cb737fd..8d0daac 100644 --- a/main/widgets/RoomCardWidget.hpp +++ b/main/widgets/RoomCardWidget.hpp @@ -5,6 +5,7 @@ class RoomCardWidget : public Widget { public: explicit RoomCardWidget(const WidgetConfig& config); + ~RoomCardWidget() override; lv_obj_t* create(lv_obj_t* parent) override; void applyStyle() override; void onKnxValue(float value) override; // Temperature update @@ -14,13 +15,24 @@ public: void onSubButtonStatus(uint8_t index, bool value); void sendSubButtonToggle(uint8_t index); + // Override to also clear sub-buttons + void clearLvglObject(); + private: - // Central bubble elements + // Parent (screen) for sub-buttons to avoid clipping + lv_obj_t* screenParent_ = nullptr; + + // Bubble style elements (cardStyle=0) lv_obj_t* bubble_ = nullptr; lv_obj_t* roomIcon_ = nullptr; lv_obj_t* roomLabel_ = nullptr; lv_obj_t* tempLabel_ = nullptr; + // Tile style elements (cardStyle=1) + lv_obj_t* subtitleLabel_ = nullptr; + lv_obj_t* humidityLabel_ = nullptr; + lv_obj_t* decorIcon_ = nullptr; // Large decorative icon bottom-left + // Sub-button elements lv_obj_t* subButtonObjs_[MAX_SUBBUTTONS] = {}; lv_obj_t* subButtonIcons_[MAX_SUBBUTTONS] = {}; @@ -29,16 +41,22 @@ private: // Cached config values char roomName_[MAX_TEXT_LEN] = {0}; char tempFormat_[MAX_TEXT_LEN] = {0}; + char subtitle_[MAX_TEXT_LEN] = {0}; + char humidityFormat_[MAX_FORMAT_LEN] = {0}; // Layout helpers void parseText(); - void createCentralBubble(); + void createBubbleLayout(); // Bubble style (round) + void createTileLayout(); // Tile style (rectangular) void createSubButtons(); + void createSubButtonsTile(); // SubButtons for tile (right side) void updateSubButtonColor(uint8_t index); void updateTemperature(float value); + void updateHumidity(float value); // Geometry calculations void calculateSubButtonPosition(SubButtonPosition pos, int16_t& x, int16_t& y); + void calculateSubButtonPositionTile(uint8_t index, int16_t& x, int16_t& y); // Event handlers static void bubbleClickCallback(lv_event_t* e); diff --git a/web-interface/src/components/SidebarRight.vue b/web-interface/src/components/SidebarRight.vue index 8edb559..123a805 100644 --- a/web-interface/src/components/SidebarRight.vue +++ b/web-interface/src/components/SidebarRight.vue @@ -395,6 +395,16 @@ + +

Karten-Stil

+
+ + +
+

Sub-Buttons

@@ -419,6 +429,10 @@ px
+
+ + +
@@ -585,7 +599,7 @@
-