/*******************************************************************************
 * Copyright (c) 2000, 2008 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.jdt.internal.ui.refactoring;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;

import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;

public abstract class MessageWizardPage extends UserInputWizardPage {

	public static final int STYLE_NONE= 0;
	public static final int STYLE_INFORMATION= 1;
	public static final int STYLE_QUESTION= 2;
	public static final int STYLE_ERROR= 3;
	public static final int STYLE_WARNING= 4;

	private final int fStyle;

	public MessageWizardPage(String pageName, boolean isLastUserPage, int style) {
		super(pageName);
		fStyle= style;
	}

	protected abstract String getMessageString();

	protected Image getMessageImage() {
		switch (fStyle) {
			case STYLE_ERROR :
				return Display.getCurrent().getSystemImage(SWT.ICON_ERROR);
			case STYLE_WARNING :
				return Display.getCurrent().getSystemImage(SWT.ICON_WARNING);
			case STYLE_INFORMATION :
				return Display.getCurrent().getSystemImage(SWT.ICON_INFORMATION);
			case STYLE_QUESTION :
				return Display.getCurrent().getSystemImage(SWT.ICON_QUESTION);
			default :
				return null;
		}
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
	 */
	public void createControl(Composite parent) {
		initializeDialogUnits(parent);
		Composite result= new Composite(parent, SWT.NONE);
		setControl(result);
		GridLayout layout= new GridLayout();
		layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN) * 3 / 2;
		layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
		layout.verticalSpacing= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
		layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING) * 2;
		layout.numColumns= 2;
		result.setLayout(layout);

		Image image= getMessageImage();
		if (image != null) {
			Label label= new Label(result, SWT.NULL);
			image.setBackground(label.getBackground());
			label.setImage(image);
			label.setLayoutData(new GridData(
				GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_BEGINNING));
		}

		String message= getMessageString();
		if (message != null) {
			Label messageLabel= new Label(result, SWT.WRAP);
			messageLabel.setText(message);
			GridData data= new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
			data.widthHint= convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
			messageLabel.setLayoutData(data);
			messageLabel.setFont(result.getFont());
		}
		Dialog.applyDialogFont(result);
	}
}
