api_optional is not installed (but used)
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_uigetdir.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007 - INRIA - Vincent COUVERT
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 "PATH_MAX.h"
15 #include "stack-c.h"
16 #include "CallFileChooser.h"
17 #include "MALLOC.h"
18 #include "localization.h"
19 #include "Scierror.h"
20 #include "cluni0.h"
21 /*--------------------------------------------------------------------------*/
22 int sci_uigetdir(char *fname,unsigned long l)
23 {
24   int fileChooserID = 0;
25
26   int nbRow = 0, nbCol = 0;
27
28
29   int voidSelectionAdr = 0;
30
31   int titleAdr = 0;
32   int initialDirectoryAdr = 0;
33
34   char *title = NULL, *initialDirectory = NULL;
35
36   CheckRhs(0,2);
37   CheckLhs(1,1);
38
39   if (Rhs==1)
40     {
41       if (VarType(1) == sci_strings)
42         {
43           GetRhsVar(1, STRING_DATATYPE, &nbRow, &nbCol, &initialDirectoryAdr);
44           if (nbCol !=1)
45             {
46               Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname,1);
47               return FALSE;
48             }
49           initialDirectory = cstk(initialDirectoryAdr);
50         }
51       else
52         {
53           Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
54           return FALSE;
55         }
56     }
57   else if (Rhs==2)
58     {
59       /* First argument is initial directory */
60       if (VarType(1) == sci_strings)
61         {
62           GetRhsVar(1, STRING_DATATYPE, &nbRow, &nbCol, &initialDirectoryAdr);
63           if (nbCol !=1)
64             {
65               Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 1);
66               return FALSE;
67             }
68           initialDirectory = cstk(initialDirectoryAdr);
69         }
70       else
71         {
72           Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
73           return FALSE;
74         }
75
76       /* Second argument is title */
77       if (VarType(2) == sci_strings)
78         {
79           GetRhsVar(2, STRING_DATATYPE, &nbRow, &nbCol, &titleAdr);
80           if (nbCol !=1)
81             {
82               Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 2);
83               return FALSE;
84             }
85           title = cstk(titleAdr);
86         }
87       else
88         {
89           Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
90           return FALSE;
91         }
92     }
93
94   /* Create the Java Object */
95   fileChooserID = createFileChooser();
96
97   /* Set options */
98   if (title != NULL)
99     {
100       setFileChooserTitle(fileChooserID, title);
101     }
102
103   if (initialDirectory != NULL)
104     {
105                 char expandedpath[PATH_MAX+1];
106                 int out_n = 0;
107                 C2F(cluni0)(initialDirectory ,expandedpath, &out_n,(int)strlen(initialDirectory),PATH_MAX);
108                 setFileChooserInitialDirectory(fileChooserID, expandedpath);
109     }
110
111   setFileChooserDirectorySelectionOnly(fileChooserID);
112
113   /* Display it and wait for a user input */
114   fileChooserDisplayAndWait(fileChooserID);
115
116   /* Read the size of the selection, if 0 then no file selected */
117   nbRow = getFileChooserSelectionSize(fileChooserID);
118
119   if (nbRow !=0 )
120     {
121           char **userSelection = NULL;
122       /* The user selected a file --> returns the files names */
123       nbCol = 1;
124
125       userSelection = getFileChooserSelection(fileChooserID);
126       CreateVarFromPtr(Rhs+1, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, userSelection);
127       /* TO DO a delete [] userSelection */
128
129     }
130   else
131     {
132       /* The user canceled the selection --> returns an empty matrix */
133       nbRow = 0;
134       nbCol = 0;
135
136       CreateVar(Rhs+1, STRING_DATATYPE, &nbRow, &nbCol, &voidSelectionAdr);
137     }
138
139   LhsVar(1)=Rhs+1;
140   PutLhsVar();;
141
142   return TRUE;
143 }
144 /*--------------------------------------------------------------------------*/