File indexing completed on 2024-05-19 16:31:47

0001 /*
0002  *  SPDX-License-Identifier: GPL-2.0-or-later
0003  *
0004  *  SPDX-FileCopyrightText: 2001 Michael v.Ostheim <MvOstheim@web.de>
0005  */
0006 
0007 #include "gammactrl.h"
0008 
0009 #include <QHBoxLayout>
0010 #include <qlabel.h>
0011 #include <qlineedit.h>
0012 #include <qstring.h>
0013 
0014 #include "displaynumber.h"
0015 #include "xvidextwrap.h"
0016 
0017 GammaCtrl::GammaCtrl(QWidget *parent, XVidExtWrap *xvid, int channel, const QString &mingamma, const QString &maxgamma, const QString &setgamma)
0018     : QWidget(parent)
0019 {
0020     int maxslider = (int)((maxgamma.toDouble() - mingamma.toDouble() + 0.0005) * 20);
0021     int setslider = (int)((setgamma.toDouble() - mingamma.toDouble() + 0.0005) * 20);
0022     setslider = (setslider > maxslider) ? maxslider : setslider;
0023     setslider = (setslider < 0) ? 0 : setslider;
0024 
0025     suspended = false;
0026     changed = false;
0027     ming = mingamma.toFloat();
0028     mgamma = mingamma;
0029     oldpos = setslider;
0030     gchannel = channel;
0031     xv = xvid;
0032 
0033     QHBoxLayout *layout = new QHBoxLayout(this);
0034 
0035     slider = new QSlider(Qt::Horizontal, this);
0036     slider->setTickPosition(QSlider::TicksBelow);
0037     slider->setRange(0, maxslider);
0038     slider->setTickInterval(2);
0039     slider->setValue(setslider);
0040     layout->addWidget(slider);
0041     connect(slider, SIGNAL(valueChanged(int)), SLOT(setGamma(int)));
0042     connect(slider, &QAbstractSlider::sliderPressed, this, &GammaCtrl::pressed);
0043 
0044     textfield = new DisplayNumber(this, 4, 2);
0045     textfield->setText(setgamma);
0046     layout->addWidget(textfield);
0047 }
0048 
0049 GammaCtrl::~GammaCtrl()
0050 {
0051 }
0052 
0053 /** set gamma, slider and textfield */
0054 void GammaCtrl::setGamma(const QString &gamma)
0055 {
0056     int sliderpos;
0057 
0058     sliderpos = (int)((gamma.toDouble() - mgamma.toDouble() + 0.0005) * 20);
0059     changed = true;
0060     slider->setValue(sliderpos);
0061 
0062     setGamma(sliderpos);
0063     if (suspended) {
0064         suspended = false;
0065         textfield->setDisabled(false);
0066     }
0067 }
0068 
0069 /** set slider and textfield */
0070 void GammaCtrl::setControl(const QString &gamma)
0071 {
0072     int sliderpos;
0073 
0074     sliderpos = (int)((gamma.toDouble() - mgamma.toDouble() + 0.0005) * 20);
0075     setCtrl(sliderpos);
0076 }
0077 
0078 /** Return the current gamma value with precision prec */
0079 QString GammaCtrl::gamma(int prec)
0080 {
0081     QString gammatext;
0082     gammatext.setNum(xv->getGamma(gchannel) + 0.0005, 'f', prec);
0083 
0084     return (gammatext);
0085 }
0086 
0087 /** Slot: set gamma and textfield */
0088 void GammaCtrl::setGamma(int sliderpos)
0089 {
0090     if (sliderpos != oldpos || changed) {
0091         xv->setGamma(gchannel, ming + (float)(slider->value()) * 0.05);
0092         textfield->setNum(xv->getGamma(gchannel));
0093         oldpos = sliderpos;
0094         changed = false;
0095         Q_EMIT gammaChanged(sliderpos);
0096     }
0097 }
0098 
0099 /** Slot: set slider and textfield */
0100 void GammaCtrl::setCtrl(int sliderpos)
0101 {
0102     if (suspended) {
0103         suspended = false;
0104         textfield->setDisabled(false);
0105     }
0106     oldpos = sliderpos;
0107     slider->setValue(sliderpos);
0108     textfield->setNum(xv->getGamma(gchannel));
0109 }
0110 
0111 /** Slot: disable textfield */
0112 void GammaCtrl::suspend()
0113 {
0114     if (!suspended) {
0115         suspended = true;
0116         textfield->setDisabled(true);
0117     }
0118 }
0119 
0120 /** Slot: Change status of GammaCtrl when pressed */
0121 void GammaCtrl::pressed()
0122 {
0123     if (suspended) {
0124         suspended = false;
0125         textfield->setDisabled(false);
0126         changed = true;
0127         setGamma(slider->value());
0128     }
0129 }