diff --git a/radio/src/thirdparty/libopenui/src/table.h b/radio/src/thirdparty/libopenui/src/table.h index 695f9d161..f217bf2ee 100644 --- a/radio/src/thirdparty/libopenui/src/table.h +++ b/radio/src/thirdparty/libopenui/src/table.h @@ -48,7 +48,6 @@ class Table: public FormField { void paint(BitmapBuffer * dc, coord_t x, coord_t y, LcdFlags flags) override { - dc->drawText(x, y - 2 + (TABLE_LINE_HEIGHT - getFontHeight(TABLE_HEADER_FONT)) / 2 + 3, value.c_str(), flags); } @@ -83,6 +82,27 @@ class Table: public FormField { std::function getText; }; + class CustomCell : public Cell { + public: + explicit CustomCell(std::function paintFunction): + paintFunction(std::move(paintFunction)) + { + } + + void paint(BitmapBuffer * dc, coord_t x, coord_t y, LcdFlags flags) override + { + paintFunction(dc, x, y, flags); + } + + bool needsInvalidate() override + { + return true; + } + + protected: + std::function paintFunction; + }; + class Line { public: explicit Line(uint8_t columnsCount): @@ -236,10 +256,22 @@ class Table: public FormField { body.detach(); } - void setColumnsWidth(const coord_t width[]) + void setColumnsWidth(const coord_t values[]) { + int8_t restColumn = -1; + coord_t restWidth = width(); for (uint8_t i = 0; i < columnsCount; i++) { - columnsWidth[i] = width[i]; + auto columnWidth = values[i]; + columnsWidth[i] = columnWidth; + if (columnWidth == 0) { + restColumn = i; + } + else { + restWidth -= columnWidth; + } + } + if (restColumn) { + columnsWidth[restColumn] = restWidth; } } diff --git a/radio/src/thirdparty/libopenui/src/textedit.cpp b/radio/src/thirdparty/libopenui/src/textedit.cpp index 097d534f4..479db80d7 100644 --- a/radio/src/thirdparty/libopenui/src/textedit.cpp +++ b/radio/src/thirdparty/libopenui/src/textedit.cpp @@ -188,6 +188,10 @@ void TextEdit::onEvent(event_t event) #if defined(HARDWARE_TOUCH) bool TextEdit::onTouchEnd(coord_t x, coord_t y) { + if (!isEnabled()) { + return true; + } + if (!hasFocus()) { setFocus(SET_FOCUS_DEFAULT); } diff --git a/radio/src/thirdparty/libopenui/src/window.h b/radio/src/thirdparty/libopenui/src/window.h index 2f6e9789f..93f53815b 100644 --- a/radio/src/thirdparty/libopenui/src/window.h +++ b/radio/src/thirdparty/libopenui/src/window.h @@ -103,7 +103,7 @@ class Window { bool isChild(Window * window) const { - return window == this || (getParent() && getParent()->isChild(window)); + return window == this || (parent && parent->isChild(window)); } Window * getFullScreenWindow()