GUI module ported to api_scilab. test_run("gui")
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_exportUI.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2008 - INRIA - Jean-Baptiste Silvy
4  * Copyright (C) 2012 - Scilab Enterprises - Vincent COUVERT
5  * desc : interface for xs2png routine
6  *
7  * This file must be used under the terms of the CeCILL.
8  * This source file is licensed as described in the file COPYING, which
9  * you should have received as part of this distribution.  The terms
10  * are also available at
11  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12  *
13  */
14
15 #include "gw_gui.h"
16 #include "api_scilab.h"
17 #include "HandleManagement.h"
18 #include "localization.h"
19 #include "Scierror.h"
20 #include "exportUserInterface.hxx"
21 #include "graphicObjectProperties.h"
22 #include "getGraphicObjectProperty.h"
23
24 /*--------------------------------------------------------------------------*/
25 int sci_exportUI(char * fname, unsigned long fname_len)
26 {
27     SciErr sciErr;
28
29     int* piAddrstackPointer = NULL;
30
31     int iFigureId   = 0; // id of the figure to export
32     int *piFigureId = &iFigureId;
33     int iRows       = 0;
34     int iCols       = 0;
35     int iHandleType = -1;
36     int *piHandleType = &iHandleType;
37
38     CheckOutputArgument(pvApiCtx, 0, 1);
39     CheckInputArgument(pvApiCtx, 1, 1);
40
41     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrstackPointer);
42     if (sciErr.iErr)
43     {
44         printError(&sciErr, 0);
45         return 1;
46     }
47
48     if (checkInputArgumentType(pvApiCtx, 1, sci_handles)) // exportUI(figHandle)
49     {
50         char *pstFigureUID      = NULL;
51         char *pstHandleType     = NULL;
52         long long* stackPointer = NULL;
53         // Retrieve a matrix of handle at position 1.
54         sciErr = getMatrixOfHandle(pvApiCtx, piAddrstackPointer, &iRows, &iCols, &stackPointer);
55         if (sciErr.iErr)
56         {
57             printError(&sciErr, 0);
58             Scierror(202, _("%s: Wrong type for argument %d: Handle matrix expected.\n"), fname, 1);
59             return 1;
60         }
61
62         if (iRows * iCols != 1)
63         {
64             Scierror(999, _("%s: Wrong size for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1);
65         }
66
67         pstFigureUID = getObjectFromHandle((unsigned long) * stackPointer);
68
69         getGraphicObjectProperty(pstFigureUID, __GO_TYPE__, jni_int, (void **)&piHandleType);
70         if (iHandleType == __GO_FIGURE__)
71         {
72             Scierror(999, _("%s: Wrong type for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1);
73             return FALSE;
74         }
75
76         getGraphicObjectProperty(pstFigureUID, __GO_ID__, jni_int, (void **)&piFigureId);
77     }
78     else if (checkInputArgumentType(pvApiCtx, 1, sci_matrix)) // exportUI(figId)
79     {
80         double* stackPointer = NULL;
81
82         // Retrieve a matrix of double at position 1.
83         sciErr = getMatrixOfDouble(pvApiCtx, piAddrstackPointer, &iRows, &iCols, &stackPointer);
84         if (sciErr.iErr)
85         {
86             printError(&sciErr, 0);
87             Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 1);
88             return 1;
89         }
90
91         if (iRows * iCols != 1)
92         {
93             Scierror(999, _("%s: Wrong size for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1);
94             return FALSE;
95         }
96
97         iFigureId = (int) * stackPointer;
98     }
99     else
100     {
101         Scierror(999, _("%s: Wrong type for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1);
102         return FALSE;
103     }
104
105     // call the export function
106     exportUserInterface(iFigureId);
107
108     AssignOutputVariable(pvApiCtx, 1) = 0;
109     ReturnArguments(pvApiCtx);
110     return 0;
111 }
112 /*--------------------------------------------------------------------------*/