]> SALOME platform Git repositories - modules/geom.git/blob - src/DlgRef/DlgRef_SpinBox.cxx
Salome HOME
Update copyright information
[modules/geom.git] / src / DlgRef / DlgRef_SpinBox.cxx
1 //  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 //  GEOM GEOMGUI : GUI for Geometry component
23 //  File   : DlgRef_SpinBox.cxx
24 //  Author : Lucien PIGNOLONI
25 //  Module : GEOM
26 //  $Header$
27 //
28 #include "DlgRef_SpinBox.h"
29
30 #include <qvalidator.h>
31 #include <math.h>
32
33 //=================================================================================
34 // class    : DlgRef_SpinBox()
35 // purpose  : constructor of specific widget accepting floats in double precision.
36 //=================================================================================
37 DlgRef_SpinBox::DlgRef_SpinBox(QWidget* parent, const char* name)
38   : QtxDblSpinBox(parent, name)
39 {
40 }
41
42
43 //=================================================================================
44 // function : ~DlgRef_SpinBox()
45 // purpose  : destructor
46 //=================================================================================
47 DlgRef_SpinBox::~DlgRef_SpinBox()
48 {
49 }
50
51
52 //=================================================================================
53 // function : SetStep()  [SLOT]
54 // purpose  :
55 //=================================================================================
56 void DlgRef_SpinBox::SetStep(double newStep)
57 {
58   setLineStep(newStep);
59 }
60
61
62 //=================================================================================
63 // function : SetValue()
64 // purpose  :
65 //=================================================================================
66 void DlgRef_SpinBox::SetValue(double v)
67 {
68   setValue(v);
69 }
70
71
72 //=================================================================================
73 // function : GetValue()
74 // purpose  : returns a double
75 //=================================================================================
76 double DlgRef_SpinBox::GetValue()
77 {
78   return value();
79 }
80
81
82 //=================================================================================
83 // function : GetString()
84 // purpose  : returns a QString
85 //=================================================================================
86 QString DlgRef_SpinBox::GetString()
87 {
88   return cleanText();
89 }
90
91
92 //=================================================================================
93 // function : RangeStepAndValidator()
94 // purpose  :
95 //=================================================================================
96 void DlgRef_SpinBox::RangeStepAndValidator(double min, double max,double step,
97                                            unsigned short decimals)
98 {
99   setPrecision(-decimals); // PAL12789. Minus is for using 'g' double->string conversion specifier,
100   //                          see QtxDblSpinBox::mapValueToText( double v )
101   setRange(min, max);
102   setLineStep(step);
103   ((QDoubleValidator*)validator())->setRange(min, max, decimals);
104 }
105
106 QString DlgRef_SpinBox::PrintDoubleValue (double theValue, int thePrecision)
107 {
108   const double prec = 1e-12;
109
110   QString aRes;
111   aRes.setNum(theValue, 'g', thePrecision);
112
113   if ( prec > 0 ) {
114     int p = 0;
115     while ( p < thePrecision ) {
116       aRes.setNum( theValue, 'g', p++ );
117       double v = aRes.toDouble();
118       double err = fabs( theValue - v );
119       if ( err > 0 && err <= prec )
120         break;
121     }
122   }
123
124   // remove trailing zeroes
125   QString delim( "." );
126
127   int idx = aRes.findRev( delim );
128   if ( idx == -1 )
129     return aRes;
130
131   QString iPart = aRes.left( idx );
132   QString fPart = aRes.mid( idx + 1 );
133
134   while ( !fPart.isEmpty() && fPart.at( fPart.length() - 1 ) == '0' )
135     fPart.remove( fPart.length() - 1, 1 );
136
137   aRes = iPart;
138   if ( !fPart.isEmpty() )
139     aRes += delim + fPart;
140
141   return aRes;
142 }