Skip to content

Commit 093696d

Browse files
committed
chore(UI): change theme to store name instead of index
1 parent f195da7 commit 093696d

File tree

6 files changed

+33
-20
lines changed

6 files changed

+33
-20
lines changed

src/Storage.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ constexpr StorageKey<std::chrono::milliseconds> ID_DUET_POLL_INTERVAL = {"duet:p
4848
constexpr StorageKey<speed_t> ID_DUET_BAUD_RATE = {"duet:baud_rate", DEFAULT_BAUD_RATE};
4949

5050
/* UI */
51-
constexpr StorageKey<size_t> ID_THEME = {"ui:theme", std::numeric_limits<size_t>::max()};
51+
constexpr StorageKey<std::string_view> ID_THEME = {"ui:theme", "dark"};
5252
constexpr StorageKey<std::string_view> ID_FONT = {"ui:font", "OpenSans"};
5353
constexpr StorageKey<std::string_view> ID_ICON_FOLDER = {"ui:icon_folder", DEFAULT_ICON_SET};
5454
constexpr StorageKey<std::string_view> ID_KEYBOARD_LAYOUT = {"ui:keyboard_layout", "us"};

src/Storage.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ extern const StorageKey<std::chrono::milliseconds> ID_DUET_POLL_INTERVAL;
131131
extern const StorageKey<speed_t> ID_DUET_BAUD_RATE;
132132

133133
/* UI */
134-
extern const StorageKey<size_t> ID_THEME;
134+
extern const StorageKey<std::string_view> ID_THEME;
135135
extern const StorageKey<std::string_view> ID_FONT;
136136
extern const StorageKey<std::string_view> ID_ICON_FOLDER;
137137
extern const StorageKey<std::string_view> ID_KEYBOARD_LAYOUT;

src/UI/Screens/Settings/SettingsView.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -528,10 +528,20 @@ namespace UI
528528
theme->setThemeActive();
529529
updateThemePreview();
530530
LOG_DBG("Finished changing theme");
531-
StorageHelper::setData(ID_THEME, index);
532-
// view->getMainSettingsPresenter()->setTheme(selected);
531+
StorageHelper::setData(ID_THEME, theme->getName());
533532
});
534-
m_theme.setSelected(static_cast<uint32_t>(StorageHelper::getData(ID_THEME)));
533+
{
534+
const auto& allThemes = Themes::getThemes();
535+
const auto stored = StorageHelper::getData(ID_THEME);
536+
for (uint32_t i = 0; i < allThemes.size(); ++i)
537+
{
538+
if (allThemes[i]->getName() == stored)
539+
{
540+
m_theme.setSelected(i);
541+
break;
542+
}
543+
}
544+
}
535545

536546
/* Font */
537547
createRow(_("settings.font"), m_font);

src/UI/Styles/Styles.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,21 +1038,15 @@ namespace UI::Themes
10381038

10391039
lv_theme_apply(lv_screen_active());
10401040

1041-
Theme* theme = getTheme(StorageHelper::getData(ID_THEME));
1041+
Theme* theme = getThemeByName(StorageHelper::getData(ID_THEME));
10421042
if (theme == nullptr)
10431043
{
10441044
LOG_INFO("Theme not found, using default theme");
10451045
theme = getDefaultTheme();
1046-
size_t theme_id = 0;
1047-
for (size_t i = 0; i < themes().size(); ++i)
1046+
if (theme != nullptr)
10481047
{
1049-
if (themes()[i] == theme)
1050-
{
1051-
theme_id = i;
1052-
break;
1053-
}
1048+
StorageHelper::setData(ID_THEME, theme->getName());
10541049
}
1055-
StorageHelper::setData(ID_THEME, theme_id);
10561050
}
10571051
if (theme != nullptr)
10581052
{

src/utils/StorageHelper.h

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,23 @@ class StorageHelper
9999

100100
auto convertor = [&key](const nlohmann::json& jval) -> typename T::value_type
101101
{
102-
if constexpr (std::is_enum_v<typename T::value_type>)
102+
try
103103
{
104-
const auto val = jval.get<std::underlying_type_t<typename T::value_type>>();
105-
return magic_enum::enum_cast<typename T::value_type>(val).value_or(detail::resolve_default(key));
104+
if constexpr (std::is_enum_v<typename T::value_type>)
105+
{
106+
const auto val = jval.get<std::underlying_type_t<typename T::value_type>>();
107+
return magic_enum::enum_cast<typename T::value_type>(val).value_or(
108+
detail::resolve_default(key));
109+
}
110+
else
111+
{
112+
return jval.get<typename T::value_type>();
113+
}
106114
}
107-
else
115+
catch (const nlohmann::json::type_error&)
108116
{
109-
return jval.get<typename T::value_type>();
117+
LOG_WARN("Config key \"{:s}\" has incompatible type, using default", key.id);
118+
return detail::resolve_default(key);
110119
}
111120
};
112121

tests/src/test_cases/UI/test_theme.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class TestTheme : public UiTestSuite
4646

4747
~TestTheme()
4848
{
49-
Themes::Theme* default_theme = Themes::getTheme(StorageHelper::getData(ID_THEME));
49+
Themes::Theme* default_theme = Themes::getThemeByName(StorageHelper::getData(ID_THEME));
5050
if (default_theme == nullptr)
5151
{
5252
return;

0 commit comments

Comments
 (0)