Subversion Repositories Scribus

Rev

Rev 80 | Rev 138 | 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"
137 Franz 19
#include <qapplication.h>
20
#include "fparser.h"
3 paul 21
 
22
MSpinBox::MSpinBox(QWidget *pa, int s):QSpinBox(pa)
23
{
24
        switch (s)
25
                {
26
                case 1:
27
                        Decimals = 10;
28
                        Width = 1;
29
                        break;
30
                case 2:
31
                        Decimals = 100;
32
                        Width = 2;
33
                default:
34
                        Decimals = 100;
35
                        Width = 2;
36
                        break;
37
                }
38
        setValidator(0);
77 Franz 39
        ed = editor();
3 paul 40
}
41
 
42
bool MSpinBox::eventFilter( QObject* ob, QEvent* ev )
43
{
44
        bool retval = FALSE;
45
        if ( ev->type() == QEvent::KeyPress )
46
                {
47
                QKeyEvent* k = (QKeyEvent*)ev;
48
                if (k->key() == Key_Shift)
49
                        {
50
                        setLineStep(Decimals / 10);
51
                        retval = true;
52
            qApp->sendEvent( this, ev );
53
                        return retval;
54
                        }
55
                }
56
        if ( ev->type() == QEvent::KeyRelease )
57
                {
58
                QKeyEvent* k = (QKeyEvent*)ev;
59
                if (k->key() == Key_Shift)
60
                        {
61
                        setLineStep(Decimals);
62
                        retval = true;
63
            qApp->sendEvent( this, ev );
64
                        return retval;
65
                        }
66
                }
67
        return QSpinBox::eventFilter(ob, ev);
68
}
69
 
70
QString MSpinBox::mapValueToText(int value)
71
{
80 Franz 72
        double dez = Width == 1 ? 10.0 : 100.0;
68 Franz 73
        return QString::number(static_cast<double>(value) / dez, 'f', Width);
3 paul 74
}
75
 
76
int MSpinBox::mapTextToValue(bool *)
77
{
80 Franz 78
        double dez = Width == 1 ? 10.0 : 100.0;
137 Franz 79
  FunctionParser fp;
80
  int ret = fp.Parse(cleanText().latin1(), "", true);
81
        if (ret >= 0)
82
                return 0;
83
  double erg = fp.Eval(NULL);
84
        return qRound(erg*dez);
3 paul 85
}
86
 
87
void MSpinBox::setDecimals(int deci)
88
{
89
        Decimals = deci;
90
        setLineStep(Decimals);
80 Franz 91
        if (deci > 9 && deci < 100)
3 paul 92
                Width = 1;
93
        if (deci > 99)
94
                Width = 2;
95
}