Ref T509, Qwt adjustments in model statistics

This commit is contained in:
Klaus Basan
2019-01-11 13:58:56 +01:00
committed by Mat Sutcliffe
parent dba043c23f
commit 935cffe250
3 changed files with 28 additions and 133 deletions

View File

@@ -16,8 +16,8 @@
#include <QPushButton>
#include <QDesktopServices>
#include <QUrl>
#include <QStringBuilder>
#include <QStringList>
#include <QtCharts>
using namespace QtCharts;
using namespace BlackMisc::Aviation;
@@ -37,10 +37,6 @@ namespace BlackGui
connect(ui->pb_GenerateMatrix, &QPushButton::released, this, &CAircraftModelStatisticsDialog::displayHTMLMatrix);
connect(ui->pb_ShowChart, &QPushButton::released, this, &CAircraftModelStatisticsDialog::showChart);
connect(ui->tb_ZoomIn, &QToolButton::released, this, &CAircraftModelStatisticsDialog::zoom);
connect(ui->tb_ZoomOut, &QToolButton::released, this, &CAircraftModelStatisticsDialog::zoom);
this->initChart();
}
CAircraftModelStatisticsDialog::~CAircraftModelStatisticsDialog()
@@ -59,40 +55,6 @@ namespace BlackGui
QDesktopServices::openUrl(QUrl::fromLocalFile(file));
}
void CAircraftModelStatisticsDialog::zoom()
{
const QObject *sender = QObject::sender();
QChart *chart = ui->qv_Chart->chart();
if (sender == ui->tb_ZoomIn) { chart->zoomIn(); return; }
if (sender == ui->tb_ZoomOut) { chart->zoomOut(); return; }
}
void CAircraftModelStatisticsDialog::initChart()
{
QChart *chart = new QChart();
chart->setAnimationOptions(QChart::SeriesAnimations);
chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom);
chart->setTheme(QChart::ChartThemeBlueIcy);
ui->qv_Chart->setChart(chart);
ui->qv_Chart->setRenderHint(QPainter::Antialiasing);
// const QRectF rect(0, 0, 2048, 1526);
// ui->qv_Chart->setSceneRect(rect);
// chart->setPlotArea(rect);
}
void CAircraftModelStatisticsDialog::resetChart()
{
QChart *chart = ui->qv_Chart->chart();
chart->removeAllSeries();
const auto axes = chart->axes();
for (auto axis : axes)
{
chart->removeAxis(axis);
}
}
void CAircraftModelStatisticsDialog::showChart()
{
if (ui->rb_Distributors->isChecked()) { this->chartDistributors(); return; }
@@ -103,83 +65,41 @@ namespace BlackGui
{
const QMap<CDistributor, int> distributors = m_models.countPerDistributor();
QStringList distributorsForAxis;
QBarSet *setDistributors = new QBarSet("Distributors");
// using number as uique key as it can happen there a identical distributor keys
// and QChart requires uniques values
int n = 1;
QList<double> series;
for (const CDistributor &distributor : distributors.keys())
{
const int c = distributors[distributor];
if (c < 1) { continue; }
distributorsForAxis << QString::number(n) % u": " % distributor.getDbKey() % u" " % QString::number(c);
*setDistributors << c;
n++;
distributorsForAxis << (distributor.getDbKey() % u" (" % QString::number(c) % u")");
series << c;
}
QHorizontalBarSeries *series = new QHorizontalBarSeries(this);
series->append(setDistributors);
this->horizontalBarChart(distributorsForAxis, series);
ui->qwt_Chart->setSymbols("distributors", "white");
ui->qwt_Chart->setTitle("distributors");
ui->qwt_Chart->setSamples1Bar(series, distributorsForAxis);
}
void CAircraftModelStatisticsDialog::chartAircraftIcao()
{
const QMap<CAircraftIcaoCode, int> icaos = m_models.countPerAircraftIcao();
QStringList icaosForAxis;
QBarSet *setIcaos = new QBarSet("Aircraft ICAO");
// using number as uique key as it can happen there a identical distributor keys
// and QChart requires uniques values
int n = 1;
QList<double> series;
int unknown = 0;
for (const CAircraftIcaoCode &icao : icaos.keys())
{
const int c = icaos[icao];
if (c < 1) { continue; }
icaosForAxis << QString::number(n) % u": " % icao.getDesignatorDbKey() % u" " % QString::number(c);
*setIcaos << c;
n++;
if (!icao.hasKnownDesignator()) { unknown += c; continue; }
icaosForAxis << (icao.getDesignatorDbKey() % u" (" % QString::number(c) % u")");
series << c;
}
QBarSeries *series = new QBarSeries(this);
series->append(setIcaos);
this->verticalBarChart(icaosForAxis, series);
ui->qwt_Chart->setSymbols("aircraft", "white");
ui->qwt_Chart->setTitle("aircraft ICAO");
ui->qwt_Chart->setSamples1Bar(series, icaosForAxis);
}
void CAircraftModelStatisticsDialog::horizontalBarChart(const QStringList &categories, QHorizontalBarSeries *series)
{
QChart *chart = ui->qv_Chart->chart();
this->resetChart();
chart->addSeries(series);
// Y
QBarCategoryAxis *axisY = new QBarCategoryAxis();
axisY->append(categories);
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);
// X
QValueAxis *axisX = new QValueAxis();
chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);
axisX->applyNiceNumbers();
}
void CAircraftModelStatisticsDialog::verticalBarChart(const QStringList &categories, QBarSeries *series)
{
QChart *chart = ui->qv_Chart->chart();
this->resetChart();
chart->addSeries(series);
// X
QBarCategoryAxis *axisX = new QBarCategoryAxis();
axisX->append(categories);
chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);
// Y
QValueAxis *axisY = new QValueAxis();
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);
}
} // ns
} // ns