Clean up in wildmonchart

This commit is contained in:
GriffinR 2024-08-27 18:20:29 -04:00
parent 8880aca829
commit 325757d4ee
2 changed files with 43 additions and 19 deletions

View file

@ -67,7 +67,7 @@ private:
void applySpeciesColors(const QList<QBarSet*> &); void applySpeciesColors(const QList<QBarSet*> &);
QChart::ChartTheme currentTheme() const; QChart::ChartTheme currentTheme() const;
void updateTheme(); void updateTheme();
void stopChartAnimation(QChart*); void limitChartAnimation(QChart*);
void showHelpDialog(); void showHelpDialog();
}; };

View file

@ -2,10 +2,6 @@
#include "ui_wildmonchart.h" #include "ui_wildmonchart.h"
#include "config.h" #include "config.h"
#include "log.h"
// TODO: Draw species icons below legend icons?
static const QString baseWindowTitle = QString("Wild Pokémon Summary Charts"); static const QString baseWindowTitle = QString("Wild Pokémon Summary Charts");
static const QList<QPair<QString, QChart::ChartTheme>> themes = { static const QList<QPair<QString, QChart::ChartTheme>> themes = {
@ -48,8 +44,7 @@ WildMonChart::WildMonChart(QWidget *parent, const EncounterTableModel *table) :
porymapConfig.wildMonChartTheme = ui->comboBox_Theme->currentText(); porymapConfig.wildMonChartTheme = ui->comboBox_Theme->currentText();
} }
// TODO: Re-enable once finished restoreGeometry(porymapConfig.wildMonChartGeometry);
//restoreGeometry(porymapConfig.wildMonChartGeometry);
setTable(table); setTable(table);
}; };
@ -158,25 +153,36 @@ void WildMonChart::readTable() {
} }
void WildMonChart::refresh() { void WildMonChart::refresh() {
const QSignalBlocker blocker1(ui->comboBox_Species);
const QSignalBlocker blocker2(ui->comboBox_Group);
const QString oldSpecies = ui->comboBox_Species->currentText();
const QString oldGroup = ui->comboBox_Group->currentText();
readTable(); readTable();
// If the old UI settings are still valid we should restore them
int index = ui->comboBox_Species->findText(oldSpecies);
if (index >= 0) ui->comboBox_Species->setCurrentIndex(index);
index = ui->comboBox_Group->findText(oldGroup);
if (index >= 0) ui->comboBox_Group->setCurrentIndex(index);
refreshSpeciesDistributionChart(); refreshSpeciesDistributionChart();
refreshLevelDistributionChart(); refreshLevelDistributionChart();
// Turn off the animation once it's played, otherwise it replays any time the window changes size.
// TODO: Store timer, disable if closing or creating new chart
//QTimer::singleShot(chart->animationDuration() + 500, this, &WildMonChart::stopChartAnimation);
} }
void WildMonChart::refreshSpeciesDistributionChart() { void WildMonChart::refreshSpeciesDistributionChart() {
if (ui->chartView_SpeciesDistribution->chart()) if (ui->chartView_SpeciesDistribution->chart())
ui->chartView_SpeciesDistribution->chart()->deleteLater(); ui->chartView_SpeciesDistribution->chart()->deleteLater();
ui->chartView_SpeciesDistribution->setChart(createSpeciesDistributionChart()); ui->chartView_SpeciesDistribution->setChart(createSpeciesDistributionChart());
limitChartAnimation(ui->chartView_SpeciesDistribution->chart());
} }
void WildMonChart::refreshLevelDistributionChart() { void WildMonChart::refreshLevelDistributionChart() {
if (ui->chartView_LevelDistribution->chart()) if (ui->chartView_LevelDistribution->chart())
ui->chartView_LevelDistribution->chart()->deleteLater(); ui->chartView_LevelDistribution->chart()->deleteLater();
ui->chartView_LevelDistribution->setChart(createLevelDistributionChart()); ui->chartView_LevelDistribution->setChart(createLevelDistributionChart());
limitChartAnimation(ui->chartView_LevelDistribution->chart());
} }
QStringList WildMonChart::getSpeciesNamesAlphabetical() const { QStringList WildMonChart::getSpeciesNamesAlphabetical() const {
@ -401,18 +407,36 @@ void WildMonChart::applySpeciesColors(const QList<QBarSet*> &barSets) {
set->setColor(this->speciesToColor.value(set->label())); set->setColor(this->speciesToColor.value(set->label()));
} }
void WildMonChart::stopChartAnimation(QChart *chart) { // Turn off the animation once it's played, otherwise it replays any time the window changes size.
if (!chart) void WildMonChart::limitChartAnimation(QChart *chart) {
return; // Chart may be destroyed before the animation finishes
chart->setAnimationOptions(QChart::NoAnimation); QPointer<QChart> safeChart = chart;
// QChart has no signal for when the animation is finished, so we use a timer to stop the animation.
// It is technically possible to get the chart to freeze mid-animation by resizing the window after
// the timer starts but before it finishes, but 1. animations are short so this is difficult to do,
// and 2. the issue resolves if the window is resized afterwards, so it's probably fine.
QTimer::singleShot(chart->animationDuration() + 500, [safeChart] {
if (safeChart) safeChart->setAnimationOptions(QChart::NoAnimation);
});
} }
void WildMonChart::showHelpDialog() { void WildMonChart::showHelpDialog() {
static const QString text = "This window provides some visualizations of the data in your current Wild Pokémon tab"; static const QString text = "This window provides some visualizations of the data in your current Wild Pokémon tab";
static const QString informative = "The <b>Species Distribution</b> tab shows the cumulative encounter chance for each species " static const QString informative =
"in the table. In other words, it answers the question \"For a given encounter of this type, " "The <b>Species Distribution</b> tab shows the cumulative encounter chance for each species "
"what is the likelihood that the pokémon encountered will be of that species?\"<br><br>" "in the table. In other words, it answers the question \"What is the likelihood of encountering "
"The <b>Level Distribution</b> tab..."; // TODO "each species in a single encounter?\""
"<br><br>"
"The <b>Level Distribution</b> tab shows the chance of encountering each species at a particular level. "
"In the top left under <b>Group</b> you can select which encounter group to show data for. "
"In the top right under <b>Species</b> you can select which species to show data for. "
"<br><br>"
"<b>Individual Mode</b> on the <b>Level Distribution</b> tab toggles whether data is shown for all species in the table. "
"The percentages will update to reflect whether you're showing all species or just that individual species. "
"In other words, while <b>Individual Mode</b> is checked the chart is answering the question \"If a species x "
"is encountered, what is the likelihood that it will be level y\", and while <b>Individual Mode</b> is not checked, "
"it answers the question \"For a single encounter, what is the likelihood of encountering a species x at level y.\"";
QMessageBox msgBox(QMessageBox::Information, "porymap", text, QMessageBox::Close, this); QMessageBox msgBox(QMessageBox::Information, "porymap", text, QMessageBox::Close, this);
msgBox.setTextFormat(Qt::RichText); msgBox.setTextFormat(Qt::RichText);
msgBox.setInformativeText(informative); msgBox.setInformativeText(informative);