17d3a47a6cefb4e677cf4da390cba34d50012bb3
[scilab.git] / scilab / modules / xcos / src / java / org / scilab / modules / xcos / block / actions / ShowParentAction.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009 - DIGITEO - Vincent COUVERT
4  * Copyright (C) 2010 - DIGITEO - Clement DAVID
5  * Copyright (C) 2011-2015 - Scilab Enterprises - Clement DAVID
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  */
17
18 package org.scilab.modules.xcos.block.actions;
19
20 import java.awt.Toolkit;
21 import java.awt.event.ActionEvent;
22 import java.awt.event.KeyEvent;
23
24 import org.scilab.modules.graph.ScilabGraph;
25 import org.scilab.modules.graph.actions.base.DefaultAction;
26 import org.scilab.modules.gui.menuitem.MenuItem;
27 import org.scilab.modules.xcos.JavaController;
28 import org.scilab.modules.xcos.Kind;
29 import org.scilab.modules.xcos.ObjectProperties;
30 import org.scilab.modules.xcos.Xcos;
31 import org.scilab.modules.xcos.XcosTab;
32 import org.scilab.modules.xcos.XcosView;
33 import org.scilab.modules.xcos.graph.XcosDiagram;
34 import org.scilab.modules.xcos.utils.XcosMessages;
35
36 /**
37  * Show the parent graph (only installed on a {@link SuperBlockDiagram})
38  */
39 @SuppressWarnings(value = { "serial" })
40 public class ShowParentAction extends DefaultAction {
41     /** Name of the action */
42     public static final String NAME = XcosMessages.SHOW_PARENT;
43     /** Icon name of the action */
44     public static final String SMALL_ICON = "";
45     /** Mnemonic key of the action */
46     public static final int MNEMONIC_KEY = KeyEvent.VK_HOME;
47     /** Accelerator key for the action */
48     public static final int ACCELERATOR_KEY = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
49
50     /**
51      * Constructor
52      *
53      * @param scilabGraph
54      *            associated diagram
55      */
56     public ShowParentAction(ScilabGraph scilabGraph) {
57         super(scilabGraph);
58     }
59
60     /**
61      * Menu added to the menubar
62      *
63      * @param scilabGraph
64      *            associated diagram
65      * @return the menu
66      */
67     public static MenuItem createMenu(ScilabGraph scilabGraph) {
68         return createMenu(scilabGraph, ShowParentAction.class);
69     }
70
71     /**
72      * @param e
73      *            parameter
74      * @see org.scilab.modules.graph.actions.base.DefaultAction#actionPerformed(java.awt.event.ActionEvent)
75      */
76     @Override
77     public void actionPerformed(ActionEvent e) {
78         final XcosDiagram graph = (XcosDiagram) getGraph(e);
79
80         if (graph.getKind() == Kind.BLOCK) {
81             JavaController controller = new JavaController();
82             long[] parent = new long[1];
83             Kind kind = Kind.BLOCK;
84             controller.getObjectProperty(graph.getUID(), kind, ObjectProperties.PARENT_BLOCK, parent);
85             if (parent[0] == 0) {
86                 kind = Kind.DIAGRAM;
87                 controller.getObjectProperty(graph.getUID(), kind, ObjectProperties.PARENT_DIAGRAM, parent);
88             }
89
90             XcosView view = (XcosView) JavaController.lookup_view(Xcos.class.getName());
91
92             XcosDiagram diagram = (XcosDiagram) view.getVisibleObjects().get(parent[0]);
93             if (diagram == null) {
94                 String[] strUID = new String[] { "" };
95                 controller.getObjectProperty(graph.getUID(), kind, ObjectProperties.UID, strUID);
96
97                 diagram = new XcosDiagram(controller, parent[0], kind, strUID[0]);
98                 view.getVisibleObjects().put(parent[0], diagram);
99             }
100
101             final XcosTab tab = XcosTab.get(diagram);
102             if (tab == null) {
103                 XcosTab.restore(diagram);
104             } else {
105                 tab.setCurrent();
106             }
107         }
108     }
109 }