• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegraphics API Reference
  • KDE Home
  • Contact Us
 

libs/libksane/libksane

  • sources
  • kde-4.14
  • kdegraphics
  • libs
  • libksane
  • libksane
  • widgets
labeled_fslider.cpp
Go to the documentation of this file.
1 /* ============================================================
2  *
3  * This file is part of the KDE project
4  *
5  * Date : 2007-09-13
6  * Description : Sane interface for KDE
7  *
8  * Copyright (C) 2007-2011 by Kare Sars <kare.sars@iki .fi>
9  *
10  * This library is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2.1 of the License, or (at your option) version 3, or any
14  * later version accepted by the membership of KDE e.V. (or its
15  * successor approved by the membership of KDE e.V.), which shall
16  * act as a proxy defined in Section 6 of version 3 of the license.
17  *
18  * This library is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21  * Lesser General Public License for more details.
22  *
23  * You should have received a copy of the GNU Lesser General Public
24  * License along with this program. If not, see <http://www.gnu.org/licenses/>.
25  *
26  * ============================================================ */
27 
28 // Local includes
29 #include "labeled_fslider.h"
30 #include "labeled_fslider.moc"
31 
32 #define FLOAT_MULTIP 32768.0
33 #define TO_FLOAT(v) ((float)v / FLOAT_MULTIP)
34 #define TO_FIX(v) ((int)(v * FLOAT_MULTIP))
35 
36 namespace KSaneIface
37 {
38 
39 LabeledFSlider::LabeledFSlider(QWidget *parent, const QString& ltext,
40  float min, float max, float step)
41 : KSaneOptionWidget(parent, ltext)
42 {
43  int imin = TO_FIX(min);
44  int imax = TO_FIX(max);
45  m_istep = TO_FIX(step);
46  m_fstep = step;
47  if (m_istep == 0) {
48  m_istep = 1;
49  m_fstep = TO_FLOAT(m_istep);
50  }
51 
52  //std::cout << "min=" << min << ", max=" << max << ", m_fstep="<<m_fstep<<std::endl;
53  //std::cout << "imin=" << imin << ", imax=" << imax << ", m_istep="<<m_istep<<std::endl;
54  m_slider = new QSlider(this);
55  m_slider->setOrientation(Qt::Horizontal);
56  m_slider->setMinimum(imin);
57  m_slider->setMaximum(imax);
58  m_slider->setSingleStep(m_istep);
59  m_slider->setValue(imin);
60 
61  m_spinb = new QDoubleSpinBox(this);
62  m_spinb->setMinimum(min);
63  m_spinb->setMaximum(max);
64  m_spinb->setSingleStep(m_fstep);
65  int decimals=0;
66  float tmp_step = m_fstep;
67  while (tmp_step < 1) {
68  tmp_step *= 10;
69  decimals++;
70  if (decimals > 5) break;
71  }
72  m_spinb->setDecimals(decimals);
73  m_spinb->setValue(max);
74  //m_spinb->setMinimumWidth(m_spinb->sizeHint().width()+35);
75  m_spinb->setMinimumWidth(m_spinb->sizeHint().width());
76  m_spinb->setAlignment(Qt::AlignRight);
77  m_spinb->setValue(min);
78 
79  m_label->setBuddy(m_spinb);
80 
81  connect(m_spinb, SIGNAL(valueChanged(double)), this, SLOT(syncValues(double)));
82  connect(m_slider, SIGNAL(valueChanged(int)), this, SLOT(syncValues(int)));
83  connect(m_slider, SIGNAL(sliderReleased()), this, SLOT(fixValue()));
84 
85  m_layout->addWidget(m_slider, 0,2);
86  m_layout->addWidget(m_spinb, 0, 1);
87  m_layout->setColumnStretch(1, 0);
88  m_layout->setColumnStretch(2, 50);
89  m_layout->activate();
90 }
91 
92 LabeledFSlider::~LabeledFSlider()
93 {
94 }
95 
96 void LabeledFSlider::setSuffix(const QString &text)
97 {
98  m_spinb->setSuffix(text);
99 }
100 
101 void LabeledFSlider::setRange(float min, float max)
102 {
103  //kDebug() << "min,max(" << m_spinb->minimum() << " - " << m_spinb->maximum();
104  //kDebug() << ") -> (" << min << " - " << max << ")" << std::endl;
105  int imin=TO_FIX(min);
106  int imax=TO_FIX(max);
107  m_slider->setRange(imin, imax);
108  //std::cout << "fixedmin=" << imin << " fixedmax=" << imax << std::endl;
109 
110  m_spinb->setRange(min, max);
111 }
112 
113 void LabeledFSlider::setStep(float step)
114 {
115  m_istep = TO_FIX(step);
116  m_fstep = step;
117  if (m_istep == 0) {
118  m_istep = 1;
119  m_fstep = TO_FLOAT(m_istep);
120  }
121  m_slider->setSingleStep(m_istep);
122  m_spinb->setSingleStep(m_fstep);
123 
124  int decimals=0;
125  float tmp_step = m_fstep;
126  while (tmp_step < 1) {
127  tmp_step *= 10;
128  decimals++;
129  if (decimals > 5) break;
130  }
131  m_spinb->setDecimals(decimals);
132 }
133 
134 void LabeledFSlider::setValue(float value)
135 {
136  int ivalue = TO_FIX(value);
137 
138  if (((value - m_spinb->value()) > m_fstep) || ((m_spinb->value() - value) > m_fstep)) {
139  m_spinb->setValue(value);
140  }
141  else if (ivalue != m_slider->value()) m_slider->setValue(ivalue);
142 }
143 
144 void LabeledFSlider::syncValues(int ivalue)
145 {
146  double value = TO_FLOAT(ivalue);
147  if (((value - m_spinb->value()) > m_fstep) || ((m_spinb->value() - value) > m_fstep)) {
148  m_spinb->setValue(value);
149  }
150  else if (ivalue != m_slider->value())m_slider->setValue(ivalue);
151  else emit valueChanged(value);
152 }
153 
154 void LabeledFSlider::syncValues(double value)
155 {
156  int ivalue = TO_FIX(value);
157  if (((value - m_spinb->value()) > m_fstep) || ((m_spinb->value() - value) > m_fstep)) {
158  m_spinb->setValue(value);
159  }
160  else if (ivalue != m_slider->value())m_slider->setValue(ivalue);
161  else emit valueChanged((float)value);
162 }
163 
164 void LabeledFSlider::fixValue()
165 {
166  //ensure that the value step is followed also for the m_slider
167  int rest = (m_slider->value() - m_slider->minimum())%m_istep;
168 
169  if (rest != 0) {
170  if (rest > (m_istep/2)) m_slider->setValue(m_slider->value()+(m_istep-rest));
171  else m_slider->setValue(m_slider->value()-rest);
172  m_spinb->setValue(TO_FLOAT(m_slider->value()));
173  }
174 }
175 
176 } // NameSpace KSaneIface
QWidget
KSaneIface::LabeledFSlider::LabeledFSlider
LabeledFSlider(QWidget *parent, const QString &text, float min, float max, float st)
Create the slider.
Definition: labeled_fslider.cpp:39
QSize::width
int width() const
QGridLayout::addWidget
void addWidget(QWidget *widget, int row, int column, QFlags< Qt::AlignmentFlag > alignment)
QAbstractSlider::setRange
void setRange(int min, int max)
QWidget::setMinimumWidth
void setMinimumWidth(int minw)
QDoubleSpinBox::setRange
void setRange(double minimum, double maximum)
QSlider
KSaneIface::KSaneOptionWidget::m_label
QLabel * m_label
Definition: ksane_option_widget.h:64
QLabel::setBuddy
void setBuddy(QWidget *buddy)
TO_FIX
#define TO_FIX(v)
Definition: labeled_fslider.cpp:34
QDoubleSpinBox
QDoubleSpinBox::setSingleStep
void setSingleStep(double val)
KSaneIface::KSaneOptionWidget::m_layout
QGridLayout * m_layout
Definition: ksane_option_widget.h:65
QAbstractSlider::setOrientation
void setOrientation(Qt::Orientation)
KSaneIface::KSaneOptionWidget
A wrapper for a checkbox.
Definition: ksane_option_widget.h:45
KSaneIface::LabeledFSlider::setValue
void setValue(float)
Set the slider/spinbox value.
Definition: labeled_fslider.cpp:134
KSaneIface::LabeledFSlider::setStep
void setStep(float)
Definition: labeled_fslider.cpp:113
KSaneIface::LabeledFSlider::value
float value() const
Definition: labeled_fslider.h:71
QDoubleSpinBox::setDecimals
void setDecimals(int prec)
KSaneIface::LabeledFSlider::setSuffix
void setSuffix(const QString &text)
Set the unit.
Definition: labeled_fslider.cpp:96
QDoubleSpinBox::setSuffix
void setSuffix(const QString &suffix)
QDoubleSpinBox::setValue
void setValue(double val)
KSaneIface::LabeledFSlider::valueChanged
void valueChanged(float)
Emit the slider value changes.
QString
QAbstractSlider::setMinimum
void setMinimum(int)
QAbstractSlider::setValue
void setValue(int)
QAbstractSpinBox::setAlignment
void setAlignment(QFlags< Qt::AlignmentFlag > flag)
KSaneIface::LabeledFSlider::setRange
void setRange(float, float)
Definition: labeled_fslider.cpp:101
QLayout::activate
bool activate()
QAbstractSpinBox::sizeHint
virtual QSize sizeHint() const
QAbstractSlider::setSingleStep
void setSingleStep(int)
QGridLayout::setColumnStretch
void setColumnStretch(int column, int stretch)
KSaneIface::LabeledFSlider::step
float step() const
Definition: labeled_fslider.h:72
KSaneIface::LabeledFSlider::~LabeledFSlider
~LabeledFSlider()
Definition: labeled_fslider.cpp:92
QDoubleSpinBox::setMinimum
void setMinimum(double min)
TO_FLOAT
#define TO_FLOAT(v)
Definition: labeled_fslider.cpp:33
QAbstractSlider::setMaximum
void setMaximum(int)
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
labeled_fslider.h
QDoubleSpinBox::setMaximum
void setMaximum(double max)
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:19:47 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libs/libksane/libksane

Skip menu "libs/libksane/libksane"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdegraphics API Reference

Skip menu "kdegraphics API Reference"
  •     libkdcraw
  •     libkexiv2
  •     libkipi
  •     libksane
  • okular

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal