84a1b6cbbb8a9d4c1f4b8793f69bfd47e0bf13a3
[scilab.git] / scilab / modules / gui / sci_gateway / cpp / sci_printfigure.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2008 - 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.1-en.txt
10  *
11  */
12
13 #include "CallScilabBridge.hxx"
14 #include "GiwsException.hxx"
15
16 extern "C"
17 {
18 #include "api_scilab.h"
19 #include "Scierror.h"
20 #include "sci_mode.h"
21 #include "localization.h"
22 #include "gw_gui.h"
23 #include "getScilabJavaVM.h"
24 #include "FigureList.h"
25 }
26 /*--------------------------------------------------------------------------*/
27 using namespace org_scilab_modules_gui_bridge;
28
29 /*--------------------------------------------------------------------------*/
30 int sci_printfigure(char *fname, void* pvApiCtx)
31 {
32     SciErr sciErr;
33
34     int n1 = 0, m1 = 0;
35     int num_win = -2;
36     int status  = 0;
37
38     int * piAddr1   = NULL;
39     double* l1      = NULL;
40
41     nbInputArgument(pvApiCtx) = Max(0, nbInputArgument(pvApiCtx));
42     CheckInputArgument(pvApiCtx, 1, 1);
43     CheckOutputArgument(pvApiCtx, 0, 1);
44
45     if (getScilabMode() != SCILAB_NWNI)
46     {
47         if (nbInputArgument(pvApiCtx) == 1)
48         {
49             sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr1);
50             if (sciErr.iErr)
51             {
52                 printError(&sciErr, 0);
53                 return 1;
54             }
55             sciErr = getMatrixOfDouble(pvApiCtx, piAddr1, &m1, &n1, &l1);
56             if (sciErr.iErr)
57             {
58                 Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 1);
59                 printError(&sciErr, 0);
60                 return 1;
61             }
62
63             if (!isScalar(pvApiCtx, piAddr1))
64             {
65                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 1);
66                 return 1;
67             }
68             num_win = (int) * l1;
69
70             if (num_win >= 0)
71             {
72                 /* Call Java */
73                 try
74                 {
75                     status = (int)CallScilabBridge::printFigure(getScilabJavaVM(), getFigureFromIndex(num_win), true, true); /* postscript mode and display dialog */
76                 }
77                 catch (const GiwsException::JniException & e)
78                 {
79                     Scierror(999, _("%s: A Java exception arisen:\n%s"), fname, e.whatStr().c_str());
80                     return 1;
81                 }
82
83                 if (createScalarBoolean(pvApiCtx, nbInputArgument(pvApiCtx) + 1, status))
84                 {
85                     Scierror(999, _("%s: Memory allocation error.\n"), fname);
86                     return 1;
87                 }
88
89                 AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
90                 returnArguments(pvApiCtx);
91                 return 0;
92             }
93             else
94             {
95                 Scierror(999, _("%s: Wrong value for input argument #%d: Must be >= %d expected.\n"), fname, 1, 0);
96                 return 1;
97             }
98         }
99         else
100         {
101             Scierror(999, _("%s: Wrong type for input argument #%d: A real expected.\n"), fname, 2);
102             return 1;
103         }
104     }
105     else
106     {
107         Scierror(999, _("%s: Function not available in NWNI mode.\n"), fname);
108         return 1;
109     }
110     return 0;
111 }
112
113 /*--------------------------------------------------------------------------*/