Rev 75 | Rev 80 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3 | paul | 1 | /*************************************************************************** |
2 | mspinbox.cpp - description |
||
3 | ------------------- |
||
4 | begin : Sat Jun 16 2001 |
||
5 | copyright : (C) 2001 by Franz Schmid |
||
6 | email : Franz.Schmid@altmuehlnet.de |
||
7 | ***************************************************************************/ |
||
8 | |||
9 | /*************************************************************************** |
||
10 | * * |
||
11 | * This program is free software; you can redistribute it and/or modify * |
||
12 | * it under the terms of the GNU General Public License as published by * |
||
13 | * the Free Software Foundation; either version 2 of the License, or * |
||
14 | * (at your option) any later version. * |
||
15 | * * |
||
16 | ***************************************************************************/ |
||
17 | |||
18 | #include "mspinbox.h" |
||
19 | #include "qapplication.h" |
||
20 | |||
21 | MSpinBox::MSpinBox(QWidget *pa, int s):QSpinBox(pa) |
||
22 | { |
||
23 | switch (s) |
||
24 | { |
||
25 | case 1: |
||
26 | Decimals = 10; |
||
27 | Width = 1; |
||
28 | break; |
||
29 | case 2: |
||
30 | Decimals = 100; |
||
31 | Width = 2; |
||
32 | default: |
||
33 | Decimals = 100; |
||
34 | Width = 2; |
||
35 | break; |
||
36 | } |
||
37 | setValidator(0); |
||
77 | Franz | 38 | ed = editor(); |
3 | paul | 39 | } |
40 | |||
41 | bool MSpinBox::eventFilter( QObject* ob, QEvent* ev ) |
||
42 | { |
||
43 | bool retval = FALSE; |
||
44 | if ( ev->type() == QEvent::KeyPress ) |
||
45 | { |
||
46 | QKeyEvent* k = (QKeyEvent*)ev; |
||
47 | if (k->key() == Key_Shift) |
||
48 | { |
||
49 | setLineStep(Decimals / 10); |
||
50 | retval = true; |
||
51 | qApp->sendEvent( this, ev ); |
||
52 | return retval; |
||
53 | } |
||
54 | } |
||
55 | if ( ev->type() == QEvent::KeyRelease ) |
||
56 | { |
||
57 | QKeyEvent* k = (QKeyEvent*)ev; |
||
58 | if (k->key() == Key_Shift) |
||
59 | { |
||
60 | setLineStep(Decimals); |
||
61 | retval = true; |
||
62 | qApp->sendEvent( this, ev ); |
||
63 | return retval; |
||
64 | } |
||
65 | } |
||
66 | return QSpinBox::eventFilter(ob, ev); |
||
67 | } |
||
68 | |||
69 | QString MSpinBox::mapValueToText(int value) |
||
70 | { |
||
75 | Franz | 71 | double dez; |
68 | Franz | 72 | if (Width == 1) |
75 | Franz | 73 | dez = 10.0; |
68 | Franz | 74 | else |
75 | Franz | 75 | dez = 100.0; |
68 | Franz | 76 | return QString::number(static_cast<double>(value) / dez, 'f', Width); |
3 | paul | 77 | } |
78 | |||
79 | int MSpinBox::mapTextToValue(bool *) |
||
80 | { |
||
75 | Franz | 81 | float dez; |
68 | Franz | 82 | if (Width == 1) |
75 | Franz | 83 | dez = 10.0; |
68 | Franz | 84 | else |
75 | Franz | 85 | dez = 100.0; |
68 | Franz | 86 | return int(qRound(text().toFloat()*dez)); |
3 | paul | 87 | } |
88 | |||
89 | void MSpinBox::setDecimals(int deci) |
||
90 | { |
||
91 | Decimals = deci; |
||
92 | setLineStep(Decimals); |
||
93 | if (deci > 9) |
||
94 | Width = 1; |
||
95 | if (deci > 99) |
||
96 | Width = 2; |
||
97 | } |