File tree Expand file tree Collapse file tree 6 files changed +33
-20
lines changed
Expand file tree Collapse file tree 6 files changed +33
-20
lines changed Original file line number Diff line number Diff line change @@ -48,7 +48,7 @@ constexpr StorageKey<std::chrono::milliseconds> ID_DUET_POLL_INTERVAL = {"duet:p
4848constexpr 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 " };
5252constexpr StorageKey<std::string_view> ID_FONT = {" ui:font" , " OpenSans" };
5353constexpr StorageKey<std::string_view> ID_ICON_FOLDER = {" ui:icon_folder" , DEFAULT_ICON_SET};
5454constexpr StorageKey<std::string_view> ID_KEYBOARD_LAYOUT = {" ui:keyboard_layout" , " us" };
Original file line number Diff line number Diff line change @@ -131,7 +131,7 @@ extern const StorageKey<std::chrono::milliseconds> ID_DUET_POLL_INTERVAL;
131131extern 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;
135135extern const StorageKey<std::string_view> ID_FONT;
136136extern const StorageKey<std::string_view> ID_ICON_FOLDER;
137137extern const StorageKey<std::string_view> ID_KEYBOARD_LAYOUT;
Original file line number Diff line number Diff 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);
Original file line number Diff line number Diff 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 {
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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 ;
You can’t perform that action at this time.
0 commit comments