$package("js.ui.list");

js.ui.list.AbstractListModel = function(){
	this.delegate = new js.lang.Array();
	this.selectionModel = new js.ui.list.AbstractListSelectionModel();
}
js.ui.list.AbstractListModel.prototype = new js.lang.BaseObject();

js.ui.list.AbstractListModel.prototype.getOwner = function(){ 
	return this.owner; 
}
js.ui.list.AbstractListModel.prototype.setOwner = function(value){ 
	this.owner = value; 
}
js.ui.list.AbstractListModel.prototype.size = function(){ 
	return this.delegate.length; 
}
js.ui.list.AbstractListModel.prototype.elementAt = 
js.ui.list.AbstractListModel.prototype.getElementAt = function(index){ 
	return this.delegate[index]; 
}

js.ui.list.AbstractListModel.prototype.contains = function(elem){ 
	return this.delegate.contains(elem); 
}
js.ui.list.AbstractListModel.prototype.indexOf = function(elem){ 
	return this.delegate.indexOf(elem, 0); 
}
js.ui.list.AbstractListModel.prototype.lastIndexOf = function(elem){ 
	return this.delegate.lastIndexOf(elem); 
}
js.ui.list.AbstractListModel.prototype.firstElement = function(){ 
	return this.delegate.getFirstItem(); 
}
js.ui.list.AbstractListModel.prototype.lastElement = function(){ 
	return this.delegate.getLastItem(); 
}
js.ui.list.AbstractListModel.prototype.setElementAt = function(elem, index){
	this.delegate.setItemAt(elem,index); 
}
js.ui.list.AbstractListModel.prototype.removeElementAt = function(index){ 
	this.delegate.removeItemAt(index); 
	this.selectionModel.removeItemAt(index);
}
js.ui.list.AbstractListModel.prototype.insertElementAt = function(elem, index){ 
	this.delegate.insertItem(elem, index); 
	this.selectionModel.insertSelected(false, index);
}
js.ui.list.AbstractListModel.prototype.add = 
js.ui.list.AbstractListModel.prototype.addElement = function(elem){
	this.delegate.addItem(elem); 
}
js.ui.list.AbstractListModel.prototype.remove = 
js.ui.list.AbstractListModel.prototype.removeElement = function(elem){ 
	var idx = this.indexOf(elem);
	this.removeElementAt(idx);
}
js.ui.list.AbstractListModel.prototype.removeAllElements = function(){ 
	this.clear(); 
}
js.ui.list.AbstractListModel.prototype.toArray = function(){
	return this.delegate;
}
js.ui.list.AbstractListModel.prototype.get = function(index){ 
	return this.delegate.getItem(index); 
}
js.ui.list.AbstractListModel.prototype.set = function(index, elem){ 
	this.delegate.setItemAt(elem,index); 
}
js.ui.list.AbstractListModel.prototype.clear = function(){ 
	this.delegate.clear();
	this.selectionModel.clearSelection();
}
js.ui.list.AbstractListModel.prototype.removeRange = function(fromIndex, toIndex){}

js.ui.list.AbstractListModel.prototype.getSelectedValue = 
js.ui.list.AbstractListModel.prototype.getFirstSelectedItem = function(){
	var idx = this.getSelectedIndex();
	if(idx>=0 && idx<this.Size())
		return this.getElementAt(idx);
	else return null;
}
js.ui.list.AbstractListModel.prototype.getSelectedIndex = function(){
	return this.selectionModel.getSelectedIndex();
}
js.ui.list.AbstractListModel.prototype.getSelectedIndices = function(){
	return this.selectionModel.getSelectedIndices();
}
js.ui.list.AbstractListModel.prototype.getSelectedValues = function(){
	var retArray = new Array();
	var selectedIndices = this.selectionModel.getSelectedIndices();
	for(var i = 0; i < selectedIndices.length; i++){
	
		retArray.addItem(this.getElementAt(selectedIndices[i]));
	}
	return retArray;
}
js.ui.list.AbstractListModel.prototype.setMultiSelected = function(value){
	if(value)
		this.selectionModel.setSelectionMode(2);
	else
		this.selectionModel.setSelectionMode(0);
}

js.ui.list.AbstractListModel.prototype.getMultiSelected = function(){
	return this.selectionModel.getSelectionMode()!=0;
}

js.ui.list.AbstractListModel.prototype.isSelected = function(idx){
	return this.selectionModel.isSelected(idx);
}
js.ui.list.AbstractListModel.prototype.isSelectedItem = function(item){
	var idx = this.delegate.indexOf(item, 0);
	return this.selectionModel.isSelected(idx);
}
js.ui.list.AbstractListModel.prototype.setSelected = function(idx, value){
	this.selectionModel.setSelected(idx, value);
}
js.ui.list.AbstractListModel.prototype.clearSelection = function(){
	this.selectionModel.clearSelection();
}
js.ui.list.AbstractListModel.prototype.selectAll = function(){
	for(var i=0; i<this.delegate.length; i++){
		this.setSelected(i, true);
	}
}
js.ui.list.AbstractListModel.prototype.setSelectedValue = function(anObject, value){
    if(anObject == null)
		this.clearSelection();
    else {
		var idx = this.indexOf(anObject);
		this.setSelected(idx, value);
    }
}

