11ce7c5c4a385251bf9ba191beeb4b8d3b7fc25a
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / bridge / frame / SwingScilabLayer.java
1 package org.scilab.modules.gui.bridge.frame;
2
3
4
5 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_VALUE__;
6 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_VISIBLE__;
7
8 import java.awt.CardLayout;
9 import java.awt.Component;
10 import java.util.ArrayList;
11
12 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
13
14 public class SwingScilabLayer extends SwingScilabFrame {
15     private static final long serialVersionUID = 9038916804095320758L;
16     private ArrayList<String> layerName = new ArrayList<String>();
17     private CardLayout layout = new CardLayout();
18
19     public SwingScilabLayer() {
20         super();
21         setLayout(layout);
22     }
23
24     public void addMember(SwingScilabFrame member) {
25         String name = member.getId().toString();
26         member.setName(name);
27         layerName.add(name);
28         add(member, name);
29         revalidate();
30         //active the first child
31         if (getActiveLayer() == -1) {
32             setActiveLayer(1);
33         }
34
35     }
36
37     public Integer getActiveLayer() {
38         SwingScilabFrame card = null;
39         for (Component comp : getComponents()) {
40             if (comp.isVisible() == true) {
41                 card = (SwingScilabFrame) comp;
42                 break;
43             }
44         }
45
46         if (card == null) {
47             return -1;
48         }
49
50         return layerName.indexOf(card.getName()) + 1;
51     }
52
53     private SwingScilabFrame getLayerFromIndex(Integer layer) {
54         if (layer < 1 || layer > getComponentCount()) {
55             return null;
56         }
57
58         return (SwingScilabFrame) getComponent(layer - 1);
59     }
60
61     private Integer getLayerIndex(SwingScilabFrame layer) {
62         for (int i = 0; i < getComponentCount(); i++) {
63             if (getComponent(i) == layer) {
64                 return i + 1;
65             }
66         }
67
68         return -1;
69     }
70
71     public Boolean isLayerActive(Integer layer) {
72         return getActiveLayer() == layer;
73     }
74
75
76     public Boolean isLayerActive(SwingScilabFrame layer) {
77         Integer index = getLayerIndex(layer);
78         if (index == -1) {
79             return false;
80         }
81
82         return isLayerActive(index);
83     }
84
85
86     public void removeMember(SwingScilabFrame member) {
87         layerName.remove(member.getId().toString());
88         remove(member);
89         revalidate();
90
91         //update model with new index
92         Integer active = getActiveLayer();
93         if (active == -1) {
94             if (setActiveLayer(1)) {
95                 active = 1;
96             }
97         }
98
99         //update model with new index
100         GraphicController.getController().setProperty(getId(),  __GO_UI_VALUE__, new Double[] {active.doubleValue()});
101     }
102
103     public boolean setActiveLayer(Integer layerPos) {
104         if (layerPos < 1 || layerPos > layerName.size()) {
105             return false;
106         }
107
108         Integer previous = getActiveLayer();
109         if (setActiveLayer(layerName.get(layerPos - 1)) == false) {
110             return false;
111         }
112
113         Integer next = getActiveLayer();
114         updateChildrenVisible(previous, next);
115         return true;
116     }
117
118     private boolean setActiveLayer(String layer) {
119         //check existing item
120         if (layerName.contains(layer)) {
121             layout.show(this, layer);
122             return true;
123         } else {
124             return false;
125         }
126     }
127
128     private void updateChildrenVisible(Integer previous, Integer next) {
129         SwingScilabFrame previousFrame = getLayerFromIndex(previous);
130         SwingScilabFrame nextFrame = getLayerFromIndex(next);
131
132         if (previousFrame != null) {
133             GraphicController.getController().setProperty(previousFrame.getId(), __GO_VISIBLE__, false);
134         }
135
136         if (nextFrame != null) {
137             GraphicController.getController().setProperty(nextFrame.getId(), __GO_VISIBLE__, true);
138         }
139
140         GraphicController.getController().setProperty(getId(),  __GO_UI_VALUE__, new Double[] {next.doubleValue()});
141
142     }
143 }