mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-12 15:25:34 +08:00
Ref T509, added ICAO graph
This commit is contained in:
committed by
Mat Sutcliffe
parent
20b83d66eb
commit
3fa25798ce
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user