feat(color): show widget name in settings popups (#5372)

And highlight currently selected widget in selection menu.
This commit is contained in:
philmoz
2024-08-05 10:52:07 +10:00
committed by GitHub
parent d8e4185e31
commit 181a47e73c
3 changed files with 14 additions and 1 deletions
@@ -63,6 +63,7 @@ void Widget::openMenu()
// covers the main view menu
Window* w = parent->getFullScreenWindow()->getParent();
Menu* menu = new Menu(w ? w : this);
menu->setTitle(getFactory()->getDisplayName());
if (fsAllowed) {
menu->addLine(STR_WIDGET_FULLSCREEN, [&]() { setFullscreen(true); });
}
@@ -43,7 +43,7 @@ static const lv_coord_t line_row_dsc[] = {LV_GRID_CONTENT,
LV_GRID_TEMPLATE_LAST};
WidgetSettings::WidgetSettings(Window* parent, Widget* w) :
BaseDialog(ViewMain::instance(), STR_WIDGET_SETTINGS, true), widget(w)
BaseDialog(ViewMain::instance(), w->getFactory()->getDisplayName(), true), widget(w)
{
FlexGridLayout grid(line_col_dsc, line_row_dsc);
form->padAll(PAD_SMALL);
@@ -91,8 +91,14 @@ void SetupWidgetsPageSlot::setFocusState()
void SetupWidgetsPageSlot::addNewWidget(WidgetsContainer* container,
uint8_t slotIndex)
{
const char* cur = nullptr;
auto w = container->getWidget((slotIndex));
if (w) cur = w->getFactory()->getDisplayName();
Menu* menu = new Menu(parent);
menu->setTitle(STR_SELECT_WIDGET);
int selected = -1;
int index = 0;
for (auto factory : WidgetFactory::getRegisteredWidgets()) {
menu->addLine(factory->getDisplayName(), [=]() {
container->createWidget(slotIndex, factory);
@@ -100,7 +106,13 @@ void SetupWidgetsPageSlot::addNewWidget(WidgetsContainer* container,
if (widget->getOptions() && widget->getOptions()->name)
new WidgetSettings(parent, widget);
});
if (cur && strcmp(cur, factory->getDisplayName()) == 0)
selected = index;
index += 1;
}
if (selected >= 0)
menu->select(selected);
}
SetupWidgetsPage::SetupWidgetsPage(uint8_t customScreenIdx) :