File indexing completed on 2025-01-12 03:59:35
0001 /** 0002 * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved. 0003 * 0004 * This file is part of the KD Chart library. 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "mainwindow.h" 0010 0011 #include "ModelParamVsParam.h" 0012 #include "ModelParamVsParamPlot.h" 0013 0014 #include <QLabel> 0015 #include <QLineEdit> 0016 0017 0018 #include <KChartChart> 0019 #include <KChartDataValueAttributes> 0020 #include <KChartGridAttributes> 0021 #include <KChartLineDiagram> 0022 0023 0024 using namespace KChart; 0025 0026 0027 MainWindow::MainWindow( 0028 QWidget *p_parent) 0029 : 0030 QWidget(p_parent), 0031 m_sourceModel(new ModelParamVsParam), 0032 m_timeoutLineEdit(new QLineEdit("1")), 0033 m_nrOfParametersLineEdit(new QLineEdit("4")), 0034 m_nrOfSamplesLineEdit(new QLineEdit("4")), 0035 m_paramVsParamGridLayout(new QGridLayout) 0036 { 0037 connect(m_timeoutLineEdit, SIGNAL(editingFinished()), SLOT(timeoutEditingFinished())); 0038 connect(m_nrOfParametersLineEdit, SIGNAL(editingFinished()), SLOT(editingFinished())); 0039 connect(m_nrOfSamplesLineEdit, SIGNAL(editingFinished()), SLOT(editingFinished())); 0040 0041 QVBoxLayout *vBoxLayout = new QVBoxLayout; 0042 setLayout(vBoxLayout); 0043 0044 QGridLayout *gridLayout = new QGridLayout; 0045 vBoxLayout->addLayout(gridLayout); 0046 gridLayout->setColumnStretch(2, 1); 0047 0048 int row(0); 0049 0050 gridLayout->addWidget(new QLabel("Timeout [sec]:"), row, 0); 0051 gridLayout->addWidget(m_timeoutLineEdit, row++, 1); 0052 0053 gridLayout->addWidget(new QLabel("Number of Parameters:"), row, 0); 0054 gridLayout->addWidget(m_nrOfParametersLineEdit, row++, 1); 0055 0056 gridLayout->addWidget(new QLabel("Number of Samples:"), row, 0); 0057 gridLayout->addWidget(m_nrOfSamplesLineEdit, row++, 1); 0058 0059 vBoxLayout->addLayout(m_paramVsParamGridLayout); 0060 0061 m_sourceModel->setTimeout(m_timeoutLineEdit->text().toInt()); 0062 m_sourceModel->populate(m_nrOfParametersLineEdit->text().toInt(), m_nrOfSamplesLineEdit->text().toInt()); 0063 addPlots(); 0064 } // MainWindow::MainWindow() 0065 0066 0067 MainWindow::~MainWindow() 0068 { 0069 delete m_sourceModel; 0070 m_sourceModel = nullptr; 0071 } // MainWindow::~MainWindow() 0072 0073 0074 void MainWindow::timeoutEditingFinished() 0075 { 0076 if (m_timeoutLineEdit->isModified()) 0077 { 0078 m_timeoutLineEdit->setModified(false); 0079 m_sourceModel->setTimeout(m_timeoutLineEdit->text().toInt()); 0080 } 0081 } // MainWindow::timeoutEditingFinished() 0082 0083 0084 void MainWindow::editingFinished() 0085 { 0086 if (m_nrOfParametersLineEdit->isModified() || m_nrOfSamplesLineEdit->isModified()) 0087 { 0088 m_nrOfParametersLineEdit->setModified(false); 0089 m_nrOfSamplesLineEdit->setModified(false); 0090 0091 m_sourceModel->populate(m_nrOfParametersLineEdit->text().toInt(), m_nrOfSamplesLineEdit->text().toInt()); 0092 m_sourceModel->stopSampling(); 0093 removePlots(); 0094 addPlots(); 0095 m_sourceModel->startSampling(); 0096 } 0097 } // MainWindow::editingFinished() 0098 0099 0100 void MainWindow::addPlots() 0101 { 0102 for (int r = 0; r < m_sourceModel->columnCount(); r++) 0103 { 0104 for (int c = 0; c < m_sourceModel->columnCount(); c++) 0105 { 0106 0107 Chart * chart = new Chart; 0108 m_paramVsParamGridLayout->addWidget(chart, r, c); 0109 0110 CartesianCoordinatePlane * plane = static_cast<CartesianCoordinatePlane *>(chart->coordinatePlane()); 0111 0112 // Hide grid. 0113 GridAttributes ga = plane->globalGridAttributes(); 0114 ga.setGridVisible(false); 0115 plane->setGlobalGridAttributes(ga); 0116 0117 // Set axes fixed scale. 0118 qreal xoffset(c * 10); 0119 qreal yoffset(r * 10); 0120 QPair<qreal, qreal> horizontalRange(xoffset, xoffset + 10); 0121 QPair<qreal, qreal> verticalRange(yoffset, yoffset + 10); 0122 plane->setHorizontalRange(horizontalRange); 0123 plane->setVerticalRange(verticalRange); 0124 0125 if (r == c) 0126 { 0127 } 0128 else 0129 { 0130 ModelParamVsParamPlot *modelParamVsParamPlot = 0131 new ModelParamVsParamPlot(m_sourceModel, c, r); 0132 0133 LineDiagram *lineDiagram = new LineDiagram; 0134 lineDiagram->setDatasetDimension(2); 0135 lineDiagram->setModel(modelParamVsParamPlot); 0136 lineDiagram->setPen(Qt::NoPen); 0137 setMarkerAttributes(lineDiagram); 0138 0139 CartesianAxis *xAxis = new CartesianAxis(lineDiagram); 0140 CartesianAxis *yAxis = new CartesianAxis(lineDiagram); 0141 xAxis->setPosition(CartesianAxis::Bottom); 0142 yAxis->setPosition(CartesianAxis::Left); 0143 xAxis->setTitleText('P' + QString::number(c)); 0144 yAxis->setTitleText('P' + QString::number(r)); 0145 lineDiagram->addAxis(xAxis); 0146 lineDiagram->addAxis(yAxis); 0147 0148 chart->coordinatePlane()->replaceDiagram(lineDiagram); 0149 } 0150 } // for all rows 0151 } // for all columns 0152 } // MainWindow::addPlots() 0153 0154 0155 void MainWindow::removePlots() 0156 { 0157 while (m_paramVsParamGridLayout->count()) 0158 { 0159 Chart *chart = static_cast<Chart *>(m_paramVsParamGridLayout->itemAt(0)->widget()); 0160 m_paramVsParamGridLayout->removeWidget(chart); 0161 delete chart; 0162 } 0163 } // MainWindow::removePlots() 0164 0165 0166 void MainWindow::setMarkerAttributes( 0167 KChart::LineDiagram *p_lineDiagram) 0168 { 0169 QColor markerColor = Qt::green; 0170 MarkerAttributes::MarkerStyle markerStyle = MarkerAttributes::Marker4Pixels; 0171 QColor firstMarkerColor = Qt::red; 0172 MarkerAttributes::MarkerStyle firstMarkerStyle = MarkerAttributes::MarkerDiamond; 0173 DataValueAttributes dva = p_lineDiagram->dataValueAttributes(); 0174 MarkerAttributes ma = dva.markerAttributes(); 0175 TextAttributes ta = dva.textAttributes(); 0176 0177 ma.setVisible(true); 0178 ma.setMarkerColor(markerColor); 0179 ma.setMarkerStyle(markerStyle); 0180 dva.setMarkerAttributes(ma); 0181 0182 ta.setVisible(false); 0183 dva.setTextAttributes(ta); 0184 0185 dva.setVisible(true); 0186 p_lineDiagram->setDataValueAttributes(0, dva); 0187 p_lineDiagram->setDataValueAttributes(1, dva); 0188 0189 // Override for first row. 0190 ma.setMarkerColor(firstMarkerColor); 0191 ma.setMarkerStyle(firstMarkerStyle); 0192 dva.setMarkerAttributes(ma); 0193 QAbstractItemModel *model = p_lineDiagram->model(); 0194 p_lineDiagram->setDataValueAttributes(model->index(0, 0), dva); 0195 p_lineDiagram->setDataValueAttributes(model->index(0, 1), dva); 0196 } // MainWindow::setMarkerAttributes()