/******************************************************************************* * Copyright (c) 2003, 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 - Initial API and implementation *******************************************************************************/ package org.eclipse.ui.progress; import org.eclipse.jface.operation.IRunnableContext; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Shell; /** * The progress service is the primary interface to the workbench progress * support. It can be obtained from the workbench and then used to show progress * for both background operations and operations that run in the UI thread. * <p> * All methods on the progress service must be called from the UI thread. * </p> * <p> * This service can be acquired from your service locator: * * <pre> * IProgressService service = (IProgressService) getSite().getService( * IProgressService.class); * </pre> * * <ul> * <li>This service is available globally.</li> * </ul> * </p> * <p> * <strong>NOTE</strong> The progress service must be referenced at least once * before it will become the progress provider for the {@link IJobManager} in * the workbench. This connection is done lazily so that RCP applications will * not have to use the {@link IProgressService} as the {@link ProgressProvider} * to the jobs framework if they do not wish to reference it. * </p> * * @see org.eclipse.ui.IWorkbench#getProgressService() * @see IJobManager#setProgressProvider(org.eclipse.core.runtime.jobs.ProgressProvider) * @see org.eclipse.ui.services.IServiceLocator#getService(Class) * * @since 3.0 * @noimplement This interface is not intended to be implemented by clients. */ public interface IProgressService extends IRunnableContext { /** * The time at which an operation becomes considered a long operation. Used * to determine when the busy cursor will be replaced with a progress * monitor. * * @return int * @see IProgressService#busyCursorWhile(IRunnableWithProgress) */ public int getLongOperationTime(); /** * Register the ImageDescriptor to be the icon used for all jobs that belong * to family within the workbench. * * @param icon * ImageDescriptor that will be used when the job is being * displayed * @param family * The family to associate with * @see Job#belongsTo(Object) */ public void registerIconForFamily(ImageDescriptor icon, Object family); /** * Runs the given operation in the UI thread using the given runnable * context. The given scheduling rule, if any, will be acquired for the * duration of the operation. If the rule is not available when this method * is called, a progress dialog will be displayed that gives users control * over the background processes that may be blocking the runnable from * proceeding. * <p> * This method can act as a wrapper for uses of <tt>IRunnableContext</tt> * where the <tt>fork</tt> parameter was <tt>false</tt>. * <p> * Note: Running long operations in the UI thread is generally not * recommended. This can result in the UI becoming unresponsive for the * duration of the operation. Where possible, <tt>busyCursorWhile</tt> * should be used instead. * </p> * <p> * Modal dialogs should also be avoided in the runnable as there will * already be a modal progress dialog open when this operation runs. * </p> * * @see org.eclipse.jface.dialogs.Dialog * @see org.eclipse.swt.SWT#APPLICATION_MODAL * * @param context * The runnable context to run the operation in * @param runnable * The operation to run * @param rule * A scheduling rule, or <code>null</code> * */ public void runInUI(IRunnableContext context, IRunnableWithProgress runnable, ISchedulingRule rule); /** * Get the icon that has been registered for a Job by checking if the job * belongs to any of the registered families. * * @param job * @return Icon or <code>null</code> if there isn't one. * @see IProgressService#registerIconForFamily(ImageDescriptor,Object) */ public Image getIconFor(Job job); /** * Set the cursor to busy and run the runnable in a non-UI Thread. The * calling thread will be blocked for the duration of the execution of the * supplied runnable. * * After the cursor has been running for <code>getLongOperationTime()</code> * replace it with a ProgressMonitorDialog so that the user may cancel. Do * not open the ProgressMonitorDialog if there is already a modal dialog * open. * * @param runnable * The runnable to execute and show the progress for. * @see IProgressService#getLongOperationTime */ public void busyCursorWhile(IRunnableWithProgress runnable); /** * This specialization of IRunnableContext#run(boolean, boolean, * IRunnableWithProgress) might run the runnable asynchronously if * <code>fork</code> is <code>true</code>. * * @since 3.2 */ public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable); /** * Open a dialog on job when it starts to run and close it when the job is * finished. Wait for ProgressManagerUtil#SHORT_OPERATION_TIME before * opening the dialog. Do not open if it is already done or if the user has * set a preference to always run in the background. * * Parent the dialog from the shell. * * @param shell * The Shell to parent the dialog from or <code>null</code> if * the active shell is to be used. * @param job * The Job that will be reported in the dialog. job must not be * <code>null</code>. */ public void showInDialog(Shell shell, Job job); }