Skip to content

Commit f3a53f7

Browse files
committed
adapting to SCIRUN5 parameter declaration structure using macros
1 parent 51c8518 commit f3a53f7

File tree

6 files changed

+147
-145
lines changed

6 files changed

+147
-145
lines changed

src/Core/Algorithms/Legacy/Inverse/TikhonovAlgoAbstractBase.cc

Lines changed: 58 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -66,49 +66,50 @@ const AlgorithmOutputName TikhonovAlgoAbstractBase::InverseSolution("InverseSolu
6666
const AlgorithmOutputName TikhonovAlgoAbstractBase::RegularizationParameter("RegularizationParameter");
6767
const AlgorithmOutputName TikhonovAlgoAbstractBase::RegInverse("RegInverse");
6868

69-
const AlgorithmParameterName TikhonovAlgoAbstractBase::TikhonovImplementation("TikhonovImplementationOption");
70-
const AlgorithmParameterName TikhonovAlgoAbstractBase::RegularizationMethod("lambdaMethodComboBox");
71-
const AlgorithmParameterName TikhonovAlgoAbstractBase::regularizationChoice("autoRadioButton");
72-
const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaFromDirectEntry("lambdaDoubleSpinBox");
73-
const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaMin("lambdaMinDoubleSpinBox");
74-
const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaMax("lambdaMaxDoubleSpinBox");
75-
const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaNum("lambdaNumberSpinBox");
76-
const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaResolution("lambdaResolutionDoubleSpinBox");
77-
const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaSliderValue("lambdaSliderDoubleSpinBox");
78-
const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaCorner("lCurveLambdaLineEdit");
79-
const AlgorithmParameterName TikhonovAlgoAbstractBase::LCurveText("lCurveTextEdit");
80-
const AlgorithmParameterName TikhonovAlgoAbstractBase::regularizationSolutionSubcase("solutionConstraintRadioButton");
81-
const AlgorithmParameterName TikhonovAlgoAbstractBase::regularizationResidualSubcase("residualConstraintRadioButton");
82-
83-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, RegularizationMethod);
84-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, regularizationChoice);
85-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, LambdaFromDirectEntry);
86-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, LambdaMin);
87-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, LambdaMax);
88-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, LambdaNum);
89-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, LambdaResolution);
90-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, LambdaSliderValue);
91-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, LambdaCorner);
92-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, LCurveText);
93-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, regularizationSolutionSubcase);
94-
// ALGORITHM_PARAMETER_DEF( TikhonovAlgoAbstractBase, regularizationResidualSubcase);
69+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::TikhonovImplementation("TikhonovImplementationOption");
70+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::RegularizationMethod("lambdaMethodComboBox");
71+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::regularizationChoice("regularizationChoice");
72+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaFromDirectEntry("lambdaDoubleSpinBox");
73+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaMin("lambdaMinDoubleSpinBox");
74+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaMax("lambdaMaxDoubleSpinBox");
75+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaNum("lambdaNumberSpinBox");
76+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaResolution("lambdaResolutionDoubleSpinBox");
77+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaSliderValue("lambdaSliderDoubleSpinBox");
78+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::LambdaCorner("lCurveLambdaLineEdit");
79+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::LCurveText("lCurveTextEdit");
80+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::regularizationSolutionSubcase("solutionConstraintRadioButton");
81+
// const AlgorithmParameterName TikhonovAlgoAbstractBase::regularizationResidualSubcase("residualConstraintRadioButton");
82+
83+
ALGORITHM_PARAMETER_DEF( Inverse, TikhonovImplementation);
84+
ALGORITHM_PARAMETER_DEF( Inverse, RegularizationMethod);
85+
ALGORITHM_PARAMETER_DEF( Inverse, regularizationChoice);
86+
ALGORITHM_PARAMETER_DEF( Inverse, LambdaFromDirectEntry);
87+
ALGORITHM_PARAMETER_DEF( Inverse, LambdaMin);
88+
ALGORITHM_PARAMETER_DEF( Inverse, LambdaMax);
89+
ALGORITHM_PARAMETER_DEF( Inverse, LambdaNum);
90+
ALGORITHM_PARAMETER_DEF( Inverse, LambdaResolution);
91+
ALGORITHM_PARAMETER_DEF( Inverse, LambdaSliderValue);
92+
ALGORITHM_PARAMETER_DEF( Inverse, LambdaCorner);
93+
ALGORITHM_PARAMETER_DEF( Inverse, LCurveText);
94+
ALGORITHM_PARAMETER_DEF( Inverse, regularizationSolutionSubcase);
95+
ALGORITHM_PARAMETER_DEF( Inverse, regularizationResidualSubcase);
9596

9697
TikhonovAlgoAbstractBase::TikhonovAlgoAbstractBase()
9798
{
98-
addParameter(TikhonovImplementation, NoMethodSelected);
99-
addParameter(RegularizationMethod, "lcurve");
100-
addParameter(regularizationChoice, 0);
101-
addParameter(LambdaFromDirectEntry,1e-6);
99+
addParameter(Parameters::TikhonovImplementation, "NoMethodSelected");
100+
addParameter(Parameters::RegularizationMethod, "lcurve");
101+
addParameter(Parameters::regularizationChoice, "automatic");
102+
addParameter(Parameters::LambdaFromDirectEntry,1e-6);
102103
// addParameter(lambdaDoubleSpinBox,1e-6);
103-
addParameter(LambdaMin,1e-6);
104-
addParameter(LambdaMax,1);
105-
addParameter(LambdaNum,1000);
106-
addParameter(LambdaResolution,1e-6);
107-
addParameter(LambdaSliderValue,0);
108-
addParameter(LambdaCorner,0);
109-
addParameter(LCurveText,"lcurve");
110-
addParameter(regularizationSolutionSubcase,solution_constrained);
111-
addParameter(regularizationResidualSubcase,residual_constrained);
104+
addParameter(Parameters::LambdaMin,1e-6);
105+
addParameter(Parameters::LambdaMax,1);
106+
addParameter(Parameters::LambdaNum,1000);
107+
addParameter(Parameters::LambdaResolution,1e-6);
108+
addParameter(Parameters::LambdaSliderValue,0);
109+
addParameter(Parameters::LambdaCorner,0);
110+
addParameter(Parameters::LCurveText,"lcurve");
111+
addParameter(Parameters::regularizationSolutionSubcase,solution_constrained);
112+
addParameter(Parameters::regularizationResidualSubcase,residual_constrained);
112113

113114
}
114115

@@ -142,7 +143,7 @@ bool TikhonovAlgoAbstractBase::checkInputMatrixSizes( const AlgorithmInput & inp
142143
// check source regularization matrix sizes
143144
if (sourceWeighting_)
144145
{
145-
if( get(regularizationSolutionSubcase).toInt()==solution_constrained )
146+
if( get(Parameters::regularizationSolutionSubcase).toInt()==solution_constrained )
146147
{
147148
// check that the matrix is of appropriate size (equal number of rows as columns in fwd matrix)
148149
if ( N != sourceWeighting_->ncols() )
@@ -152,7 +153,7 @@ bool TikhonovAlgoAbstractBase::checkInputMatrixSizes( const AlgorithmInput & inp
152153
}
153154
}
154155
// otherwise, if the source regularization is provided as the squared version (RR^T)
155-
else if ( get(regularizationSolutionSubcase).toInt()==solution_constrained_squared )
156+
else if ( get(Parameters::regularizationSolutionSubcase).toInt()==solution_constrained_squared )
156157
{
157158
// check that the matrix is of appropriate size and squared (equal number of rows as columns in fwd matrix)
158159
if ( ( N != sourceWeighting_->nrows() ) || ( N != sourceWeighting_->ncols() ) )
@@ -166,7 +167,7 @@ bool TikhonovAlgoAbstractBase::checkInputMatrixSizes( const AlgorithmInput & inp
166167
// check measurement regularization matrix sizes
167168
if (sensorWeighting_)
168169
{
169-
if (get(regularizationResidualSubcase).toInt() == residual_constrained)
170+
if (get(Parameters::regularizationResidualSubcase).toInt() == residual_constrained)
170171
{
171172
// check that the matrix is of appropriate size (equal number of rows as rows in fwd matrix)
172173
if(M != sensorWeighting_->ncols())
@@ -176,7 +177,7 @@ bool TikhonovAlgoAbstractBase::checkInputMatrixSizes( const AlgorithmInput & inp
176177
}
177178
}
178179
// otherwise if the source covariance matrix is provided in squared form
179-
else if ( get(regularizationResidualSubcase).toInt() == residual_constrained_squared )
180+
else if ( get(Parameters::regularizationResidualSubcase).toInt() == residual_constrained_squared )
180181
{
181182
// check that the matrix is of appropriate size and squared (equal number of rows as rows in fwd matrix)
182183
if( (M != sensorWeighting_->nrows()) || (M != sensorWeighting_->ncols()) )
@@ -197,15 +198,16 @@ bool TikhonovAlgoAbstractBase::checkInputMatrixSizes( const AlgorithmInput & inp
197198
///////// run()
198199
AlgorithmOutput TikhonovAlgoAbstractBase::run(const AlgorithmInput & input) const
199200
{
201+
THROW_ALGORITHM_PROCESSING_ERROR("We got to run");
200202
// get inputs
201203
auto forwardMatrix_ = input.get<Matrix>(TikhonovAlgoAbstractBase::ForwardMatrix);
202204
auto measuredData_ = input.get<Matrix>(TikhonovAlgoAbstractBase::MeasuredPotentials);
203205
auto sourceWeighting_ = input.get<Matrix>(TikhonovAlgoAbstractBase::WeightingInSourceSpace);
204206
auto sensorWeighting_ = input.get<Matrix>(TikhonovAlgoAbstractBase::WeightingInSensorSpace);
205207

206208
// get Parameters
207-
auto RegularizationMethod_gotten = get(RegularizationMethod).toString();
208-
auto TikhonovImplementation_gotten = get(TikhonovImplementation).toString();
209+
auto RegularizationMethod_gotten = get(Parameters::RegularizationMethod).toString();
210+
auto TikhonovImplementation_gotten = get(Parameters::TikhonovImplementation).toString();
209211

210212
// Alocate Variable
211213
DenseMatrix solution;
@@ -217,18 +219,18 @@ AlgorithmOutput TikhonovAlgoAbstractBase::run(const AlgorithmInput & input) cons
217219

218220
// Determine specific Tikhonov Implementation
219221
TikhonovImpl *algoImpl;
220-
if ( get(RegularizationMethod).toInt() == standardTikhonov ){
222+
if ( get(Parameters::RegularizationMethod).toInt() == standardTikhonov ){
221223
// get Parameters
222-
int regularizationChoice_ = get(regularizationChoice).toInt();
223-
int regularizationSolutionSubcase_ = get(regularizationSolutionSubcase).toInt();
224-
int regularizationResidualSubcase_ = get(regularizationResidualSubcase).toInt();
224+
int regularizationChoice_ = get(Parameters::regularizationChoice).toInt();
225+
int regularizationSolutionSubcase_ = get(Parameters::regularizationSolutionSubcase).toInt();
226+
int regularizationResidualSubcase_ = get(Parameters::regularizationResidualSubcase).toInt();
225227

226228
algoImpl = new SolveInverseProblemWithStandardTikhonovImpl( *castMatrix::toDense(forwardMatrix_), *castMatrix::toDense(measuredData_), *castMatrix::toDense(sourceWeighting_), *castMatrix::toDense(sensorWeighting_), regularizationChoice_, regularizationSolutionSubcase_, regularizationResidualSubcase_);
227229
}
228-
else if ( get(RegularizationMethod).toInt() == TikhonovSVD ){
230+
else if ( get(Parameters::RegularizationMethod).toInt() == TikhonovSVD ){
229231
// algoImpl = new SolveInverseProblemWithTikhonovSVD_impl( *castMatrix::toDense(forwardMatrix_), *castMatrix::toDense(measuredData_), *castMatrix::toDense(sourceWeighting_), *castMatrix::toDense(sensorWeighting_));
230232
}
231-
else if ( get(RegularizationMethod).toInt() == TikhonovTSVD ){
233+
else if ( get(Parameters::RegularizationMethod).toInt() == TikhonovTSVD ){
232234
THROW_ALGORITHM_PROCESSING_ERROR("Tikhonov TSVD not implemented yet");
233235
}
234236
else{
@@ -243,12 +245,12 @@ AlgorithmOutput TikhonovAlgoAbstractBase::run(const AlgorithmInput & input) cons
243245
if (RegularizationMethod_gotten == "single")
244246
{
245247
// Use single fixed lambda value, entered in UI
246-
lambda_ = get(LambdaFromDirectEntry).toDouble();
248+
lambda_ = get(Parameters::LambdaFromDirectEntry).toDouble();
247249
}
248250
else if (RegularizationMethod_gotten == "slider")
249251
{
250252
// Use single fixed lambda value, select via slider
251-
lambda_ = get(LambdaSliderValue).toDouble();
253+
lambda_ = get(Parameters::LambdaSliderValue).toDouble();
252254
}
253255
}
254256
else if (RegularizationMethod_gotten == "lcurve")
@@ -302,9 +304,9 @@ double TikhonovAlgoAbstractBase::computeLcurve( const SCIRun::Core::Algorithms::
302304
auto sensorWeighting_ = input.get<Matrix>(TikhonovAlgoAbstractBase::WeightingInSensorSpace);
303305

304306
// define the step size of the lambda vector to be computed (distance between min and max divided by number of desired lambdas in log scale)
305-
const int nLambda = get(LambdaNum).toInt();
306-
const int lambdaMin_ = get(LambdaMin).toDouble();
307-
const int lambdaMax_ = get(LambdaMax).toDouble();
307+
const int nLambda = get(Parameters::LambdaNum).toInt();
308+
const int lambdaMin_ = get(Parameters::LambdaMin).toDouble();
309+
const int lambdaMax_ = get(Parameters::LambdaMax).toDouble();
308310
const double lam_step = pow(10.0, lambdaMax_ / lambdaMin_) / (nLambda-1);
309311
double lambda = 0;
310312

src/Core/Algorithms/Legacy/Inverse/TikhonovAlgoAbstractBase.h

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,19 @@ namespace Core {
3939
namespace Algorithms {
4040
namespace Inverse {
4141

42-
// ALGORITHM_PARAMETER_DECL(RegularizationMethod);
43-
// ALGORITHM_PARAMETER_DECL(regularizationChoice);
44-
// ALGORITHM_PARAMETER_DECL(regularizationSolutionSubcase);
45-
// ALGORITHM_PARAMETER_DECL(regularizationResidualSubcase);
46-
// ALGORITHM_PARAMETER_DECL(LambdaFromDirectEntry);
47-
// ALGORITHM_PARAMETER_DECL(LambdaMin);
48-
// ALGORITHM_PARAMETER_DECL(LambdaMax);
49-
// ALGORITHM_PARAMETER_DECL(LambdaNum);
50-
// ALGORITHM_PARAMETER_DECL(LambdaResolution);
51-
// ALGORITHM_PARAMETER_DECL(LambdaSliderValue);
52-
// ALGORITHM_PARAMETER_DECL(LambdaCorner);
53-
// ALGORITHM_PARAMETER_DECL(LCurveText);
42+
ALGORITHM_PARAMETER_DECL(TikhonovImplementation);
43+
ALGORITHM_PARAMETER_DECL(RegularizationMethod);
44+
ALGORITHM_PARAMETER_DECL(regularizationChoice);
45+
ALGORITHM_PARAMETER_DECL(regularizationSolutionSubcase);
46+
ALGORITHM_PARAMETER_DECL(regularizationResidualSubcase);
47+
ALGORITHM_PARAMETER_DECL(LambdaFromDirectEntry);
48+
ALGORITHM_PARAMETER_DECL(LambdaMin);
49+
ALGORITHM_PARAMETER_DECL(LambdaMax);
50+
ALGORITHM_PARAMETER_DECL(LambdaNum);
51+
ALGORITHM_PARAMETER_DECL(LambdaResolution);
52+
ALGORITHM_PARAMETER_DECL(LambdaSliderValue);
53+
ALGORITHM_PARAMETER_DECL(LambdaCorner);
54+
ALGORITHM_PARAMETER_DECL(LCurveText);
5455

5556
class SCISHARE TikhonovAlgoAbstractBase : virtual public AlgorithmBase
5657
{
@@ -69,19 +70,19 @@ namespace Inverse {
6970
static const AlgorithmOutputName RegInverse;
7071

7172
// define parameter names
72-
static const AlgorithmParameterName TikhonovImplementation;
73-
static const AlgorithmParameterName RegularizationMethod;
74-
static const AlgorithmParameterName regularizationChoice;
75-
static const AlgorithmParameterName regularizationSolutionSubcase;
76-
static const AlgorithmParameterName regularizationResidualSubcase;
77-
static const AlgorithmParameterName LambdaFromDirectEntry;
78-
static const AlgorithmParameterName LambdaMin;
79-
static const AlgorithmParameterName LambdaMax;
80-
static const AlgorithmParameterName LambdaNum;
81-
static const AlgorithmParameterName LambdaResolution;
82-
static const AlgorithmParameterName LambdaSliderValue;
83-
static const AlgorithmParameterName LambdaCorner;
84-
static const AlgorithmParameterName LCurveText;
73+
// static const AlgorithmParameterName TikhonovImplementation;
74+
// static const AlgorithmParameterName RegularizationMethod;
75+
// static const AlgorithmParameterName regularizationChoice;
76+
// static const AlgorithmParameterName regularizationSolutionSubcase;
77+
// static const AlgorithmParameterName regularizationResidualSubcase;
78+
// static const AlgorithmParameterName LambdaFromDirectEntry;
79+
// static const AlgorithmParameterName LambdaMin;
80+
// static const AlgorithmParameterName LambdaMax;
81+
// static const AlgorithmParameterName LambdaNum;
82+
// static const AlgorithmParameterName LambdaResolution;
83+
// static const AlgorithmParameterName LambdaSliderValue;
84+
// static const AlgorithmParameterName LambdaCorner;
85+
// static const AlgorithmParameterName LCurveText;
8586

8687
// Define algorithm choices
8788
enum TikhonovImplementationChoice {

src/Interface/Modules/Inverse/SolveInverseProblemWithTikhonovDialog.cc

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,23 @@ SolveInverseProblemWithTikhonovDialog::SolveInverseProblemWithTikhonovDialog(con
5050

5151
WidgetStyleMixin::tabStyle(inputTabWidget_);
5252

53-
addDoubleLineEditManager(lCurveLambdaLineEdit_, TikhonovAlgoAbstractBase::LambdaCorner);
54-
addSpinBoxManager(lambdaNumberSpinBox_, TikhonovAlgoAbstractBase::LambdaNum);
55-
addDoubleSpinBoxManager(lambdaDoubleSpinBox_, TikhonovAlgoAbstractBase::LambdaFromDirectEntry);
56-
addDoubleSpinBoxManager(lambdaMinDoubleSpinBox_, TikhonovAlgoAbstractBase::LambdaMin);
57-
addDoubleSpinBoxManager(lambdaMaxDoubleSpinBox_, TikhonovAlgoAbstractBase::LambdaMax);
58-
addDoubleSpinBoxManager(lambdaResolutionDoubleSpinBox_, TikhonovAlgoAbstractBase::LambdaResolution);
59-
addDoubleLineEditManager(lCurveMinLineEdit_, TikhonovAlgoAbstractBase::LambdaMin);
60-
addDoubleLineEditManager(lCurveMaxLineEdit_, TikhonovAlgoAbstractBase::LambdaMax);
61-
62-
addDoubleSpinBoxManager(lambdaSliderDoubleSpinBox_, TikhonovAlgoAbstractBase::LambdaSliderValue);
63-
64-
addRadioButtonGroupManager({ autoRadioButton_, underRadioButton_, overRadioButton_ }, TikhonovAlgoAbstractBase::regularizationChoice);
65-
addRadioButtonGroupManager({ solutionConstraintRadioButton_, squaredSolutionRadioButton_ }, TikhonovAlgoAbstractBase::regularizationSolutionSubcase);
66-
addRadioButtonGroupManager({ residualConstraintRadioButton_, squaredResidualSolutionRadioButton_ }, TikhonovAlgoAbstractBase::regularizationResidualSubcase);
67-
68-
addComboBoxManager(lambdaMethodComboBox_, TikhonovAlgoAbstractBase::RegularizationMethod, lambdaMethod_);
69-
addTextEditManager(lCurveTextEdit_, TikhonovAlgoAbstractBase::LCurveText);
53+
addDoubleLineEditManager(lCurveLambdaLineEdit_, Parameters::LambdaCorner);
54+
addSpinBoxManager(lambdaNumberSpinBox_, Parameters::LambdaNum);
55+
addDoubleSpinBoxManager(lambdaDoubleSpinBox_, Parameters::LambdaFromDirectEntry);
56+
addDoubleSpinBoxManager(lambdaMinDoubleSpinBox_, Parameters::LambdaMin);
57+
addDoubleSpinBoxManager(lambdaMaxDoubleSpinBox_, Parameters::LambdaMax);
58+
addDoubleSpinBoxManager(lambdaResolutionDoubleSpinBox_, Parameters::LambdaResolution);
59+
addDoubleLineEditManager(lCurveMinLineEdit_, Parameters::LambdaMin);
60+
addDoubleLineEditManager(lCurveMaxLineEdit_, Parameters::LambdaMax);
61+
62+
addDoubleSpinBoxManager(lambdaSliderDoubleSpinBox_, Parameters::LambdaSliderValue);
63+
64+
addRadioButtonGroupManager({ autoRadioButton_, underRadioButton_, overRadioButton_ }, Parameters::regularizationChoice);
65+
addRadioButtonGroupManager({ solutionConstraintRadioButton_, squaredSolutionRadioButton_ }, Parameters::regularizationSolutionSubcase);
66+
addRadioButtonGroupManager({ residualConstraintRadioButton_, squaredResidualSolutionRadioButton_ }, Parameters::regularizationResidualSubcase);
67+
68+
addComboBoxManager(lambdaMethodComboBox_, Parameters::RegularizationMethod, lambdaMethod_);
69+
addTextEditManager(lCurveTextEdit_, Parameters::LCurveText);
7070

7171
connect(lambdaSlider_, SIGNAL(valueChanged(int)), this, SLOT(setSpinBoxValue(int)));
7272
connect(lambdaSliderDoubleSpinBox_, SIGNAL(valueChanged(double)), this, SLOT(setSliderValue(double)));

0 commit comments

Comments
 (0)