load: avoid creation of double axes in figure
[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  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #define NOMINMAX
17 #include "CallScilabBridge.hxx"
18 #include "GiwsException.hxx"
19 #include <algorithm>
20
21 extern "C"
22 {
23 #include "api_scilab.h"
24 #include "Scierror.h"
25 #include "configvariable_interface.h"
26 #include "localization.h"
27 #include "gw_gui.h"
28 #include "getScilabJavaVM.h"
29 #include "FigureList.h"
30 }
31 /*--------------------------------------------------------------------------*/
32 using namespace org_scilab_modules_gui_bridge;
33
34 /*--------------------------------------------------------------------------*/
35 int sci_printfigure(char *fname, void* pvApiCtx)
36 {
37     SciErr sciErr;
38
39     int n1 = 0, m1 = 0;
40     int num_win = -2;
41     int status  = 0;
42
43     int * piAddr1   = NULL;
44     double* l1      = NULL;
45
46     nbInputArgument(pvApiCtx) = std::max(0, nbInputArgument(pvApiCtx));
47     CheckInputArgument(pvApiCtx, 1, 1);
48     CheckOutputArgument(pvApiCtx, 0, 1);
49
50     if (getScilabMode() != SCILAB_NWNI)
51     {
52         if (nbInputArgument(pvApiCtx) == 1)
53         {
54             sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr1);
55             if (sciErr.iErr)
56             {
57                 printError(&sciErr, 0);
58                 return 1;
59             }
60             sciErr = getMatrixOfDouble(pvApiCtx, piAddr1, &m1, &n1, &l1);
61             if (sciErr.iErr)
62             {
63                 Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 1);
64                 printError(&sciErr, 0);
65                 return 1;
66             }
67
68             if (!isScalar(pvApiCtx, piAddr1))
69             {
70                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 1);
71                 return 1;
72             }
73             num_win = (int) * l1;
74
75             if (num_win >= 0)
76             {
77                 /* Call Java */
78                 try
79                 {
80                     status = (int)CallScilabBridge::printFigure(getScilabJavaVM(), getFigureFromIndex(num_win), true, true); /* postscript mode and display dialog */
81                 }
82                 catch (const GiwsException::JniException & e)
83                 {
84                     Scierror(999, _("%s: A Java exception arisen:\n%s"), fname, e.whatStr().c_str());
85                     return 1;
86                 }
87
88                 if (createScalarBoolean(pvApiCtx, nbInputArgument(pvApiCtx) + 1, status))
89                 {
90                     Scierror(999, _("%s: Memory allocation error.\n"), fname);
91                     return 1;
92                 }
93
94                 AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
95                 ReturnArguments(pvApiCtx);
96                 return 0;
97             }
98             else
99             {
100                 Scierror(999, _("%s: Wrong value for input argument #%d: Must be >= %d expected.\n"), fname, 1, 0);
101                 return 1;
102             }
103         }
104         else
105         {
106             Scierror(999, _("%s: Wrong type for input argument #%d: A real expected.\n"), fname, 2);
107             return 1;
108         }
109     }
110     else
111     {
112         Scierror(999, _("%s: Function not available in NWNI mode.\n"), fname);
113         return 1;
114     }
115     return 0;
116 }
117
118 /*--------------------------------------------------------------------------*/