2001-05-03 Mo DeJong <mdejong@redhat.com>
[official-gcc.git] / libjava / java / awt / List.java
blobf3d5e4becfa86d8ffc1132ff444ed1521b57c560
1 /* Copyright (C) 2000, 2001 Free Software Foundation
3 This file is part of libgcj.
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
7 details. */
9 package java.awt;
11 import java.awt.peer.ListPeer;
12 import java.awt.event.*;
13 import java.util.Vector;
15 /**
16 * @author Tom Tromey <tromey@redhat.com>
17 * @date April 17, 2001
18 * Status: incomplete
21 public class List extends Component implements ItemSelectable
23 /** Creates a new scrolling list with four rows.
24 * Initially, multiple selections are not allowed.
26 public List ()
28 this (4, false);
31 /** Create a new scrolling list with the indicated number of rows.
32 * Initially, multiple selections are not allowed.
33 * @param rows Number of rows
35 public List (int rows)
37 this (rows, false);
40 /** Create a new scrolling list with the indicated number of rows.
41 * @param rows Number of rows
42 * @param multiple True if multiple selections allowed
44 public List (int rows, boolean multiple)
46 this.rows = rows;
47 this.multipleMode = multiple;
50 /** Create the peer if it does not already exist. */
51 public void addNotify ()
53 if (peer != null)
54 peer = getToolkit ().createList (this);
55 super.addNotify ();
58 public int getItemCount ()
60 return items.size ();
63 /** @deprecated Use getItemCount() instead. */
64 public int countItems ()
66 return getItemCount ();
69 public String getItem (int index)
71 return (String) items.elementAt (index);
74 public String[] getItems ()
76 String[] els = new String[items.size ()];
77 items.copyInto (els);
78 return els;
81 public void add (String item)
83 add (item, items.size ());
86 /** @deprecated Use add() instead. */
87 public void addItem (String item)
89 add (item);
92 public void add (String item, int index)
94 items.insertElementAt (item, index);
95 if (peer != null)
97 ListPeer l = (ListPeer) peer;
98 l.add (item, index);
102 /** @deprecated Use add() instead. */
103 public void addItem (String item, int index)
105 add (item, index);
108 public void replaceItem (String item, int index)
110 items.setElementAt (item, index);
111 if (peer != null)
113 ListPeer l = (ListPeer) peer;
114 l.delItems (index, index);
115 l.add (item, index);
119 public void removeAll ()
121 items.clear ();
122 if (peer != null)
124 ListPeer l = (ListPeer) peer;
125 l.removeAll ();
129 /** @deprecated Use removeAll() instead. */
130 public void clear ()
132 removeAll ();
135 public void remove (String item)
137 remove (items.indexOf (item));
140 public void remove (int index)
142 items.removeElementAt (index);
143 if (peer != null)
145 ListPeer l = (ListPeer) peer;
146 l.delItems (index, index);
150 /** @deprecated Use remove() instead. */
151 public void delItem (int index)
153 remove (index);
156 public int getSelectedIndex ()
158 if (peer != null)
160 ListPeer l = (ListPeer) peer;
161 selected = l.getSelectedIndexes ();
164 if (selected == null || selected.length > 1)
165 return -1;
166 return selected[0];
169 public int[] getSelectedIndexes ()
171 if (peer != null)
173 ListPeer l = (ListPeer) peer;
174 selected = l.getSelectedIndexes ();
176 return selected;
179 public String getSelectedItem ()
181 int i = getSelectedIndex ();
182 return i == -1 ? null : (String) items.elementAt (i);
185 public String[] getSelectedItems ()
187 int[] is = getSelectedIndexes ();
188 if (is == null)
189 return null;
190 String[] r = new String[is.length];
191 for (int i = 0; i < is.length; ++i)
192 r[i] = (String) items.elementAt (is[i]);
193 return r;
196 public Object[] getSelectedObjects ()
198 return getSelectedItems ();
201 public void select (int index)
203 if (peer != null)
205 ListPeer l = (ListPeer) peer;
206 l.select (index);
208 else if (selected == null)
210 selected = new int[1];
211 selected[0] = index;
213 else
215 int i;
216 for (i = 0; i < selected.length; ++i)
218 if (selected[i] == index)
219 return;
220 if (selected[i] > index)
221 break;
224 int[] ns = new int[selected.length + 1];
225 System.arraycopy (selected, 0, ns, 0, i);
226 ns[i] = index;
227 System.arraycopy (selected, i, ns, i + 1, selected.length - i);
229 selected = ns;
233 public void deselect (int index)
235 if (peer != null)
237 ListPeer l = (ListPeer) peer;
238 l.deselect (index);
240 else if (selected != null)
242 int i;
243 for (i = 0; i < selected.length; ++i)
245 if (selected[i] == index)
246 break;
248 if (i < selected.length)
250 int[] ns = new int[selected.length - 1];
251 System.arraycopy (selected, 0, ns, 0, i);
252 System.arraycopy (selected, i + 1, ns, i, selected.length - i);
253 selected = ns;
258 public boolean isIndexSelected (int index)
260 int[] is = getSelectedIndexes ();
261 for (int i = 0; i < is.length; ++i)
263 if (is[i] == index)
264 return true;
266 return false;
269 /** @deprecated Use isIndexSelected(). */
270 public boolean isSelected (int index)
272 return isIndexSelected (index);
275 public int getRows ()
277 return rows;
280 public boolean isMultipleMode ()
282 return multipleMode;
285 /** @deprecated Use isMultipleMode(). */
286 public boolean allowsMultipleSelections ()
288 return isMultipleMode ();
291 public void setMultipleMode (boolean multiple)
293 this.multipleMode = multiple;
294 if (peer != null)
296 ListPeer l = (ListPeer) peer;
297 l.setMultipleMode (multiple);
301 /** @deprecated Use setMultipleMode(). */
302 public void setMultipleSelections (boolean multiple)
304 setMultipleMode (multiple);
307 public int getVisibleIndex ()
309 return visibleIndex;
312 public void makeVisible (int index)
314 visibleIndex = index;
315 if (peer != null)
317 ListPeer l = (ListPeer) peer;
318 l.makeVisible (index);
322 public Dimension getPreferredSize (int rows)
324 return null; // FIXME
327 /** @deprecated Use getPreferredSize(int). */
328 public Dimension preferredSize (int rows)
330 return getPreferredSize (rows);
333 public Dimension getPreferredSize ()
335 return null; // FIXME
338 /** @deprecated Use getPreferredSize(). */
339 public Dimension preferredSize ()
341 return getPreferredSize ();
344 public Dimension getMinimumSize (int rows)
346 return null; // FIXME
349 /** @deprecated Use getMinimumSize(int). */
350 public Dimension minimumSize (int rows)
352 return getMinimumSize (rows);
355 public Dimension getMinimumSize ()
357 return null; // FIXME
360 /** @deprecated Use getMinimumSize(). */
361 public Dimension minimumSize ()
363 return getMinimumSize ();
366 public void addItemListener (ItemListener listen)
368 item_listeners = AWTEventMulticaster.add (item_listeners, listen);
371 public void removeItemListener (ItemListener listen)
373 item_listeners = AWTEventMulticaster.remove (item_listeners, listen);
376 public void addActionListener (ActionListener listen)
378 action_listeners = AWTEventMulticaster.add (action_listeners, listen);
381 public void removeActionListener (ActionListener listen)
383 action_listeners = AWTEventMulticaster.remove (action_listeners, listen);
386 protected void processEvent (AWTEvent e)
388 if (e instanceof ItemEvent)
389 processItemEvent ((ItemEvent) e);
390 else if (e instanceof ActionEvent)
391 processActionEvent ((ActionEvent) e);
392 else
393 super.processEvent (e);
396 protected void processItemEvent (ItemEvent e)
398 if (item_listeners != null)
399 item_listeners.itemStateChanged (e);
402 protected void processActionEvent (ActionEvent e)
404 if (action_listeners != null)
405 action_listeners.actionPerformed (e);
408 protected String paramString ()
410 return ("List[multiple=" + multipleMode
411 + ",rows=" + rows
412 + "]");
415 /** @deprecated */
416 public void delItems (int start, int end)
418 for (int i = end; i >= start; --i)
419 items.removeElementAt (i);
420 if (peer != null)
422 ListPeer l = (ListPeer) peer;
423 l.delItems (start, end);
427 // Vector of items in the list.
428 private Vector items;
429 // True if multiple selection mode enabled.
430 private boolean multipleMode;
431 // Number of rows.
432 private int rows;
433 // Array of indices of selected items. When there is no peer, we
434 // maintain this in place. When there is a peer, the peer maintains
435 // the list and we ask for it whenever needed.
436 private int[] selected;
437 // Value used by makeVisible().
438 private int visibleIndex;
440 // Listeners.
441 private ActionListener action_listeners;
442 private ItemListener item_listeners;