From 80a36f4346a7224c0925c8ba0526a7777fcea443 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 9 Jan 2019 06:24:33 +0100 Subject: [PATCH] Ref T509, added a first version of QChart for distributors --- src/blackgui/blackgui.pro | 2 +- .../views/aircraftmodelstatisticsdialog.cpp | 87 ++++++++++++++- .../views/aircraftmodelstatisticsdialog.h | 15 +++ .../views/aircraftmodelstatisticsdialog.ui | 103 +++++++++++++++++- 4 files changed, 201 insertions(+), 6 deletions(-) diff --git a/src/blackgui/blackgui.pro b/src/blackgui/blackgui.pro index c852a8d69..ed9c12112 100644 --- a/src/blackgui/blackgui.pro +++ b/src/blackgui/blackgui.pro @@ -1,6 +1,6 @@ load(common_pre) -QT += core dbus gui network svg widgets +QT += core dbus gui network svg widgets charts TARGET = blackgui TEMPLATE = lib diff --git a/src/blackgui/views/aircraftmodelstatisticsdialog.cpp b/src/blackgui/views/aircraftmodelstatisticsdialog.cpp index daa93fd09..e8408270a 100644 --- a/src/blackgui/views/aircraftmodelstatisticsdialog.cpp +++ b/src/blackgui/views/aircraftmodelstatisticsdialog.cpp @@ -15,7 +15,10 @@ #include #include #include +#include +#include +using namespace QtCharts; using namespace BlackMisc::Simulation; namespace BlackGui @@ -27,9 +30,15 @@ namespace BlackGui ui(new Ui::CAircraftModelStatisticsDialog) { ui->setupUi(this); + ui->tw_ModelStatistics->setCurrentIndex(0); this->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - connect(ui->pb_GenerateMatrix, &QPushButton::clicked, this, &CAircraftModelStatisticsDialog::displayHTMLMatrix); + 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() @@ -37,8 +46,8 @@ namespace BlackGui void CAircraftModelStatisticsDialog::analyzeModels(const CAircraftModelList &models) { - ui->te_GeneralStatistics->setHtml(models.htmlStatistics(true, true)); m_models = models; + ui->te_GeneralStatistics->setHtml(models.htmlStatistics(true, true)); } void CAircraftModelStatisticsDialog::displayHTMLMatrix() @@ -47,5 +56,79 @@ namespace BlackGui if (file.isEmpty()) { return; } 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); + } + + 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; } + } + + void CAircraftModelStatisticsDialog::chartDistributors() + { + QChart *chart = ui->qv_Chart->chart(); + this->resetChart(); + const QMap 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; + 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++; + // QString s += distributor.getDbKey() % u" " % QString::number(c) % "\n"; + } + + QHorizontalBarSeries *series = new QHorizontalBarSeries(this); + series->append(setDistributors); + chart->addSeries(series); + // chart->setTitle("Distributors"); + + // Y + QBarCategoryAxis *axisY = new QBarCategoryAxis(); + axisY->append(distributorsForAxis); + chart->addAxis(axisY, Qt::AlignLeft); + series->attachAxis(axisY); + + // X + QValueAxis *axisX = new QValueAxis(); + chart->addAxis(axisX, Qt::AlignBottom); + series->attachAxis(axisX); + axisX->applyNiceNumbers(); + } } // ns } // ns diff --git a/src/blackgui/views/aircraftmodelstatisticsdialog.h b/src/blackgui/views/aircraftmodelstatisticsdialog.h index c4c76e5fd..4fb60342e 100644 --- a/src/blackgui/views/aircraftmodelstatisticsdialog.h +++ b/src/blackgui/views/aircraftmodelstatisticsdialog.h @@ -40,6 +40,21 @@ namespace BlackGui //! Display the HTML matrix void displayHTMLMatrix(); + //! Zoom in/out + void zoom(); + + //! Init chart + void initChart(); + + //! Reset chart + void resetChart(); + + //! Chart + void showChart(); + + //! Chart for distributors + void chartDistributors(); + QScopedPointer ui; BlackMisc::Simulation::CAircraftModelList m_models; }; diff --git a/src/blackgui/views/aircraftmodelstatisticsdialog.ui b/src/blackgui/views/aircraftmodelstatisticsdialog.ui index a42e468ac..58fc7bc31 100644 --- a/src/blackgui/views/aircraftmodelstatisticsdialog.ui +++ b/src/blackgui/views/aircraftmodelstatisticsdialog.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 300 + 298 @@ -42,6 +42,96 @@ + + + Charts + + + + + + + 0 + 25 + + + + + 1 + + + 1 + + + 1 + + + 1 + + + + + distributors + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + - + + + + + + + show + + + + + + + + + + + 0.000000000000000 + 0.000000000000000 + 400.000000000000000 + 300.000000000000000 + + + + QGraphicsView::ScrollHandDrag + + + + + Matrix @@ -54,7 +144,7 @@ - + generate matix @@ -77,6 +167,13 @@ + + + QChartView + QGraphicsView +
QtCharts
+
+