Ref T509, added ICAO graph

This commit is contained in:
Klaus Basan
2019-01-10 18:14:00 +01:00
committed by Mat Sutcliffe
parent 20b83d66eb
commit 3fa25798ce
3 changed files with 101 additions and 18 deletions

View File

@@ -10,6 +10,7 @@
#include "aircraftmodelstatisticsdialog.h" #include "aircraftmodelstatisticsdialog.h"
#include "ui_aircraftmodelstatisticsdialog.h" #include "ui_aircraftmodelstatisticsdialog.h"
#include "blackgui/guiapplication.h" #include "blackgui/guiapplication.h"
#include "blackmisc/aviation/aircrafticaocode.h"
#include "blackmisc/simulation/aircraftmodelutils.h" #include "blackmisc/simulation/aircraftmodelutils.h"
#include <QPushButton> #include <QPushButton>
@@ -19,6 +20,7 @@
#include <QtCharts> #include <QtCharts>
using namespace QtCharts; using namespace QtCharts;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation;
namespace BlackGui namespace BlackGui
@@ -74,6 +76,10 @@ namespace BlackGui
chart->setTheme(QChart::ChartThemeBlueIcy); chart->setTheme(QChart::ChartThemeBlueIcy);
ui->qv_Chart->setChart(chart); ui->qv_Chart->setChart(chart);
ui->qv_Chart->setRenderHint(QPainter::Antialiasing); ui->qv_Chart->setRenderHint(QPainter::Antialiasing);
// const QRectF rect(0, 0, 2048, 1526);
// ui->qv_Chart->setSceneRect(rect);
// chart->setPlotArea(rect);
} }
void CAircraftModelStatisticsDialog::resetChart() void CAircraftModelStatisticsDialog::resetChart()
@@ -90,12 +96,11 @@ namespace BlackGui
void CAircraftModelStatisticsDialog::showChart() void CAircraftModelStatisticsDialog::showChart()
{ {
if (ui->rb_Distributors->isChecked()) { this->chartDistributors(); return; } if (ui->rb_Distributors->isChecked()) { this->chartDistributors(); return; }
if (ui->rb_AircraftIcao->isChecked()) { this->chartAircraftIcao(); return; }
} }
void CAircraftModelStatisticsDialog::chartDistributors() void CAircraftModelStatisticsDialog::chartDistributors()
{ {
QChart *chart = ui->qv_Chart->chart();
this->resetChart();
const QMap<CDistributor, int> distributors = m_models.countPerDistributor(); const QMap<CDistributor, int> distributors = m_models.countPerDistributor();
QStringList distributorsForAxis; QStringList distributorsForAxis;
QBarSet *setDistributors = new QBarSet("Distributors"); QBarSet *setDistributors = new QBarSet("Distributors");
@@ -110,17 +115,45 @@ namespace BlackGui
distributorsForAxis << QString::number(n) % u": " % distributor.getDbKey() % u" " % QString::number(c); distributorsForAxis << QString::number(n) % u": " % distributor.getDbKey() % u" " % QString::number(c);
*setDistributors << c; *setDistributors << c;
n++; n++;
// QString s += distributor.getDbKey() % u" " % QString::number(c) % "\n";
} }
QHorizontalBarSeries *series = new QHorizontalBarSeries(this); QHorizontalBarSeries *series = new QHorizontalBarSeries(this);
series->append(setDistributors); series->append(setDistributors);
this->horizontalBarChart(distributorsForAxis, series);
}
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;
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->addSeries(series);
// chart->setTitle("Distributors");
// Y // Y
QBarCategoryAxis *axisY = new QBarCategoryAxis(); QBarCategoryAxis *axisY = new QBarCategoryAxis();
axisY->append(distributorsForAxis); axisY->append(categories);
chart->addAxis(axisY, Qt::AlignLeft); chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY); series->attachAxis(axisY);
@@ -130,5 +163,23 @@ namespace BlackGui
series->attachAxis(axisX); series->attachAxis(axisX);
axisX->applyNiceNumbers(); 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
} // ns } // ns

View File

@@ -17,6 +17,11 @@
#include <QScopedPointer> #include <QScopedPointer>
namespace Ui { class CAircraftModelStatisticsDialog; } namespace Ui { class CAircraftModelStatisticsDialog; }
namespace QtCharts
{
class QBarSeries;
class QHorizontalBarSeries;
}
namespace BlackGui namespace BlackGui
{ {
namespace Views namespace Views
@@ -55,6 +60,15 @@ namespace BlackGui
//! Chart for distributors //! Chart for distributors
void chartDistributors(); 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::CAircraftModelStatisticsDialog> ui; QScopedPointer<Ui::CAircraftModelStatisticsDialog> ui;
BlackMisc::Simulation::CAircraftModelList m_models; BlackMisc::Simulation::CAircraftModelList m_models;
}; };

View File

@@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>300</width> <width>333</width>
<height>298</height> <height>298</height>
</rect> </rect>
</property> </property>
@@ -23,7 +23,7 @@
<item> <item>
<widget class="QTabWidget" name="tw_ModelStatistics"> <widget class="QTabWidget" name="tw_ModelStatistics">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>1</number>
</property> </property>
<widget class="QWidget" name="tb_GeneralStatistics"> <widget class="QWidget" name="tb_GeneralStatistics">
<attribute name="title"> <attribute name="title">
@@ -78,6 +78,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QRadioButton" name="rb_AircraftIcao">
<property name="text">
<string>aircraft</string>
</property>
</widget>
</item>
<item> <item>
<spacer name="hs_ChartType"> <spacer name="hs_ChartType">
<property name="orientation"> <property name="orientation">
@@ -116,18 +123,29 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QChartView" name="qv_Chart"> <widget class="QScrollArea" name="scrollArea">
<property name="sceneRect"> <property name="widgetResizable">
<rectf> <bool>true</bool>
<x>0.000000000000000</x>
<y>0.000000000000000</y>
<width>400.000000000000000</width>
<height>300.000000000000000</height>
</rectf>
</property>
<property name="dragMode">
<enum>QGraphicsView::ScrollHandDrag</enum>
</property> </property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>299</width>
<height>191</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QChartView" name="qv_Chart">
<property name="dragMode">
<enum>QGraphicsView::NoDrag</enum>
</property>
</widget>
</item>
</layout>
</widget>
</widget> </widget>
</item> </item>
</layout> </layout>