diff --git a/radio/src/thirdparty/libopenui/src/choice.cpp b/radio/src/thirdparty/libopenui/src/choice.cpp index 1ed2fe7a3..bfcf73556 100644 --- a/radio/src/thirdparty/libopenui/src/choice.cpp +++ b/radio/src/thirdparty/libopenui/src/choice.cpp @@ -77,10 +77,11 @@ ChoiceBase::ChoiceBase(Window* parent, const rect_t& rect, ChoiceType type, std::string Choice::getLabelText() { - std::string text = ""; + std::string text; + if (textHandler != nullptr) text = textHandler(getValue()); - else { + else if (getValue) { int val = getValue(); val -= vmin; if (val >= 0 && val < (int)values.size()) { diff --git a/radio/src/thirdparty/libopenui/src/choice.h b/radio/src/thirdparty/libopenui/src/choice.h index 5b6d6e53c..c338f5707 100644 --- a/radio/src/thirdparty/libopenui/src/choice.h +++ b/radio/src/thirdparty/libopenui/src/choice.h @@ -99,6 +99,11 @@ class Choice: public ChoiceBase { setValue = std::move(handler); } + void setGetValueHandler(std::function handler) + { + getValue = std::move(handler); + } + void setAvailableHandler(std::function handler) { isValueAvailable = std::move(handler); diff --git a/radio/src/thirdparty/libopenui/src/flexlayout.h b/radio/src/thirdparty/libopenui/src/flexlayout.h index 756d1d201..dcc3abe70 100644 --- a/radio/src/thirdparty/libopenui/src/flexlayout.h +++ b/radio/src/thirdparty/libopenui/src/flexlayout.h @@ -64,14 +64,13 @@ class FlexGridLayout void resetPos() { col_pos = 0; row_pos = 0; } void nextColumn() { col_pos += col_span; } - void nextRow() { row_pos += row_span; } + void nextRow() { row_pos += row_span; col_pos = 0; } void nextCell() { nextColumn(); if (col_dsc[col_pos] == LV_GRID_TEMPLATE_LAST) { nextRow(); - col_pos = 0; } } diff --git a/radio/src/thirdparty/libopenui/src/form.cpp b/radio/src/thirdparty/libopenui/src/form.cpp index e2d8f2de5..d8d0189a2 100644 --- a/radio/src/thirdparty/libopenui/src/form.cpp +++ b/radio/src/thirdparty/libopenui/src/form.cpp @@ -116,7 +116,7 @@ void FormField::onEvent(event_t event) extern lv_group_t* inputGroup; void FormField::setFocus(uint8_t flag, Window * from) { - if (enabled) { + if (enabled && !lv_obj_has_flag(lvobj, LV_OBJ_FLAG_HIDDEN)) { Window::setFocus(flag, from); if(lvobj != nullptr) { lv_group_focus_obj(lvobj); diff --git a/radio/src/thirdparty/libopenui/src/keyboard_number.cpp b/radio/src/thirdparty/libopenui/src/keyboard_number.cpp index 2a4b5fad9..b55c9f174 100644 --- a/radio/src/thirdparty/libopenui/src/keyboard_number.cpp +++ b/radio/src/thirdparty/libopenui/src/keyboard_number.cpp @@ -26,7 +26,8 @@ NumberKeyboard * NumberKeyboard::_instance = nullptr; NumberKeyboard::NumberKeyboard() : Keyboard(KEYBOARD_HEIGHT) { - lv_obj_add_flag(keyboard, LV_OBJ_FLAG_HIDDEN); // ToDo: for now we are still using the old keyboard + // ToDo: for now we are still using the old keyboard + lv_obj_add_flag(keyboard, LV_OBJ_FLAG_HIDDEN); new TextButton(this, {LCD_W / 2 - 115, 10, 50, 30}, "<<", [=]() -> uint8_t { diff --git a/radio/src/thirdparty/libopenui/src/menu.cpp b/radio/src/thirdparty/libopenui/src/menu.cpp index ccaa306b4..31ee8f269 100644 --- a/radio/src/thirdparty/libopenui/src/menu.cpp +++ b/radio/src/thirdparty/libopenui/src/menu.cpp @@ -183,6 +183,8 @@ void MenuBody::setIndex(int index) lv_coord_t row_h = table->row_h[table->row_act]; lv_coord_t scroll_y = lv_obj_get_scroll_y(lvobj); + + lv_obj_update_layout(lvobj); lv_coord_t h = lv_obj_get_height(lvobj); lv_coord_t diff_y = 0; diff --git a/radio/src/thirdparty/libopenui/src/textedit.cpp b/radio/src/thirdparty/libopenui/src/textedit.cpp index 1563547a9..8458fbbb7 100644 --- a/radio/src/thirdparty/libopenui/src/textedit.cpp +++ b/radio/src/thirdparty/libopenui/src/textedit.cpp @@ -58,7 +58,6 @@ TextEdit::TextEdit(Window *parent, const rect_t &rect, char *value, lv_textarea_set_text(lvobj, value); lv_textarea_set_placeholder_text(lvobj, "---"); lv_textarea_set_max_length(lvobj, length); - lv_textarea_set_cursor_pos(lvobj, 0); if (width() == 0) { lv_obj_set_width(lvobj, LV_DPI_DEF); diff --git a/radio/src/thirdparty/libopenui/src/window.cpp b/radio/src/thirdparty/libopenui/src/window.cpp index 4dc918e2d..36da8f89e 100644 --- a/radio/src/thirdparty/libopenui/src/window.cpp +++ b/radio/src/thirdparty/libopenui/src/window.cpp @@ -395,6 +395,7 @@ void Window::setFocus(uint8_t flag, Window * from) if (flag != SET_FOCUS_NO_SCROLL) { lv_obj_scroll_to_view_recursive(lvobj, LV_ANIM_OFF); } + invalidate(); clearFocus(); focusWindow = this;