summaryrefslogtreecommitdiffstats
path: root/kgamma/kcmkgamma/gammactrl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kgamma/kcmkgamma/gammactrl.cpp')
-rw-r--r--kgamma/kcmkgamma/gammactrl.cpp138
1 files changed, 138 insertions, 0 deletions
diff --git a/kgamma/kcmkgamma/gammactrl.cpp b/kgamma/kcmkgamma/gammactrl.cpp
new file mode 100644
index 00000000..2052fd34
--- /dev/null
+++ b/kgamma/kcmkgamma/gammactrl.cpp
@@ -0,0 +1,138 @@
+/***************************************************************************
+ gammactrl.cpp - description
+ -------------------
+ begin : Sun Oct 7 2001
+ copyright : (C) 2001 by Michael v.Ostheim
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qstring.h>
+
+#include <kdialog.h>
+
+#include "gammactrl.h"
+#include "xvidextwrap.h"
+#include "displaynumber.h"
+#include "gammactrl.moc"
+
+GammaCtrl::GammaCtrl(QWidget *parent, XVidExtWrap *xvid, int channel, \
+ const QString& mingamma, const QString& maxgamma, const QString& setgamma, \
+ const char *name) : QHBox(parent, name)
+{
+ int maxslider = (int)( ( maxgamma.toDouble() - mingamma.toDouble() \
+ + 0.0005 ) * 20 );
+ int setslider = (int)( ( setgamma.toDouble() - mingamma.toDouble() \
+ + 0.0005 ) * 20 );
+ setslider = (setslider > maxslider) ? maxslider : setslider;
+ setslider = (setslider < 0) ? 0 : setslider;
+
+ suspended = false;
+ changed=false;
+ ming = mingamma.toFloat();
+ mgamma = mingamma;
+ oldpos = setslider;
+ gchannel = channel;
+ xv = xvid;
+
+ setSpacing(KDialog::spacingHint());
+
+ slider = new QSlider(Horizontal, this);
+ slider->setFixedHeight(24);
+ slider->setTickmarks(QSlider::Below);
+ slider->setRange(0, maxslider);
+ slider->setTickInterval(2);
+ slider->setValue(setslider);
+ connect(slider, SIGNAL(valueChanged(int)), SLOT(setGamma(int)));
+ connect(slider, SIGNAL(sliderPressed()), SLOT(pressed()));
+
+ textfield = new DisplayNumber(this, 4, 2);
+ textfield->setText(setgamma);
+
+}
+
+GammaCtrl::~GammaCtrl()
+{
+}
+
+/** set gamma, slider and textfield */
+void GammaCtrl::setGamma(const QString& gamma){
+ int sliderpos;
+
+ sliderpos = (int)( ( gamma.toDouble() - mgamma.toDouble() + 0.0005 ) * 20 );
+ changed=true;
+ slider->setValue(sliderpos);
+
+ setGamma(sliderpos);
+ if (suspended) {
+ suspended=false;
+ textfield->setDisabled(false);
+ }
+}
+
+/** set slider and textfield */
+void GammaCtrl::setControl(const QString& gamma){
+ int sliderpos;
+
+ sliderpos = (int)( ( gamma.toDouble() - mgamma.toDouble() + 0.0005 ) * 20 );
+ setCtrl(sliderpos);
+}
+
+/** Return the current gamma value with precision prec */
+QString GammaCtrl::gamma(int prec){
+ QString gammatext;
+ gammatext.setNum(xv->getGamma(gchannel) + 0.0005, 'f', prec);
+
+ return(gammatext);
+}
+
+/** Slot: set gamma and textfield */
+void GammaCtrl::setGamma(int sliderpos){
+ if (sliderpos != oldpos || changed) {
+ xv->setGamma(gchannel, ming+(float)(slider->value())*0.05);
+ textfield->setNum(xv->getGamma(gchannel));
+ oldpos = sliderpos;
+ changed=false;
+ emit gammaChanged(sliderpos);
+ }
+}
+
+/** Slot: set slider and textfield */
+void GammaCtrl::setCtrl(int sliderpos){
+ if (suspended) {
+ suspended=false;
+ textfield->setDisabled(false);
+ }
+ oldpos = sliderpos;
+ slider->setValue(sliderpos);
+ textfield->setNum(xv->getGamma(gchannel));
+}
+
+/** Slot: disable textfield */
+void GammaCtrl::suspend(){
+ if (!suspended) {
+ suspended = true;
+ textfield->setDisabled(true);
+ }
+}
+
+/** Slot: Change status of GammaCtrl when pressed */
+void GammaCtrl::pressed(){
+ if (suspended) {
+ suspended=false;
+ textfield->setDisabled(false);
+ changed=true;
+ setGamma(slider->value());
+ }
+}
+