Mercurial > minori
annotate src/gui/pages/statistics.cc @ 327:b5d6c27c308f
anime: refactor Anime::SeriesSeason to Season class
ToLocalString has also been altered to take in both season
and year because lots of locales actually treat formatting
seasons differently! most notably is Russian which adds a
suffix at the end to notate seasons(??)
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Thu, 13 Jun 2024 01:49:18 -0400 |
parents | 91ac90a34003 |
children | 6b0768158dcd |
rev | line source |
---|---|
9 | 1 #include "gui/pages/statistics.h" |
15 | 2 #include "core/anime_db.h" |
258 | 3 #include "core/session.h" |
187
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
178
diff
changeset
|
4 #include "core/strings.h" |
305
91ac90a34003
core/time: remove Duration class, use regular functions instead
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
5 #include "core/time.h" |
9 | 6 #include "gui/pages/anime_list.h" |
258 | 7 #include "gui/widgets/graph.h" |
46 | 8 #include "gui/widgets/text.h" |
178
bc8d2ccff09c
win32/dark: use existing STL classes for dwmapi
Paper <mrpapersonic@gmail.com>
parents:
172
diff
changeset
|
9 |
9 | 10 #include <QString> |
11 #include <QTextDocument> | |
12 #include <QTextStream> | |
13 #include <QTimer> | |
14 #include <QVBoxLayout> | |
15 #include <QWidget> | |
178
bc8d2ccff09c
win32/dark: use existing STL classes for dwmapi
Paper <mrpapersonic@gmail.com>
parents:
172
diff
changeset
|
16 |
258 | 17 #include <cmath> |
9 | 18 #include <sstream> |
250 | 19 |
64 | 20 StatisticsPage::StatisticsPage(QWidget* parent) : QFrame(parent) { |
295 | 21 setBackgroundRole(QPalette::Base); |
22 | |
64 | 23 QVBoxLayout* layout = new QVBoxLayout(this); |
9 | 24 |
64 | 25 setFrameShape(QFrame::Box); |
9 | 26 setFrameShadow(QFrame::Sunken); |
27 | |
46 | 28 setAutoFillBackground(true); |
37
9ae9365dd4ea
window.cpp: fix sidebar on Linux
Paper <mrpapersonic@gmail.com>
parents:
15
diff
changeset
|
29 |
93 | 30 _anime_list.reset(new TextWidgets::LabelledSection( |
51 | 31 tr("Anime list"), |
63 | 32 tr("Anime count:\nEpisode count:\nTime spent watching:\nTime to complete:\nAverage score:\nScore deviation:"), |
93 | 33 "", this)); |
172
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
34 layout->addWidget(_anime_list.get()); |
93 | 35 |
172
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
36 { |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
37 QWidget* score_dist_widget = new QWidget(this); |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
38 QVBoxLayout* score_dist_layout = new QVBoxLayout(score_dist_widget); |
9 | 39 |
172
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
40 score_dist_layout->addWidget(new TextWidgets::Header(tr("Score distribution"), score_dist_widget)); |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
41 |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
42 /* Ew */ |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
43 { |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
44 QWidget* score_graph_parent = new QWidget(score_dist_widget); |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
45 QVBoxLayout* score_parent_layout = new QVBoxLayout(score_graph_parent); |
94
2f373d48f889
*: etc changes to graph stuff
Paper <mrpapersonic@gmail.com>
parents:
93
diff
changeset
|
46 |
172
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
47 _score_distribution_graph.reset(new Graph<int>(score_graph_parent)); |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
48 score_parent_layout->addWidget(_score_distribution_graph.get()); |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
49 |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
50 score_parent_layout->setSpacing(0); |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
51 score_parent_layout->setContentsMargins(12, 0, 0, 0); |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
52 |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
53 score_dist_layout->addWidget(score_graph_parent); |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
54 } |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
55 |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
56 score_dist_layout->setContentsMargins(0, 0, 0, 0); |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
57 |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
58 layout->addWidget(score_dist_widget); |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
59 } |
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
60 |
93 | 61 _application.reset(new TextWidgets::LabelledSection(tr("Minori"), tr("Uptime:\nRequests made:"), "\n\n", this)); |
172
45a0967485f1
graph, statistics: make my code a little less messy
Paper <mrpapersonic@gmail.com>
parents:
105
diff
changeset
|
62 layout->addWidget(_application.get()); |
93 | 63 |
64 | 64 layout->addStretch(); |
9 | 65 |
66 QTimer* timer = new QTimer(this); | |
67 connect(timer, &QTimer::timeout, this, [this] { | |
68 if (isVisible()) | |
69 UpdateStatistics(); | |
70 }); | |
71 timer->start(1000); // update statistics every second | |
72 } | |
73 | |
64 | 74 void StatisticsPage::showEvent(QShowEvent*) { |
9 | 75 UpdateStatistics(); |
76 } | |
77 | |
102 | 78 inline int GetTotalWithScore(const int score) { |
93 | 79 int count = 0; |
80 for (const auto& item : Anime::db.items) | |
81 if (item.second.IsInUserList() && item.second.GetUserScore() == score) | |
82 count++; | |
83 return count; | |
84 } | |
85 | |
64 | 86 void StatisticsPage::UpdateStatistics() { |
9 | 87 /* Anime list */ |
88 QString string = ""; | |
89 QTextStream ts(&string); | |
10 | 90 ts << Anime::db.GetTotalAnimeAmount() << '\n'; |
91 ts << Anime::db.GetTotalEpisodeAmount() << '\n'; | |
305
91ac90a34003
core/time: remove Duration class, use regular functions instead
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
92 ts << Strings::ToQString(Time::GetSecondsAsAbsoluteString(Time::Units::Minutes, Anime::db.GetTotalWatchedAmount(), 60.0)) << '\n'; |
91ac90a34003
core/time: remove Duration class, use regular functions instead
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
93 ts << Strings::ToQString(Time::GetSecondsAsAbsoluteString(Time::Units::Minutes, Anime::db.GetTotalPlannedAmount(), 60.0)) << '\n'; |
10 | 94 ts << Anime::db.GetAverageScore() << '\n'; |
95 ts << Anime::db.GetScoreDeviation(); | |
291 | 96 _anime_list->GetData()->setText(string); |
93 | 97 |
98 _score_distribution_graph->Clear(); | |
99 for (int i = 10; i <= 100; i += 10) | |
100 _score_distribution_graph->AddItem(i, GetTotalWithScore(i)); | |
9 | 101 |
47
d8eb763e6661
information.cpp: add widgets to the list tab, and add an
Paper <mrpapersonic@gmail.com>
parents:
46
diff
changeset
|
102 string = ""; |
305
91ac90a34003
core/time: remove Duration class, use regular functions instead
Paper <paper@paper.us.eu.org>
parents:
295
diff
changeset
|
103 ts << Strings::ToQString(Time::GetSecondsAsAbsoluteString(Time::Units::Seconds, session.uptime() / 1000)) << '\n'; |
47
d8eb763e6661
information.cpp: add widgets to the list tab, and add an
Paper <mrpapersonic@gmail.com>
parents:
46
diff
changeset
|
104 ts << session.GetRequests(); |
9 | 105 /* Application */ |
106 // UiUtils::SetPlainTextEditData(application_data, QString::number(session.uptime() / 1000)); | |
291 | 107 _application->GetData()->setText(string); |
9 | 108 } |