c7f9f8a96fc6eef7c31566b22feb200017874225
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_x_mdialog.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 "machine.h"
16 #include "stack-c.h"
17 #include "localization.h"
18 #include "CallMessageBox.h"
19 #include "getPropertyAssignedValue.h"
20 #include "Scierror.h"
21 /*--------------------------------------------------------------------------*/
22 int C2F(sci_x_mdialog)(char *fname,unsigned long fname_len)
23 {
24   int nbRow = 0, nbCol = 0;
25   int nbRowDefaultValues = 0, nbColDefaultValues = 0;
26   int nbRowLineLabels = 0, nbColLineLabels = 0;
27   int nbRowColumnLabels = 0, nbColColumnLabels = 0;
28
29   int messageBoxID = 0;
30
31   int labelsAdr = 0;
32   int lineLabelsAdr = 0;
33   int columnLabelsAdr = 0;
34   int defaultValuesAdr = 0;
35
36   int userValueSize = 0;
37   char **userValue = NULL;
38
39   int emptyMatrixAdr = 0;
40
41   CheckRhs(3,4);
42   CheckLhs(0,1);
43
44   /* READ THE MESSAGE */
45   if (VarType(1) == sci_strings)
46     {
47       GetRhsVar(1, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, &labelsAdr);
48     }
49   else
50     {
51       Scierror(999, _("%s: Wrong type for input argument #%d: String vector expected.\n"), fname, 1);
52       return FALSE;
53     }
54
55   /* Create the Java Object */
56   messageBoxID = createMessageBox();
57
58   /* Title is a default title */
59   setMessageBoxTitle(messageBoxID, _("Scilab Multiple Values Request"));
60   /* Message */
61   setMessageBoxMultiLineMessage(messageBoxID, getStringMatrixFromStack(labelsAdr), nbCol*nbRow);
62     
63   /* READ THE LINE LABELS */
64   if (VarType(2) ==  sci_strings)
65     {
66       GetRhsVar(2,MATRIX_OF_STRING_DATATYPE,&nbRowLineLabels,&nbColLineLabels,&lineLabelsAdr);
67       if (nbRow !=1 && nbCol !=1)
68       {
69         Scierror(999, _("%s: Wrong type for input argument #%d: String vector expected.\n"), fname, 2);
70         return FALSE;
71       }
72       setMessageBoxLineLabels(messageBoxID, getStringMatrixFromStack(lineLabelsAdr), nbColLineLabels*nbRowLineLabels);
73     }
74   else 
75     {
76       Scierror(999, _("%s: Wrong type for input argument #%d: String vector expected.\n"), fname, 2);
77       return FALSE;
78     }
79   
80   /* READ THE COLUMN LABELS or DEFAULT VALUES */
81   if (VarType(3) ==  sci_strings)
82     {
83       if (Rhs == 3)
84         {
85           GetRhsVar(3,MATRIX_OF_STRING_DATATYPE,&nbRowDefaultValues,&nbColDefaultValues,&defaultValuesAdr);
86           if (nbRowDefaultValues !=1 && nbColDefaultValues !=1)
87             {
88               Scierror(999, _("%s: Wrong type for input argument #%d: String vector expected.\n"), fname, 3);
89               return FALSE;
90             }
91           setMessageBoxDefaultInput(messageBoxID, getStringMatrixFromStack(defaultValuesAdr), nbColDefaultValues*nbRowDefaultValues);
92         }
93       else
94         {
95           GetRhsVar(3,MATRIX_OF_STRING_DATATYPE,&nbRowColumnLabels,&nbColColumnLabels,&columnLabelsAdr);
96           if (nbRow !=1 && nbCol !=1)
97             {
98               Scierror(999, _("%s: Wrong type for input argument #%d: String vector expected.\n"), fname, 3);
99               return FALSE;
100             }
101           setMessageBoxColumnLabels(messageBoxID, getStringMatrixFromStack(columnLabelsAdr), nbColColumnLabels*nbRowColumnLabels);
102        }
103     }
104   else 
105     {
106       Scierror(999, _("%s: Wrong type for input argument¬†#%d: String vector expected.\n"), fname, 3);
107       return FALSE;
108     }
109
110   if (Rhs == 4)
111     {
112       /* READ  DEFAULT VALUES */
113       if (VarType(4) ==  sci_strings)
114         {
115           GetRhsVar(4,MATRIX_OF_STRING_DATATYPE,&nbRowDefaultValues,&nbColDefaultValues,&defaultValuesAdr);
116           if ((nbRowDefaultValues != nbRowLineLabels*nbColLineLabels) || (nbColDefaultValues != nbRowColumnLabels*nbColColumnLabels))
117             {
118               Scierror(999, _("%s: Wrong size for input argument #%d: %d x %d expected.\n"),fname, 4, nbRowLineLabels*nbColLineLabels, nbRowColumnLabels*nbColColumnLabels);
119               return FALSE;
120             }
121           setMessageBoxDefaultInput(messageBoxID, getStringMatrixFromStack(defaultValuesAdr), nbColDefaultValues*nbRowDefaultValues);
122         }
123       else 
124         {
125           Scierror(999, _("%s: Wrong type for input argument #%d: String matrix expected.\n"), fname, 4);
126           return FALSE;
127         }
128     }
129   
130   /* Display it and wait for a user input */
131   messageBoxDisplayAndWait(messageBoxID);
132
133   /* Read the user answer */
134   userValueSize = getMessageBoxValueSize(messageBoxID);
135   if (userValueSize == 0)
136     {
137       nbRow = 0;nbCol = 0;
138       CreateVar(Rhs+1, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &emptyMatrixAdr);
139     }
140   else
141     {
142       userValue = getMessageBoxValue(messageBoxID);
143   
144       nbCol = 1;
145       CreateVarFromPtr(Rhs+1, MATRIX_OF_STRING_DATATYPE, &nbRowDefaultValues, &nbColDefaultValues, userValue);
146     }
147
148   LhsVar(1) = Rhs+1;
149   C2F(putlhsvar)();
150   return TRUE;
151 }
152 /*--------------------------------------------------------------------------*/