Mercurial > illumos > onarm
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/cmd/krb5/kadmin/gui/visualrt/sunsoft/jws/visual/rt/shadow/java/awt/ListShadow.java Tue Jun 02 18:56:50 2009 +0900 @@ -0,0 +1,247 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * ident "@(#)ListShadow.java 1.2 05/06/08 SMI" + * + * Copyright (c) 2000 by Sun Microsystems, Inc. + * All rights reserved. + */ + +/* + * Copyright (C) 1996 Active Software, Inc. + * All rights reserved. + * + * @(#) @(#) ListShadow.java 1.32 - last change made 08/12/97 + */ + +package sunsoft.jws.visual.rt.shadow.java.awt; + +import sunsoft.jws.visual.rt.awt.GBConstraints; +import java.awt.List; +import java.awt.SystemColor; +import sunsoft.jws.visual.rt.base.Global; + +/** + * Wraps an AWT widget. The attributes available for this + * class are listed below. In the type column, type names beginning + * with "sunsoft.jws.visual.rt" have been abbreviated to begin with "rt". + * + * <pre> +name type default value +----------------------------------------------------------------------- +allowMultipleSelections java.lang.Boolean false +items [Ljava.lang.String; item1, item2 +selectedItem java.lang.String null +selectedItems [Ljava.lang.String; null +visibleRows java.lang.Integer 4 +* < /pre> +* +* selectedItem: is the item(amoung the the strings in the "items" +* attribute) that is currently showing in the list. This attribute is +* not available in the attribute editor, but is instead expected to be +* used programmatically to change or check the setting. +* < p> +* Check the super class for additional attributes. +* +* @see List +* @version 1.32, 08/12/97 +*/ +public class ListShadow extends ComponentShadow { + public ListShadow() { + attributes.add(/* NOI18N */"allowMultipleSelections", + /* NOI18N */"java.lang.Boolean", + Boolean.FALSE, 0); + String sa[] = { /* NOI18N */"item1", /* NOI18N */"item2"}; + attributes.add(/* NOI18N */"items", + /* NOI18N */"[Ljava.lang.String;", sa, 0); + attributes.add(/* NOI18N */"selectedItem", + /* NOI18N */"java.lang.String", null, HIDDEN); + attributes.add(/* NOI18N */"selectedItems", + /* NOI18N */"[Ljava.lang.String;", null, HIDDEN); + attributes.add(/* NOI18N */"visibleRows", + /* NOI18N */"java.lang.Integer", new Integer(4), + CONSTRUCTOR); + + GBConstraints c = (GBConstraints)get(/* NOI18N */"GBConstraints"); + c.fill = GBConstraints.BOTH; + attributes.add(/* NOI18N */"GBConstraints", + /* NOI18N */"sunsoft.jws.visual.rt.awt.GBConstraints", + c); + + // This is a work around for JDK color bug. The defaults are + // not correctly set + if (Global.isWindows()) { + attributes.add(/* NOI18N */"background", + /* NOI18N */"java.awt.Color", + SystemColor.window, DONTFETCH); + } + if (Global.isMotif()) { + attributes.add(/* NOI18N */"background", + /* NOI18N */"java.awt.Color", + SystemColor.text, DONTFETCH); + attributes.add(/* NOI18N */"foreground", + /* NOI18N */"java.awt.Color", + SystemColor.textText, DONTFETCH); + } + } + + protected Object getOnBody(String key) { + if (key.equals(/* NOI18N */"visibleRows")) + return (new Integer(((List) body).getRows())); + else if (key.equals(/* NOI18N */"allowMultipleSelections")) + return (new Boolean(((List) body).allowsMultipleSelections())); + else if (key.equals(/* NOI18N */"items")) { + if (((List) body).countItems() == 0) + return null; + else { + int index; + String[] listContents = new String[((List)body).countItems()]; + for (index = 0; index < listContents.length; index++) + listContents[index] = ((List)body).getItem(index); + return listContents; + } + } else if (key.equals(/* NOI18N */"selectedItem")) { + List list = (List)body; + return list.getSelectedItem(); + } else if (key.equals(/* NOI18N */"selectedItems")) { + return ((List)body).getSelectedItems(); + } + else + return (super.getOnBody(key)); + } + + /** + * This efficiently makes changes to the List body when the user changes + * items in it. it updates the List body from the new data. + */ + private void equalizeLists(Object value) { + String[] newList = ((String[]) (value)); + + int newListIndex = 0, oldListIndex = 0; + int dummyIndex; + + // If the user deleted all of the entries, the newList would be null + if (newList == null) { + if (((List) body).countItems() > 0) { + ((List) body).delItems(0, ((List)body).countItems()-1); + } + } else { + while (newListIndex < newList.length && + oldListIndex < ((List) body).countItems()) + { + String curOldItem = ((List) (body)).getItem(oldListIndex); + + if (newList[newListIndex].equals(curOldItem)) { + newListIndex++; + oldListIndex++; + } else { + for (dummyIndex = newListIndex; + dummyIndex < newList.length; dummyIndex++) { + if (curOldItem.equals(newList[dummyIndex])) { + ((List) body).delItem(oldListIndex); + break; + } + } + ((List) body).addItem(newList[newListIndex], + oldListIndex); + newListIndex++; + oldListIndex++; + } + } + + if (oldListIndex < ((List) body).countItems()) { + ((List) body).delItems(oldListIndex, + ((List)body).countItems()-1); + } + + while (newListIndex < newList.length) { + ((List) body).addItem(newList[newListIndex]); + newListIndex++; + } + } + } + + protected void setOnBody(String key, Object value) { + if (key.equals(/* NOI18N */"allowMultipleSelections")) + /* JSTYLED */ + ((List) body).setMultipleSelections(((Boolean)value).booleanValue()); + else if (key.equals(/* NOI18N */"items")) + equalizeLists(value); + else if (key.equals(/* NOI18N */"visibleRows")) + return; // this must be set in constructor + else if (key.equals(/* NOI18N */"selectedItem")) { + List list = (List)body; + if (list.allowsMultipleSelections()) + unselectAll(list); + select((List)body, (String)value); + } else if (key.equals(/* NOI18N */"selectedItems")) { + List list = (List)body; + String items[] = (String[])value; + if (list.allowsMultipleSelections()) { + unselectAll(list); + if (items != null) { + for (int i = 0; i < items.length; i++) + select(list, items[i]); + } + } else { + if (items != null && items.length != 0) + select(list, items[0]); + else + select(list, null); + } + } + else + super.setOnBody(key, value); + } + + private void select(List list, String s) { + if (s == null) { + int index = list.getSelectedIndex(); + if (index != -1) + list.deselect(index); + return; + } + + int num = list.countItems(); + for (int i = 0; i < num; i++) { + if (s.equals(list.getItem(i))) { + list.select(i); + break; + } + } + } + + private void unselectAll(List list) { + int indexes[] = list.getSelectedIndexes(); + if (indexes != null) { + for (int i = 0; i < indexes.length; i++) + list.deselect(indexes[i]); + } + } + + public void createBody() { + /* JSTYLED */ + body = new List(((Integer) getFromTable(/* NOI18N */"visibleRows")).intValue(), + /* JSTYLED */ + ((Boolean) getFromTable(/* NOI18N */"allowMultipleSelections")).booleanValue()); + } +}