1
4 import org.aswing.Component;
5 import org.aswing.Container;
6 import org.aswing.Icon;
7 import org.aswing.LayoutManager;
8 import org.aswing.plaf.AccordionUI;
9 import org.aswing.UIManager;
10 import org.aswing.utils.ArrayUtils;
11 import org.aswing.utils.StringUtils;
12
13
17 class org.aswing.JAccordion extends Container {
18 public static var ON_STATE_CHANGED:String = "onStateChanged";
19
20 private var titles:Array;
21 private var icons:Array;
22 private var tips:Array;
23
24 private var selectedIndex:Number;
25
26
30 public function JAccordion() {
31 super();
32 titles = new Array();
33 icons = new Array();
34 tips = new Array();
35
36 selectedIndex = -1;
37
38 updateUI();
39 }
40
41 public function updateUI():Void{
42 setUI(AccordionUI(UIManager.getUI(this)));
43 setLayout(getUI());
44 }
45
46 public function setUI(newUI:AccordionUI):Void{
47 super.setUI(newUI);
48 }
49
50 public function getUI():AccordionUI{
51 return AccordionUI(ui);
52 }
53
54 public function getUIClassID():String{
55 return "AccordionUI";
56 }
57
58
63 public function setLayout(layout:LayoutManager):Void{
64 if(layout instanceof AccordionUI){
65 super.setLayout(layout);
66 }else{
67 trace("Cannot set non-AccordionUI layout to JAccordion!");
68 throw Error("Cannot set non-AccordionUI layout to JAccordion!");
69 }
70 }
71
72
84 public function append(com:Component, constraints:Object):Void{
85 insert(-1, com, constraints);
86 }
87
88
100 public function insert(i:Number, com:Component, constraints:Object):Void{
101 var title:String = null;
102 var icon:Icon = null;
103 if(constraints == undefined){
104 title = com.getName();
105 }else if(StringUtils.isString(constraints)){
106 title = String(constraints);
107 }else if(constraints instanceof Icon){
108 icon = Icon(constraints);
109 }else{
110 title = constraints.toString();
111 }
112 insertTab(i, com, title, icon, null);
113 }
114
115
123 public function appendTab(com:Component, title:String, icon:Icon, tip:String):Void{
124 insertTab(-1, com, title, icon, tip);
125 }
126
127
137 public function insertTab(i:Number, com:Component, title:String, icon:Icon, tip:String):Void{
138 if(i > getComponentCount()){
139 trace("illegal component position when insert comp to container");
140 throw new Error("illegal component position when insert comp to container");
141 }
142 insertToArray(titles, i, title);
143 insertToArray(icons, i, icon);
144 insertToArray(tips, i, tip);
145 super.insert(i, com);
146 if(selectedIndex < 0){
147 setSelectedIndex(0);
148 }
149 }
150
151
157 public function removeTabAt(i):Component{
158 removeFromArray(titles, i);
159 removeFromArray(icons, i);
160 removeFromArray(tips, i);
161
162 var rc:Component = super.removeAt(i);
163 rc.setVisible(true);
164
165 if(i < 0) i = getComponentCount();
166 if(getComponentCount() > 0){
167 setSelectedIndex(i);
168 }else{
169 selectedIndex = -1;
170 }
171
172 return rc;
173 }
174
175
183 public function remove(com:Component):Component{
184 var index:Number = index(com);
185 return removeAt(index);
186 }
187
188
195 public function removeAt(index:Number):Component{
196 return removeTabAt(index);
197 }
198
199
206 public function removeAll():Void{
207 while(children.length > 0){
208 removeAt(children.length - 1);
209 }
210 }
211
212
215 public function getTabCount():Number{
216 return getComponentCount();
217 }
218
219
224 public function getTitleAt(i:Number):String{
225 return titles[i];
226 }
227
228
233 public function getIconAt(i:Number):Icon{
234 return Icon(icons[i]);
235 }
236
237
242 public function getTipAt(i:Number):String{
243 return tips[i];
244 }
245
246
251 public function indexOfTitle(title:String):Number{
252 return ArrayUtils.indexInArray(titles, title);
253 }
254
255
260 public function indexOfIcon(icon:Icon):Number{
261 return ArrayUtils.indexInArray(icons, icon);
262 }
263
264
269 public function indexOfTip(tip:String):Number{
270 return ArrayUtils.indexInArray(tips, tip);
271 }
272
273 public function setSelectedIndex(i:Number):Void{
274 if(i>=0 && i<getComponentCount() && i != selectedIndex){
275 selectedIndex = i;
276 }
277 fireStateChanged();
278 }
279
280 public function setSelectedComponent(com:Component):Void{
281 setSelectedIndex(index(com));
282 }
283
284 public function getSelectedIndex():Number{
285 return selectedIndex;
286 }
287
288 public function getSelectedComponent():Component{
289 if(selectedIndex >= 0){
290 return getComponent(selectedIndex);
291 }
292 return null;
293 }
294
295
296
297 private function insertToArray(arr:Array, i:Number, obj:Object):Void{
298 if(i < 0){
299 arr.push(obj);
300 }else{
301 arr.splice(i, 0, obj);
302 }
303 }
304
305 private function removeFromArray(arr:Array, i:Number):Void{
306 if(i < 0){
307 arr.pop();
308 }else{
309 arr.splice(i, 1);
310 }
311 }
312 }
313