/* ItemSelector.java
 * -----------------
 * Description: ItemSelector is a Widget for selecting a subgroup of items in
 *	a given group of items fed as input.
 * Author: Olivier Diotte
 * Created on: 2010/09/12
 * Last update: 2011/01/15
 * Licence: Unknown
 * */

package ca.diotte.client.ItemSelectorWidget;

import ca.diotte.client.ItemSelectorWidget.ItemElement;

import ca.diotte.client.ItemSelectorWidget.ItemsListPanel;
import ca.diotte.client.ItemSelectorWidget.SelectedItemsListPanel;

import com.google.gwt.user.client.ui.VerticalPanel;


/*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 ItemSelector
		extends VerticalPanel
		{
	private ItemsListPanel itmLstPanel;
	private SelectedItemsListPanel selItmLstPanel;

	/* Constructors
	 * ------------*/
	public ItemSelector() {
		this(null);
	}

	public ItemSelector(String[] items) {
		itmLstPanel = new ItemsListPanel(new ItemSelectionHandler());
		selItmLstPanel = new SelectedItemsListPanel(new ItemDeselectionHandler());

		if (items != null) {
			for (int i = 0; i < items.length; i++) {
				itmLstPanel.add(new ItemElement(null, items[i]));
			}
		}

		add(itmLstPanel);
		add(selItmLstPanel);
	}


	/* Callbacks
	 * ---------*/
	class ItemSelectionHandler implements ItemsListPanel.SelectionChangeEvent {
		public void onSelectionChange(ItemElement src) {
			GWT.log("selection changed!");
			if (src.getSelected()) {
GWT.log("1. selItmLstPanel: add");
				selItmLstPanel.add(src);
GWT.log("2. selItmLstPanel: add");
			} else {
				selItmLstPanel.remove(src);
			}
		}
	}

	class ItemDeselectionHandler
			implements SelectedItemsListPanel.ItemDeselectionEvent {
		public void onDeselection(SelectedItemElement src) {
			GWT.log("onDeselection called! src="+src);
			selItmLstPanel.remove(src);
			itmLstPanel.unselectItem(src.getItem());
		}
	}
}
