/*******************************************************************************
 *  Copyright (c) 2008, 2012 Oracle. 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: Oracle. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jpt.common.ui.internal.util;

import org.eclipse.core.runtime.Assert;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Button;

/**
 * A default implementation of <code>LabeledControl</code> that updates a
 * <code>Button</code> when required.
 *
 * @version 3.3
 * @since 2.0
 */
@SuppressWarnings("nls")
public final class LabeledButton implements LabeledControl
{
	/**
	 * The button to be updated with a different icon and text.
	 */
	private final Button button;

	/**
	 * Creates a new <code>LabeledButton</code>.
	 *
	 * @param button The button that will have its text and icon updated when
	 * required
	 * @exception AssertionFailedException If the given <code>Button</code> is
	 * <code>null</code>
	 */
	public LabeledButton(Button button) {
		super();

		Assert.isNotNull(button, "The button cannot be null");
		this.button = button;
	}

	public void addDisposeListener(DisposeListener disposeListener) {
		this.button.addDisposeListener(disposeListener);
	}

	public void removeDisposeListener(DisposeListener disposeListener) {
		this.button.removeDisposeListener(disposeListener);
	}

	/*
	 * (non-Javadoc)
	 */
	public void setImage(Image image) {
		if (!this.button.isDisposed()) {
			this.button.setImage(image);
			this.button.getParent().layout(true);
		}
	}

	/*
	 * (non-Javadoc)
	 */
	public void setText(String text) {
		if (!this.button.isDisposed()) {
			this.button.setText(text);
			this.button.getParent().layout(true);
		}
	}
}
