/* ItemsListPanel.java
 * -----------------
 * Description: Panel containing the list of items to select from.
 * Author: Olivier Diotte
 * Created on: 2010/11/03
 * Last update: 2011/01/28
 * Licence: Unknown
 * */

package ca.diotte.client.ItemSelectorWidget;

import ca.diotte.client.ItemSelectorWidget.ItemElement;
import ca.diotte.client.ItemSelectorWidget.SelectedItemsListPanel;
import ca.diotte.client.ItemSelectorWidget.ItemSelector.ItemSelectionHandler;

import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.Window;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
import com.google.gwt.event.shared.EventBus;


/*Debug*/
import com.google.gwt.core.client.GWT;

import java.util.LinkedList;
import java.util.Collection;
import java.util.Iterator;
import java.util.ListIterator;

public class ItemsListPanel
		extends ScrollPanel
		{
	private VerticalPanel itemsVPanel;
	private final SelectionChangeHandler itmSelHandler =
			new SelectionChangeHandler();
	private SelectionChangeEvent outItmSelHandler;

	/* Constructors
	 * ------------*/
	public ItemsListPanel(SelectionChangeEvent handler) {
		this(handler, null);
	}

	public ItemsListPanel(SelectionChangeEvent handler, String[] items) {
		outItmSelHandler = handler;
		itemsVPanel = new VerticalPanel();

		super.add(itemsVPanel);
	}


	/* Callbacks
	 * ---------*/
	public interface SelectionChangeEvent {
		void onSelectionChange(ItemElement changedItem);
	}

	public class SelectionChangeHandler
			implements ItemElement.SelectionChangeEvent {
		public void onSelectionChange(ItemElement src) {
GWT.log("1. ItmsLstPanel onSelChange");
			outItmSelHandler.onSelectionChange(src);
GWT.log("2. ItmsLstPanel onSelChange");
		}
	}


	/* Methods
	 * -------*/
	public Iterator<Widget>
	iterator() {
		return itemsVPanel.iterator();
	}

	public boolean
	remove(ItemElement item) {
		return itemsVPanel.remove(item);
	}

	public void
	add(ItemElement item) {
		itemsVPanel.add(item);
		item.setHandler(itmSelHandler);
	}

	public void
	selectItem(ItemElement item) {
		item.setSelected(true);
	}

	public void
	unselectItem(ItemElement item) {
		item.setSelected(false);
	}
}
