Fix wrong initialization
[scilab.git] / scilab / modules / gui / src / cpp / InitUIMenu.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007-2008 - INRIA - Vincent COUVERT
4  * Copyright (C) 2007-2008 - INRIA - Allan CORNET
5  * Copyright (C) 2008 - Yung-Jang Lee
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.1-en.txt
12  *
13  */
14
15 #include "InitUIMenu.hxx"
16 #include "CallScilabBridge.hxx"
17 extern "C"
18 {
19 #include "stack-c.h"
20 #include "sci_types.h"
21 #include "BOOL.h"
22 #include "getScilabJavaVM.h"
23 #include "GetProperty.h"
24 #include "SetPropertyStatus.h"
25 #include "getPropertyAssignedValue.h"
26 #include "localization.h"
27 #include "Scierror.h"
28 #include "HandleManagement.h"
29 #include "setGraphicObjectProperty.h"
30 #include "getGraphicObjectProperty.h"
31 #include "getConsoleIdentifier.h"
32 #include "graphicObjectProperties.h"
33 #include "CurrentFigure.h"
34 #include "BuildObjects.h"
35 #include "scilabmode.h"
36 }
37
38 using namespace org_scilab_modules_gui_bridge;
39
40 int setMenuParent(int iObjUID, void* pvData, int valueType, int nbRow, int nbCol)
41 {
42     int iCurrentFigure = 0;
43     int parentType = -1;
44     int *piParentType = &parentType;
45     int iParentUID = 0;
46
47     double *value = NULL;
48
49     /* Special case to set current figure for parent */
50     if (pvData == NULL)
51     {
52         // Set the parent property
53         iCurrentFigure = getCurrentFigure();
54         if (iCurrentFigure == 0)
55         {
56             iCurrentFigure = createNewFigureWithAxes();
57         }
58         setGraphicObjectRelationship(iCurrentFigure, iObjUID);
59         return SET_PROPERTY_SUCCEED;
60     }
61
62     if (nbRow * nbCol != 1)
63     {
64         // Parent must be a single value
65         return SET_PROPERTY_ERROR;
66     }
67
68     /* Check parent type */
69     if (getScilabMode() == SCILAB_STD)
70     {
71         /* Figure, uimenu or Console can be the parent */
72         if ((valueType != sci_handles) && (valueType != sci_matrix))
73         {
74             Scierror(999, const_cast < char *>(_("%s: Wrong type for parent: A handle or 0 expected.\n")), "SetMenuParent");
75
76             return 0;
77         }
78     }
79     else
80     {
81         /* Figure, uimenu can be the parent */
82         if (valueType == sci_matrix)
83         {
84             Scierror(999, const_cast < char *>(_("%s: can not add a menu into the console in this mode.\n")), "SetMenuParent");
85             return 0;
86         }
87         else if (valueType != sci_handles)
88         {
89             Scierror(999, const_cast < char *>(_("%s: Wrong type for parent: A handle expected.\n")), "SetMenuParent");
90             return 0;
91         }
92     }
93
94     if (valueType == sci_handles)
95     {
96         iParentUID = getObjectFromHandle((long)((long long*)pvData)[0]);
97         if (iParentUID)
98         {
99             getGraphicObjectProperty(iParentUID, __GO_TYPE__, jni_int, (void **)&piParentType);
100             if (parentType == __GO_FIGURE__ || parentType == __GO_UIMENU__
101                     || parentType == __GO_UICONTEXTMENU__)
102             {
103                 setGraphicObjectRelationship(iParentUID, iObjUID);
104             }
105             else
106             {
107                 Scierror(999, const_cast < char *>(_("%s: Wrong type for parent: Figure or uimenu handle expected.\n")), "SetMenuParent");
108                 return SET_PROPERTY_ERROR;
109             }
110         }
111         else
112         {
113             Scierror(999, const_cast < char *>(_("%s: Wrong type for parent: Figure or uimenu handle expected.\n")), "SetMenuParent");
114
115             return SET_PROPERTY_ERROR;
116         }
117     }
118
119     if (valueType == sci_matrix)
120     {
121         // The parent is Scilab Main window (Console Tab)
122         value = (double*)pvData;
123         if (value[0] != 0)
124         {
125             Scierror(999, const_cast < char *>(_("%s: Wrong value for parent: 0 expected.\n")), "SetMenuParent");
126
127             return SET_PROPERTY_ERROR;
128         }
129         setGraphicObjectRelationship(getConsoleIdentifier(), iObjUID);
130     }
131
132     return SET_PROPERTY_SUCCEED;
133 }
134
135 void EnableMenu(int iParentId, char *name, BOOL status)
136 {
137     CallScilabBridge::setMenuEnabled(getScilabJavaVM(), iParentId, name, BOOLtobool(status));
138 }
139
140 void EnableSubMenu(int iParentId, char *name, int position, BOOL status)
141 {
142     CallScilabBridge::setSubMenuEnabled(getScilabJavaVM(), iParentId, name, position, BOOLtobool(status));
143 }
144
145 void DeleteMenuWithName(int iParentId, char *name)
146 {
147     CallScilabBridge::removeMenu(getScilabJavaVM(), iParentId, name);
148 }