9b98089f7c00fe2e865c08b7db12d2a4467607ab
[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_TAG__;
6 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TAB_STRING__;
7 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TAB_VALUE__;
8 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_VISIBLE__;
9
10 import java.awt.CardLayout;
11 import java.awt.Component;
12 import java.util.ArrayList;
13
14 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
15 import org.scilab.modules.gui.SwingViewObject;
16
17 public class SwingScilabLayer extends SwingScilabFrame {
18     private static final long serialVersionUID = 9038916804095320758L;
19     private ArrayList<Integer> layers = new ArrayList<Integer>();
20
21     public SwingScilabLayer() {
22         super();
23         setLayout(new CardLayout());
24         hasLayout = true;
25     }
26
27     public void addMember(SwingScilabFrame member) {
28         String name = member.getId().toString();
29         member.setName(name);
30         layers.add(0, member.getId());
31         add(member, name);
32         revalidate();
33         //active added child
34         setActiveLayer(1);
35     }
36
37     public void addMember(SwingScilabScrollableFrame member) {
38         String name = member.getId().toString();
39         member.setName(name);
40         layers.add(0, member.getId());
41         add(member, name);
42         revalidate();
43
44         //active added child
45         setActiveLayer(1);
46     }
47
48     public Integer getActiveLayer() {
49         Component card = null;
50         for (Component comp : getComponents()) {
51             if (comp.isVisible() == true) {
52
53                 card = comp;
54                 break;
55             }
56         }
57
58         if (card == null) {
59             return -1;
60         }
61
62         return layers.indexOf(Integer.parseInt(card.getName())) + 1;
63     }
64
65     private Component getLayerFromIndex(Integer layer) {
66         if (layer == null || layer < 1 || layer > getComponentCount()) {
67             return null;
68         }
69
70         return getComponent(getComponentCount() - layer);
71     }
72
73     private Integer getLayerIndex(Component layer) {
74         for (int i = 0; i < getComponentCount(); i++) {
75             if (getComponent(i) == layer) {
76                 return i + 1;
77             }
78         }
79
80         return -1;
81     }
82
83     public Boolean isLayerActive(Integer layer) {
84         return getActiveLayer() == layer;
85     }
86
87
88     public Boolean isLayerActive(Component layer) {
89         Integer index = getLayerIndex(layer);
90         if (index == -1) {
91             return false;
92         }
93
94         return isLayerActive(getComponentCount() - (index - 1));
95     }
96
97
98     public void removeMember(SwingScilabScrollableFrame member) {
99         layers.remove(member.getId());
100         remove(member);
101         revalidate();
102
103         //update model with new index
104         Integer active = getActiveLayer();
105         if (active == -1) {
106             if (setActiveLayer(1)) {
107                 active = 1;
108             }
109         }
110     }
111
112     public void removeMember(SwingScilabFrame member) {
113         layers.remove(member.getId());
114         remove(member);
115         revalidate();
116
117         //update model with new index
118         Integer active = getActiveLayer();
119         if (active == -1) {
120             if (setActiveLayer(1)) {
121                 active = 1;
122             }
123         }
124     }
125
126     public boolean setActiveLayer(Integer layerPos) {
127         if (layerPos < 1 || layerPos > layers.size()) {
128             return false;
129         }
130
131         Integer previous = getActiveLayer();
132
133         if (setActiveLayer(layers.get(layerPos - 1).toString()) == false) {
134             return false;
135         }
136
137         Integer next = getActiveLayer();
138         updateModelProperties(previous, next);
139         return true;
140     }
141
142     private boolean setActiveLayer(String layer) {
143         //check existing item
144         ((CardLayout)getLayout()).show(this, layer);
145         return true;
146     }
147
148     public boolean setActiveLayerFromName(String name) {
149
150         //get layer's name from property "string"
151         GraphicController controller = GraphicController.getController();
152
153         for (int i = 0 ; i < layers.size() ; i++) {
154             String string = (String)controller.getProperty(layers.get(i), __GO_TAG__);
155             if (string.equals(name)) {
156                 return setActiveLayer(i + 1);
157             }
158         }
159
160         return false;
161     }
162
163     public void updateModelProperties(Integer previous, Integer next) {
164         SwingViewObject previousFrame = (SwingViewObject)getLayerFromIndex(previous);
165         SwingViewObject nextFrame = (SwingViewObject) getLayerFromIndex(next);
166
167         String name = null;
168         if (previousFrame != null) {
169             GraphicController.getController().setProperty(previousFrame.getId(), __GO_VISIBLE__, false);
170         }
171
172         if (nextFrame != null) {
173             GraphicController.getController().setProperty(nextFrame.getId(), __GO_VISIBLE__, true);
174             name = (String)GraphicController.getController().getProperty(nextFrame.getId(), __GO_TAG__);
175         }
176
177         GraphicController.getController().setProperty(getId(),  __GO_UI_TAB_VALUE__, new Double[] {next.doubleValue()});
178         GraphicController.getController().setProperty(getId(),  __GO_UI_TAB_STRING__, new String[] {name});
179     }
180 }