Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 155343 Details for
Bug 293098
[Progress] [Wizards] [JFace] Reporting job progress locally in a wizard, modal jobs
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Patch v01
Jobs In Wizard 01.txt (text/plain), 16.87 KB, created by
Prakash Rangaraj
on 2010-01-05 11:45:01 EST
(
hide
)
Description:
Patch v01
Filename:
MIME Type:
Creator:
Prakash Rangaraj
Created:
2010-01-05 11:45:01 EST
Size:
16.87 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jface >Index: src/org/eclipse/jface/wizard/WizardDialog.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java,v >retrieving revision 1.69 >diff -u -r1.69 WizardDialog.java >--- src/org/eclipse/jface/wizard/WizardDialog.java 21 Dec 2009 07:44:04 -0000 1.69 >+++ src/org/eclipse/jface/wizard/WizardDialog.java 5 Jan 2010 16:38:39 -0000 >@@ -305,7 +305,7 @@ > * and <code>false</code> if it should be disabled > * @return the saved UI state > */ >- private Object aboutToStart(boolean enableCancelButton) { >+ private Map aboutToStart(boolean enableCancelButton) { > Map savedState = null; > if (getShell() != null) { > // Save focus control >@@ -932,11 +932,8 @@ > // The operation can only be canceled if it is executed in a separate > // thread. > // Otherwise the UI is blocked anyway. >- Object state = null; >- if (activeRunningOperations == 0) { >- state = aboutToStart(fork && cancelable); >- } >- activeRunningOperations++; >+ Map state = startOperation(fork && cancelable); >+ > try { > if (!fork) { > lockedUI = true; >@@ -945,17 +942,53 @@ > .getDisplay()); > lockedUI = false; > } finally { >- // explicitly invoke done() on our progress monitor so that its >- // label does not spill over to the next invocation, see bug 271530 >- if (getProgressMonitor() != null) { >- getProgressMonitor().done(); >- } >- activeRunningOperations--; >- // Stop if this is the last one >- if (state != null) { >- stopped(state); >+ stopOperation(state); >+ } >+ } >+ >+ /** >+ * @param state >+ * @since 3.6 >+ * @nooverride This method is not intended to be re-implemented or extended by clients. >+ */ >+ protected synchronized void stopOperation(final Map state) { >+ >+ getContents().getDisplay().syncExec(new Runnable() { >+ >+ public void run() { >+ // explicitly invoke done() on our progress monitor so that its >+ // label does not spill over to the next invocation, see bug 271530 >+ if (getProgressMonitor() != null) { >+ getProgressMonitor().done(); >+ } >+ activeRunningOperations--; >+ // Stop if this is the last one >+ if (state != null) { >+ stopped(state); >+ } > } >+ >+ }); >+ } >+ >+ /** >+ * @param enableCancelButton >+ * @return state >+ * @since 3.6 >+ * @nooverride This method is not intended to be re-implemented or extended by clients. >+ */ >+ protected synchronized Map startOperation(final boolean enableCancelButton) { >+ final Map state[] = new Map[1]; >+ if (activeRunningOperations == 0) { >+ getContents().getDisplay().syncExec(new Runnable() { >+ >+ public void run() { >+ state[0] = aboutToStart(enableCancelButton); >+ } >+ }); > } >+ activeRunningOperations++; >+ return state[0]; > } > > /** >@@ -1517,4 +1550,5 @@ > }); > } > } >+ > } >#P org.eclipse.ui.examples.job >Index: src/org/eclipse/ui/examples/jobs/views/DeferredContentProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.examples.job/src/org/eclipse/ui/examples/jobs/views/DeferredContentProvider.java,v >retrieving revision 1.2 >diff -u -r1.2 DeferredContentProvider.java >--- src/org/eclipse/ui/examples/jobs/views/DeferredContentProvider.java 20 Apr 2005 15:13:59 -0000 1.2 >+++ src/org/eclipse/ui/examples/jobs/views/DeferredContentProvider.java 5 Jan 2010 16:38:41 -0000 >@@ -12,19 +12,25 @@ > > import org.eclipse.jface.viewers.AbstractTreeViewer; > import org.eclipse.jface.viewers.Viewer; >+import org.eclipse.ui.IWorkbenchPartSite; > import org.eclipse.ui.model.BaseWorkbenchContentProvider; > import org.eclipse.ui.progress.DeferredTreeContentManager; > > public class DeferredContentProvider extends BaseWorkbenchContentProvider { > > private DeferredTreeContentManager manager; >+ private final IWorkbenchPartSite site; >+ >+ public DeferredContentProvider(IWorkbenchPartSite site) { >+ this.site = site; >+ } > > /* (non-Javadoc) > * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) > */ > public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { > if (viewer instanceof AbstractTreeViewer) { >- manager = new DeferredTreeContentManager(this, (AbstractTreeViewer) viewer); >+ manager = new MyDeferredTreeContentManager((AbstractTreeViewer) viewer, site); > } > super.inputChanged(viewer, oldInput, newInput); > } >Index: src/org/eclipse/ui/examples/jobs/views/LazyTreeView.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.examples.job/src/org/eclipse/ui/examples/jobs/views/LazyTreeView.java,v >retrieving revision 1.2 >diff -u -r1.2 LazyTreeView.java >--- src/org/eclipse/ui/examples/jobs/views/LazyTreeView.java 20 May 2004 15:00:21 -0000 1.2 >+++ src/org/eclipse/ui/examples/jobs/views/LazyTreeView.java 5 Jan 2010 16:38:41 -0000 >@@ -62,7 +62,7 @@ > }); > batchButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); > viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); >- viewer.setContentProvider(new DeferredContentProvider()); >+ viewer.setContentProvider(new DeferredContentProvider(getSite())); > viewer.setLabelProvider(new WorkbenchLabelProvider()); > viewer.setInput(new SlowElement("root")); //$NON-NLS-1$ > viewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH)); >Index: src/org/eclipse/ui/examples/jobs/views/MyDeferredTreeContentManager.java >=================================================================== >RCS file: src/org/eclipse/ui/examples/jobs/views/MyDeferredTreeContentManager.java >diff -N src/org/eclipse/ui/examples/jobs/views/MyDeferredTreeContentManager.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/ui/examples/jobs/views/MyDeferredTreeContentManager.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,65 @@ >+package org.eclipse.ui.examples.jobs.views; >+ >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.core.runtime.NullProgressMonitor; >+import org.eclipse.jface.viewers.AbstractTreeViewer; >+import org.eclipse.swt.widgets.Display; >+import org.eclipse.ui.IWorkbenchPartSite; >+import org.eclipse.ui.progress.DeferredTreeContentManager; >+import org.eclipse.ui.progress.PendingUpdateAdapter; >+ >+public class MyDeferredTreeContentManager extends DeferredTreeContentManager { >+ >+ private final AbstractTreeViewer viewer; >+ private PendingUpdateAdapter updateAdapter; >+ >+ public MyDeferredTreeContentManager(AbstractTreeViewer viewer, IWorkbenchPartSite site) { >+ super(viewer, site); >+ this.viewer = viewer; >+ } >+ >+ int total; >+ int worked; >+ >+ public IProgressMonitor getProgressMonitorForUpdateJob() { >+ return new MyProgressMonitor(); >+ }; >+ >+ protected void updateStatus() { >+ Display.getDefault().syncExec(new Runnable() { >+ >+ public void run() { >+ viewer.update(updateAdapter, new String[] {"label"}); >+ } >+ }); >+ } >+ >+ protected PendingUpdateAdapter createPendingUpdateAdapter() { >+ >+ updateAdapter = new PendingUpdateAdapter() { >+ public String getLabel(Object o) { >+ if(total <= 0) >+ return super.getLabel(o); >+ int percent = ((worked*100)/total); >+ return super.getLabel(o)+" ("+percent+"% done)"; >+ }; >+ }; >+ return updateAdapter; >+ }; >+ >+ >+ class MyProgressMonitor extends NullProgressMonitor{ >+ @Override >+ public void internalWorked(double work) { >+ worked+=work; >+ updateStatus(); >+ } >+ >+ public void beginTask(String name, int totalWork) { >+ total = totalWork; >+ worked = 0; >+ updateStatus(); >+ } >+ } >+ >+} >Index: src/org/eclipse/ui/examples/jobs/views/SlowElementAdapter.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.examples.job/src/org/eclipse/ui/examples/jobs/views/SlowElementAdapter.java,v >retrieving revision 1.4 >diff -u -r1.4 SlowElementAdapter.java >--- src/org/eclipse/ui/examples/jobs/views/SlowElementAdapter.java 20 Apr 2005 15:13:59 -0000 1.4 >+++ src/org/eclipse/ui/examples/jobs/views/SlowElementAdapter.java 5 Jan 2010 16:38:44 -0000 >@@ -41,18 +41,25 @@ > if (object instanceof SlowElement) { > Object[] children = ((SlowElement) object).getChildren(); > if (isBatchFetchedChildren()) { >- sleep(4000); >+ monitor.beginTask("updating children", 4); >+ for(int i=0;i<4;i++) { >+ sleep(1000); >+ monitor.worked(1); >+ } > collector.add(children, monitor); > } else { >+ monitor.beginTask("updating children", children.length); > for (int i = 0; i < children.length; i++) { > if (monitor.isCanceled()) { > return; > } > collector.add(children[i], monitor); >- sleep(4000); >+ sleep(1000); >+ monitor.worked(1); > } > } > } >+ monitor.done(); > } > > private void sleep(long mills) { >#P org.eclipse.ui.workbench >Index: Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java,v >retrieving revision 1.146 >diff -u -r1.146 ProgressManager.java >--- Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java 18 Nov 2009 17:30:11 -0000 1.146 >+++ Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java 5 Jan 2010 16:38:47 -0000 >@@ -167,12 +167,12 @@ > * The JobMonitor is the inner class that handles the IProgressMonitor > * integration with the ProgressMonitor. > */ >- class JobMonitor implements IProgressMonitorWithBlocking { >+ public class JobMonitor implements IProgressMonitorWithBlocking { > Job job; > > String currentTaskName; > >- IProgressMonitorWithBlocking listener; >+ IProgressMonitor listener; > > /** > * Create a monitor on the supplied job. >@@ -188,13 +188,18 @@ > * > * @param monitor > */ >- void addProgressListener(IProgressMonitorWithBlocking monitor) { >+ public void addProgressListener(IProgressMonitor monitor) { > listener = monitor; > JobInfo info = getJobInfo(job); >- TaskInfo currentTask = info.getTaskInfo(); >+ final TaskInfo currentTask = info.getTaskInfo(); > if (currentTask != null) { > listener.beginTask(currentTaskName, currentTask.totalWork); >- listener.internalWorked(currentTask.preWork); >+ runInUIThread(new Runnable() { >+ >+ public void run() { >+ listener.internalWorked(currentTask.preWork); >+ } >+ }); > } > } > >@@ -204,13 +209,19 @@ > * @see org.eclipse.core.runtime.IProgressMonitor#beginTask(java.lang.String, > * int) > */ >- public void beginTask(String taskName, int totalWork) { >+ public void beginTask(final String taskName, final int totalWork) { > JobInfo info = getJobInfo(job); > info.beginTask(taskName, totalWork); > refreshJobInfo(info); > currentTaskName = taskName; > if (listener != null) { >- listener.beginTask(taskName, totalWork); >+ Display.getDefault().asyncExec(new Runnable() { >+ >+ public void run() { >+ listener.beginTask(taskName, totalWork); >+ } >+ }); >+ > } > } > >@@ -225,7 +236,12 @@ > info.clearChildren(); > runnableMonitors.remove(job); > if (listener != null) { >- listener.done(); >+ runInUIThread(new Runnable() { >+ >+ public void run() { >+ listener.done(); >+ } >+ }); > } > } > >@@ -234,14 +250,21 @@ > * > * @see org.eclipse.core.runtime.IProgressMonitor#internalWorked(double) > */ >- public void internalWorked(double work) { >+ public void internalWorked(final double work) { > JobInfo info = getJobInfo(job); > if (info.hasTaskInfo()) { > info.addWork(work); > refreshJobInfo(info); > } > if (listener != null) { >- listener.internalWorked(work); >+ >+ runInUIThread(new Runnable() { >+ >+ public void run() { >+ listener.internalWorked(work); >+ } >+ }); >+ > } > } > >@@ -333,8 +356,8 @@ > JobInfo info = getJobInfo(job); > info.setBlockedStatus(null); > refreshJobInfo(info); >- if (listener != null) { >- listener.clearBlocked(); >+ if (listener instanceof IProgressMonitorWithBlocking) { >+ ((IProgressMonitorWithBlocking) listener).clearBlocked(); > } > } > >@@ -347,8 +370,8 @@ > JobInfo info = getJobInfo(job); > info.setBlockedStatus(reason); > refreshJobInfo(info); >- if (listener != null) { >- listener.setBlocked(reason); >+ if (listener instanceof IProgressMonitorWithBlocking) { >+ ((IProgressMonitorWithBlocking) listener).setBlocked(reason); > } > } > } >@@ -641,7 +664,10 @@ > synchronized (runnableMonitors) { > JobMonitor monitor = (JobMonitor) runnableMonitors.get(job); > if (monitor == null) { >- monitor = new JobMonitor(job); >+ monitor = (JobMonitor) jobMonitors.get(job); >+ if (monitor == null) { >+ monitor = new JobMonitor(job); >+ } > runnableMonitors.put(job, monitor); > } > >@@ -1326,6 +1352,17 @@ > > } > >+ private void runInUIThread(Runnable runnable) { >+ Display display = Display.getDefault(); >+ if (display.isDisposed()) >+ return; >+ if (display.getThread() == Thread.currentThread()) { >+ runnable.run(); >+ } else { >+ display.asyncExec(runnable); >+ } >+ } >+ > private class RunnableWithStatus implements Runnable { > > IStatus status = Status.OK_STATUS; >@@ -1388,4 +1425,34 @@ > } > > } >+ >+ Map jobMonitors = new HashMap(); >+ >+ public void registerMonitorForJob(Job job, IProgressMonitor monitor) { >+ jobMonitors.put(job, monitor); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see >+ * org.eclipse.ui.progress.IProgressService#addProgressListenerForJob(org >+ * .eclipse.core.runtime.jobs.Job, >+ * org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ public void addProgressMonitorForJob(Job job, IProgressMonitor monitor) { >+ progressFor(job).addProgressListener(monitor); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see >+ * org.eclipse.ui.progress.IProgressService#removeProgressListenerForJob >+ * (org.eclipse.core.runtime.jobs.Job, >+ * org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ public void removeProgressMonitorForJob(Job job, IProgressMonitor monitor) { >+ // TODO >+ } > } >Index: Eclipse UI/org/eclipse/ui/internal/progress/WorkbenchSiteProgressService.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/WorkbenchSiteProgressService.java,v >retrieving revision 1.37 >diff -u -r1.37 WorkbenchSiteProgressService.java >--- Eclipse UI/org/eclipse/ui/internal/progress/WorkbenchSiteProgressService.java 15 Dec 2009 19:35:06 -0000 1.37 >+++ Eclipse UI/org/eclipse/ui/internal/progress/WorkbenchSiteProgressService.java 5 Jan 2010 16:38:47 -0000 >@@ -424,4 +424,12 @@ > public SiteUpdateJob getUpdateJob() { > return updateJob; > } >+ >+ public void addProgressMonitorForJob(Job job, IProgressMonitor monitor) { >+ getWorkbenchProgressService().addProgressMonitorForJob(job, monitor); >+ } >+ >+ public void removeProgressMonitorForJob(Job job, IProgressMonitor monitor) { >+ getWorkbenchProgressService().removeProgressMonitorForJob(job, monitor); >+ } > } >Index: Eclipse UI/org/eclipse/ui/progress/DeferredTreeContentManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/progress/DeferredTreeContentManager.java,v >retrieving revision 1.62 >diff -u -r1.62 DeferredTreeContentManager.java >--- Eclipse UI/org/eclipse/ui/progress/DeferredTreeContentManager.java 10 Sep 2009 08:10:04 -0000 1.62 >+++ Eclipse UI/org/eclipse/ui/progress/DeferredTreeContentManager.java 5 Jan 2010 16:38:47 -0000 >@@ -308,6 +308,9 @@ > if (progressService == null) { > job.schedule(); > } else { >+ IProgressMonitor progressMonitor = getProgressMonitorForUpdateJob(); >+ if (progressMonitor != null) >+ progressService.addProgressMonitorForJob(job, progressMonitor); > progressService.schedule(job); > } > } >@@ -527,4 +530,12 @@ > } > } > >+ /** >+ * @return monitor >+ * @since 3.6 >+ */ >+ public IProgressMonitor getProgressMonitorForUpdateJob() { >+ return null; >+ } >+ > } >Index: Eclipse UI/org/eclipse/ui/progress/IProgressService.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/progress/IProgressService.java,v >retrieving revision 1.36 >diff -u -r1.36 IProgressService.java >--- Eclipse UI/org/eclipse/ui/progress/IProgressService.java 3 Jun 2008 14:17:41 -0000 1.36 >+++ Eclipse UI/org/eclipse/ui/progress/IProgressService.java 5 Jan 2010 16:38:47 -0000 >@@ -11,7 +11,7 @@ > package org.eclipse.ui.progress; > > import java.lang.reflect.InvocationTargetException; >- >+import org.eclipse.core.runtime.IProgressMonitor; > import org.eclipse.core.runtime.jobs.IJobManager; > import org.eclipse.core.runtime.jobs.ISchedulingRule; > import org.eclipse.core.runtime.jobs.Job; >@@ -161,4 +161,18 @@ > */ > public void showInDialog(Shell shell, Job job); > >+ /** >+ * @param job >+ * @param monitor >+ * @since 3.6 >+ */ >+ public void addProgressMonitorForJob(Job job, IProgressMonitor monitor); >+ >+ /** >+ * @param job >+ * @param monitor >+ * @since 3.6 >+ */ >+ public void removeProgressMonitorForJob(Job job, IProgressMonitor monitor); >+ > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 293098
: 155343 |
155344
|
155345
|
155346