X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbe%2Fnikiroo%2Futils%2FProgress.java;h=bea57845bcefaf4a8fd336d8e284750ae8488f8c;hb=2998b78ae098aff12c0f8cfad2a6bc5303bb33e0;hp=8b6e10e5fc97ca6e5b2748aeb58c4829d80a3287;hpb=b3aad1f93ce78c9806361ca1659defcf99b45bdc;p=fanfix.git diff --git a/src/be/nikiroo/utils/Progress.java b/src/be/nikiroo/utils/Progress.java index 8b6e10e..bea5784 100644 --- a/src/be/nikiroo/utils/Progress.java +++ b/src/be/nikiroo/utils/Progress.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; /** * Progress reporting system, possibly nested. @@ -18,7 +19,7 @@ public class Progress { * A progression event. * * @param progress - * the {@link Progress} object that generated it, or a parent + * the {@link Progress} object that generated it * @param name * the first non-null name of the {@link Progress} step that * generated this event @@ -92,6 +93,18 @@ public class Progress { return name; } + /** + * The name of this {@link Progress} step. + * + * @param name + * the new name + */ + public void setName(String name) { + this.name = name; + // will fire an action event: + setProgress(this.localProgress); + } + /** * The minimum progress value. * @@ -188,7 +201,7 @@ public class Progress { public void setProgress(int progress) { int diff = this.progress - this.localProgress; this.localProgress = progress; - setTotalProgress(name, progress + diff); + setTotalProgress(this, name, progress + diff); } /** @@ -211,22 +224,34 @@ public class Progress { return (((double) progress) / (max - min)); } + /** + * Return the list of direct children of this {@link Progress}. + * + * @return the children (who will think of them??) + */ + public Set getChildren() { + return children.keySet(); + } + /** * Set the total progress value (including the optional children * {@link Progress}), on a {@link Progress#getMin()} to * {@link Progress#getMax()} scale. * + * @param pg + * the {@link Progress} to report as the progression emitter * @param name * the current name (if it is NULL, the first non-null name in - * the hierarchy will overwrite it) + * the hierarchy will overwrite it) of the {@link Progress} who + * emitted this change * @param progress * the progress to set */ - private void setTotalProgress(String name, int progress) { + private void setTotalProgress(Progress pg, String name, int progress) { this.progress = progress; for (ProgressListener l : listeners) { - l.progress(this, name); + l.progress(pg, name); } } @@ -240,6 +265,18 @@ public class Progress { this.listeners.add(l); } + /** + * Remove a {@link ProgressListener} that would trigger on progress changes. + * + * @param l + * the listener + * + * @return TRUE if it was found (and removed) + */ + public boolean removeProgressListener(ProgressListener l) { + return this.listeners.remove(l); + } + /** * Add a child {@link Progress} of the given weight. * @@ -270,7 +307,8 @@ public class Progress { name = Progress.this.name; } - setTotalProgress(name, (int) (total * (max - min))); + setTotalProgress(progress, name, + (int) Math.round(total * (max - min))); } });