! \class FitOptionsWidget \brief Widget for editing advanced fit options. \ingroup frontend */
| 21 | \ingroup frontend |
| 22 | */ |
| 23 | FitOptionsWidget::FitOptionsWidget(QWidget* parent, XYFitCurve::FitData* fitData, XYFitCurve* fitCurve) |
| 24 | : QWidget(parent) |
| 25 | , m_fitData(fitData) |
| 26 | , m_fitCurve(fitCurve) { |
| 27 | ui.setupUi(this); |
| 28 | ui.pbApply->setIcon(QIcon::fromTheme(QStringLiteral("dialog-ok-apply"))); |
| 29 | ui.pbCancel->setIcon(QIcon::fromTheme(QStringLiteral("dialog-cancel"))); |
| 30 | |
| 31 | // TODO: show "robust" option when robust fitting is possible |
| 32 | // ui.cbRobust->addItem(i18n("on")); |
| 33 | // ui.cbRobust->addItem(i18n("off")); |
| 34 | ui.lRobust->setVisible(false); |
| 35 | ui.cbRobust->setVisible(false); |
| 36 | |
| 37 | ui.leMaxIterations->setValidator(new QIntValidator(ui.leMaxIterations)); |
| 38 | ui.leEps->setValidator(new QDoubleValidator(ui.leEps)); |
| 39 | ui.leEvaluatedPoints->setValidator(new QIntValidator(ui.leEvaluatedPoints)); |
| 40 | |
| 41 | const auto numberLocale = QLocale(); |
| 42 | ui.leMaxIterations->setText(numberLocale.toString(m_fitData->maxIterations)); |
| 43 | ui.leEps->setText(numberLocale.toString(m_fitData->eps)); |
| 44 | ui.leEvaluatedPoints->setText(numberLocale.toString(static_cast<qulonglong>(m_fitData->evaluatedPoints))); |
| 45 | ui.sbConfidenceInterval->setLocale(numberLocale); |
| 46 | |
| 47 | // range widgets |
| 48 | const auto* plot = static_cast<const CartesianPlot*>(fitCurve->parentAspect()); |
| 49 | const int xIndex = plot->coordinateSystem(m_fitCurve->coordinateSystemIndex())->index(CartesianCoordinateSystem::Dimension::X); |
| 50 | m_dateTimeRange = (plot->xRangeFormat(xIndex) != RangeT::Format::Numeric); |
| 51 | if (!m_dateTimeRange) { |
| 52 | ui.leMin->setText(numberLocale.toString(m_fitData->fitRange.start())); |
| 53 | ui.leMax->setText(numberLocale.toString(m_fitData->fitRange.end())); |
| 54 | ui.leEvalMin->setText(numberLocale.toString(m_fitData->evalRange.start())); |
| 55 | ui.leEvalMax->setText(numberLocale.toString(m_fitData->evalRange.end())); |
| 56 | } else { |
| 57 | ui.dateTimeEditMin->setMSecsSinceEpochUTC(m_fitData->fitRange.start()); |
| 58 | ui.dateTimeEditMax->setMSecsSinceEpochUTC(m_fitData->fitRange.end()); |
| 59 | ui.dateTimeEditEvalMin->setMSecsSinceEpochUTC(m_fitData->evalRange.start()); |
| 60 | ui.dateTimeEditEvalMax->setMSecsSinceEpochUTC(m_fitData->evalRange.end()); |
| 61 | } |
| 62 | // changing data range not supported by ML |
| 63 | if (fitData->algorithm == nsl_fit_algorithm_ml) |
| 64 | ui.cbAutoRange->setEnabled(false); |
| 65 | |
| 66 | ui.leMin->setVisible(!m_dateTimeRange); |
| 67 | ui.leMax->setVisible(!m_dateTimeRange); |
| 68 | ui.lXRange->setVisible(!m_dateTimeRange); |
| 69 | ui.leEvalMin->setVisible(!m_dateTimeRange); |
| 70 | ui.leEvalMax->setVisible(!m_dateTimeRange); |
| 71 | ui.lEvalRange->setVisible(!m_dateTimeRange); |
| 72 | ui.dateTimeEditMin->setVisible(m_dateTimeRange); |
| 73 | ui.dateTimeEditMax->setVisible(m_dateTimeRange); |
| 74 | ui.lXRangeDateTime->setVisible(m_dateTimeRange); |
| 75 | ui.dateTimeEditEvalMin->setVisible(m_dateTimeRange); |
| 76 | ui.dateTimeEditEvalMax->setVisible(m_dateTimeRange); |
| 77 | ui.lEvalRangeDateTime->setVisible(m_dateTimeRange); |
| 78 | |
| 79 | // auto range |
| 80 | ui.cbAutoRange->setChecked(m_fitData->autoRange); |
nothing calls this directly
no test coverage detected