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