Bläddra i källkod

#821: Improved progress bar status update.

Thomas Kutz 9 år sedan
förälder
incheckning
9c1d7cffa1

+ 22 - 20
plugins/org.yakindu.sct.examples.wizard/src/org/yakindu/sct/examples/wizard/service/git/EclipseGitProgressTransformer.java

@@ -2,16 +2,16 @@
 package org.yakindu.sct.examples.wizard.service.git;
 
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.jgit.lib.ProgressMonitor;
 
 /** Create a new Git to Eclipse progress monitor. */
 public class EclipseGitProgressTransformer implements ProgressMonitor {
-	private static final String EMPTY_STRING = "";  //$NON-NLS-1$
 
 	private final IProgressMonitor root;
 
-	private IProgressMonitor task;
+	private SubMonitor mainTask;
+	private SubMonitor subTask;
 
 	private String msg;
 
@@ -31,32 +31,34 @@ public class EclipseGitProgressTransformer implements ProgressMonitor {
 
 	@Override
 	public void start(final int totalTasks) {
-		root.beginTask(EMPTY_STRING, totalTasks * 1000);
+		mainTask = SubMonitor.convert(root, 5);
 	}
 
 	@Override
 	public void beginTask(final String name, final int total) {
-		endTask();
 		msg = name;
 		lastWorked = 0;
 		totalWork = total;
-		task = new SubProgressMonitor(root, 1000);
-		if (totalWork == UNKNOWN)
-			task.beginTask(EMPTY_STRING, IProgressMonitor.UNKNOWN);
-		else
-			task.beginTask(EMPTY_STRING, totalWork);
-		task.subTask(msg);
+		
+		SubMonitor sub = mainTask.split(1);
+		
+		if (totalWork == UNKNOWN) {
+			subTask = SubMonitor.convert(sub, IProgressMonitor.UNKNOWN);
+		} else {
+			subTask = SubMonitor.convert(sub, totalWork);
+		}
+		subTask.subTask(msg);
 	}
 
 	@Override
 	public void update(final int work) {
-		if (task == null)
+		if (subTask == null)
 			return;
 
 		final int cmp = lastWorked + work;
 		if (totalWork == UNKNOWN && cmp > 0) {
 			if (lastWorked != cmp)
-				task.subTask(msg + ", " + cmp); //$NON-NLS-1$
+				subTask.subTask(msg + ", " + cmp); //$NON-NLS-1$
 		} else if (totalWork <= 0) {
 			// Do nothing to update the task.
 		} else if (cmp * 100 / totalWork != lastWorked * 100 / totalWork) {
@@ -82,27 +84,27 @@ public class EclipseGitProgressTransformer implements ProgressMonitor {
 			m.append(twstr);
 			m.append(")"); //$NON-NLS-1$
 
-			task.subTask(m.toString());
+			subTask.subTask(m.toString());
 		}
 		lastWorked = cmp;
-		task.worked(work);
+		subTask.worked(work);
 	}
 
 	@Override
 	public void endTask() {
-		if (task != null) {
+		if (subTask != null) {
 			try {
-				task.done();
+				subTask.done();
 			} finally {
-				task = null;
+				subTask = null;
 			}
 		}
 	}
 
 	@Override
 	public boolean isCancelled() {
-		if (task != null)
-			return task.isCanceled();
+		if (subTask != null)
+			return subTask.isCanceled();
 		return root.isCanceled();
 	}
 }