]> SALOME platform Git repositories - modules/geom.git/blob - src/DlgRef/DlgRef_SpinBox.cxx
Salome HOME
Bug 0020043: EDF 865 GEOM: Object is non valid after translation. Fix object after...
[modules/geom.git] / src / DlgRef / DlgRef_SpinBox.cxx
1 //  GEOM GEOMGUI : GUI for Geometry component
2 //
3 //  Copyright (C) 2003  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 //
23 //
24 //  File   : DlgRef_SpinBox.cxx
25 //  Author : Lucien PIGNOLONI
26 //  Module : GEOM
27 //  $Header$
28
29 #include "DlgRef_SpinBox.h"
30
31 #include <qvalidator.h>
32 #include <math.h>
33
34 //=================================================================================
35 // class    : DlgRef_SpinBox()
36 // purpose  : constructor of specific widget accepting floats in double precision.
37 //=================================================================================
38 DlgRef_SpinBox::DlgRef_SpinBox(QWidget* parent, const char* name)
39   : QtxDblSpinBox(parent, name)
40 {
41 }
42
43
44 //=================================================================================
45 // function : ~DlgRef_SpinBox()
46 // purpose  : destructor
47 //=================================================================================
48 DlgRef_SpinBox::~DlgRef_SpinBox()
49 {
50 }
51
52
53 //=================================================================================
54 // function : SetStep()  [SLOT]
55 // purpose  :
56 //=================================================================================
57 void DlgRef_SpinBox::SetStep(double newStep)
58 {
59   setLineStep(newStep);
60 }
61
62
63 //=================================================================================
64 // function : SetValue()
65 // purpose  :
66 //=================================================================================
67 void DlgRef_SpinBox::SetValue(double v)
68 {
69   setValue(v);
70 }
71
72
73 //=================================================================================
74 // function : GetValue()
75 // purpose  : returns a double
76 //=================================================================================
77 double DlgRef_SpinBox::GetValue()
78 {
79   return value();
80 }
81
82
83 //=================================================================================
84 // function : GetString()
85 // purpose  : returns a QString
86 //=================================================================================
87 QString DlgRef_SpinBox::GetString()
88 {
89   return cleanText();
90 }
91
92
93 //=================================================================================
94 // function : RangeStepAndValidator()
95 // purpose  :
96 //=================================================================================
97 void DlgRef_SpinBox::RangeStepAndValidator(double min, double max,double step,
98                                            unsigned short decimals)
99 {
100   setPrecision(-decimals); // PAL12789. Minus is for using 'g' double->string conversion specifier,
101   //                          see QtxDblSpinBox::mapValueToText( double v )
102   setRange(min, max);
103   setLineStep(step);
104   ((QDoubleValidator*)validator())->setRange(min, max, decimals);
105 }
106
107 QString DlgRef_SpinBox::PrintDoubleValue (double theValue, int thePrecision)
108 {
109   const double prec = 1e-12;
110
111   QString aRes;
112   aRes.setNum(theValue, 'g', thePrecision);
113
114   if ( prec > 0 ) {
115     int p = 0;
116     while ( p < thePrecision ) {
117       aRes.setNum( theValue, 'g', p++ );
118       double v = aRes.toDouble();
119       double err = fabs( theValue - v );
120       if ( err > 0 && err <= prec )
121         break;
122     }
123   }
124
125   // remove trailing zeroes
126   QString delim( "." );
127
128   int idx = aRes.findRev( delim );
129   if ( idx == -1 )
130     return aRes;
131
132   QString iPart = aRes.left( idx );
133   QString fPart = aRes.mid( idx + 1 );
134
135   while ( !fPart.isEmpty() && fPart.at( fPart.length() - 1 ) == '0' )
136     fPart.remove( fPart.length() - 1, 1 );
137
138   aRes = iPart;
139   if ( !fPart.isEmpty() )
140     aRes += delim + fPart;
141
142   return aRes;
143 }