2001-04-21 10:48:35 +08:00
|
|
|
/* Copyright (C) 2000, 2001 Free Software Foundation
|
2000-08-03 20:09:41 +08:00
|
|
|
|
|
|
|
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;
|
|
|
|
|
2001-04-21 10:48:35 +08:00
|
|
|
import java.awt.peer.ListPeer;
|
|
|
|
import java.awt.event.*;
|
|
|
|
import java.util.Vector;
|
2000-08-03 20:09:41 +08:00
|
|
|
|
2001-04-21 10:48:35 +08:00
|
|
|
/**
|
|
|
|
* @author Tom Tromey <tromey@redhat.com>
|
|
|
|
* @date April 17, 2001
|
|
|
|
* Status: incomplete
|
|
|
|
*/
|
|
|
|
|
|
|
|
public class List extends Component implements ItemSelectable
|
2000-08-03 20:09:41 +08:00
|
|
|
{
|
2001-04-21 10:48:35 +08:00
|
|
|
/** 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);
|
2001-04-22 11:05:39 +08:00
|
|
|
super.addNotify ();
|
2001-04-21 10:48:35 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
2001-04-22 11:05:39 +08:00
|
|
|
if (peer != null)
|
|
|
|
{
|
|
|
|
ListPeer l = (ListPeer) peer;
|
|
|
|
l.delItems (index, index);
|
|
|
|
l.add (item, index);
|
|
|
|
}
|
2001-04-21 10:48:35 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
2000-08-03 20:09:41 +08:00
|
|
|
}
|