File indexing completed on 2024-04-21 03:42:09

0001 /*
0002     KmPlot - a math. function plotter for the KDE-Desktop
0003 
0004     SPDX-FileCopyrightText: 2006 David Saxton <david@bluehaze.org>
0005 
0006     This file is part of the KDE Project.
0007     KmPlot is part of the KDE-EDU Project.
0008 
0009     SPDX-License-Identifier: GPL-2.0-or-later
0010 */
0011 
0012 #include "parameterswidget.h"
0013 
0014 #include "kparametereditor.h"
0015 #include "xparser.h"
0016 #include <QPointer>
0017 
0018 // BEGIN class ParametersWidget
0019 ParametersWidget::ParametersWidget(QWidget *parent)
0020     : QGroupBox(parent)
0021 {
0022     setupUi(this);
0023 
0024     for (int number = 0; number < SLIDER_COUNT; number++)
0025         listOfSliders->addItem(i18n("Slider No. %1", number + 1));
0026 
0027     connect(editParameterListButton, &QPushButton::clicked, this, &ParametersWidget::editParameterList);
0028     connect(useSlider, &QCheckBox::toggled, this, &ParametersWidget::updateEquationEdits);
0029     connect(useList, &QCheckBox::toggled, this, &ParametersWidget::updateEquationEdits);
0030 }
0031 
0032 void ParametersWidget::init(const ParameterSettings &settings)
0033 {
0034     useSlider->setChecked(settings.useSlider);
0035     useList->setChecked(settings.useList);
0036 
0037     listOfSliders->setCurrentIndex(settings.sliderID);
0038     m_parameters = settings.list;
0039 }
0040 
0041 ParameterSettings ParametersWidget::parameterSettings() const
0042 {
0043     ParameterSettings s;
0044 
0045     s.useSlider = useSlider->isChecked();
0046     s.useList = useList->isChecked();
0047 
0048     s.sliderID = listOfSliders->currentIndex();
0049     s.list = m_parameters;
0050 
0051     return s;
0052 }
0053 
0054 void ParametersWidget::editParameterList()
0055 {
0056     QPointer<KParameterEditor> dlg = new KParameterEditor(&m_parameters, nullptr);
0057     dlg->exec();
0058     delete dlg;
0059     emit parameterListChanged();
0060 }
0061 
0062 void ParametersWidget::updateEquationEdits()
0063 {
0064     if (!useSlider->isChecked() && !useList->isChecked()) {
0065         // Don't need to add any parameter variables
0066         return;
0067     }
0068 
0069     for (EquationEdit *edit : qAsConst(m_equationEdits)) {
0070         if (edit->equation()->usesParameter() || !edit->equation()->looksLikeFunction())
0071             continue;
0072 
0073         QString text = edit->text();
0074         int bracket = text.indexOf(')');
0075         if (bracket < 0)
0076             continue;
0077 
0078         text.replace(bracket, 1, ",k)");
0079         edit->setText(text);
0080     }
0081 }
0082 
0083 void ParametersWidget::associateEquationEdit(EquationEdit *edit)
0084 {
0085     m_equationEdits << edit;
0086 }
0087 // END class ParametersWidget
0088 
0089 #include "moc_parameterswidget.cpp"