From 3fa25798ce4ef7b50af1118bf6476d31fb6c0e2a Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 10 Jan 2019 18:14:00 +0100 Subject: [PATCH] Ref T509, added ICAO graph --- .../views/aircraftmodelstatisticsdialog.cpp | 61 +++++++++++++++++-- .../views/aircraftmodelstatisticsdialog.h | 14 +++++ .../views/aircraftmodelstatisticsdialog.ui | 44 +++++++++---- 3 files changed, 101 insertions(+), 18 deletions(-) diff --git a/src/blackgui/views/aircraftmodelstatisticsdialog.cpp b/src/blackgui/views/aircraftmodelstatisticsdialog.cpp index e8408270a..d07e2b794 100644 --- a/src/blackgui/views/aircraftmodelstatisticsdialog.cpp +++ b/src/blackgui/views/aircraftmodelstatisticsdialog.cpp @@ -10,6 +10,7 @@ #include "aircraftmodelstatisticsdialog.h" #include "ui_aircraftmodelstatisticsdialog.h" #include "blackgui/guiapplication.h" +#include "blackmisc/aviation/aircrafticaocode.h" #include "blackmisc/simulation/aircraftmodelutils.h" #include @@ -19,6 +20,7 @@ #include using namespace QtCharts; +using namespace BlackMisc::Aviation; using namespace BlackMisc::Simulation; namespace BlackGui @@ -74,6 +76,10 @@ namespace BlackGui 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() @@ -90,12 +96,11 @@ namespace BlackGui void CAircraftModelStatisticsDialog::showChart() { if (ui->rb_Distributors->isChecked()) { this->chartDistributors(); return; } + if (ui->rb_AircraftIcao->isChecked()) { this->chartAircraftIcao(); return; } } void CAircraftModelStatisticsDialog::chartDistributors() { - QChart *chart = ui->qv_Chart->chart(); - this->resetChart(); const QMap distributors = m_models.countPerDistributor(); QStringList distributorsForAxis; QBarSet *setDistributors = new QBarSet("Distributors"); @@ -110,17 +115,45 @@ namespace BlackGui distributorsForAxis << QString::number(n) % u": " % distributor.getDbKey() % u" " % QString::number(c); *setDistributors << c; n++; - // QString s += distributor.getDbKey() % u" " % QString::number(c) % "\n"; } QHorizontalBarSeries *series = new QHorizontalBarSeries(this); series->append(setDistributors); + this->horizontalBarChart(distributorsForAxis, series); + } + + void CAircraftModelStatisticsDialog::chartAircraftIcao() + { + const QMap 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; + 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++; + } + + QBarSeries *series = new QBarSeries(this); + series->append(setIcaos); + this->verticalBarChart(icaosForAxis, series); + } + + void CAircraftModelStatisticsDialog::horizontalBarChart(const QStringList &categories, QHorizontalBarSeries *series) + { + QChart *chart = ui->qv_Chart->chart(); + this->resetChart(); chart->addSeries(series); - // chart->setTitle("Distributors"); // Y QBarCategoryAxis *axisY = new QBarCategoryAxis(); - axisY->append(distributorsForAxis); + axisY->append(categories); chart->addAxis(axisY, Qt::AlignLeft); series->attachAxis(axisY); @@ -130,5 +163,23 @@ namespace BlackGui 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 diff --git a/src/blackgui/views/aircraftmodelstatisticsdialog.h b/src/blackgui/views/aircraftmodelstatisticsdialog.h index 4fb60342e..cec079d89 100644 --- a/src/blackgui/views/aircraftmodelstatisticsdialog.h +++ b/src/blackgui/views/aircraftmodelstatisticsdialog.h @@ -17,6 +17,11 @@ #include namespace Ui { class CAircraftModelStatisticsDialog; } +namespace QtCharts +{ + class QBarSeries; + class QHorizontalBarSeries; +} namespace BlackGui { namespace Views @@ -55,6 +60,15 @@ namespace BlackGui //! Chart for distributors void chartDistributors(); + //! Chart for aircraft ICAO + void chartAircraftIcao(); + + //! Display as horizontal bar chart + void horizontalBarChart(const QStringList &categories, QtCharts::QHorizontalBarSeries *series); + + //! Display as vertical bar chart + void verticalBarChart(const QStringList &categories, QtCharts::QBarSeries *series); + QScopedPointer ui; BlackMisc::Simulation::CAircraftModelList m_models; }; diff --git a/src/blackgui/views/aircraftmodelstatisticsdialog.ui b/src/blackgui/views/aircraftmodelstatisticsdialog.ui index 58fc7bc31..78ea6bb46 100644 --- a/src/blackgui/views/aircraftmodelstatisticsdialog.ui +++ b/src/blackgui/views/aircraftmodelstatisticsdialog.ui @@ -6,7 +6,7 @@ 0 0 - 300 + 333 298 @@ -23,7 +23,7 @@ - 0 + 1 @@ -78,6 +78,13 @@ + + + + aircraft + + + @@ -116,18 +123,29 @@ - - - - 0.000000000000000 - 0.000000000000000 - 400.000000000000000 - 300.000000000000000 - - - - QGraphicsView::ScrollHandDrag + + + true + + + + 0 + 0 + 299 + 191 + + + + + + + QGraphicsView::NoDrag + + + + +