GUI module ported to api_scilab. test_run("gui")
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_x_dialog.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - INRIA - Allan CORNET
4  * Copyright (C) 2008 - INRIA - Vincent COUVERT (Java version)
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 #include "gw_gui.h"
15 #include "api_scilab.h"
16 #include "localization.h"
17 #include "CallMessageBox.h"
18 #include "Scierror.h"
19 #include "getPropertyAssignedValue.h"
20 #include "freeArrayOfString.h"
21 /*--------------------------------------------------------------------------*/
22 int sci_x_dialog(char *fname, unsigned long fname_len)
23 {
24     SciErr sciErr;
25
26     int* piAddrlabelsAdr = NULL;
27     int* piAddrinitialValueAdr = NULL;
28     double* emptyMatrixAdr = NULL;
29
30     int nbRow = 0, nbCol = 0;
31
32     int messageBoxID = 0;
33
34     char **initialValueAdr = 0;
35
36     char **labelsAdr = 0;
37
38     int userValueSize = 0;
39     char **userValue = NULL;
40
41     CheckInputArgument(pvApiCtx, 1, 2);
42     CheckOutputArgument(pvApiCtx, 0, 1);
43
44     if ((checkInputArgumentType(pvApiCtx, 1, sci_strings)))
45     {
46         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrlabelsAdr);
47         if (sciErr.iErr)
48         {
49             printError(&sciErr, 0);
50             return 1;
51         }
52
53         // Retrieve a matrix of string at position 1.
54         if (getAllocatedMatrixOfString(pvApiCtx, piAddrlabelsAdr, &nbRow, &nbCol, &labelsAdr))
55         {
56             Scierror(202, _("%s: Wrong type for argument #%d: String matrix expected.\n"), fname, 1);
57             return 1;
58         }
59     }
60     else
61     {
62         Scierror(999, _("%s: Wrong type for input argument #%d: Vector of strings expected.\n"), fname, 1);
63         return FALSE;
64     }
65
66     /* Create the Java Object */
67     messageBoxID = createMessageBox();
68
69     /* Title is a default title */
70     setMessageBoxTitle(messageBoxID, _("Scilab Input Value Request"));
71     /* Message */
72     setMessageBoxMultiLineMessage(messageBoxID, labelsAdr, nbCol * nbRow);
73     freeAllocatedMatrixOfString(nbRow, nbCol, labelsAdr);
74
75     if (nbInputArgument(pvApiCtx) == 2)
76     {
77         if (VarType(2) ==  sci_strings)
78         {
79             sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrinitialValueAdr);
80             if (sciErr.iErr)
81             {
82                 printError(&sciErr, 0);
83                 return 1;
84             }
85
86             // Retrieve a matrix of string at position 2.
87             if (getAllocatedMatrixOfString(pvApiCtx, piAddrinitialValueAdr, &nbRow, &nbCol, &initialValueAdr))
88             {
89                 Scierror(202, _("%s: Wrong type for argument #%d: String matrix expected.\n"), fname, 2);
90                 return 1;
91             }
92         }
93         else
94         {
95             Scierror(999, _("%s: Wrong type for input argument #%d: Vector of strings expected.\n"), fname, 2);
96             return FALSE;
97         }
98
99         setMessageBoxInitialValue(messageBoxID, initialValueAdr, nbCol * nbRow);
100         freeAllocatedMatrixOfString(nbRow, nbCol, initialValueAdr);
101     }
102
103     /* Display it and wait for a user input */
104     messageBoxDisplayAndWait(messageBoxID);
105
106     /* Read the user answer */
107     userValueSize = getMessageBoxValueSize(messageBoxID);
108     if (userValueSize == 0)
109     {
110         nbRow = 0;
111         nbCol = 0;
112
113         sciErr = allocMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, nbRow, nbCol, &emptyMatrixAdr);
114         if (sciErr.iErr)
115         {
116             printError(&sciErr, 0);
117             Scierror(999, _("%s: Memory allocation error.\n"), fname);
118             return 1;
119         }
120     }
121     else
122     {
123         userValue = getMessageBoxValue(messageBoxID);
124
125         nbCol = 1;
126         CreateVarFromPtr(nbInputArgument(pvApiCtx) + 1, MATRIX_OF_STRING_DATATYPE, &userValueSize, &nbCol, userValue);
127         /* TO DO : delete of userValue */
128     }
129
130     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
131     ReturnArguments(pvApiCtx);
132     return TRUE;
133 }
134 /*--------------------------------------------------------------------------*/