File indexing completed on 2025-09-14 03:43:14

0001 /*
0002     File             : XYFitCurveDock.h
0003     Project          : LabPlot
0004     Description      : widget for editing properties of equation curves
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2014-2021 Alexander Semke <alexander.semke@web.de>
0007     SPDX-FileCopyrightText: 2017-2022 Stefan Gerlach <stefan.gerlach@uni.kn>
0008 
0009     SPDX-License-Identifier: GPL-2.0-or-later
0010 */
0011 
0012 #ifndef XYFITCURVEDOCK_H
0013 #define XYFITCURVEDOCK_H
0014 
0015 #include "backend/worksheet/plots/cartesian/XYFitCurve.h"
0016 #include "kdefrontend/dockwidgets/XYCurveDock.h"
0017 #include "ui_xyfitcurvedockgeneraltab.h"
0018 
0019 class AspectTreeModel;
0020 class TreeViewComboBox;
0021 class FitParametersWidget;
0022 class KMessageWidget;
0023 
0024 class XYFitCurveDock : public XYCurveDock {
0025     Q_OBJECT
0026 
0027 public:
0028     explicit XYFitCurveDock(QWidget* parent);
0029     ~XYFitCurveDock() override;
0030 
0031     void setCurves(QList<XYCurve*>);
0032     void setupGeneral() override;
0033 
0034 private:
0035     void initGeneralTab() override;
0036     void updateSettings(const AbstractColumn*);
0037     void showFitResult();
0038     bool eventFilter(QObject*, QEvent*) override;
0039 
0040     Ui::XYFitCurveDockGeneralTab uiGeneralTab;
0041     TreeViewComboBox* cbDataSourceCurve{nullptr};
0042     TreeViewComboBox* cbXDataColumn{nullptr};
0043     TreeViewComboBox* cbYDataColumn{nullptr};
0044     TreeViewComboBox* cbXErrorColumn{nullptr};
0045     TreeViewComboBox* cbYErrorColumn{nullptr};
0046     FitParametersWidget* fitParametersWidget{nullptr};
0047 
0048     XYFitCurve* m_fitCurve{nullptr};
0049     XYFitCurve::FitData m_fitData;
0050     QList<double> parameters;
0051     QList<double> parameterValues;
0052     bool m_parametersValid{true};
0053     KMessageWidget* m_messageWidget{nullptr};
0054     AspectTreeModel* m_dataSourceModel{nullptr};
0055 
0056 protected:
0057     void setModel();
0058 
0059 private Q_SLOTS:
0060     // SLOTs for changes triggered in XYFitCurveDock
0061     // general tab
0062     void dataSourceTypeChanged(int);
0063     void dataSourceCurveChanged(const QModelIndex&);
0064     void xWeightChanged(int);
0065     void yWeightChanged(int);
0066     void categoryChanged(int);
0067     void modelTypeChanged(int);
0068     void algorithmChanged(int);
0069     void xDataColumnChanged(const QModelIndex&);
0070     void yDataColumnChanged(const QModelIndex&);
0071     void xErrorColumnChanged(const QModelIndex&);
0072     void yErrorColumnChanged(const QModelIndex&);
0073 
0074     void showDataOptions(bool);
0075     void showWeightsOptions(bool);
0076     void showFitOptions(bool);
0077     void showParameters(bool);
0078     void showResults(bool);
0079 
0080     void showConstants();
0081     void showFunctions();
0082     void updateParameterList();
0083     void parametersChanged(bool updateParameterWidget = true);
0084     void parametersValid(bool);
0085     void showOptions();
0086     void insertFunction(const QString&) const;
0087     void insertConstant(const QString&) const;
0088     //  void setPlotXRange();
0089     void recalculateClicked();
0090     void updateModelEquation();
0091     void expressionChanged();
0092     void enableRecalculate();
0093     void resultParametersContextMenuRequest(QPoint);
0094     void resultGoodnessContextMenuRequest(QPoint);
0095     void resultLogContextMenuRequest(QPoint);
0096     void resultCopy(bool copyAll = false);
0097     void resultCopyAll();
0098 
0099     // SLOTs for changes triggered in XYCurve
0100     // General-Tab
0101     void curveDataSourceTypeChanged(XYAnalysisCurve::DataSourceType);
0102     void curveDataSourceCurveChanged(const XYCurve*);
0103     void curveDataSourceHistogramChanged(const Histogram*);
0104     void curveXDataColumnChanged(const AbstractColumn*);
0105     void curveYDataColumnChanged(const AbstractColumn*);
0106     void curveXErrorColumnChanged(const AbstractColumn*);
0107     void curveYErrorColumnChanged(const AbstractColumn*);
0108     void curveFitDataChanged(const XYFitCurve::FitData&);
0109     void dataChanged();
0110 };
0111 
0112 #endif