/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.draw2d;

import java.io.IOException;
import java.io.InputStream;

import org.eclipse.swt.graphics.Image;

/**
 * A Checkbox is a toggle figure which toggles between the checked and unchecked figures
 * to simulate a check box. A check box contains a text label to represent it.
 */
public final class CheckBox 
	extends Toggle 
{

private Label label = null;

static final Image
	UNCHECKED = createImage("images/checkboxenabledoff.gif"), //$NON-NLS-1$
	CHECKED = createImage("images/checkboxenabledon.gif"); //$NON-NLS-1$

private static Image createImage(String name) {
	InputStream stream = CheckBox.class.getResourceAsStream(name);
	Image image = new Image(null, stream);
	try {
		stream.close();
	} catch (IOException ioe) {
	}
	return image;
}

/**
 * Constructs a CheckBox with no text.
 * 
 * @since 2.0
 */
public CheckBox() {
	this(""); //$NON-NLS-1$
}

/**
 * Constructs a CheckBox with the passed text in its label.
 * @param text The label text
 * @since 2.0
 */
public CheckBox(String text) {
	setContents(label = new Label(text, UNCHECKED));
}

/**
 * Adjusts CheckBox's icon depending on selection status.
 * 
 * @since 2.0
 */
protected void handleSelectionChanged() {
	if (isSelected())
		label.setIcon(CHECKED);
	else
		label.setIcon(UNCHECKED);
}

/**
 * Initializes this Clickable by setting a default model and adding a clickable event
 * handler for that model. Also adds a ChangeListener to update icon when  selection
 * status changes.
 * 
 * @since 2.0
 */
protected void init() {
	super.init();
	addChangeListener(new ChangeListener () {
		public void handleStateChanged(ChangeEvent changeEvent) { 
			if (changeEvent.getPropertyName().equals(ButtonModel.SELECTED_PROPERTY))
				handleSelectionChanged();
		}
	});
}

}
