Plug back 'unzoom' function and 'unzoom' buttons.
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_unzoom.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - ENPC - Jean-Philipe Chancelier
4  * Copyright (C) 2006 - INRIA - Fabrice Leray
5  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
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 /*------------------------------------------------------------------------*/
16 /* file: sci_unzoom.h                                                     */
17 /* desc : interface for unzoom routine                                    */
18 /*------------------------------------------------------------------------*/
19
20 #include "gw_graphics.h"
21 #include "stack-c.h"
22 #include "GetProperty.h"
23 #include "MALLOC.h"
24 #include "axesScale.h"
25 #include "localization.h"
26 #include "Scierror.h"
27 #include "getPropertyAssignedValue.h"
28 #include "HandleManagement.h"
29
30 #include "CurrentFigure.h"
31 #include "graphicObjectProperties.h"
32 #include "getGraphicObjectProperty.h"
33
34 /*--------------------------------------------------------------------------*/
35 int sci_unzoom(char *fname,unsigned long fname_len)
36 {
37   /* number of object to unzoom */
38   int nbObjects = 0;
39
40   /* ids of object to unzoom */
41   char** objectsId = NULL;
42
43   char* objectUID;
44
45   /* object type */
46   char *pstType;
47
48   CheckRhs(0,1) ;
49   CheckLhs(0,1) ;
50   if ( Rhs == 0 )
51   {
52     objectUID = getCurrentFigure();
53     if (objectUID != NULL)
54     {
55       sciUnzoomFigure(objectUID);
56     }
57   }
58   else
59   {
60     int m,n,i;
61     size_t stackPointer = 0;
62     GetRhsVar(1, GRAPHICAL_HANDLE_DATATYPE, &m, &n, &stackPointer);
63
64     nbObjects = m * n;
65     objectsId = MALLOC(nbObjects * sizeof(char*));
66     if (objectsId == NULL)
67     {
68       Scierror(999, _("%s: No more memory.\n"),fname);
69       return -1;
70     }
71
72     /* first pass, check that all the handles are subwindows or figures */
73     /* and copy them into an array of objects */
74     for (i = 0; i < nbObjects; i++ )
75     {
76       objectUID = getObjectFromHandle(getHandleFromStack(stackPointer + i));
77       getGraphicObjectProperty(objectUID, __GO_TYPE__, jni_string, (void **) &pstType);
78       if ((strcmp(pstType, __GO_FIGURE__) != 0) && (strcmp(pstType, __GO_AXES__) != 0))
79       {
80         FREE(objectsId);
81         Scierror(999, _("%s: Wrong type for input argument: Vector of Axes and Figure handles expected.\n"),fname);
82         return -1;
83       }
84       objectsId[i] = objectUID;
85     }
86
87     /* second pass un zoom the objects */
88     sciUnzoomArray(objectsId, nbObjects);
89
90     FREE(objectsId);
91   }
92
93
94   LhsVar(1)=0;
95   PutLhsVar();
96   return 0;
97 }
98 /*--------------------------------------------------------------------------*/