package loon.utils.processes; import loon.utils.MathUtils; import loon.utils.ObjectMap; import loon.utils.TArray; public class ProgressMonitor implements ProgressListener { private final TArray<ProgressListener> _progressListeners = new TArray<ProgressListener>(); private final ObjectMap<ProgressMonitor, ProgressListener> _childProgressMonitorToProgressListenerMap = new ObjectMap<ProgressMonitor, ProgressListener>(); public ProgressMonitor() { } public ProgressMonitor(final ProgressListener p) { this._progressListeners.add(p); } @Override public void onProgressChanged(final int p) { final int progressListenerCount = this._progressListeners.size; for (int i = 0; i < progressListenerCount; i++) { this._progressListeners.get(i).onProgressChanged(p); } } public void addChildProgressMonitor( final ProgressMonitor childProgressMonitor, final int rangeFrom, final int rangeTo) { final ProgressListener childProgressMonitorListener = new ProgressListener() { @Override public void onProgressChanged(final int pss) { final int progress = MathUtils.mix( rangeFrom, rangeTo, (float) pss / ProgressListener.PROGRESS_MAX); ProgressMonitor.this.onProgressChanged(progress); } }; childProgressMonitor.addProgressListener(childProgressMonitorListener); this._childProgressMonitorToProgressListenerMap.put( childProgressMonitor, childProgressMonitorListener); } public void unChildProgressMonitor( final ProgressMonitor childProgressMonitor) { childProgressMonitor .removeProgressListener(this._childProgressMonitorToProgressListenerMap .get(childProgressMonitor)); } private void addProgressListener(final ProgressListener p) { this._progressListeners.add(p); } private void removeProgressListener(final ProgressListener p) { this._progressListeners.add(p); } }