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