Convert internal functions of graphics and gui to api scilab
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_uigetfont.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2008 - INRIA - Vincent COUVERT (java version)
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #include "gw_gui.h"
14 #include "stack-c.h"
15 #include "localization.h"
16 #include "Scierror.h"
17 #include "CallFontChooser.h"
18 #include "getPropertyAssignedValue.h"
19 #include "freeArrayOfString.h"
20
21 /*--------------------------------------------------------------------------*/
22 int sci_uigetfont(char *fname, unsigned long fname_len)
23 {
24     int fontChooserID = 0;
25
26     int nbRow = 0, nbCol = 0;
27
28     char **fontNameAdr = NULL;
29     int fontNameSize = 0;
30     int fontSizeAdr = 0;
31     int boldAdr = 0;
32     int italicAdr = 0;
33
34     char *selectedFontName = NULL;
35     int selectedFontSize = 0;
36     BOOL selectedBold = FALSE;
37     BOOL selectedItalic = FALSE;
38
39
40     CheckRhs(0, 4);
41     CheckLhs(1, 4);
42
43     /* Default font name */
44     if (Rhs >= 1)
45     {
46         if (VarType(1) == sci_strings)
47         {
48             GetRhsVar(1, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, &fontNameAdr);
49             fontNameSize = nbRow * nbCol;
50             if (fontNameSize != 1)
51             {
52                 freeArrayOfString(fontNameAdr, fontNameSize);
53                 Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 1);
54                 return FALSE;
55             }
56         }
57         else
58         {
59             Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
60             return FALSE;
61         }
62     }
63
64     /* Default font size */
65     if (Rhs >= 2)
66     {
67         if (VarType(2) == sci_matrix)
68         {
69             GetRhsVar(2, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &fontSizeAdr);
70             if (nbRow * nbCol != 1)
71             {
72                 freeArrayOfString(fontNameAdr, fontNameSize);
73                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 2);
74                 return FALSE;
75             }
76         }
77         else
78         {
79             freeArrayOfString(fontNameAdr, fontNameSize);
80             Scierror(999, _("%s: Wrong type for input argument #%d: A real expected.\n"), fname, 2);
81             return FALSE;
82         }
83     }
84
85     /* Is the default font bold ? */
86     if (Rhs >= 3)
87     {
88         if (VarType(3) == sci_boolean)
89         {
90             GetRhsVar(3, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &boldAdr);
91             if (nbRow * nbCol != 1)
92             {
93                 freeArrayOfString(fontNameAdr, fontNameSize);
94                 Scierror(999, _("%s: Wrong size for input argument #%d: A boolean expected.\n"), fname, 3);
95                 return FALSE;
96             }
97
98         }
99         else
100         {
101             freeArrayOfString(fontNameAdr, fontNameSize);
102             Scierror(999, _("%s: Wrong type for input argument #%d: A boolean expected.\n"), fname, 3);
103             return FALSE;
104         }
105     }
106
107     /* Is the default font italic ? */
108     if (Rhs >= 4)
109     {
110         if (VarType(4) == sci_boolean)
111         {
112             GetRhsVar(4, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &italicAdr);
113             if (nbRow * nbCol != 1)
114             {
115                 freeArrayOfString(fontNameAdr, fontNameSize);
116                 Scierror(999, _("%s: Wrong size for input argument #%d: A boolean expected.\n"), fname, 4);
117                 return FALSE;
118             }
119
120         }
121         else
122         {
123             freeArrayOfString(fontNameAdr, fontNameSize);
124             Scierror(999, _("%s: Wrong type for input argument #%d: A boolean expected.\n"), fname, 4);
125             return FALSE;
126         }
127     }
128
129     /* Create the Java Object */
130     fontChooserID = createFontChooser();
131
132     /* Default font */
133     if (fontNameAdr != NULL)
134     {
135         setFontChooserFontName(fontChooserID, fontNameAdr[0]);
136     }
137
138     /* Default size */
139     if (fontSizeAdr != 0)
140     {
141         setFontChooserFontSize(fontChooserID, (int)stk(fontSizeAdr)[0]);
142     }
143
144     /* Default bold */
145     if (boldAdr != 0)
146     {
147         setFontChooserBold(fontChooserID, istk(boldAdr)[0]);
148     }
149
150     /* Default italic */
151     if (italicAdr != 0)
152     {
153         setFontChooserItalic(fontChooserID, istk(italicAdr)[0]);
154     }
155
156     /* Display it and wait for a user input */
157     fontChooserDisplayAndWait(fontChooserID);
158
159     /* Return the selected font */
160
161     /* Read the user answer */
162     selectedFontName = getFontChooserFontName(fontChooserID);
163
164
165     if (strcmp(selectedFontName, "")) /* The user selected a font */
166     {
167         selectedFontSize = getFontChooserFontSize(fontChooserID);
168         selectedBold = getFontChooserBold(fontChooserID);
169         selectedItalic = getFontChooserItalic(fontChooserID);
170
171         nbRow = 1;
172         nbCol = 1;
173         if (Lhs >= 1)
174         {
175             CreateVarFromPtr(Rhs + 1, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, &selectedFontName);
176         }
177
178         if (Lhs >= 2)
179         {
180             CreateVar(Rhs + 2, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &fontSizeAdr);
181             *stk(fontSizeAdr) = selectedFontSize;
182         }
183
184         if (Lhs >= 3)
185         {
186             CreateVar(Rhs + 3, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &boldAdr);
187             *istk(boldAdr) = selectedBold;
188         }
189
190         if (Lhs >= 4)
191         {
192             CreateVar(Rhs + 4, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &italicAdr);
193             *istk(italicAdr) = selectedItalic;
194         }
195     }
196     else /* The user canceled */
197     {
198         nbRow = 0;
199         nbCol = 0;
200         if (Lhs >= 1)
201         {
202             /* Return "" as font name */
203             CreateVar(Rhs + 1, STRING_DATATYPE, &nbRow, &nbCol, &fontNameAdr);
204         }
205
206         if (Lhs >= 2)
207         {
208             /* Return [] as font size */
209             CreateVar(Rhs + 2, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &fontSizeAdr);
210         }
211
212         if (Lhs >= 3)
213         {
214             /* Return [] as bold value */
215             CreateVar(Rhs + 3, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &boldAdr);
216         }
217
218         if (Lhs >= 4)
219         {
220             /* Return [] as italic value */
221             CreateVar(Rhs + 4, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &italicAdr);
222         }
223     }
224
225     /* TO DO delete [] selectedFontName */
226
227     LhsVar(1) = Rhs + 1;
228     LhsVar(2) = Rhs + 2;
229     LhsVar(3) = Rhs + 3;
230     LhsVar(4) = Rhs + 4;
231
232     if (fontNameSize)
233     {
234         freeArrayOfString(fontNameAdr, fontNameSize);
235     }
236     PutLhsVar();
237     return TRUE;
238 }
239 /*--------------------------------------------------------------------------*/