1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // GEOM GEOMGUI : GUI for Geometry component
23 // File : DlgRef_SpinBox.cxx
24 // Author : Lucien PIGNOLONI
28 #include "DlgRef_SpinBox.h"
30 #include <qvalidator.h>
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)
43 //=================================================================================
44 // function : ~DlgRef_SpinBox()
45 // purpose : destructor
46 //=================================================================================
47 DlgRef_SpinBox::~DlgRef_SpinBox()
52 //=================================================================================
53 // function : SetStep() [SLOT]
55 //=================================================================================
56 void DlgRef_SpinBox::SetStep(double newStep)
62 //=================================================================================
63 // function : SetValue()
65 //=================================================================================
66 void DlgRef_SpinBox::SetValue(double v)
72 //=================================================================================
73 // function : GetValue()
74 // purpose : returns a double
75 //=================================================================================
76 double DlgRef_SpinBox::GetValue()
82 //=================================================================================
83 // function : GetString()
84 // purpose : returns a QString
85 //=================================================================================
86 QString DlgRef_SpinBox::GetString()
92 //=================================================================================
93 // function : RangeStepAndValidator()
95 //=================================================================================
96 void DlgRef_SpinBox::RangeStepAndValidator(double min, double max,double step,
97 unsigned short decimals)
99 setPrecision(-decimals); // PAL12789. Minus is for using 'g' double->string conversion specifier,
100 // see QtxDblSpinBox::mapValueToText( double v )
103 ((QDoubleValidator*)validator())->setRange(min, max, decimals);
106 QString DlgRef_SpinBox::PrintDoubleValue (double theValue, int thePrecision)
108 const double prec = 1e-12;
110 if ( abs(theValue) < thePrecision)
114 aRes.setNum(theValue, 'g', thePrecision);
118 while ( p < thePrecision ) {
119 aRes.setNum( theValue, 'g', p++ );
120 double v = aRes.toDouble();
121 double err = fabs( theValue - v );
122 if ( err > 0 && err <= prec )
127 // remove trailing zeroes
128 QString delim( "." );
130 int idx = aRes.findRev( delim );
134 QString iPart = aRes.left( idx );
135 QString fPart = aRes.mid( idx + 1 );
137 while ( !fPart.isEmpty() && fPart.at( fPart.length() - 1 ) == '0' )
138 fPart.remove( fPart.length() - 1, 1 );
141 if ( !fPart.isEmpty() )
142 aRes += delim + fPart;