/* class DefaultComboBoxModel
*
* Copyright (C) 2001, 2002 R M Pitman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package charvax.swing;
import java.util.ArrayList;
import java.util.Vector;
/**
* The default model for combo boxes.
*/
public class DefaultComboBoxModel
extends AbstractListModel
implements MutableComboBoxModel
{
/** Default constructor
*/
public DefaultComboBoxModel() {
super();
}
/** Constructs a DefaultComboBoxModel object initialized with a vector.
*/
public DefaultComboBoxModel(Vector<?> items_) {
super();
for (int i=0; i<items_.size(); i++) {
_list.add(items_.elementAt(i));
}
if (getSize() > 0)
_selectedItem = _list.get(0);
}
/** Constructs a DefaultComboBoxModel object initialized with an array
* of objects.
*/
public DefaultComboBoxModel(Object[] items_) {
super();
for (int i=0; i<items_.length; i++) {
_list.add(items_[i]);
}
if (getSize() > 0)
_selectedItem = _list.get(0);
}
/** Returns the value at the specified index.
*/
public Object getElementAt(int index_) {
return _list.get(index_);
}
/** Returns the length of the list.
*/
public int getSize() {
return _list.size();
}
/** Returns true if the specified element is in the list.
*/
public boolean contains(Object elem_) {
return _list.contains(elem_);
}
/** Inserts the specified object at the specified position in this list.
public void add(int index_, Object obj_) {
_list.add(index_, obj_);
super.fireContentsChanged(this, index_, index_);
}
*/
/** Returns the index of the first occurrence of the specified object.
*/
public int indexOf(Object elem_) {
return _list.indexOf(elem_);
}
// The following two methods implement the ComboBoxModel interface
/** Return the selected item.
*/
public Object getSelectedItem() {
return _selectedItem;
}
/** Set the selected item
*/
public void setSelectedItem(Object anItem_) {
_selectedItem = anItem_;
}
// The following methods implement the MutableComboBoxModel interface.
/** Add the specified object to the end of the list.
*/
public void addElement(Object obj_) {
_list.add(obj_);
super.fireContentsChanged(this, _list.size(), _list.size());
if (getSize() == 1)
_selectedItem = obj_;
}
/** Deletes the component at the specified index.
*/
public void removeElementAt(int index_) {
if (_selectedItem == _list.get(index_)) {
/* If the selected item is being removed, replace it with the
* item above it, unless the item being removed is first in the
* list.
*/
if (index_ == 0)
_selectedItem = (getSize() == 1) ? null : _list.get(1);
else
_selectedItem = _list.get(index_ - 1);
}
_list.remove(index_);
super.fireIntervalRemoved(this, index_, index_);
}
/** Removes all elements from this list and sets its size to zero.
*/
public void removeAllElements() {
int size = _list.size();
_list.clear();
_selectedItem = null;
super.fireIntervalRemoved(this, 0, size - 1);
}
/** Insert an item at the specified index.
*/
public void insertElementAt(Object obj_, int index_) {
_list.add(index_, obj_);
super.fireIntervalAdded(this, index_, index_);
if (getSize() == 1)
_selectedItem = obj_;
}
/** Remove the specified object from the model.
*/
public void removeElement(Object obj_) {
int index = _list.indexOf(obj_);
if (index >= 0)
this.removeElementAt(index);
}
//====================================================================
// INSTANCE VARIABLES
private ArrayList<Object> _list = new ArrayList<Object>();
private Object _selectedItem;
}