GPL + CeCILL Header change
[scilab.git] / scilab / modules / graph / src / java / org / scilab / modules / graph / actions / base / VertexSelectionDependantAction.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - DIGITEO - Clement DAVID
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  * === LICENSE_END ===
14  *
15  */
16
17 package org.scilab.modules.graph.actions.base;
18
19 import org.scilab.modules.graph.ScilabGraph;
20
21 import com.mxgraph.model.mxCell;
22 import com.mxgraph.util.mxEvent;
23 import com.mxgraph.util.mxEventObject;
24 import com.mxgraph.view.mxGraphSelectionModel;
25
26 /**
27  * Common class for selection dependent actions.
28  *
29  * Children of this class will be activated when there something selected. If
30  * not, the action will be disabled.
31  */
32 public abstract class VertexSelectionDependantAction extends DefaultAction {
33
34     /**
35      * Enable the selection if there is at least a vertex in the selection.
36      */
37     private final class VertexSelectionDependantConstraint extends ActionConstraint {
38
39         /**
40          * Default constructor
41          */
42         public VertexSelectionDependantConstraint() {
43             super();
44         }
45
46         /**
47          * @param action the action
48          * @param scilabGraph the current graph
49          * @see org.scilab.modules.graph.actions.base.ActionConstraint#install(org.scilab.modules.graph.actions.base.DefaultAction,
50          *      org.scilab.modules.graph.ScilabGraph)
51          */
52         @Override
53         public void install(DefaultAction action, ScilabGraph scilabGraph) {
54             super.install(action, scilabGraph);
55
56             scilabGraph.getSelectionModel().addListener(mxEvent.UNDO, this);
57         }
58
59         /**
60          * @param sender the sender
61          * @param evt the event
62          * @see com.mxgraph.util.mxEventSource.mxIEventListener#invoke(java.lang.Object, com.mxgraph.util.mxEventObject)
63          */
64         public void invoke(Object sender, mxEventObject evt) {
65             mxGraphSelectionModel selection = (mxGraphSelectionModel) sender;
66             Object[] cells = selection.getCells();
67
68             boolean vertexFound = false;
69             if (cells != null) {
70                 for (Object object : cells) {
71                     if (object instanceof mxCell) {
72                         mxCell cell = (mxCell) object;
73                         vertexFound = cell.isVertex();
74                     }
75
76                     if (vertexFound) {
77                         break;
78                     }
79                 }
80
81                 setEnabled(vertexFound);
82             }
83         }
84
85     }
86
87     /**
88      * Default constructor
89      *
90      * @param scilabGraph
91      *            The associated graph
92      */
93     public VertexSelectionDependantAction(ScilabGraph scilabGraph) {
94         super(scilabGraph);
95
96         if (scilabGraph != null) {
97             VertexSelectionDependantConstraint c = new VertexSelectionDependantConstraint();
98             c.install(this, scilabGraph);
99         }
100     }
101 }