/* SelectedItemsListPanel.java
 * -----------------
 * Description: SelectedItemsListPanel manages the list of items selected
 * 	in ItemSelector.
 * Author: Olivier Diotte
 * Created on: 2010/10/20
 * Last update: 2011/01/16
 * Licence: Unknown
 * */

package ca.diotte.client.ItemSelectorWidget;

import ca.diotte.client.ItemSelectorWidget.SelectedItemElement;

import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ClickEvent;

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

import java.util.LinkedList;
import java.util.Iterator;

public class SelectedItemsListPanel
		extends ScrollPanel
		{
	private final ItemClickHandler itmClickHandler = new ItemClickHandler();
	private ItemDeselectionEvent deselHandler;
	private FlowPanel itemsFPanel;

	/* Constructors
	 * ------------*/
	public SelectedItemsListPanel(ItemDeselectionEvent deselectionHandler) {
		deselHandler = deselectionHandler;
		itemsFPanel = new FlowPanel();
		super.add(itemsFPanel);
	}


	/* Callbacks
	 * --------*/
	public interface ItemDeselectionEvent {
		public void onDeselection(SelectedItemElement deselectedItem);
	}


	/* Handlers
	 * --------*/
	public class ItemClickHandler implements ClickHandler {
		public void onClick(ClickEvent e) {
			GWT.log("Clicked!");
			SelectedItemElement src = (SelectedItemElement)e.getSource();
			deselHandler.onDeselection(src);
		}
	}


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

	public void
	add(ItemElement item) {
GWT.log("SelItmsLstPanel add item=" +item);
		SelectedItemElement selIE = new SelectedItemElement(item);

		itemsFPanel.add(selIE);

//		selIE.addClickHandler(itmClickHandler);
		selIE.addClickHandler(new ItemClickHandler());
	}

	public void
	remove(SelectedItemElement ele) {
		GWT.log("SelectedItemsListPanel.remove called: ele=="+ele);
		itemsFPanel.remove(ele);
		GWT.log("ele attached?" + ((ele.isAttached())?"true":"false"));
	}

	public void
	remove(ItemElement item) {
		GWT.log("2. SelectedItemsListPanel.remove called: item=="+item);
		remove(findElement(item));
	}

	public SelectedItemElement
	findElement(ItemElement item) {
		boolean elementFound = false;
		SelectedItemElement cur = null;

		for (Iterator<Widget> i = itemsFPanel.iterator();
				i.hasNext() && !elementFound; ) {
			cur = (SelectedItemElement)i.next();

			elementFound = (cur.getItem() == item);
		}

		return cur;
	}
}
