95ade38024df86c5a3668cafe0d4e71a99e46e14
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_show_window.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - INRIA - Fabrice Leray
4  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 /*------------------------------------------------------------------------*/
15 /* file: sci_show_window.c                                                */
16 /* desc : interface for show_window routine                               */
17 /*------------------------------------------------------------------------*/
18
19 #include <string.h>
20
21 #include "gw_graphics.h"
22 #include "getPropertyAssignedValue.h"
23 #include "HandleManagement.h"
24 #include "stack-c.h"
25 #include "Scierror.h"
26 #include "SetProperty.h"
27 #include "GetProperty.h"
28 #include "localization.h"
29 #include "Interaction.h"
30 #include "FigureList.h"
31 #include "CurrentFigure.h"
32 #include "getGraphicObjectProperty.h"
33 #include "setGraphicObjectProperty.h"
34 #include "graphicObjectProperties.h"
35 #include "BuildObjects.h"
36 #include "CurrentSubwin.h"
37 /*--------------------------------------------------------------------------*/
38 int sci_show_window( char *fname,unsigned long fname_len )
39 {
40     char* pFigureUID = NULL;
41     char* pstrAxesUID = NULL;
42
43     CheckRhs(0,1);
44     CheckLhs(0,1);
45
46     if ( Rhs == 1 )
47     {
48         /* the window to show is specified */
49         int paramType    = VarType(1);
50         int nbRow        = 0 ;
51         int nbCol        = 0 ;
52         size_t stackPointer = 0 ;
53         char *type = NULL;
54
55         if ( isParameterHandle( paramType ) )
56         {
57             /* by tis handle */
58             GetRhsVar( 1,GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &stackPointer );
59
60             if ( nbRow * nbCol != 1 )
61             {
62                 Scierror(999, _("%s: Wrong size for input argument #%d: A '%s' handle or a real scalar expected.\n"),fname, 1, "Figure");
63                 return -1 ;
64             }
65
66             pFigureUID = (char*)getObjectFromHandle( getHandleFromStack(stackPointer) );
67
68             if (pFigureUID == NULL)
69             {
70                 Scierror(999, _("%s: Handle does not or no longer exists.\n"),fname);
71                 return -1 ;
72             }
73
74             getGraphicObjectProperty(pFigureUID, __GO_TYPE__, jni_string, (void **) &type);
75             if (strcmp(type, __GO_FIGURE__) != 0)
76             {
77                 Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' handle or a real scalar expected.\n"),fname, 1, "Figure");
78                 return -1 ;
79             }
80
81         }
82         else if ( isParameterDoubleMatrix( paramType ) )
83         {
84             /* by its number */
85             int winNum = 0;
86             GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &stackPointer );
87             if ( nbRow * nbCol != 1 )
88             {
89                 Scierror(999, _("%s: Wrong size for input argument #%d: A '%s' handle or a real scalar expected.\n"),fname, 1, "Figure");
90                 return -1 ;
91             }
92             winNum = (int) getDoubleFromStack(stackPointer);
93             pFigureUID = (char*)getFigureFromIndex(winNum);
94
95             if (pFigureUID == NULL)
96             {
97                 pFigureUID = createNewFigureWithAxes();
98                 setGraphicObjectProperty(pFigureUID, __GO_ID__, &winNum, jni_int, 1);
99                 setCurrentFigure(pFigureUID);
100
101                 getGraphicObjectProperty(pFigureUID, __GO_SELECTED_CHILD__, jni_string,  &pstrAxesUID);
102                 setCurrentSubWin(pstrAxesUID);
103             }
104         }
105         else
106         {
107             Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' handle or a real scalar expected.\n"),fname,1, "Figure");
108             return -1;
109         }
110     }
111     else
112     {
113         /* Rhs == 0 */
114         /* raise current figure */
115         getOrCreateDefaultSubwin();
116         pFigureUID = (char*)getCurrentFigure();
117     }
118
119     /* Check that the requested figure really exists */
120     if ( pFigureUID == NULL )
121     {
122         Scierror(999, _("%s: '%s' handle does not or no longer exists.\n"),fname,"Figure");
123         return -1 ;
124     }
125
126     /* Actually show the window */
127     showWindow(pFigureUID);
128
129     LhsVar(1) = 0;
130     PutLhsVar();
131
132     return 0;
133 }
134 /*--------------------------------------------------------------------------*/