* Bug #11489 fixed - 'SliderStep' property was ignored for uicontrols.
[scilab.git] / scilab / modules / gui / src / cpp / SetUicontrolSliderStep.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007 - INRIA - Vincent COUVERT
4  * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
5  * Sets the slider step property of an uicontrol object
6  *
7  * This file must be used under the terms of the CeCILL.
8  * This source file is licensed as described in the file COPYING, which
9  * you should have received as part of this distribution.  The terms
10  * are also available at
11  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12  *
13  */
14
15 #include "SetUicontrolSliderStep.hxx"
16 #include "stack-c.h"
17
18 int SetUicontrolSliderStep(void* _pvCtx, char* sciObjUID, size_t stackPointer, int valueType, int nbRow, int nbCol)
19 {
20     BOOL status = FALSE;
21
22     if (valueType != sci_matrix)
23     {
24         /* Wrong datatype */
25         Scierror(999, const_cast<char*>(_("Wrong type for '%s' property: A 1 x %d real row vector expected.\n")), "SliderStep", 2);
26         return SET_PROPERTY_ERROR;
27     }
28
29     if ( nbRow == 1 && nbCol == 1)
30     {
31         double pdblStep[2];
32         double* pdblStackVal = stk(stackPointer);
33         double maxValue = 0;
34         double* pdblMaxValue = &maxValue;
35         double minValue = 0;
36         double* pdblMinValue = &minValue;
37
38         getGraphicObjectProperty(sciObjUID, __GO_UI_MIN__, jni_double, (void**) &pdblMinValue);
39         getGraphicObjectProperty(sciObjUID, __GO_UI_MAX__, jni_double, (void**) &pdblMaxValue);
40
41         pdblStep[0] = pdblStackVal[0];
42         pdblStep[1] = 0.1 * (maxValue - minValue);// default big value : 10% of the scale
43
44         status = setGraphicObjectProperty(sciObjUID, __GO_UI_SLIDERSTEP__, pdblStep, jni_double_vector, 2);
45     }
46     else if (nbRow == 1 && nbCol == 2)
47     {
48         status = setGraphicObjectProperty(sciObjUID, __GO_UI_SLIDERSTEP__, stk(stackPointer), jni_double_vector, 2);
49     }
50     else
51     {
52         /* Wrong value size */
53         Scierror(999, const_cast<char*>(_("Wrong size for '%s' property: A 1 x %d real row vector expected.\n")), "SliderStep", 2);
54         return SET_PROPERTY_ERROR;
55     }
56
57     if (status == TRUE)
58     {
59         return SET_PROPERTY_SUCCEED;
60     }
61     else
62     {
63         Scierror(999, const_cast<char*>(_("'%s' property does not exist for this handle.\n")), "SliderStep");
64         return SET_PROPERTY_ERROR;
65     }
66 }