| /* Copyright (C) 2000, 2001 Free Software Foundation |
| |
| This file is part of libgcj. |
| |
| This software is copyrighted work licensed under the terms of the |
| Libgcj License. Please consult the file "LIBGCJ_LICENSE" for |
| details. */ |
| |
| package java.awt; |
| |
| import java.awt.peer.ListPeer; |
| import java.awt.event.*; |
| import java.util.Vector; |
| |
| /** |
| * @author Tom Tromey <tromey@redhat.com> |
| * @date April 17, 2001 |
| * Status: incomplete |
| */ |
| |
| public class List extends Component implements ItemSelectable |
| { |
| /** Creates a new scrolling list with four rows. |
| * Initially, multiple selections are not allowed. |
| */ |
| public List () |
| { |
| this (4, false); |
| } |
| |
| /** Create a new scrolling list with the indicated number of rows. |
| * Initially, multiple selections are not allowed. |
| * @param rows Number of rows |
| */ |
| public List (int rows) |
| { |
| this (rows, false); |
| } |
| |
| /** Create a new scrolling list with the indicated number of rows. |
| * @param rows Number of rows |
| * @param multiple True if multiple selections allowed |
| */ |
| public List (int rows, boolean multiple) |
| { |
| this.rows = rows; |
| this.multipleMode = multiple; |
| } |
| |
| /** Create the peer if it does not already exist. */ |
| public void addNotify () |
| { |
| if (peer != null) |
| peer = getToolkit ().createList (this); |
| super.addNotify (); |
| } |
| |
| public int getItemCount () |
| { |
| return items.size (); |
| } |
| |
| /** @deprecated Use getItemCount() instead. */ |
| public int countItems () |
| { |
| return getItemCount (); |
| } |
| |
| public String getItem (int index) |
| { |
| return (String) items.elementAt (index); |
| } |
| |
| public String[] getItems () |
| { |
| String[] els = new String[items.size ()]; |
| items.copyInto (els); |
| return els; |
| } |
| |
| public void add (String item) |
| { |
| add (item, items.size ()); |
| } |
| |
| /** @deprecated Use add() instead. */ |
| public void addItem (String item) |
| { |
| add (item); |
| } |
| |
| public void add (String item, int index) |
| { |
| items.insertElementAt (item, index); |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| l.add (item, index); |
| } |
| } |
| |
| /** @deprecated Use add() instead. */ |
| public void addItem (String item, int index) |
| { |
| add (item, index); |
| } |
| |
| public void replaceItem (String item, int index) |
| { |
| items.setElementAt (item, index); |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| l.delItems (index, index); |
| l.add (item, index); |
| } |
| } |
| |
| public void removeAll () |
| { |
| items.clear (); |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| l.removeAll (); |
| } |
| } |
| |
| /** @deprecated Use removeAll() instead. */ |
| public void clear () |
| { |
| removeAll (); |
| } |
| |
| public void remove (String item) |
| { |
| remove (items.indexOf (item)); |
| } |
| |
| public void remove (int index) |
| { |
| items.removeElementAt (index); |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| l.delItems (index, index); |
| } |
| } |
| |
| /** @deprecated Use remove() instead. */ |
| public void delItem (int index) |
| { |
| remove (index); |
| } |
| |
| public int getSelectedIndex () |
| { |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| selected = l.getSelectedIndexes (); |
| } |
| |
| if (selected == null || selected.length > 1) |
| return -1; |
| return selected[0]; |
| } |
| |
| public int[] getSelectedIndexes () |
| { |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| selected = l.getSelectedIndexes (); |
| } |
| return selected; |
| } |
| |
| public String getSelectedItem () |
| { |
| int i = getSelectedIndex (); |
| return i == -1 ? null : (String) items.elementAt (i); |
| } |
| |
| public String[] getSelectedItems () |
| { |
| int[] is = getSelectedIndexes (); |
| if (is == null) |
| return null; |
| String[] r = new String[is.length]; |
| for (int i = 0; i < is.length; ++i) |
| r[i] = (String) items.elementAt (is[i]); |
| return r; |
| } |
| |
| public Object[] getSelectedObjects () |
| { |
| return getSelectedItems (); |
| } |
| |
| public void select (int index) |
| { |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| l.select (index); |
| } |
| else if (selected == null) |
| { |
| selected = new int[1]; |
| selected[0] = index; |
| } |
| else |
| { |
| int i; |
| for (i = 0; i < selected.length; ++i) |
| { |
| if (selected[i] == index) |
| return; |
| if (selected[i] > index) |
| break; |
| } |
| |
| int[] ns = new int[selected.length + 1]; |
| System.arraycopy (selected, 0, ns, 0, i); |
| ns[i] = index; |
| System.arraycopy (selected, i, ns, i + 1, selected.length - i); |
| |
| selected = ns; |
| } |
| } |
| |
| public void deselect (int index) |
| { |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| l.deselect (index); |
| } |
| else if (selected != null) |
| { |
| int i; |
| for (i = 0; i < selected.length; ++i) |
| { |
| if (selected[i] == index) |
| break; |
| } |
| if (i < selected.length) |
| { |
| int[] ns = new int[selected.length - 1]; |
| System.arraycopy (selected, 0, ns, 0, i); |
| System.arraycopy (selected, i + 1, ns, i, selected.length - i); |
| selected = ns; |
| } |
| } |
| } |
| |
| public boolean isIndexSelected (int index) |
| { |
| int[] is = getSelectedIndexes (); |
| for (int i = 0; i < is.length; ++i) |
| { |
| if (is[i] == index) |
| return true; |
| } |
| return false; |
| } |
| |
| /** @deprecated Use isIndexSelected(). */ |
| public boolean isSelected (int index) |
| { |
| return isIndexSelected (index); |
| } |
| |
| public int getRows () |
| { |
| return rows; |
| } |
| |
| public boolean isMultipleMode () |
| { |
| return multipleMode; |
| } |
| |
| /** @deprecated Use isMultipleMode(). */ |
| public boolean allowsMultipleSelections () |
| { |
| return isMultipleMode (); |
| } |
| |
| public void setMultipleMode (boolean multiple) |
| { |
| this.multipleMode = multiple; |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| l.setMultipleMode (multiple); |
| } |
| } |
| |
| /** @deprecated Use setMultipleMode(). */ |
| public void setMultipleSelections (boolean multiple) |
| { |
| setMultipleMode (multiple); |
| } |
| |
| public int getVisibleIndex () |
| { |
| return visibleIndex; |
| } |
| |
| public void makeVisible (int index) |
| { |
| visibleIndex = index; |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| l.makeVisible (index); |
| } |
| } |
| |
| public Dimension getPreferredSize (int rows) |
| { |
| return null; // FIXME |
| } |
| |
| /** @deprecated Use getPreferredSize(int). */ |
| public Dimension preferredSize (int rows) |
| { |
| return getPreferredSize (rows); |
| } |
| |
| public Dimension getPreferredSize () |
| { |
| return null; // FIXME |
| } |
| |
| /** @deprecated Use getPreferredSize(). */ |
| public Dimension preferredSize () |
| { |
| return getPreferredSize (); |
| } |
| |
| public Dimension getMinimumSize (int rows) |
| { |
| return null; // FIXME |
| } |
| |
| /** @deprecated Use getMinimumSize(int). */ |
| public Dimension minimumSize (int rows) |
| { |
| return getMinimumSize (rows); |
| } |
| |
| public Dimension getMinimumSize () |
| { |
| return null; // FIXME |
| } |
| |
| /** @deprecated Use getMinimumSize(). */ |
| public Dimension minimumSize () |
| { |
| return getMinimumSize (); |
| } |
| |
| public void addItemListener (ItemListener listen) |
| { |
| item_listeners = AWTEventMulticaster.add (item_listeners, listen); |
| } |
| |
| public void removeItemListener (ItemListener listen) |
| { |
| item_listeners = AWTEventMulticaster.remove (item_listeners, listen); |
| } |
| |
| public void addActionListener (ActionListener listen) |
| { |
| action_listeners = AWTEventMulticaster.add (action_listeners, listen); |
| } |
| |
| public void removeActionListener (ActionListener listen) |
| { |
| action_listeners = AWTEventMulticaster.remove (action_listeners, listen); |
| } |
| |
| protected void processEvent (AWTEvent e) |
| { |
| if (e instanceof ItemEvent) |
| processItemEvent ((ItemEvent) e); |
| else if (e instanceof ActionEvent) |
| processActionEvent ((ActionEvent) e); |
| else |
| super.processEvent (e); |
| } |
| |
| protected void processItemEvent (ItemEvent e) |
| { |
| if (item_listeners != null) |
| item_listeners.itemStateChanged (e); |
| } |
| |
| protected void processActionEvent (ActionEvent e) |
| { |
| if (action_listeners != null) |
| action_listeners.actionPerformed (e); |
| } |
| |
| protected String paramString () |
| { |
| return ("List[multiple=" + multipleMode |
| + ",rows=" + rows |
| + "]"); |
| } |
| |
| /** @deprecated */ |
| public void delItems (int start, int end) |
| { |
| for (int i = end; i >= start; --i) |
| items.removeElementAt (i); |
| if (peer != null) |
| { |
| ListPeer l = (ListPeer) peer; |
| l.delItems (start, end); |
| } |
| } |
| |
| // Vector of items in the list. |
| private Vector items; |
| // True if multiple selection mode enabled. |
| private boolean multipleMode; |
| // Number of rows. |
| private int rows; |
| // Array of indices of selected items. When there is no peer, we |
| // maintain this in place. When there is a peer, the peer maintains |
| // the list and we ask for it whenever needed. |
| private int[] selected; |
| // Value used by makeVisible(). |
| private int visibleIndex; |
| |
| // Listeners. |
| private ActionListener action_listeners; |
| private ItemListener item_listeners; |
| } |