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 }