warnings
[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
20 /*--------------------------------------------------------------------------*/
21 int sci_uigetfont(char *fname,unsigned long fname_len)
22 {
23   int fontChooserID = 0;
24
25   int nbRow = 0, nbCol = 0;
26
27   char **fontNameAdr = NULL;
28   int fontSizeAdr = 0;
29   int boldAdr = 0;
30   int italicAdr = 0;
31
32   char *selectedFontName = NULL;
33   int selectedFontSize = 0;
34   BOOL selectedBold = FALSE;
35   BOOL selectedItalic = FALSE;
36
37
38   CheckRhs(0,4);
39   CheckLhs(1,4);
40
41   /* Default font name */
42   if (Rhs >= 1) {
43     if (VarType(1) == sci_strings) 
44       {
45         GetRhsVar(1, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, &fontNameAdr);
46         if (nbRow*nbCol != 1)
47           {
48             Scierror(999, _("%s: Wrong size for first input argument: Single string expected.\n"), "uigetfont");
49             return FALSE;
50           }
51       }
52     else
53       {
54         Scierror(999, _("%s: Wrong type for first input argument: Single string expected.\n"), "uigetfont");
55         return FALSE;
56       }
57   }
58
59   /* Default font size */
60   if (Rhs >= 2) 
61     {
62       if (VarType(2) == sci_matrix)
63         {
64           GetRhsVar(2, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &fontSizeAdr);
65           if (nbRow*nbCol!=1)
66             {
67               Scierror(999, _("%s: Wrong size for second input argument: Single value expected.\n"), "uigetfont");
68               return FALSE;
69             }
70         }
71       else
72         {
73           Scierror(999, _("%s: Wrong type for second input argument: Single value expected.\n"), "uigetfont");
74           return FALSE;
75         }
76     }
77
78   /* Is the default font bold ? */
79   if (Rhs >= 3)
80     {
81       if (VarType(3) == sci_boolean)
82         {
83           GetRhsVar(3,MATRIX_OF_BOOLEAN_DATATYPE,&nbRow,&nbCol,&boldAdr);
84           if (nbRow*nbCol != 1)
85             {
86               Scierror(999, _("%s: Wrong type for third input argument: Single Boolean expected.\n"), "uigetfont");
87               return FALSE;
88             }
89
90         }
91       else
92         {
93           Scierror(999, _("%s: Wrong type for third input argument: Single Boolean expected.\n"), "uigetfont");
94           return FALSE;
95         }
96     }
97
98   /* Is the default font italic ? */
99   if (Rhs >= 4)
100     {
101       if (VarType(4) == sci_boolean)
102         {
103           GetRhsVar(4,MATRIX_OF_BOOLEAN_DATATYPE,&nbRow,&nbCol,&italicAdr);
104           if (nbRow*nbCol != 1)
105             {
106               Scierror(999, _("%s: Wrong type for fourth input argument: Single Boolean expected.\n"), "uigetfont");
107               return FALSE;
108             }
109
110         }
111       else
112         {
113           Scierror(999, _("%s: Wrong type for fourth input argument: Single Boolean expected.\n"), "uigetfont");
114           return FALSE;
115         }
116     }
117
118   /* Create the Java Object */
119   fontChooserID = createFontChooser();
120
121   /* Default font */
122   if (fontNameAdr != 0)
123     {
124       setFontChooserFontName(fontChooserID, getStringMatrixFromStack((int)fontNameAdr)[0]);
125     }
126   
127   /* Default size */
128   if (fontSizeAdr != 0)
129     {
130       setFontChooserFontSize(fontChooserID, (int)stk(fontSizeAdr)[0]);
131     }
132   
133   /* Default bold */
134   if (boldAdr != 0)
135     {
136       setFontChooserBold(fontChooserID, istk(boldAdr)[0]);
137     }
138   
139   /* Default italic */
140   if (italicAdr != 0)
141     {
142       setFontChooserItalic(fontChooserID, istk(italicAdr)[0]);
143     }
144   
145   /* Display it and wait for a user input */
146   fontChooserDisplayAndWait(fontChooserID);
147
148   /* Return the selected font */
149   
150   /* Read the user answer */
151   selectedFontName = getFontChooserFontName(fontChooserID);
152
153   if (strcmp(selectedFontName,"")) /* The user selected a font */
154     {
155       selectedFontSize = getFontChooserFontSize(fontChooserID);
156       selectedBold = getFontChooserBold(fontChooserID);
157       selectedItalic = getFontChooserItalic(fontChooserID);
158
159       nbRow = 1; nbCol = 1;
160       if (Lhs>=1)
161         {
162           CreateVarFromPtr(Rhs+1, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, &selectedFontName);
163         }
164   
165       if (Lhs>=2)
166         {
167           CreateVar(Rhs+2, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &fontSizeAdr);
168           *stk(fontSizeAdr) = selectedFontSize;
169         }
170
171       if (Lhs>=3)
172         {
173           CreateVar(Rhs+3, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &boldAdr);
174           *istk(boldAdr) = selectedBold;
175         }
176
177       if (Lhs>=4)
178         {
179           CreateVar(Rhs+4, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &italicAdr);
180           *istk(italicAdr) = selectedItalic;
181         }
182     }
183   else /* The user canceled */
184     {
185       nbRow = 0; nbCol = 0;
186       if (Lhs>=1)
187         {
188           /* Return "" as font name */
189           CreateVar(Rhs+1, STRING_DATATYPE, &nbRow, &nbCol, &fontNameAdr);
190         }
191   
192       if (Lhs>=2)
193         {
194           /* Return [] as font size */
195           CreateVar(Rhs+2, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &fontSizeAdr);
196         }
197
198       if (Lhs>=3)
199         {
200           /* Return [] as bold value */
201           CreateVar(Rhs+3, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &boldAdr);
202         }
203
204       if (Lhs>=4)
205         {
206            /* Return [] as italic value */
207          CreateVar(Rhs+4, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &italicAdr);
208         }
209     }
210   
211   LhsVar(1) = Rhs+1;
212   LhsVar(2) = Rhs+2;
213   LhsVar(3) = Rhs+3;
214   LhsVar(4) = Rhs+4;
215   
216   C2F(putlhsvar)();
217   return TRUE;
218 }
219 /*--------------------------------------------------------------------------*/