/* ItemElement.java
 * ----------------
 * Description: ItemElement is the class used to represent
 * 	ItemSelector's elements.
 * Author: Olivier Diotte
 * Creation date: 2010/09/12
 * Last update: 2011/01/15
 * Licence: Unknown
 */

package ca.diotte.client.ItemSelectorWidget;

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.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;

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

public class ItemElement
		extends HorizontalPanel
		//implements HasValueChangeHandlers<Boolean>
		{
	private SelectionChangeEvent selChangeHandler;
	private String item;
	private CheckBox selectBox;
	private Label lbl;

	/* Constructors
	 * ------------*/
	public ItemElement(SelectionChangeEvent handler) {
		this(handler, "");
	}

	public ItemElement(SelectionChangeEvent handler, String item) {
		selChangeHandler = handler;
		this.item = item;
		selectBox = new CheckBox();
		lbl = new Label(item);
		selectBox.addValueChangeHandler(new MyValueChangeHandler<Boolean>());

		this.add(selectBox);
		this.add(lbl);
	}


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

	/* Methods
	 * -------*/
	public class MyValueChangeHandler<Boolean> implements ValueChangeHandler<Boolean> {
		public void
		onValueChange(ValueChangeEvent<Boolean> e) {
			selChangeHandler.onSelectionChange(ItemElement.this);
		}
	}

	public String
	toString() {
		return item;
	}


	/* Getters/setters
	 * ---------------*/
	public boolean
	getSelected() {
		return selectBox.getValue();
	}

	public void
	setSelected(boolean s) {
		selectBox.setValue(s);
	}

	public void
	setHandler(SelectionChangeEvent handler) {
		selChangeHandler = handler;
	}

	public SelectionChangeEvent
	getHandler() {
		return selChangeHandler;
	}
}
