diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d13de15d..a9c3b7d4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ - profile: include profile editing in undo system +- mobile: Add a dark theme for statistics - core: avoid crash with corrupted cloud storage - mobile: fix profile scaling issue on high DPR devices - mobile: bring back profile icons diff --git a/mobile-widgets/statsmanager.cpp b/mobile-widgets/statsmanager.cpp index 8afa01e60..794706d8f 100644 --- a/mobile-widgets/statsmanager.cpp +++ b/mobile-widgets/statsmanager.cpp @@ -1,8 +1,9 @@ // SPDX-License-Identifier: GPL-2.0 #include "statsmanager.h" +#include "themeinterface.h" #include "stats/chartlistmodel.h" -StatsManager::StatsManager() : view(nullptr), charts(nullptr) +StatsManager::StatsManager() : view(nullptr), charts(nullptr), themeInitialized(false) { updateUi(); } @@ -19,6 +20,9 @@ void StatsManager::init(StatsView *v, ChartListModel *m) fprintf(stderr, "StatsManager::init(): no ChartListModel - statistics will not work.\n"); view = v; charts = m; + + connect(ThemeInterface::instance(), &ThemeInterface::currentThemeChanged, + this, &StatsManager::themeChanged); } void StatsManager::doit() @@ -64,6 +68,8 @@ void StatsManager::updateUi() operation2IndexChanged(); sortMode1IndexChanged(); + if (view && !std::exchange(themeInitialized, true)) + themeChanged(); if (charts) charts->update(uiState.charts); if (view) @@ -123,3 +129,14 @@ void StatsManager::setChart(int idx) state.chartChanged(idx); updateUi(); } + +void StatsManager::themeChanged() +{ + if (!view) + return; + + // We could just make currentTheme accessible instead of + // using Qt's inane propertySystem. Whatever. + QString theme = ThemeInterface::instance()->property("currentTheme").toString(); + view->setTheme(theme == "Dark"); +} diff --git a/mobile-widgets/statsmanager.h b/mobile-widgets/statsmanager.h index ba3d8a100..1ec0a2d69 100644 --- a/mobile-widgets/statsmanager.h +++ b/mobile-widgets/statsmanager.h @@ -49,6 +49,8 @@ signals: void binner2IndexChanged(); void operation2IndexChanged(); void sortMode1IndexChanged(); +private slots: + void themeChanged(); private: StatsView *view; ChartListModel *charts; @@ -66,8 +68,8 @@ private: int operation2Index; int sortMode1Index; StatsState::UIState uiState; // Remember UI state so that we can interpret indexes + bool themeInitialized; // setTheme() crashes if called in init() void updateUi(); - }; #endif