themes: show active theme is listbox

This commit is contained in:
Raphael Coeffic
2022-06-11 15:38:08 +02:00
committed by Raphael Coeffic
parent a9f297273b
commit b448913743
3 changed files with 42 additions and 2 deletions
+31
View File
@@ -115,6 +115,19 @@ int ListBase::getSelected() const
return -1;
}
void ListBase::setActiveItem(int item)
{
if (item != activeItem) {
activeItem = item;
invalidate();
}
}
int ListBase::getActiveItem() const
{
return activeItem;
}
void ListBase::onPress(uint16_t row, uint16_t col)
{
if (row == LV_TABLE_CELL_NONE) return;
@@ -148,3 +161,21 @@ void ListBase::onCancel()
TableField::onCancel();
}
}
void ListBase::onDrawEnd(uint16_t row, uint16_t col, lv_obj_draw_part_dsc_t* dsc)
{
if (row != activeItem) return;
lv_area_t coords;
lv_coord_t area_h = lv_area_get_height(dsc->draw_area);
lv_coord_t cell_right = lv_obj_get_style_pad_right(lvobj, LV_PART_ITEMS);
lv_coord_t font_h = getFontHeight(FONT(STD));
coords.x1 = dsc->draw_area->x2 - cell_right - font_h;
coords.x2 = coords.x1 + font_h;
coords.y1 = dsc->draw_area->y1 + (area_h - font_h) / 2;
coords.y2 = coords.y1 + font_h - 1;
lv_draw_label(dsc->draw_ctx, dsc->label_dsc, &coords, LV_SYMBOL_OK, nullptr);
}
+6
View File
@@ -51,6 +51,9 @@ class ListBase : public TableField
virtual void setSelected(int selected);
int getSelected() const;
virtual void setActiveItem(int item);
int getActiveItem() const;
void setLongPressHandler(std::function<void()> handler)
{
longPressHandler = std::move(handler);
@@ -67,12 +70,15 @@ class ListBase : public TableField
protected:
static void event_cb(lv_event_t* e);
int activeItem = -1;
void onPress(uint16_t row, uint16_t col) override;
void onLongPressed();
void onClicked() override;
void onCancel() override;
void onDrawEnd(uint16_t row, uint16_t col, lv_obj_draw_part_dsc_t* dsc) override;
};
class ListBox : public ListBase
+5 -2
View File
@@ -431,10 +431,12 @@ void ThemeSetupPage::displayThemeMenu(Window *window, ThemePersistance *tp)
// you cant activate the active theme
if (listBox->getSelected() != tp->getThemeIndex()) {
menu->addLine(STR_ACTIVATE, [=]() {
tp->applyTheme(listBox->getSelected());
tp->setDefaultTheme(listBox->getSelected());
auto idx = listBox->getSelected();
tp->applyTheme(idx);
tp->setDefaultTheme(idx);
nameText->setTextFlags(COLOR_THEME_PRIMARY1);
authorText->setTextFlags(COLOR_THEME_PRIMARY1);
listBox->setActiveItem(idx);
});
}
@@ -508,6 +510,7 @@ void ThemeSetupPage::setupListbox(FormWindow *window, rect_t r, ThemePersistance
listBox = new ListBox(window, r, tp->getNames());
listBox->setAutoEdit(true);
listBox->setSelected(currentTheme);
listBox->setActiveItem(tp->getThemeIndex());
listBox->setTitle(STR_THEME + std::string("s")); // TODO: fix this!
listBox->setLongPressHandler([=] () { displayThemeMenu(window, tp); });
listBox->setPressHandler([=] () {