load: avoid creation of double axes in figure
[scilab.git] / scilab / modules / gui / sci_gateway / cpp / sci_x_dialog.cpp
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  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 extern "C"
18 {
19 #include "gw_gui.h"
20 #include "api_scilab.h"
21 #include "localization.h"
22 #include "CallMessageBox.h"
23 #include "Scierror.h"
24 #include "getPropertyAssignedValue.h"
25 #include "freeArrayOfString.h"
26 }
27 /*--------------------------------------------------------------------------*/
28 int sci_x_dialog(char *fname, void* pvApiCtx)
29 {
30     SciErr sciErr;
31
32     int* piAddrlabelsAdr = NULL;
33     int* piAddrinitialValueAdr = NULL;
34     double* emptyMatrixAdr = NULL;
35
36     int nbRow = 0, nbCol = 0;
37
38     int messageBoxID = 0;
39
40     char **initialValueAdr = 0;
41
42     char **labelsAdr = 0;
43
44     int userValueSize = 0;
45     char **userValue = NULL;
46
47     CheckInputArgument(pvApiCtx, 1, 2);
48     CheckOutputArgument(pvApiCtx, 0, 1);
49
50     if ((checkInputArgumentType(pvApiCtx, 1, sci_strings)))
51     {
52         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrlabelsAdr);
53         if (sciErr.iErr)
54         {
55             printError(&sciErr, 0);
56             return 1;
57         }
58
59         // Retrieve a matrix of string at position 1.
60         if (getAllocatedMatrixOfString(pvApiCtx, piAddrlabelsAdr, &nbRow, &nbCol, &labelsAdr))
61         {
62             Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 1);
63             return 1;
64         }
65     }
66     else
67     {
68         Scierror(999, _("%s: Wrong type for input argument #%d: Vector of strings expected.\n"), fname, 1);
69         return FALSE;
70     }
71
72     /* Create the Java Object */
73     messageBoxID = createMessageBox();
74
75     /* Title is a default title */
76     setMessageBoxTitle(messageBoxID, _("Scilab Input Value Request"));
77     /* Message */
78     setMessageBoxMultiLineMessage(messageBoxID, labelsAdr, nbCol * nbRow);
79     freeAllocatedMatrixOfString(nbRow, nbCol, labelsAdr);
80
81     if (nbInputArgument(pvApiCtx) == 2)
82     {
83         if (checkInputArgumentType(pvApiCtx, 2, sci_strings))
84         {
85             sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrinitialValueAdr);
86             if (sciErr.iErr)
87             {
88                 printError(&sciErr, 0);
89                 return 1;
90             }
91
92             // Retrieve a matrix of string at position 2.
93             if (getAllocatedMatrixOfString(pvApiCtx, piAddrinitialValueAdr, &nbRow, &nbCol, &initialValueAdr))
94             {
95                 Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 2);
96                 return 1;
97             }
98         }
99         else
100         {
101             Scierror(999, _("%s: Wrong type for input argument #%d: Vector of strings expected.\n"), fname, 2);
102             return FALSE;
103         }
104
105         setMessageBoxInitialValue(messageBoxID, initialValueAdr, nbCol * nbRow);
106         freeAllocatedMatrixOfString(nbRow, nbCol, initialValueAdr);
107     }
108
109     /* Display it and wait for a user input */
110     messageBoxDisplayAndWait(messageBoxID);
111
112     /* Read the user answer */
113     userValueSize = getMessageBoxValueSize(messageBoxID);
114     if (userValueSize == 0)
115     {
116         nbRow = 0;
117         nbCol = 0;
118
119         sciErr = allocMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, nbRow, nbCol, &emptyMatrixAdr);
120         if (sciErr.iErr)
121         {
122             printError(&sciErr, 0);
123             Scierror(999, _("%s: Memory allocation error.\n"), fname);
124             return 1;
125         }
126     }
127     else
128     {
129         userValue = getMessageBoxValue(messageBoxID);
130
131         nbCol = 1;
132         createMatrixOfString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, userValueSize, nbCol, userValue);
133         delete[] userValue;
134     }
135
136     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
137     ReturnArguments(pvApiCtx);
138     return TRUE;
139 }
140 /*--------------------------------------------------------------------------*/