/*******************************************************************************
 * Copyright (c) 2011 SAP AG, Walldorf.
 * 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:
 *     SAP AG - initial API and implementation
 *******************************************************************************/
package org.eclipse.platform.discovery.ui.test.comp.internal.pageobjects;

import static org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable.syncExec;

import java.util.Arrays;

import org.eclipse.platform.discovery.ui.internal.view.ViewProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swtbot.swt.finder.results.BoolResult;
import org.eclipse.swtbot.swt.finder.results.VoidResult;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotToolbarButton;
import org.eclipse.ui.forms.widgets.FormToolkit;

public class ViewProgressMonitorPageObject extends InShellPageObject
{
	private static final String TEST_BUTTON_TEXT = "ButtonToDisable";
	private ViewProgressMonitor testMonitor;

	@Override
	protected void createContent(final Shell parent, final FormToolkit formToolkit)
	{
		parent.setLayout(new FillLayout(SWT.VERTICAL));
		final Button buttonToDisable = formToolkit.createButton(parent, TEST_BUTTON_TEXT, SWT.PUSH);
		buttonToDisable.setText(TEST_BUTTON_TEXT);
		testMonitor = new ViewProgressMonitor(parent, Arrays.asList(new Control[] { buttonToDisable }));
	}

	public void beginTask(final String name, final int totalWork)
	{
		syncExec(new VoidResult()
		{
			@Override
			public void run()
			{
				testMonitor.beginTask(name, totalWork);
			}
		});
	}

	public boolean isControlsEnabled()
	{
		return bot().button().isEnabled();
	}

	public void done()
	{
		syncExec(new VoidResult()
		{
			@Override
			public void run()
			{
				testMonitor.done();
			}
		});
	}

	public void cancel()
	{
		cancelButton().click();
	}

	private SWTBotToolbarButton cancelButton()
	{
		return bot().toolbarButton();
	}

	public boolean isCanceled()
	{
		return syncExec(new BoolResult()
		{
			
			@Override
			public Boolean run()
			{
				return testMonitor.isCanceled();
			}
		});
	}
}
