diff options
author | Andre Weinand | 2004-05-27 18:26:17 +0000 |
---|---|---|
committer | Andre Weinand | 2004-05-27 18:26:17 +0000 |
commit | 99d4635f73744a55672745bbde99feb5d29521f6 (patch) | |
tree | b057f725dca932e614ac4a9b5024c465b648f372 /bundles/org.eclipse.compare/compare | |
parent | af61c7e86a1cfa12f70ef930399f4b1dcd52bb18 (diff) | |
download | eclipse.platform.team-99d4635f73744a55672745bbde99feb5d29521f6.tar.gz eclipse.platform.team-99d4635f73744a55672745bbde99feb5d29521f6.tar.xz eclipse.platform.team-99d4635f73744a55672745bbde99feb5d29521f6.zip |
adapted to ProgressService (#63608)
Diffstat (limited to 'bundles/org.eclipse.compare/compare')
4 files changed, 12 insertions, 543 deletions
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java deleted file mode 100644 index 7918ba558..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.contentmergeviewer; - -import org.eclipse.swt.widgets.Shell; -import org.eclipse.core.runtime.IProgressMonitor; -import java.lang.reflect.InvocationTargetException; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.operation.ModalContext; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; - - -class DelayedProgressMonitor implements IProgressMonitor { - - ProgressMonitorDialog fProgressDialog; - IProgressMonitor fRealProgressMonitor; - String fTaskName; - String fSubTaskName; - int fTotalWork; - int fWorked; - boolean fCancelable; - Shell fShell; - int fTime; - - - DelayedProgressMonitor(Shell shell) { - fShell= shell; - } - - /* - * @see IProgressMonitor#beginTask(String, int) - */ - public void beginTask(String name, int totalWork) { - fTaskName= name; - fTotalWork= totalWork; - fTime= 0; - } - - /* - * @see IProgressMonitor#done() - */ - public void done() { - if (fRealProgressMonitor != null) - fRealProgressMonitor.done(); - } - - /* - * @see IProgressMonitor#internalWorked(double) - */ - public void internalWorked(double work) { - if (fRealProgressMonitor != null) { - fRealProgressMonitor.internalWorked(work); - } - } - - private void checkTimeout() { - if (fRealProgressMonitor == null) { - - //if (fTime++ < 100) - // return; - - fProgressDialog= new ProgressMonitorDialog(fShell); - fProgressDialog.setCancelable(true); - fProgressDialog.open(); - fRealProgressMonitor= fProgressDialog.getProgressMonitor(); - fRealProgressMonitor.beginTask(fTaskName, fTotalWork); - if (fSubTaskName != null) - fRealProgressMonitor.subTask(fSubTaskName); - fRealProgressMonitor.worked(fWorked); - } - } - - /* - * @see IProgressMonitor#isCanceled() - */ - public boolean isCanceled() { - checkTimeout(); - if (fRealProgressMonitor != null) - return fRealProgressMonitor.isCanceled(); - return false; - } - - /* - * @see IProgressMonitor#setCanceled(boolean) - */ - public void setCanceled(boolean value) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.setCanceled(value); - else - fCancelable= value; - } - - /* - * @see IProgressMonitor#setTaskName(String) - */ - public void setTaskName(String name) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.setTaskName(name); - else - fTaskName= name; - } - - /* - * @see IProgressMonitor#subTask(String) - */ - public void subTask(String name) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.subTask(name); - else - fSubTaskName= name; - } - - /* - * @see IProgressMonitor#worked(int) - */ - public void worked(int work) { - if (fRealProgressMonitor != null) - fRealProgressMonitor.internalWorked(work); - else { - fWorked+= work; - checkTimeout(); - } - } - - public static void run(Shell shell, boolean fork, boolean cancelable, IRunnableWithProgress runnable) - throws InvocationTargetException, InterruptedException { - - DelayedProgressMonitor pm= new DelayedProgressMonitor(shell); - pm.checkTimeout(); - try { - ModalContext.run(runnable, fork, pm, shell.getDisplay()); - } finally { - if (pm.fProgressDialog != null) - pm.fProgressDialog.close(); - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java index b65d1cdad..b69826cef 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java @@ -51,8 +51,10 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IKeyBindingService; import org.eclipse.ui.IWorkbenchPartSite; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.help.WorkbenchHelp; +import org.eclipse.ui.progress.IProgressService; import org.eclipse.compare.*; import org.eclipse.compare.internal.ICompareContextIds; @@ -64,7 +66,6 @@ import org.eclipse.compare.internal.DocLineComparator; import org.eclipse.compare.internal.ComparePreferencePage; import org.eclipse.compare.internal.INavigatable; import org.eclipse.compare.internal.CompareNavigator; -import org.eclipse.compare.internal.TimeoutContext; import org.eclipse.compare.internal.DocumentManager; import org.eclipse.compare.internal.CompareMessages; import org.eclipse.compare.rangedifferencer.*; @@ -167,8 +168,6 @@ public class TextMergeViewer extends ContentMergeViewer { private static final int LW= 1; /** Selects between smartTokenDiff and mergingTokenDiff */ private static final boolean USE_MERGING_TOKEN_DIFF= false; - /** When calculating differences show Progress after this timeout (in milliseconds) */ - private static final int TIMEOUT= 2000; // determines whether a change between left and right is considered incoming or outgoing private boolean fLeftIsLocal; @@ -2252,15 +2251,16 @@ public class TextMergeViewer extends ContentMergeViewer { monitor.done(); } }; + IProgressService progressService= PlatformUI.getWorkbench().getProgressService(); RangeDifference[] e= null; try { - TimeoutContext.run(true, TIMEOUT, getControl().getShell(), runnable); + progressService.run(true, true, runnable); e= (RangeDifference[]) result[0]; } catch (InvocationTargetException ex) { String title= Utilities.getString(bundle, "tooComplexError.title"); //$NON-NLS-1$ String format= Utilities.getString(bundle, "tooComplexError.format"); //$NON-NLS-1$ - String msg= MessageFormat.format(format, new Object[] { Integer.toString(TIMEOUT/1000) } ); + String msg= MessageFormat.format(format, new Object[] { Integer.toString(progressService.getLongOperationTime()/1000) } ); MessageDialog.openError(fComposite.getShell(), title, msg); e= null; } catch (InterruptedException ex) { @@ -2397,15 +2397,16 @@ public class TextMergeViewer extends ContentMergeViewer { monitor.done(); } }; + IProgressService progressService= PlatformUI.getWorkbench().getProgressService(); RangeDifference[] e= null; try { - TimeoutContext.run(true, TIMEOUT, getControl().getShell(), runnable); + progressService.run(true, true, runnable); e= (RangeDifference[]) result[0]; } catch (InvocationTargetException ex) { String title= Utilities.getString(bundle, "tooComplexError.title"); //$NON-NLS-1$ String format= Utilities.getString(bundle, "tooComplexError.format"); //$NON-NLS-1$ - String msg= MessageFormat.format(format, new Object[] { Integer.toString(TIMEOUT/1000) } ); + String msg= MessageFormat.format(format, new Object[] { Integer.toString(progressService.getLongOperationTime()/1000) } ); MessageDialog.openError(fComposite.getShell(), title, msg); e= null; } catch (InterruptedException ex) { diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java deleted file mode 100644 index e8e70af13..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java +++ /dev/null @@ -1,385 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.operation.*; -import org.eclipse.jface.resource.JFaceResources; - -import org.eclipse.core.runtime.*; - -/** - * A modal dialog that displays progress during a long running operation. - */ -public class TimeoutContext { - - private static class ModalContextThread extends Thread { - - private boolean fWorking; - private IRunnableWithProgress fRunnable; - private Throwable fThrowable; - private IProgressMonitor fProgressMonitor; - private boolean fContinueEventDispatching= true; - private Display fDisplay; - - private ModalContextThread(IRunnableWithProgress operation, IProgressMonitor monitor) { - super("TimeoutContext"); //$NON-NLS-1$ - fRunnable= operation; - fProgressMonitor= monitor; - } - - synchronized boolean timeout(Display display) { - fDisplay= display; - return fWorking; - } - - public void run() { - try { - fWorking= true; - if (fRunnable != null) - fRunnable.run(fProgressMonitor); - } catch (InvocationTargetException e) { - fThrowable= e; - } catch (InterruptedException e) { - fThrowable= e; - } catch (RuntimeException e) { - fThrowable= e; - } catch (ThreadDeath e) { - // Make sure to propagate ThreadDeath, or threads will never fully terminate - throw e; - } catch (Error e) { - fThrowable= e; - } finally { - fWorking= false; - - if (fDisplay != null) { - // Make sure that all events in the asynchronous event queue - // are dispatched. - fDisplay.syncExec( - new Runnable() { - public void run() { - // do nothing - } - } - ); - - // Stop event dispatching - fContinueEventDispatching= false; - - // Force the event loop to return from sleep () so that - // it stops event dispatching. - fDisplay.asyncExec(null); - } - } - } - - public void block() { - while (fContinueEventDispatching) - if (!fDisplay.readAndDispatch()) - fDisplay.sleep(); - } - } - - static class ProgressMonitorDialog extends org.eclipse.jface.dialogs.Dialog { - - protected ProgressIndicator fProgressIndicator; - protected Label fTaskLabel; - protected Label fSubTaskLabel; - protected Button fCancel; - protected boolean fEnableCancelButton; - private ProgressMonitor fProgressMonitor; - private Cursor fArrowCursor; - private Cursor fWaitCursor; - private Shell fParentShell; - - private ProgressMonitorDialog(Shell parent, boolean cancelable, ProgressMonitor pm) { - super(parent); - fProgressMonitor= pm; - fParentShell= parent; - fEnableCancelButton= cancelable; - this.setBlockOnOpen(false); - setShellStyle(SWT.BORDER | SWT.TITLE | SWT.APPLICATION_MODAL); // no close button - } - - public boolean close() { - if (fCancel != null && !fCancel.isDisposed()) - fCancel.setCursor(null); - Shell shell= getShell(); - if (shell != null && !shell.isDisposed()) - shell.setCursor(null); - if (fArrowCursor != null) - fArrowCursor.dispose(); - if (fWaitCursor != null) - fWaitCursor.dispose(); - fArrowCursor= null; - fWaitCursor= null; - return super.close(); - } - - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText(JFaceResources.getString("ProgressMonitorDialog.title")); //$NON-NLS-1$ - if (fWaitCursor == null) - fWaitCursor= new Cursor(shell.getDisplay(),SWT.CURSOR_WAIT); - shell.setCursor(fWaitCursor); - } - - protected void createButtonsForButtonBar(Composite parent) { - // cancel button - fCancel= createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, true); - if(fArrowCursor == null) - fArrowCursor= new Cursor(fCancel.getDisplay(),SWT.CURSOR_ARROW); - fCancel.setCursor(fArrowCursor); - fCancel.addListener(SWT.Selection, - new Listener() { - public void handleEvent(Event e) { - if (fCancel != null && !fCancel.isDisposed()) - fCancel.setEnabled(false); - fProgressMonitor.setCanceled(true); - } - } - ); - fCancel.setEnabled(fEnableCancelButton); - } - - protected Control createDialogArea(Composite parent) { - - Composite c= (Composite)super.createDialogArea(parent); - ((GridLayout)c.getLayout()).numColumns= 2; - - // icon - Label iconLabel= new Label(c, SWT.LEFT); - GridData gd= new GridData(); - iconLabel.setLayoutData(gd); - iconLabel.setFont(parent.getFont()); - Image i= JFaceResources.getImageRegistry().get(org.eclipse.jface.dialogs.Dialog.DLG_IMG_INFO); - if (i != null) - iconLabel.setImage(i); - else - iconLabel.setText(JFaceResources.getString("Image_not_found")); //$NON-NLS-1$ - - // label on right hand side of icon - fTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP); - fTaskLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - fTaskLabel.setFont(parent.getFont()); - - // progress indicator - fProgressIndicator= new ProgressIndicator(c); - gd= new GridData(); - gd.heightHint= 15; - gd.horizontalAlignment= GridData.FILL; - gd.grabExcessHorizontalSpace= true; - gd.horizontalSpan= 2; - fProgressIndicator.setLayoutData(gd); - - // label showing current task - fSubTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP); - gd= new GridData(GridData.FILL_HORIZONTAL); - gd.heightHint= 35; - gd.horizontalSpan= 2; - fSubTaskLabel.setLayoutData(gd); - fSubTaskLabel.setFont(parent.getFont()); - - // update with values fProgressMonitor - String s= fProgressMonitor.fTask; - if (s == null) - s= ""; //$NON-NLS-1$ - fTaskLabel.setText(s); - - if (fProgressMonitor.fMaxWork == IProgressMonitor.UNKNOWN) - fProgressIndicator.beginAnimatedTask(); - else - fProgressIndicator.beginTask(fProgressMonitor.fMaxWork); - - if (fProgressMonitor.fSubTask != null) - fSubTaskLabel.setText(fProgressMonitor.fSubTask); - fProgressIndicator.worked(fProgressMonitor.fWorked); - - fProgressMonitor.activate(this); - applyDialogFont(c); - return c; - } - - void beginTask(final String name, final int totalWork) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - fTaskLabel.setText(name); - - if (fProgressIndicator != null && fProgressIndicator.isDisposed()) { - if (totalWork == IProgressMonitor.UNKNOWN) - fProgressIndicator.beginAnimatedTask(); - else - fProgressIndicator.beginTask(totalWork); - } - } - } - ); - } - - void setTaskName(final String name) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fTaskLabel != null && fTaskLabel.isDisposed()) - fTaskLabel.setText(name); - } - } - ); - } - - void setSubTaskName(final String name) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - String n= (name == null) ? "" : name; //$NON-NLS-1$ - if (fSubTaskLabel != null && !fSubTaskLabel.isDisposed()) - fSubTaskLabel.setText(n); - } - } - ); - } - - void done() { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fProgressIndicator != null && !fProgressIndicator.isDisposed()) { - fProgressIndicator.sendRemainingWork(); - fProgressIndicator.done(); - } - } - } - ); - } - - void worked(final double work) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fProgressIndicator != null && !fProgressIndicator.isDisposed()) - fProgressIndicator.worked(work); - } - } - ); - } - - protected Point getInitialSize() { - return getShell().computeSize(450, SWT.DEFAULT); - } - } - - private static class ProgressMonitor implements IProgressMonitor { - - private int fMaxWork; - private String fTask; - private String fSubTask; - private int fWorked; - private ProgressMonitorDialog fProgressMonitorDialog; - private boolean fIsCanceled; - - public void beginTask(String name, int totalWork) { - - fTask= name; - fMaxWork= totalWork; - fWorked= 0; - - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.beginTask(name, totalWork); - } - - void activate(ProgressMonitorDialog dialog) { - fProgressMonitorDialog= dialog; - } - - public void done() { - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.done(); - } - - public void setTaskName(String name) { - fTask= name; - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.setTaskName(name); - } - - public boolean isCanceled() { - return fIsCanceled; - } - - public void setCanceled(boolean b) { - fIsCanceled= b; - } - - public void subTask(String name) { - fSubTask= name; - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.setSubTaskName(name); - } - - public void worked(int work) { - if (fProgressMonitorDialog != null) - internalWorked(work); - else - fWorked+= work; - } - - public void internalWorked(double work) { - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.worked(work); - } - } - - public static void run(boolean cancelable, int timeout, Shell parent, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { - - Display display= parent.getDisplay(); - - ProgressMonitor pm= new ProgressMonitor(); - - ModalContextThread t= new ModalContextThread(runnable, pm); - t.start(); // start the long running operation - - // wait until long operations terminates or timeout - try { - t.join(timeout); - } catch (InterruptedException e) { - // silently ignored - } - - if (t.timeout(display)) { // timeout - ProgressMonitorDialog dialog= new ProgressMonitorDialog(parent, cancelable, pm); - dialog.open(); - t.block(); - dialog.close(); - } - - Throwable throwable= t.fThrowable; - if (throwable != null) { - if (throwable instanceof InvocationTargetException) { - throw (InvocationTargetException) throwable; - } else if (throwable instanceof InterruptedException) { - throw (InterruptedException) throwable; - } else if (throwable instanceof OperationCanceledException) { - throw new InterruptedException(throwable.getMessage()); - } else { - throw new InvocationTargetException(throwable); - } - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java index b2b0fdd2a..d73579cc7 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java @@ -22,6 +22,7 @@ import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.help.WorkbenchHelp; import org.eclipse.jface.viewers.Viewer; @@ -37,7 +38,6 @@ import org.eclipse.compare.*; import org.eclipse.compare.internal.CompareUIPlugin; import org.eclipse.compare.internal.DiffImage; import org.eclipse.compare.internal.ICompareContextIds; -import org.eclipse.compare.internal.TimeoutContext; import org.eclipse.compare.internal.Utilities; import org.eclipse.compare.structuremergeviewer.*; @@ -48,9 +48,7 @@ import org.eclipse.compare.structuremergeviewer.*; * resources. */ /* package */ class PreviewPatchPage extends WizardPage { - - static final int GUESS_TIMEOUT= 1500; // show progress after 1.5sec of fuzz factor guessing - + /** * Used with CompareInput */ @@ -369,7 +367,8 @@ import org.eclipse.compare.structuremergeviewer.*; final int strip= getStripPrefixSegments(); final int[] result= new int[1]; try { - TimeoutContext.run(true, GUESS_TIMEOUT, getControl().getShell(), + PlatformUI.getWorkbench().getProgressService().run(true, true, + //TimeoutContext.run(true, GUESS_TIMEOUT, getControl().getShell(), new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { result[0]= guess(patcher, monitor, strip); |