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
11 import java
.awt
.peer
.ListPeer
;
12 import java
.awt
.event
.*;
13 import java
.util
.Vector
;
16 * @author Tom Tromey <tromey@redhat.com>
17 * @date April 17, 2001
21 public class List
extends Component
implements ItemSelectable
23 /** Creates a new scrolling list with four rows.
24 * Initially, multiple selections are not allowed.
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
)
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
)
47 this.multipleMode
= multiple
;
50 /** Create the peer if it does not already exist. */
51 public void addNotify ()
54 peer
= getToolkit ().createList (this);
58 public int getItemCount ()
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 ()];
81 public void add (String item
)
83 add (item
, items
.size ());
86 /** @deprecated Use add() instead. */
87 public void addItem (String item
)
92 public void add (String item
, int index
)
94 items
.insertElementAt (item
, index
);
97 ListPeer l
= (ListPeer
) peer
;
102 /** @deprecated Use add() instead. */
103 public void addItem (String item
, int index
)
108 public void replaceItem (String item
, int index
)
110 items
.setElementAt (item
, index
);
113 ListPeer l
= (ListPeer
) peer
;
114 l
.delItems (index
, index
);
119 public void removeAll ()
124 ListPeer l
= (ListPeer
) peer
;
129 /** @deprecated Use removeAll() instead. */
135 public void remove (String item
)
137 remove (items
.indexOf (item
));
140 public void remove (int index
)
142 items
.removeElementAt (index
);
145 ListPeer l
= (ListPeer
) peer
;
146 l
.delItems (index
, index
);
150 /** @deprecated Use remove() instead. */
151 public void delItem (int index
)
156 public int getSelectedIndex ()
160 ListPeer l
= (ListPeer
) peer
;
161 selected
= l
.getSelectedIndexes ();
164 if (selected
== null || selected
.length
> 1)
169 public int[] getSelectedIndexes ()
173 ListPeer l
= (ListPeer
) peer
;
174 selected
= l
.getSelectedIndexes ();
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 ();
190 String
[] r
= new String
[is
.length
];
191 for (int i
= 0; i
< is
.length
; ++i
)
192 r
[i
] = (String
) items
.elementAt (is
[i
]);
196 public Object
[] getSelectedObjects ()
198 return getSelectedItems ();
201 public void select (int index
)
205 ListPeer l
= (ListPeer
) peer
;
208 else if (selected
== null)
210 selected
= new int[1];
216 for (i
= 0; i
< selected
.length
; ++i
)
218 if (selected
[i
] == index
)
220 if (selected
[i
] > index
)
224 int[] ns
= new int[selected
.length
+ 1];
225 System
.arraycopy (selected
, 0, ns
, 0, i
);
227 System
.arraycopy (selected
, i
, ns
, i
+ 1, selected
.length
- i
);
233 public void deselect (int index
)
237 ListPeer l
= (ListPeer
) peer
;
240 else if (selected
!= null)
243 for (i
= 0; i
< selected
.length
; ++i
)
245 if (selected
[i
] == index
)
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
);
258 public boolean isIndexSelected (int index
)
260 int[] is
= getSelectedIndexes ();
261 for (int i
= 0; i
< is
.length
; ++i
)
269 /** @deprecated Use isIndexSelected(). */
270 public boolean isSelected (int index
)
272 return isIndexSelected (index
);
275 public int getRows ()
280 public boolean isMultipleMode ()
285 /** @deprecated Use isMultipleMode(). */
286 public boolean allowsMultipleSelections ()
288 return isMultipleMode ();
291 public void setMultipleMode (boolean multiple
)
293 this.multipleMode
= multiple
;
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 ()
312 public void makeVisible (int index
)
314 visibleIndex
= index
;
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
);
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
416 public void delItems (int start
, int end
)
418 for (int i
= end
; i
>= start
; --i
)
419 items
.removeElementAt (i
);
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
;
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
;
441 private ActionListener action_listeners
;
442 private ItemListener item_listeners
;