Xcos ports: fix RoundBlock inputs position
[scilab.git] / scilab / modules / xcos / src / java / org / scilab / modules / xcos / block / positionning / RoundBlock.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - DIGITEO - Clement DAVID
4  * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  * === LICENSE_END ===
15  *
16  */
17
18 package org.scilab.modules.xcos.block.positionning;
19
20 import com.mxgraph.model.mxGeometry;
21 import org.scilab.modules.xcos.block.BasicBlock;
22 import org.scilab.modules.xcos.port.Orientation;
23 import org.scilab.modules.xcos.port.input.InputPort;
24
25 import com.mxgraph.model.mxICell;
26 import org.scilab.modules.xcos.JavaController;
27 import org.scilab.modules.xcos.Kind;
28
29 /**
30  * Implement a round block with inputs spread around the block.
31  */
32 @SuppressWarnings(value = { "serial" })
33 public class RoundBlock extends BasicBlock {
34     /**
35      * Default constructor
36      */
37     public RoundBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
38         super(controller, uid, kind, value, geometry, style, id);
39     }
40
41     /**
42      * Insert a port into this block.
43      *
44      * @param child
45      *            the port to add
46      * @param index
47      *            the index
48      * @return the inserted cell
49      */
50     @Override
51     public mxICell insert(mxICell child, int index) {
52         /*
53          * Any input are placed around the block.
54          */
55         if (child instanceof InputPort) {
56             final InputPort port = (InputPort) child;
57             port.setOrientation(getInputPortOrientation(index));
58
59         }
60
61         return super.insert(child, index);
62     }
63
64     /**
65      * Get the Orientation from the order
66      *
67      * @param order
68      *            the port ordering
69      * @return the selected orientation
70      */
71     private Orientation getInputPortOrientation(int order) {
72         final Orientation ret;
73
74         switch (order) {
75             case 0:
76                 ret = Orientation.SOUTH;
77                 break;
78             case 1:
79                 ret = Orientation.WEST;
80                 break;
81             case 2:
82                 ret = Orientation.NORTH;
83                 break;
84             default:
85                 ret = Orientation.WEST;
86                 break;
87         }
88         return ret;
89     }
90 }