public class

ProgressMonitor

extends Object
implements IProgressListener
package org.andengine.util.progress;
import java.util.ArrayList;
import java.util.HashMap;

import org.andengine.util.math.MathUtils;


/**
 * (c) 2010 Nicolas Gramlich
 * (c) 2011 Zynga Inc.
 * 
 * @author Nicolas Gramlich
 * @since 18:07:35 - 09.07.2009
 */
public class ProgressMonitor implements IProgressListener {
	// ===========================================================
	// Constants
	// ===========================================================

	// ===========================================================
	// Fields
	// ===========================================================

	private final ArrayList<IProgressListener> mProgressListeners = new ArrayList<IProgressListener>();
	private final HashMap<ProgressMonitor, IProgressListener> mChildProgressMonitorToProgressListenerMap = new HashMap<ProgressMonitor, IProgressListener>();

	// ===========================================================
	// Constructors
	// ===========================================================

	public ProgressMonitor() {

	}

	public ProgressMonitor(final IProgressListener pProgressListener) {
		this.mProgressListeners.add(pProgressListener);
	}

	// ===========================================================
	// Getter & Setter
	// ===========================================================

	// ===========================================================
	// Methods for/from SuperClass/Interfaces
	// ===========================================================

	@Override
	public void onProgressChanged(final int pProgress) {
		final int progressListenerCount = this.mProgressListeners.size();
		for(int i = 0; i < progressListenerCount; i++) {
			this.mProgressListeners.get(i).onProgressChanged(pProgress);
		}
	}

	// ===========================================================
	// Methods
	// ===========================================================

	public void registerChildProgressMonitor(final ProgressMonitor pChildProgressMonitor, final int pChildProgressMonitorRangeFrom, final int pChildProgressMonitorRangeTo) {
		final IProgressListener childProgressMonitorListener = new IProgressListener() {
			@Override
			public void onProgressChanged(final int pProgress) {
				final int progress = MathUtils.mix(pChildProgressMonitorRangeFrom, pChildProgressMonitorRangeTo, (float)pProgress / IProgressListener.PROGRESS_MAX);
				ProgressMonitor.this.onProgressChanged(progress);
			}
		};
		pChildProgressMonitor.addProgressListener(childProgressMonitorListener);
		this.mChildProgressMonitorToProgressListenerMap.put(pChildProgressMonitor, childProgressMonitorListener);
	}

	public void unregisterChildProgressMonitor(final ProgressMonitor pChildProgressMonitor) {
		pChildProgressMonitor.removeProgressListener(this.mChildProgressMonitorToProgressListenerMap.get(pChildProgressMonitor));
	}

	private void addProgressListener(final IProgressListener pProgressListener) {
		this.mProgressListeners.add(pProgressListener);
	}

	private void removeProgressListener(final IProgressListener pProgressListener) {
		this.mProgressListeners.add(pProgressListener);
	}

	// ===========================================================
	// Inner and Anonymous Classes
	// ===========================================================
}