summaryrefslogtreecommitdiffabout
path: root/microkde/kdeui/knuminput.cpp
Unidiff
Diffstat (limited to 'microkde/kdeui/knuminput.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kdeui/knuminput.cpp61
1 files changed, 32 insertions, 29 deletions
diff --git a/microkde/kdeui/knuminput.cpp b/microkde/kdeui/knuminput.cpp
index 335d6f4..da01a20 100644
--- a/microkde/kdeui/knuminput.cpp
+++ b/microkde/kdeui/knuminput.cpp
@@ -21,48 +21,51 @@
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 * Library General Public License for more details. 23 * Library General Public License for more details.
24 * 24 *
25 * You should have received a copy of the GNU Library General Public License 25 * You should have received a copy of the GNU Library General Public License
26 * along with this library; see the file COPYING.LIB. If not, write to 26 * along with this library; see the file COPYING.LIB. If not, write to
27 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 27 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
28 * Boston, MA 02111-1307, USA. 28 * Boston, MA 02111-1307, USA.
29 */ 29 */
30 30
31//US #include <config.h> 31//US #include <config.h>
32#ifdef HAVE_LIMITS_H 32#ifdef HAVE_LIMITS_H
33#include <limits.h> 33#include <limits.h>
34#endif 34#endif
35#include <assert.h> 35#include <assert.h>
36#include <math.h> 36#include <math.h>
37#include <algorithm> 37#include <algorithm>
38 38
39#include <qlabel.h> 39#include <qlabel.h>
40#include <qlineedit.h> 40#include <qlineedit.h>
41#include <qsize.h> 41#include <qsize.h>
42#include <qslider.h> 42#include <qslider.h>
43#include <qspinbox.h> 43#include <qspinbox.h>
44#include <qstyle.h> 44#include <qstyle.h>
45//Added by qt3to4:
46#include <QResizeEvent>
47#include <QEvent>
45 48
46#include <kglobal.h> 49#include <kglobal.h>
47#include <klocale.h> 50#include <klocale.h>
48#include <kdebug.h> 51#include <kdebug.h>
49 52
50#include "knumvalidator.h" 53#include "knumvalidator.h"
51#include "knuminput.h" 54#include "knuminput.h"
52 55
53static inline int calcDiffByTen( int x, int y ) { 56static inline int calcDiffByTen( int x, int y ) {
54 // calculate ( x - y ) / 10 without overflowing ints: 57 // calculate ( x - y ) / 10 without overflowing ints:
55 return ( x / 10 ) - ( y / 10 ) + ( x % 10 - y % 10 ) / 10; 58 return ( x / 10 ) - ( y / 10 ) + ( x % 10 - y % 10 ) / 10;
56} 59}
57 60
58// ---------------------------------------------------------------------------- 61// ----------------------------------------------------------------------------
59 62
60KNumInput::KNumInput(QWidget* parent, const char* name) 63KNumInput::KNumInput(QWidget* parent, const char* name)
61 : QWidget(parent, name) 64 : QWidget(parent, name)
62{ 65{
63 init(); 66 init();
64} 67}
65 68
66KNumInput::KNumInput(KNumInput* below, QWidget* parent, const char* name) 69KNumInput::KNumInput(KNumInput* below, QWidget* parent, const char* name)
67 : QWidget(parent, name) 70 : QWidget(parent, name)
68{ 71{
@@ -85,74 +88,74 @@ void KNumInput::init()
85 m_label = 0; 88 m_label = 0;
86 m_slider = 0; 89 m_slider = 0;
87 m_alignment = 0; 90 m_alignment = 0;
88} 91}
89 92
90KNumInput::~KNumInput() 93KNumInput::~KNumInput()
91{ 94{
92 if(m_prev) 95 if(m_prev)
93 m_prev->m_next = m_next; 96 m_prev->m_next = m_next;
94 97
95 if(m_next) 98 if(m_next)
96 m_next->m_prev = m_prev; 99 m_next->m_prev = m_prev;
97} 100}
98 101
99void KNumInput::setLabel(const QString & label, int a) 102void KNumInput::setLabel(const QString & label, int a)
100{ 103{
101 if(label.isEmpty()) { 104 if(label.isEmpty()) {
102 delete m_label; 105 delete m_label;
103 m_label = 0; 106 m_label = 0;
104 m_alignment = 0; 107 m_alignment = 0;
105 } 108 }
106 else { 109 else {
107 if (m_label) m_label->setText(label); 110 if (m_label) m_label->setText(label);
108 else m_label = new QLabel(label, this, "KNumInput::QLabel"); 111 else m_label = new QLabel(label, this, "KNumInput::QLabel");
109 m_label->setAlignment((a & (~(AlignTop|AlignBottom|AlignVCenter))) 112 m_label->setAlignment((a & (~(Qt::AlignTop|Qt::AlignBottom|Qt::AlignVCenter)))
110 | AlignVCenter); 113 | Qt::AlignVCenter);
111 // if no vertical alignment set, use Top alignment 114 // if no vertical alignment set, use Top alignment
112 if(!(a & (AlignTop|AlignBottom|AlignVCenter))) 115 if(!(a & (Qt::AlignTop|Qt::AlignBottom|Qt::AlignVCenter)))
113 a |= AlignTop; 116 a |= Qt::AlignTop;
114 m_alignment = a; 117 m_alignment = a;
115 } 118 }
116 119
117 layout(true); 120 layout(true);
118} 121}
119 122
120QString KNumInput::label() const 123QString KNumInput::label() const
121{ 124{
122 if (m_label) return m_label->text(); 125 if (m_label) return m_label->text();
123 return QString::null; 126 return QString::null;
124} 127}
125 128
126void KNumInput::layout(bool deep) 129void KNumInput::layout(bool deep)
127{ 130{
128 int w1 = m_colw1; 131 int w1 = m_colw1;
129 int w2 = m_colw2; 132 int w2 = m_colw2;
130 133
131 // label sizeHint 134 // label sizeHint
132 m_sizeLabel = (m_label ? m_label->sizeHint() : QSize(0,0)); 135 m_sizeLabel = (m_label ? m_label->sizeHint() : QSize(0,0));
133 136
134 if(m_label && (m_alignment & AlignVCenter)) 137 if(m_label && (m_alignment & Qt::AlignVCenter))
135 m_colw1 = m_sizeLabel.width() + 4; 138 m_colw1 = m_sizeLabel.width() + 4;
136 else 139 else
137 m_colw1 = 0; 140 m_colw1 = 0;
138 141
139 // slider sizeHint 142 // slider sizeHint
140 m_sizeSlider = (m_slider ? m_slider->sizeHint() : QSize(0, 0)); 143 m_sizeSlider = (m_slider ? m_slider->sizeHint() : QSize(0, 0));
141 144
142 doLayout(); 145 doLayout();
143 146
144 if(!deep) { 147 if(!deep) {
145 m_colw1 = w1; 148 m_colw1 = w1;
146 m_colw2 = w2; 149 m_colw2 = w2;
147 return; 150 return;
148 } 151 }
149 152
150 KNumInput* p = this; 153 KNumInput* p = this;
151 while(p) { 154 while(p) {
152 p->doLayout(); 155 p->doLayout();
153 w1 = QMAX(w1, p->m_colw1); 156 w1 = QMAX(w1, p->m_colw1);
154 w2 = QMAX(w2, p->m_colw2); 157 w2 = QMAX(w2, p->m_colw2);
155 p = p->m_prev; 158 p = p->m_prev;
156 } 159 }
157 160
158 p = m_next; 161 p = m_next;
@@ -181,92 +184,92 @@ void KNumInput::layout(bool deep)
181} 184}
182 185
183QSizePolicy KNumInput::sizePolicy() const 186QSizePolicy KNumInput::sizePolicy() const
184{ 187{
185 return QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed ); 188 return QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed );
186} 189}
187 190
188QSize KNumInput::sizeHint() const 191QSize KNumInput::sizeHint() const
189{ 192{
190 return minimumSizeHint(); 193 return minimumSizeHint();
191} 194}
192 195
193void KNumInput::setSteps(int minor, int major) 196void KNumInput::setSteps(int minor, int major)
194{ 197{
195 if(m_slider) 198 if(m_slider)
196 m_slider->setSteps( minor, major ); 199 m_slider->setSteps( minor, major );
197} 200}
198 201
199 202
200// ---------------------------------------------------------------------------- 203// ----------------------------------------------------------------------------
201 204
202KIntSpinBox::KIntSpinBox(QWidget *parent, const char *name) 205KIntSpinBox::KIntSpinBox(QWidget *parent, const char *name)
203 : QSpinBox(0, 99, 1, parent, name) 206 : QSpinBox(0, 99, 1, parent, name)
204{ 207{
205 editor()->setAlignment(AlignRight); 208 setAlignment(Qt::AlignRight);
206 val_base = 10; 209 val_base = 10;
207 setValue(0); 210 setValue(0);
208} 211}
209 212
210KIntSpinBox::~KIntSpinBox() 213KIntSpinBox::~KIntSpinBox()
211{ 214{
212} 215}
213 216
214KIntSpinBox::KIntSpinBox(int lower, int upper, int step, int value, int base, 217KIntSpinBox::KIntSpinBox(int lower, int upper, int step, int value, int base,
215 QWidget* parent, const char* name) 218 QWidget* parent, const char* name)
216 : QSpinBox(lower, upper, step, parent, name) 219 : QSpinBox(lower, upper, step, parent, name)
217{ 220{
218 editor()->setAlignment(AlignRight); 221 setAlignment(Qt::AlignRight);
219 val_base = base; 222 val_base = base;
220 setValue(value); 223 setValue(value);
221} 224}
222 225
223void KIntSpinBox::setBase(int base) 226void KIntSpinBox::setBase(int base)
224{ 227{
225 val_base = base; 228 val_base = base;
226} 229}
227 230
228 231
229int KIntSpinBox::base() const 232int KIntSpinBox::base() const
230{ 233{
231 return val_base; 234 return val_base;
232} 235}
233 236
234QString KIntSpinBox::mapValueToText(int v) 237QString KIntSpinBox::mapValueToText(int v)
235{ 238{
236 return QString::number(v, val_base); 239 return QString::number(v, val_base);
237} 240}
238 241
239int KIntSpinBox::mapTextToValue(bool* ok) 242int KIntSpinBox::mapTextToValue(bool* ok)
240{ 243{
241 return cleanText().toInt(ok, val_base); 244 return cleanText().toInt(ok, val_base);
242} 245}
243 246
244void KIntSpinBox::setEditFocus(bool mark) 247void KIntSpinBox::setEditFocus(bool mark)
245{ 248{
246 editor()->setFocus(); 249 setFocus();
247 if(mark) 250 if(mark)
248 editor()->selectAll(); 251 selectAll();
249} 252}
250 253
251 254
252// ---------------------------------------------------------------------------- 255// ----------------------------------------------------------------------------
253 256
254class KIntNumInput::KIntNumInputPrivate { 257class KIntNumInput::KIntNumInputPrivate {
255public: 258public:
256 int referencePoint; 259 int referencePoint;
257 short blockRelative; 260 short blockRelative;
258 KIntNumInputPrivate( int r ) 261 KIntNumInputPrivate( int r )
259 : referencePoint( r ), 262 : referencePoint( r ),
260 blockRelative( 0 ) {} 263 blockRelative( 0 ) {}
261}; 264};
262 265
263 266
264KIntNumInput::KIntNumInput(KNumInput* below, int val, QWidget* parent, 267KIntNumInput::KIntNumInput(KNumInput* below, int val, QWidget* parent,
265 int _base, const char* name) 268 int _base, const char* name)
266 : KNumInput(below, parent, name) 269 : KNumInput(below, parent, name)
267{ 270{
268 init(val, _base); 271 init(val, _base);
269} 272}
270 273
271KIntNumInput::KIntNumInput(QWidget *parent, const char *name) 274KIntNumInput::KIntNumInput(QWidget *parent, const char *name)
272 : KNumInput(parent, name) 275 : KNumInput(parent, name)
@@ -304,184 +307,184 @@ int KIntNumInput::referencePoint() const {
304 return d->referencePoint; 307 return d->referencePoint;
305} 308}
306 309
307void KIntNumInput::spinValueChanged(int val) 310void KIntNumInput::spinValueChanged(int val)
308{ 311{
309 if(m_slider) 312 if(m_slider)
310 m_slider->setValue(val); 313 m_slider->setValue(val);
311 314
312 emit valueChanged(val); 315 emit valueChanged(val);
313} 316}
314 317
315void KIntNumInput::slotEmitRelativeValueChanged( int value ) { 318void KIntNumInput::slotEmitRelativeValueChanged( int value ) {
316 if ( d->blockRelative || !d->referencePoint ) return; 319 if ( d->blockRelative || !d->referencePoint ) return;
317 emit relativeValueChanged( double( value ) / double( d->referencePoint ) ); 320 emit relativeValueChanged( double( value ) / double( d->referencePoint ) );
318} 321}
319 322
320void KIntNumInput::setRange(int lower, int upper, int step, bool slider) 323void KIntNumInput::setRange(int lower, int upper, int step, bool slider)
321{ 324{
322 upper = kMax(upper, lower); 325 upper = kMax(upper, lower);
323 lower = kMin(upper, lower); 326 lower = kMin(upper, lower);
324 m_spin->setMinValue(lower); 327 m_spin->setMinValue(lower);
325 m_spin->setMaxValue(upper); 328 m_spin->setMaxValue(upper);
326 m_spin->setLineStep(step); 329 m_spin->setLineStep(step);
327 330
328 step = m_spin->lineStep(); // maybe QRangeControl didn't like out lineStep? 331 step = m_spin->singleStep(); // maybe QRangeControl didn't like out lineStep?
329 332
330 if(slider) { 333 if(slider) {
331 if (m_slider) 334 if (m_slider)
332 m_slider->setRange(lower, upper); 335 m_slider->setRange(lower, upper);
333 else { 336 else {
334 m_slider = new QSlider(lower, upper, step, m_spin->value(), 337 m_slider = new QSlider(lower, upper, step, m_spin->value(),
335 QSlider::Horizontal, this); 338 Qt::Horizontal, this);
336 m_slider->setTickmarks(QSlider::Below); 339 m_slider->setTickmarks(QSlider::Below);
337 connect(m_slider, SIGNAL(valueChanged(int)), 340 connect(m_slider, SIGNAL(valueChanged(int)),
338 m_spin, SLOT(setValue(int))); 341 m_spin, SLOT(setValue(int)));
339 } 342 }
340 343
341 // calculate (upper-lower)/10 without overflowing int's: 344 // calculate (upper-lower)/10 without overflowing int's:
342 int major = calcDiffByTen( upper, lower ); 345 int major = calcDiffByTen( upper, lower );
343 if ( major==0 ) major = step; // #### workaround Qt bug in 2.1-beta4 346 if ( major==0 ) major = step; // #### workaround Qt bug in 2.1-beta4
344 347
345 m_slider->setSteps(step, major); 348 m_slider->setSteps(step, major);
346 m_slider->setTickInterval(major); 349 m_slider->setTickInterval(major);
347 } 350 }
348 else { 351 else {
349 delete m_slider; 352 delete m_slider;
350 m_slider = 0; 353 m_slider = 0;
351 } 354 }
352 355
353 // check that reference point is still inside valid range: 356 // check that reference point is still inside valid range:
354 setReferencePoint( referencePoint() ); 357 setReferencePoint( referencePoint() );
355 358
356 layout(true); 359 layout(true);
357} 360}
358 361
359void KIntNumInput::setMinValue(int min) 362void KIntNumInput::setMinValue(int min)
360{ 363{
361 setRange(min, m_spin->maxValue(), m_spin->lineStep(), m_slider); 364 setRange(min, m_spin->maxValue(), m_spin->singleStep(), m_slider);
362} 365}
363 366
364int KIntNumInput::minValue() const 367int KIntNumInput::minValue() const
365{ 368{
366 return m_spin->minValue(); 369 return m_spin->minValue();
367} 370}
368 371
369void KIntNumInput::setMaxValue(int max) 372void KIntNumInput::setMaxValue(int max)
370{ 373{
371 setRange(m_spin->minValue(), max, m_spin->lineStep(), m_slider); 374 setRange(m_spin->minValue(), max, m_spin->singleStep(), m_slider);
372} 375}
373 376
374int KIntNumInput::maxValue() const 377int KIntNumInput::maxValue() const
375{ 378{
376 return m_spin->maxValue(); 379 return m_spin->maxValue();
377} 380}
378 381
379void KIntNumInput::setSuffix(const QString &suffix) 382void KIntNumInput::setSuffix(const QString &suffix)
380{ 383{
381 m_spin->setSuffix(suffix); 384 m_spin->setSuffix(suffix);
382 385
383 layout(true); 386 layout(true);
384} 387}
385 388
386QString KIntNumInput::suffix() const 389QString KIntNumInput::suffix() const
387{ 390{
388 return m_spin->suffix(); 391 return m_spin->suffix();
389} 392}
390 393
391void KIntNumInput::setPrefix(const QString &prefix) 394void KIntNumInput::setPrefix(const QString &prefix)
392{ 395{
393 m_spin->setPrefix(prefix); 396 m_spin->setPrefix(prefix);
394 397
395 layout(true); 398 layout(true);
396} 399}
397 400
398QString KIntNumInput::prefix() const 401QString KIntNumInput::prefix() const
399{ 402{
400 return m_spin->prefix(); 403 return m_spin->prefix();
401} 404}
402 405
403void KIntNumInput::setEditFocus(bool mark) 406void KIntNumInput::setEditFocus(bool mark)
404{ 407{
405 m_spin->setEditFocus(mark); 408 m_spin->setEditFocus(mark);
406} 409}
407 410
408QSize KIntNumInput::minimumSizeHint() const 411QSize KIntNumInput::minimumSizeHint() const
409{ 412{
410 constPolish(); 413 constPolish();
411 414
412 int w; 415 int w;
413 int h; 416 int h;
414 417
415 h = 2 + QMAX(m_sizeSpin.height(), m_sizeSlider.height()); 418 h = 2 + QMAX(m_sizeSpin.height(), m_sizeSlider.height());
416 419
417 // if in extra row, then count it here 420 // if in extra row, then count it here
418 if(m_label && (m_alignment & (AlignBottom|AlignTop))) 421 if(m_label && (m_alignment & (Qt::AlignBottom|Qt::AlignTop)))
419 h += 4 + m_sizeLabel.height(); 422 h += 4 + m_sizeLabel.height();
420 else 423 else
421 // label is in the same row as the other widgets 424 // label is in the same row as the other widgets
422 h = QMAX(h, m_sizeLabel.height() + 2); 425 h = QMAX(h, m_sizeLabel.height() + 2);
423 426
424 w = m_slider ? m_slider->sizeHint().width() + 8 : 0; 427 w = m_slider ? m_slider->sizeHint().width() + 8 : 0;
425 w += m_colw1 + m_colw2; 428 w += m_colw1 + m_colw2;
426 429
427 if(m_alignment & (AlignTop|AlignBottom)) 430 if(m_alignment & (Qt::AlignTop|Qt::AlignBottom))
428 w = QMAX(w, m_sizeLabel.width() + 4); 431 w = QMAX(w, m_sizeLabel.width() + 4);
429 432
430 return QSize(w, h); 433 return QSize(w, h);
431} 434}
432 435
433void KIntNumInput::doLayout() 436void KIntNumInput::doLayout()
434{ 437{
435 m_sizeSpin = m_spin->sizeHint(); 438 m_sizeSpin = m_spin->sizeHint();
436 m_colw2 = m_sizeSpin.width(); 439 m_colw2 = m_sizeSpin.width();
437 440
438 if (m_label) 441 if (m_label)
439 m_label->setBuddy(m_spin); 442 m_label->setBuddy(m_spin);
440} 443}
441 444
442void KIntNumInput::resizeEvent(QResizeEvent* e) 445void KIntNumInput::resizeEvent(QResizeEvent* e)
443{ 446{
444 int w = m_colw1; 447 int w = m_colw1;
445 int h = 0; 448 int h = 0;
446 449
447 if(m_label && (m_alignment & AlignTop)) { 450 if(m_label && (m_alignment & Qt::AlignTop)) {
448 m_label->setGeometry(0, 0, e->size().width(), m_sizeLabel.height()); 451 m_label->setGeometry(0, 0, e->size().width(), m_sizeLabel.height());
449 h += m_sizeLabel.height() + 4; 452 h += m_sizeLabel.height() + 4;
450 } 453 }
451 454
452 if(m_label && (m_alignment & AlignVCenter)) 455 if(m_label && (m_alignment & Qt::AlignVCenter))
453 m_label->setGeometry(0, 0, w, m_sizeSpin.height()); 456 m_label->setGeometry(0, 0, w, m_sizeSpin.height());
454 457
455 m_spin->setGeometry(w, h, m_slider ? m_colw2 : QMAX(m_colw2, e->size().width() - w), m_sizeSpin.height()); 458 m_spin->setGeometry(w, h, m_slider ? m_colw2 : QMAX(m_colw2, e->size().width() - w), m_sizeSpin.height());
456 w += m_colw2 + 8; 459 w += m_colw2 + 8;
457 460
458 if(m_slider) 461 if(m_slider)
459 m_slider->setGeometry(w, h, e->size().width() - w, m_sizeSpin.height()); 462 m_slider->setGeometry(w, h, e->size().width() - w, m_sizeSpin.height());
460 463
461 h += m_sizeSpin.height() + 2; 464 h += m_sizeSpin.height() + 2;
462 465
463 if(m_label && (m_alignment & AlignBottom)) 466 if(m_label && (m_alignment & Qt::AlignBottom))
464 m_label->setGeometry(0, h, m_sizeLabel.width(), m_sizeLabel.height()); 467 m_label->setGeometry(0, h, m_sizeLabel.width(), m_sizeLabel.height());
465} 468}
466 469
467KIntNumInput::~KIntNumInput() 470KIntNumInput::~KIntNumInput()
468{ 471{
469 delete d; 472 delete d;
470} 473}
471 474
472void KIntNumInput::setValue(int val) 475void KIntNumInput::setValue(int val)
473{ 476{
474 m_spin->setValue(val); 477 m_spin->setValue(val);
475 // slider value is changed by spinValueChanged 478 // slider value is changed by spinValueChanged
476} 479}
477 480
478void KIntNumInput::setRelativeValue( double r ) { 481void KIntNumInput::setRelativeValue( double r ) {
479 if ( !d->referencePoint ) return; 482 if ( !d->referencePoint ) return;
480 ++d->blockRelative; 483 ++d->blockRelative;
481 setValue( int( d->referencePoint * r + 0.5 ) ); 484 setValue( int( d->referencePoint * r + 0.5 ) );
482 --d->blockRelative; 485 --d->blockRelative;
483} 486}
484 487
485double KIntNumInput::relativeValue() const { 488double KIntNumInput::relativeValue() const {
486 if ( !d->referencePoint ) return 0; 489 if ( !d->referencePoint ) return 0;
487 return double( value() ) / double ( d->referencePoint ); 490 return double( value() ) / double ( d->referencePoint );
@@ -625,140 +628,140 @@ double KDoubleNumInput::mapSliderToSpin( int val ) const
625 return spinmin + rel * ( spinmax - spinmin ); 628 return spinmin + rel * ( spinmax - spinmin );
626} 629}
627 630
628void KDoubleNumInput::sliderMoved(int val) 631void KDoubleNumInput::sliderMoved(int val)
629{ 632{
630 d->spin->setValue( mapSliderToSpin( val ) ); 633 d->spin->setValue( mapSliderToSpin( val ) );
631} 634}
632 635
633void KDoubleNumInput::slotEmitRelativeValueChanged( double value ) 636void KDoubleNumInput::slotEmitRelativeValueChanged( double value )
634{ 637{
635 if ( !d->referencePoint ) return; 638 if ( !d->referencePoint ) return;
636 emit relativeValueChanged( value / d->referencePoint ); 639 emit relativeValueChanged( value / d->referencePoint );
637} 640}
638 641
639QSize KDoubleNumInput::minimumSizeHint() const 642QSize KDoubleNumInput::minimumSizeHint() const
640{ 643{
641 constPolish(); 644 constPolish();
642 645
643 int w; 646 int w;
644 int h; 647 int h;
645 648
646 h = 2 + QMAX(m_sizeEdit.height(), m_sizeSlider.height()); 649 h = 2 + QMAX(m_sizeEdit.height(), m_sizeSlider.height());
647 650
648 // if in extra row, then count it here 651 // if in extra row, then count it here
649 if(m_label && (m_alignment & (AlignBottom|AlignTop))) 652 if(m_label && (m_alignment & (Qt::AlignBottom|Qt::AlignTop)))
650 h += 4 + m_sizeLabel.height(); 653 h += 4 + m_sizeLabel.height();
651 else 654 else
652 // label is in the same row as the other widgets 655 // label is in the same row as the other widgets
653 h = QMAX(h, m_sizeLabel.height() + 2); 656 h = QMAX(h, m_sizeLabel.height() + 2);
654 657
655 w = m_slider ? m_slider->sizeHint().width() + 8 : 0; 658 w = m_slider ? m_slider->sizeHint().width() + 8 : 0;
656 w += m_colw1 + m_colw2; 659 w += m_colw1 + m_colw2;
657 660
658 if(m_alignment & (AlignTop|AlignBottom)) 661 if(m_alignment & (Qt::AlignTop|Qt::AlignBottom))
659 w = QMAX(w, m_sizeLabel.width() + 4); 662 w = QMAX(w, m_sizeLabel.width() + 4);
660 663
661 return QSize(w, h); 664 return QSize(w, h);
662} 665}
663 666
664void KDoubleNumInput::resizeEvent(QResizeEvent* e) 667void KDoubleNumInput::resizeEvent(QResizeEvent* e)
665{ 668{
666 int w = m_colw1; 669 int w = m_colw1;
667 int h = 0; 670 int h = 0;
668 671
669 if(m_label && (m_alignment & AlignTop)) { 672 if(m_label && (m_alignment & Qt::AlignTop)) {
670 m_label->setGeometry(0, 0, e->size().width(), m_sizeLabel.height()); 673 m_label->setGeometry(0, 0, e->size().width(), m_sizeLabel.height());
671 h += m_sizeLabel.height() + 4; 674 h += m_sizeLabel.height() + 4;
672 } 675 }
673 676
674 if(m_label && (m_alignment & AlignVCenter)) 677 if(m_label && (m_alignment & Qt::AlignVCenter))
675 m_label->setGeometry(0, 0, w, m_sizeEdit.height()); 678 m_label->setGeometry(0, 0, w, m_sizeEdit.height());
676 679
677 d->spin->setGeometry(w, h, m_slider ? m_colw2 680 d->spin->setGeometry(w, h, m_slider ? m_colw2
678 : e->size().width() - w, m_sizeEdit.height()); 681 : e->size().width() - w, m_sizeEdit.height());
679 w += m_colw2 + 8; 682 w += m_colw2 + 8;
680 683
681 if(m_slider) 684 if(m_slider)
682 m_slider->setGeometry(w, h, e->size().width() - w, m_sizeEdit.height()); 685 m_slider->setGeometry(w, h, e->size().width() - w, m_sizeEdit.height());
683 686
684 h += m_sizeEdit.height() + 2; 687 h += m_sizeEdit.height() + 2;
685 688
686 if(m_label && (m_alignment & AlignBottom)) 689 if(m_label && (m_alignment & Qt::AlignBottom))
687 m_label->setGeometry(0, h, m_sizeLabel.width(), m_sizeLabel.height()); 690 m_label->setGeometry(0, h, m_sizeLabel.width(), m_sizeLabel.height());
688} 691}
689 692
690void KDoubleNumInput::doLayout() 693void KDoubleNumInput::doLayout()
691{ 694{
692 m_sizeEdit = d->spin->sizeHint(); 695 m_sizeEdit = d->spin->sizeHint();
693 m_colw2 = m_sizeEdit.width(); 696 m_colw2 = m_sizeEdit.width();
694} 697}
695 698
696void KDoubleNumInput::setValue(double val) 699void KDoubleNumInput::setValue(double val)
697{ 700{
698 d->spin->setValue( val ); 701 d->spin->setValue( val );
699} 702}
700 703
701void KDoubleNumInput::setRelativeValue( double r ) 704void KDoubleNumInput::setRelativeValue( double r )
702{ 705{
703 if ( !d->referencePoint ) return; 706 if ( !d->referencePoint ) return;
704 ++d->blockRelative; 707 ++d->blockRelative;
705 setValue( r * d->referencePoint ); 708 setValue( r * d->referencePoint );
706 --d->blockRelative; 709 --d->blockRelative;
707} 710}
708 711
709void KDoubleNumInput::setReferencePoint( double ref ) 712void KDoubleNumInput::setReferencePoint( double ref )
710{ 713{
711 // clip to valid range: 714 // clip to valid range:
712 ref = kMin( maxValue(), kMax( minValue(), ref ) ); 715 ref = kMin( maxValue(), kMax( minValue(), ref ) );
713 d->referencePoint = ref; 716 d->referencePoint = ref;
714} 717}
715 718
716void KDoubleNumInput::setRange(double lower, double upper, double step, 719void KDoubleNumInput::setRange(double lower, double upper, double step,
717 bool slider) 720 bool slider)
718{ 721{
719 if( m_slider ) { 722 if( m_slider ) {
720 // don't update the slider to avoid an endless recursion 723 // don't update the slider to avoid an endless recursion
721 QSpinBox * spin = d->spin; 724 QSpinBox * spin = d->spin;
722 disconnect(spin, SIGNAL(valueChanged(int)), 725 disconnect(spin, SIGNAL(valueChanged(int)),
723 m_slider, SLOT(setValue(int)) ); 726 m_slider, SLOT(setValue(int)) );
724 } 727 }
725 d->spin->setRange( lower, upper, step, d->spin->precision() ); 728 d->spin->setRange( lower, upper, step, d->spin->precision() );
726 729
727 if(slider) { 730 if(slider) {
728 // upcast to base type to get the min/maxValue in int form: 731 // upcast to base type to get the min/maxValue in int form:
729 QSpinBox * spin = d->spin; 732 QSpinBox * spin = d->spin;
730 int slmax = spin->maxValue(); 733 int slmax = spin->maxValue();
731 int slmin = spin->minValue(); 734 int slmin = spin->minValue();
732 int slvalue = spin->value(); 735 int slvalue = spin->value();
733 int slstep = spin->lineStep(); 736 int slstep = spin->singleStep();
734 if (m_slider) { 737 if (m_slider) {
735 m_slider->setRange(slmin, slmax); 738 m_slider->setRange(slmin, slmax);
736 m_slider->setLineStep(slstep); 739 m_slider->setLineStep(slstep);
737 m_slider->setValue(slvalue); 740 m_slider->setValue(slvalue);
738 } else { 741 } else {
739 m_slider = new QSlider(slmin, slmax, slstep, slvalue, 742 m_slider = new QSlider(slmin, slmax, slstep, slvalue,
740 QSlider::Horizontal, this); 743 Qt::Horizontal, this);
741 m_slider->setTickmarks(QSlider::Below); 744 m_slider->setTickmarks(QSlider::Below);
742 // feedback line: when one moves, the other moves, too: 745 // feedback line: when one moves, the other moves, too:
743 connect(m_slider, SIGNAL(valueChanged(int)), 746 connect(m_slider, SIGNAL(valueChanged(int)),
744 SLOT(sliderMoved(int)) ); 747 SLOT(sliderMoved(int)) );
745 } 748 }
746 connect(spin, SIGNAL(valueChanged(int)), 749 connect(spin, SIGNAL(valueChanged(int)),
747 m_slider, SLOT(setValue(int)) ); 750 m_slider, SLOT(setValue(int)) );
748 // calculate ( slmax - slmin ) / 10 without overflowing ints: 751 // calculate ( slmax - slmin ) / 10 without overflowing ints:
749 int major = calcDiffByTen( slmax, slmin ); 752 int major = calcDiffByTen( slmax, slmin );
750 if ( !major ) major = slstep; // ### needed? 753 if ( !major ) major = slstep; // ### needed?
751 m_slider->setTickInterval(major); 754 m_slider->setTickInterval(major);
752 } else { 755 } else {
753 delete m_slider; 756 delete m_slider;
754 m_slider = 0; 757 m_slider = 0;
755 } 758 }
756 759
757 setReferencePoint( referencePoint() ); 760 setReferencePoint( referencePoint() );
758 761
759 layout(true); 762 layout(true);
760 updateLegacyMembers(); 763 updateLegacyMembers();
761} 764}
762 765
763void KDoubleNumInput::setMinValue(double min) 766void KDoubleNumInput::setMinValue(double min)
764{ 767{
@@ -891,59 +894,59 @@ public:
891 return INT_MAX; 894 return INT_MAX;
892 } else if ( value < double(INT_MIN) / f ) { 895 } else if ( value < double(INT_MIN) / f ) {
893 kdWarning() << "KDoubleSpinBox: can't represent value " << value 896 kdWarning() << "KDoubleSpinBox: can't represent value " << value
894 << "in terms of fixed-point numbers with precision " 897 << "in terms of fixed-point numbers with precision "
895 << mPrecision << endl; 898 << mPrecision << endl;
896 *ok = false; 899 *ok = false;
897 return INT_MIN; 900 return INT_MIN;
898 } else { 901 } else {
899 *ok = true; 902 *ok = true;
900 return int( value * f + ( value < 0 ? -0.5 : 0.5 ) ); 903 return int( value * f + ( value < 0 ? -0.5 : 0.5 ) );
901 } 904 }
902 } 905 }
903 906
904 double mapToDouble( int value ) const { 907 double mapToDouble( int value ) const {
905 return double(value) * basicStep(); 908 return double(value) * basicStep();
906 } 909 }
907 910
908 int mPrecision; 911 int mPrecision;
909 KDoubleValidator * mValidator; 912 KDoubleValidator * mValidator;
910}; 913};
911 914
912KDoubleSpinBox::KDoubleSpinBox( QWidget * parent, const char * name ) 915KDoubleSpinBox::KDoubleSpinBox( QWidget * parent, const char * name )
913 : QSpinBox( parent, name ) 916 : QSpinBox( parent, name )
914{ 917{
915 editor()->setAlignment( Qt::AlignRight ); 918 setAlignment( Qt::AlignRight );
916 d = new Private(); 919 d = new Private();
917 updateValidator(); 920 updateValidator();
918} 921}
919 922
920KDoubleSpinBox::KDoubleSpinBox( double lower, double upper, double step, 923KDoubleSpinBox::KDoubleSpinBox( double lower, double upper, double step,
921 double value, int precision, 924 double value, int precision,
922 QWidget * parent, const char * name ) 925 QWidget * parent, const char * name )
923 : QSpinBox( parent, name ) 926 : QSpinBox( parent, name )
924{ 927{
925 editor()->setAlignment( Qt::AlignRight ); 928 setAlignment( Qt::AlignRight );
926 d = new Private(); 929 d = new Private();
927 setRange( lower, upper, step, precision ); 930 setRange( lower, upper, step, precision );
928 setValue( value ); 931 setValue( value );
929 connect( this, SIGNAL(valueChanged(int)), SLOT(slotValueChanged(int)) ); 932 connect( this, SIGNAL(valueChanged(int)), SLOT(slotValueChanged(int)) );
930} 933}
931 934
932KDoubleSpinBox::~KDoubleSpinBox() { 935KDoubleSpinBox::~KDoubleSpinBox() {
933 delete d; d = 0; 936 delete d; d = 0;
934} 937}
935 938
936bool KDoubleSpinBox::acceptLocalizedNumbers() const { 939bool KDoubleSpinBox::acceptLocalizedNumbers() const {
937 if ( !d->mValidator ) return true; // we'll set one that does; 940 if ( !d->mValidator ) return true; // we'll set one that does;
938 // can't do it now, since we're const 941 // can't do it now, since we're const
939 return d->mValidator->acceptLocalizedNumbers(); 942 return d->mValidator->acceptLocalizedNumbers();
940} 943}
941 944
942void KDoubleSpinBox::setAcceptLocalizedNumbers( bool accept ) { 945void KDoubleSpinBox::setAcceptLocalizedNumbers( bool accept ) {
943 if ( !d->mValidator ) updateValidator(); 946 if ( !d->mValidator ) updateValidator();
944 d->mValidator->setAcceptLocalizedNumbers( accept ); 947 d->mValidator->setAcceptLocalizedNumbers( accept );
945} 948}
946 949
947void KDoubleSpinBox::setRange( double lower, double upper, double step, 950void KDoubleSpinBox::setRange( double lower, double upper, double step,
948 int precision ) { 951 int precision ) {
949 lower = kMin(upper, lower); 952 lower = kMin(upper, lower);
@@ -1006,90 +1009,90 @@ double KDoubleSpinBox::minValue() const {
1006} 1009}
1007 1010
1008void KDoubleSpinBox::setMinValue( double value ) { 1011void KDoubleSpinBox::setMinValue( double value ) {
1009 bool ok = false; 1012 bool ok = false;
1010 int min = d->mapToInt( value, &ok ); 1013 int min = d->mapToInt( value, &ok );
1011 if ( !ok ) return; 1014 if ( !ok ) return;
1012 base::setMinValue( min ); 1015 base::setMinValue( min );
1013 updateValidator(); 1016 updateValidator();
1014} 1017}
1015 1018
1016 1019
1017double KDoubleSpinBox::maxValue() const { 1020double KDoubleSpinBox::maxValue() const {
1018 return d->mapToDouble( base::maxValue() ); 1021 return d->mapToDouble( base::maxValue() );
1019} 1022}
1020 1023
1021void KDoubleSpinBox::setMaxValue( double value ) { 1024void KDoubleSpinBox::setMaxValue( double value ) {
1022 bool ok = false; 1025 bool ok = false;
1023 int max = d->mapToInt( value, &ok ); 1026 int max = d->mapToInt( value, &ok );
1024 if ( !ok ) return; 1027 if ( !ok ) return;
1025 base::setMaxValue( max ); 1028 base::setMaxValue( max );
1026 updateValidator(); 1029 updateValidator();
1027} 1030}
1028 1031
1029double KDoubleSpinBox::lineStep() const { 1032double KDoubleSpinBox::lineStep() const {
1030 return d->mapToDouble( base::lineStep() ); 1033 return d->mapToDouble( base::singleStep() );
1031} 1034}
1032 1035
1033void KDoubleSpinBox::setLineStep( double step ) { 1036void KDoubleSpinBox::setLineStep( double step ) {
1034 bool ok = false; 1037 bool ok = false;
1035 if ( step > maxValue() - minValue() ) 1038 if ( step > maxValue() - minValue() )
1036 base::setLineStep( 1 ); 1039 base::setLineStep( 1 );
1037 else 1040 else
1038 base::setLineStep( kMax( d->mapToInt( step, &ok ), 1 ) ); 1041 base::setLineStep( kMax( d->mapToInt( step, &ok ), 1 ) );
1039} 1042}
1040 1043
1041QString KDoubleSpinBox::mapValueToText( int value ) { 1044QString KDoubleSpinBox::mapValueToText( int value ) {
1042 if ( acceptLocalizedNumbers() ) 1045 if ( acceptLocalizedNumbers() )
1043 return KGlobal::locale() 1046 return KGlobal::locale()
1044 ->formatNumber( d->mapToDouble( value ), d->mPrecision ); 1047 ->formatNumber( d->mapToDouble( value ), d->mPrecision );
1045 else 1048 else
1046 return QString().setNum( d->mapToDouble( value ), 'f', d->mPrecision ); 1049 return QString().setNum( d->mapToDouble( value ), 'f', d->mPrecision );
1047} 1050}
1048 1051
1049int KDoubleSpinBox::mapTextToValue( bool * ok ) { 1052int KDoubleSpinBox::mapTextToValue( bool * ok ) {
1050 double value; 1053 double value;
1051 if ( acceptLocalizedNumbers() ) 1054 if ( acceptLocalizedNumbers() )
1052 value = KGlobal::locale()->readNumber( cleanText(), ok ); 1055 value = KGlobal::locale()->readNumber( cleanText(), ok );
1053 else 1056 else
1054 value = cleanText().toDouble( ok ); 1057 value = cleanText().toDouble( ok );
1055 if ( !*ok ) return 0; 1058 if ( !*ok ) return 0;
1056 if ( value > maxValue() ) 1059 if ( value > maxValue() )
1057 value = maxValue(); 1060 value = maxValue();
1058 else if ( value < minValue() ) 1061 else if ( value < minValue() )
1059 value = minValue(); 1062 value = minValue();
1060 return d->mapToInt( value, ok ); 1063 return d->mapToInt( value, ok );
1061} 1064}
1062 1065
1063void KDoubleSpinBox::setValidator( const QValidator * ) { 1066void KDoubleSpinBox::setValidator( const QValidator * ) {
1064 // silently discard the new validator. We don't want another one ;-) 1067 // silently discard the new validator. We don't want another one ;-)
1065} 1068}
1066 1069
1067void KDoubleSpinBox::slotValueChanged( int value ) { 1070void KDoubleSpinBox::slotValueChanged( int value ) {
1068 emit valueChanged( d->mapToDouble( value ) ); 1071 emit valueChanged( d->mapToDouble( value ) );
1069} 1072}
1070 1073
1071void KDoubleSpinBox::updateValidator() { 1074void KDoubleSpinBox::updateValidator() {
1072 if ( !d->mValidator ) { 1075 if ( !d->mValidator ) {
1073 d->mValidator = new KDoubleValidator( minValue(), maxValue(), precision(), 1076 d->mValidator = new KDoubleValidator( minValue(), maxValue(), precision(),
1074 this, "d->mValidator" ); 1077 this, "d->mValidator" );
1075 base::setValidator( d->mValidator ); 1078 lineEdit()->setValidator( d->mValidator );
1076 } else 1079 } else
1077 d->mValidator->setRange( minValue(), maxValue(), precision() ); 1080 d->mValidator->setRange( minValue(), maxValue(), precision() );
1078} 1081}
1079 1082
1080void KNumInput::virtual_hook( int, void* ) 1083void KNumInput::virtual_hook( int, void* )
1081{ /*BASE::virtual_hook( id, data );*/ } 1084{ /*BASE::virtual_hook( id, data );*/ }
1082 1085
1083void KIntNumInput::virtual_hook( int id, void* data ) 1086void KIntNumInput::virtual_hook( int id, void* data )
1084{ KNumInput::virtual_hook( id, data ); } 1087{ KNumInput::virtual_hook( id, data ); }
1085 1088
1086void KDoubleNumInput::virtual_hook( int id, void* data ) 1089void KDoubleNumInput::virtual_hook( int id, void* data )
1087{ KNumInput::virtual_hook( id, data ); } 1090{ KNumInput::virtual_hook( id, data ); }
1088 1091
1089void KIntSpinBox::virtual_hook( int, void* ) 1092void KIntSpinBox::virtual_hook( int, void* )
1090{ /*BASE::virtual_hook( id, data );*/ } 1093{ /*BASE::virtual_hook( id, data );*/ }
1091 1094
1092void KDoubleSpinBox::virtual_hook( int, void* ) 1095void KDoubleSpinBox::virtual_hook( int, void* )
1093{ /*BASE::virtual_hook( id, data );*/ } 1096{ /*BASE::virtual_hook( id, data );*/ }
1094 1097
1095//US #include "knuminput.moc" 1098//US #include "knuminput.moc"