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

0001 /*
0002     KmPlot - a math. function plotter for the KDE-Desktop
0003 
0004     SPDX-FileCopyrightText: 2005 Fredrik Edemar <f_edemar@linux.se>
0005     SPDX-FileCopyrightText: 2007  David Saxton <david@bluehaze.org>
0006 
0007     This file is part of the KDE Project.
0008     KmPlot is part of the KDE-EDU Project.
0009 
0010     SPDX-License-Identifier: GPL-2.0-or-later
0011 
0012 */
0013 
0014 // local includes
0015 #include "ksliderwindow.h"
0016 #include "view.h"
0017 #include "xparser.h"
0018 
0019 #include <KConfigGroup>
0020 
0021 #include <QCloseEvent>
0022 #include <QDialogButtonBox>
0023 #include <QPushButton>
0024 #include <QVBoxLayout>
0025 
0026 // BEGIN class SliderWidget
0027 SliderWidget::SliderWidget(QWidget *parent, int number)
0028     : QGroupBox(i18n("Slider %1", number + 1), parent)
0029 {
0030     m_number = number;
0031 
0032     setupUi(this);
0033 
0034     slider->setToolTip(i18n("Move slider to change the parameter of the function plot connected to this slider."));
0035 
0036     KConfig config("kmplotrc");
0037     KConfigGroup group = config.group("slider" + QString::number(m_number));
0038 
0039     min->setText(group.readEntry("min", "0"));
0040     max->setText(group.readEntry("max", "10"));
0041     slider->setValue(group.readEntry("value", 500));
0042 
0043     connect(slider, &QSlider::valueChanged, this, &SliderWidget::updateValue);
0044     connect(min, &EquationEdit::editingFinished, this, &SliderWidget::updateValue);
0045     connect(max, &EquationEdit::editingFinished, this, &SliderWidget::updateValue);
0046 
0047     updateValue();
0048 }
0049 
0050 SliderWidget::~SliderWidget()
0051 {
0052     KConfig config("kmplotrc");
0053     KConfigGroup group = config.group("slider" + QString::number(m_number));
0054 
0055     group.writeEntry("min", min->text());
0056     group.writeEntry("max", max->text());
0057     group.writeEntry("value", slider->value());
0058 }
0059 
0060 void SliderWidget::updateValue()
0061 {
0062     valueLabel->setText(View::self()->posToString(value(), 0.001 * (max->value() - min->value()), View::DecimalFormat));
0063     emit valueChanged();
0064 }
0065 
0066 double SliderWidget::value()
0067 {
0068     double prop = double(slider->value() - slider->minimum()) / double(slider->maximum() - slider->minimum());
0069     return prop * (max->value() - min->value()) + min->value();
0070 }
0071 // END class SliderWidget
0072 
0073 // BEGIN class KSliderWindow
0074 KSliderWindow::KSliderWindow(QWidget *parent)
0075     : QDialog(parent)
0076 {
0077     setModal(false);
0078     QWidget *widget = new QWidget(this);
0079     setWindowTitle(i18nc("@title:window", "Sliders"));
0080 
0081     QVBoxLayout *layout = new QVBoxLayout(this);
0082     layout->addWidget(widget);
0083 
0084     Q_ASSERT(SLIDER_COUNT == 4); // safety check, in case SLIDER_COUNT is increased but not this code
0085 
0086     for (int i = 0; i < SLIDER_COUNT; ++i) {
0087         m_sliders[i] = new SliderWidget(widget, i);
0088         connect(m_sliders[i], &SliderWidget::valueChanged, this, &KSliderWindow::valueChanged);
0089         layout->addWidget(m_sliders[i]);
0090     }
0091     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close);
0092     connect(buttonBox, &QDialogButtonBox::rejected, this, &KSliderWindow::reject);
0093     layout->addWidget(buttonBox);
0094 
0095     resize(layout->minimumSize());
0096 }
0097 
0098 KSliderWindow::~KSliderWindow()
0099 {
0100 }
0101 
0102 double KSliderWindow::value(int slider)
0103 {
0104     Q_ASSERT((slider >= 0) && (slider < SLIDER_COUNT));
0105     return m_sliders[slider]->value();
0106 }
0107 
0108 void KSliderWindow::closeEvent(QCloseEvent *e)
0109 {
0110     emit windowClosed();
0111     e->accept();
0112 }
0113 // END class KSliderWindow
0114 
0115 #include "moc_ksliderwindow.cpp"