1 /*************************************************************************** 2 File : FitDialog.h 3 Project : QtiPlot 4 -------------------------------------------------------------------- 5 Copyright : (C) 2004 - 2011 by Ion Vasilief 6 Email (use @ for *) : ion_vasilief*yahoo.fr 7 Description : Fit Wizard 8 9 ***************************************************************************/ 10 11 /*************************************************************************** 12 * * 13 * This program is free software; you can redistribute it and/or modify * 14 * it under the terms of the GNU General Public License as published by * 15 * the Free Software Foundation; either version 2 of the License, or * 16 * (at your option) any later version. * 17 * * 18 * This program is distributed in the hope that it will be useful, * 19 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 21 * GNU General Public License for more details. * 22 * * 23 * You should have received a copy of the GNU General Public License * 24 * along with this program; if not, write to the Free Software * 25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, * 26 * Boston, MA 02110-1301 USA * 27 * * 28 ***************************************************************************/ 29 #ifndef FITDIALOG_H 30 #define FITDIALOG_H 31 32 #include <Graph.h> 33 #include <QDoubleSpinBox> 34 #include <QCheckBox> 35 36 class QPushButton; 37 class QLineEdit; 38 class QComboBox; 39 class QStackedWidget; 40 class QWidget; 41 class QTextEdit; 42 class QListWidget; 43 class QTableWidget; 44 class QSpinBox; 45 class QLabel; 46 class QRadioButton; 47 class QLineEdit; 48 class ColorButton; 49 class Fit; 50 class Table; 51 class DoubleSpinBox; 52 class FunctionCurve; 53 class MdiSubWindow; 54 class ScriptEdit; 55 56 //! Fit Wizard 57 class FitDialog : public QDialog 58 { 59 Q_OBJECT 60 61 public: 62 FitDialog(Graph *g, QWidget* parent = 0); 63 64 void setSrcTables(QList<MdiSubWindow*> tables); 65 66 protected: 67 void closeEvent (QCloseEvent * e ); 68 void initFitPage(); 69 void initEditPage(); 70 void initAdvancedPage(); 71 void chooseFitModelsFolder(); 72 void choosePluginsFolder(); 73 74 private slots: 75 void accept(); 76 //! Clears the function editor, the parameter names and the function name 77 void resetFunction(); 78 void showFitPage(); 79 void showEditPage(); 80 void showAdvancedPage(); 81 void showFunctionsList(int category); 82 void showParseFunctions(); 83 void showExpression(int function); 84 void addFunction(); 85 void addFunctionName(); 86 void setFunction(bool ok); 87 void saveUserFunction(); 88 void removeUserFunction(); 89 void setGraph(Graph *g); 90 void activateCurve(const QString&); 91 void chooseFolder(); 92 void changeDataRange(); 93 void selectSrcTable(int tabnr); 94 void enableWeightingParameters(int index); 95 void showPointsBox(bool); 96 void showParametersTable(); 97 void showCovarianceMatrix(); 98 void showResiduals(); 99 void showConfidenceLimits(); 100 void showPredictionLimits(); 101 102 //! Applies the user changes to the numerical format of the output results 103 void applyChanges(); 104 105 //! Deletes the result fit curves from the plot 106 void deleteFitCurves(); 107 108 //! Enable the "Apply" button 109 void enableApplyChanges(int = 0); 110 void setNumPeaks(int peaks); 111 void saveInitialGuesses(); 112 void loadInitialGuesses(); 113 void guessInitialValues(); 114 void returnToFitPage(); 115 void updatePreview(); 116 void updatePreviewColor(const QColor &); 117 void showPreview(bool on); 118 void showParameterRange(bool); 119 void guessParameters(); 120 121 private: 122 void loadPlugins(); 123 void loadUserFunctions(); 124 void initBuiltInFunctions(); 125 void modifyGuesses(double* initVal); 126 QStringList builtInFunctionNames(); 127 QStringList userFunctionNames(); 128 QStringList plugInNames(); 129 QString parseFormula(const QString& s); 130 void setEditorTextColor(const QColor& c); 131 void setCurrentFit(int); 132 133 Fit *d_current_fit; 134 Graph *d_graph; 135 QPointer <Table> d_param_table; 136 QList <Fit*> d_user_functions, d_built_in_functions, d_plugins; 137 QList <QwtPlotCurve*> d_result_curves; 138 QList <MdiSubWindow*> srcTables; 139 FunctionCurve *d_preview_curve; 140 141 QCheckBox* boxUseBuiltIn; 142 QStackedWidget* tw; 143 QPushButton* buttonOk; 144 QPushButton* buttonCancel1; 145 QPushButton* buttonCancel2; 146 QPushButton* buttonCancel3; 147 QPushButton* buttonAdvanced; 148 QPushButton* buttonClear; 149 QPushButton* buttonPlugins; 150 QPushButton* btnBack; 151 QPushButton* btnSaveGuesses, *btnLoadGuesses, *btnGuess; 152 QComboBox* boxCurve; 153 QComboBox* boxAlgorithm; 154 QTableWidget* boxParams; 155 DoubleSpinBox* boxFrom; 156 DoubleSpinBox* boxTo; 157 DoubleSpinBox* boxTolerance; 158 QSpinBox* boxPoints, *generatePointsBox, *boxPrecision, *polynomOrderBox; 159 QWidget *fitPage, *editPage, *advancedPage; 160 ScriptEdit *editBox; 161 QTextEdit *explainBox, *boxFunction; 162 QListWidget *categoryBox, *funcBox; 163 QLineEdit *boxName; 164 QLabel *boxErrorMsg, *boxParam; 165 QLabel *lblFunction, *lblPoints, *polynomOrderLabel; 166 QPushButton *btnAddFunc, *btnDelFunc, *btnContinue, *btnApply; 167 QPushButton *buttonEdit, *btnAddTxt, *btnAddName, *btnDeleteFitCurves; 168 ColorButton* boxColor; 169 QComboBox *boxWeighting, *tableNamesBox, *colNamesBox; 170 QRadioButton *generatePointsBtn, *samePointsBtn; 171 QPushButton *btnParamTable, *btnCovMatrix, *btnParamRange; 172 QPushButton *btnResiduals, *btnConfidenceLimits, *btnPredictionLimits; 173 DoubleSpinBox *boxConfidenceLevel; 174 QLineEdit *covMatrixName, *paramTableName; 175 QCheckBox *plotLabelBox, *logBox, *scaleErrorsBox, *globalParamTableBox; 176 QCheckBox *previewBox; 177 }; 178 #endif // FITDIALOG_H 179