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 // =========================================================== }