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