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