Mercurial > illumos > onarm
comparison usr/src/cmd/krb5/kadmin/gui/visualrt/sunsoft/jws/visual/rt/shadow/java/awt/ListShadow.java @ 0:c9caec207d52 b86
Initial porting based on b86
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Tue, 02 Jun 2009 18:56:50 +0900 |
parents | |
children | 1a15d5aaf794 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c9caec207d52 |
---|---|
1 /* | |
2 * CDDL HEADER START | |
3 * | |
4 * The contents of this file are subject to the terms of the | |
5 * Common Development and Distribution License, Version 1.0 only | |
6 * (the "License"). You may not use this file except in compliance | |
7 * with the License. | |
8 * | |
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
10 * or http://www.opensolaris.org/os/licensing. | |
11 * See the License for the specific language governing permissions | |
12 * and limitations under the License. | |
13 * | |
14 * When distributing Covered Code, include this CDDL HEADER in each | |
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
16 * If applicable, add the following below this CDDL HEADER, with the | |
17 * fields enclosed by brackets "[]" replaced with your own identifying | |
18 * information: Portions Copyright [yyyy] [name of copyright owner] | |
19 * | |
20 * CDDL HEADER END | |
21 */ | |
22 /* | |
23 * ident "@(#)ListShadow.java 1.2 05/06/08 SMI" | |
24 * | |
25 * Copyright (c) 2000 by Sun Microsystems, Inc. | |
26 * All rights reserved. | |
27 */ | |
28 | |
29 /* | |
30 * Copyright (C) 1996 Active Software, Inc. | |
31 * All rights reserved. | |
32 * | |
33 * @(#) @(#) ListShadow.java 1.32 - last change made 08/12/97 | |
34 */ | |
35 | |
36 package sunsoft.jws.visual.rt.shadow.java.awt; | |
37 | |
38 import sunsoft.jws.visual.rt.awt.GBConstraints; | |
39 import java.awt.List; | |
40 import java.awt.SystemColor; | |
41 import sunsoft.jws.visual.rt.base.Global; | |
42 | |
43 /** | |
44 * Wraps an AWT widget. The attributes available for this | |
45 * class are listed below. In the type column, type names beginning | |
46 * with "sunsoft.jws.visual.rt" have been abbreviated to begin with "rt". | |
47 * | |
48 * <pre> | |
49 name type default value | |
50 ----------------------------------------------------------------------- | |
51 allowMultipleSelections java.lang.Boolean false | |
52 items [Ljava.lang.String; item1, item2 | |
53 selectedItem java.lang.String null | |
54 selectedItems [Ljava.lang.String; null | |
55 visibleRows java.lang.Integer 4 | |
56 * < /pre> | |
57 * | |
58 * selectedItem: is the item(amoung the the strings in the "items" | |
59 * attribute) that is currently showing in the list. This attribute is | |
60 * not available in the attribute editor, but is instead expected to be | |
61 * used programmatically to change or check the setting. | |
62 * < p> | |
63 * Check the super class for additional attributes. | |
64 * | |
65 * @see List | |
66 * @version 1.32, 08/12/97 | |
67 */ | |
68 public class ListShadow extends ComponentShadow { | |
69 public ListShadow() { | |
70 attributes.add(/* NOI18N */"allowMultipleSelections", | |
71 /* NOI18N */"java.lang.Boolean", | |
72 Boolean.FALSE, 0); | |
73 String sa[] = { /* NOI18N */"item1", /* NOI18N */"item2"}; | |
74 attributes.add(/* NOI18N */"items", | |
75 /* NOI18N */"[Ljava.lang.String;", sa, 0); | |
76 attributes.add(/* NOI18N */"selectedItem", | |
77 /* NOI18N */"java.lang.String", null, HIDDEN); | |
78 attributes.add(/* NOI18N */"selectedItems", | |
79 /* NOI18N */"[Ljava.lang.String;", null, HIDDEN); | |
80 attributes.add(/* NOI18N */"visibleRows", | |
81 /* NOI18N */"java.lang.Integer", new Integer(4), | |
82 CONSTRUCTOR); | |
83 | |
84 GBConstraints c = (GBConstraints)get(/* NOI18N */"GBConstraints"); | |
85 c.fill = GBConstraints.BOTH; | |
86 attributes.add(/* NOI18N */"GBConstraints", | |
87 /* NOI18N */"sunsoft.jws.visual.rt.awt.GBConstraints", | |
88 c); | |
89 | |
90 // This is a work around for JDK color bug. The defaults are | |
91 // not correctly set | |
92 if (Global.isWindows()) { | |
93 attributes.add(/* NOI18N */"background", | |
94 /* NOI18N */"java.awt.Color", | |
95 SystemColor.window, DONTFETCH); | |
96 } | |
97 if (Global.isMotif()) { | |
98 attributes.add(/* NOI18N */"background", | |
99 /* NOI18N */"java.awt.Color", | |
100 SystemColor.text, DONTFETCH); | |
101 attributes.add(/* NOI18N */"foreground", | |
102 /* NOI18N */"java.awt.Color", | |
103 SystemColor.textText, DONTFETCH); | |
104 } | |
105 } | |
106 | |
107 protected Object getOnBody(String key) { | |
108 if (key.equals(/* NOI18N */"visibleRows")) | |
109 return (new Integer(((List) body).getRows())); | |
110 else if (key.equals(/* NOI18N */"allowMultipleSelections")) | |
111 return (new Boolean(((List) body).allowsMultipleSelections())); | |
112 else if (key.equals(/* NOI18N */"items")) { | |
113 if (((List) body).countItems() == 0) | |
114 return null; | |
115 else { | |
116 int index; | |
117 String[] listContents = new String[((List)body).countItems()]; | |
118 for (index = 0; index < listContents.length; index++) | |
119 listContents[index] = ((List)body).getItem(index); | |
120 return listContents; | |
121 } | |
122 } else if (key.equals(/* NOI18N */"selectedItem")) { | |
123 List list = (List)body; | |
124 return list.getSelectedItem(); | |
125 } else if (key.equals(/* NOI18N */"selectedItems")) { | |
126 return ((List)body).getSelectedItems(); | |
127 } | |
128 else | |
129 return (super.getOnBody(key)); | |
130 } | |
131 | |
132 /** | |
133 * This efficiently makes changes to the List body when the user changes | |
134 * items in it. it updates the List body from the new data. | |
135 */ | |
136 private void equalizeLists(Object value) { | |
137 String[] newList = ((String[]) (value)); | |
138 | |
139 int newListIndex = 0, oldListIndex = 0; | |
140 int dummyIndex; | |
141 | |
142 // If the user deleted all of the entries, the newList would be null | |
143 if (newList == null) { | |
144 if (((List) body).countItems() > 0) { | |
145 ((List) body).delItems(0, ((List)body).countItems()-1); | |
146 } | |
147 } else { | |
148 while (newListIndex < newList.length && | |
149 oldListIndex < ((List) body).countItems()) | |
150 { | |
151 String curOldItem = ((List) (body)).getItem(oldListIndex); | |
152 | |
153 if (newList[newListIndex].equals(curOldItem)) { | |
154 newListIndex++; | |
155 oldListIndex++; | |
156 } else { | |
157 for (dummyIndex = newListIndex; | |
158 dummyIndex < newList.length; dummyIndex++) { | |
159 if (curOldItem.equals(newList[dummyIndex])) { | |
160 ((List) body).delItem(oldListIndex); | |
161 break; | |
162 } | |
163 } | |
164 ((List) body).addItem(newList[newListIndex], | |
165 oldListIndex); | |
166 newListIndex++; | |
167 oldListIndex++; | |
168 } | |
169 } | |
170 | |
171 if (oldListIndex < ((List) body).countItems()) { | |
172 ((List) body).delItems(oldListIndex, | |
173 ((List)body).countItems()-1); | |
174 } | |
175 | |
176 while (newListIndex < newList.length) { | |
177 ((List) body).addItem(newList[newListIndex]); | |
178 newListIndex++; | |
179 } | |
180 } | |
181 } | |
182 | |
183 protected void setOnBody(String key, Object value) { | |
184 if (key.equals(/* NOI18N */"allowMultipleSelections")) | |
185 /* JSTYLED */ | |
186 ((List) body).setMultipleSelections(((Boolean)value).booleanValue()); | |
187 else if (key.equals(/* NOI18N */"items")) | |
188 equalizeLists(value); | |
189 else if (key.equals(/* NOI18N */"visibleRows")) | |
190 return; // this must be set in constructor | |
191 else if (key.equals(/* NOI18N */"selectedItem")) { | |
192 List list = (List)body; | |
193 if (list.allowsMultipleSelections()) | |
194 unselectAll(list); | |
195 select((List)body, (String)value); | |
196 } else if (key.equals(/* NOI18N */"selectedItems")) { | |
197 List list = (List)body; | |
198 String items[] = (String[])value; | |
199 if (list.allowsMultipleSelections()) { | |
200 unselectAll(list); | |
201 if (items != null) { | |
202 for (int i = 0; i < items.length; i++) | |
203 select(list, items[i]); | |
204 } | |
205 } else { | |
206 if (items != null && items.length != 0) | |
207 select(list, items[0]); | |
208 else | |
209 select(list, null); | |
210 } | |
211 } | |
212 else | |
213 super.setOnBody(key, value); | |
214 } | |
215 | |
216 private void select(List list, String s) { | |
217 if (s == null) { | |
218 int index = list.getSelectedIndex(); | |
219 if (index != -1) | |
220 list.deselect(index); | |
221 return; | |
222 } | |
223 | |
224 int num = list.countItems(); | |
225 for (int i = 0; i < num; i++) { | |
226 if (s.equals(list.getItem(i))) { | |
227 list.select(i); | |
228 break; | |
229 } | |
230 } | |
231 } | |
232 | |
233 private void unselectAll(List list) { | |
234 int indexes[] = list.getSelectedIndexes(); | |
235 if (indexes != null) { | |
236 for (int i = 0; i < indexes.length; i++) | |
237 list.deselect(indexes[i]); | |
238 } | |
239 } | |
240 | |
241 public void createBody() { | |
242 /* JSTYLED */ | |
243 body = new List(((Integer) getFromTable(/* NOI18N */"visibleRows")).intValue(), | |
244 /* JSTYLED */ | |
245 ((Boolean) getFromTable(/* NOI18N */"allowMultipleSelections")).booleanValue()); | |
246 } | |
247 } |