package org.anddev.andengine.util.progress; /** * (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 ProgressMonitor mParentProgressMonitor; private final IProgressListener mListener; private int mSubMonitorRangeFrom = 0; private int mSubMonitorRangeTo = 100; private int mProgress = 0; // =========================================================== // Constructors // =========================================================== public ProgressMonitor(final IProgressListener pListener) { this.mListener = pListener; this.mParentProgressMonitor = null; } public ProgressMonitor(final ProgressMonitor pParent){ this.mListener = null; this.mParentProgressMonitor = pParent; } // =========================================================== // Getter & Setter // =========================================================== public ProgressMonitor getParentProgressMonitor() { return this.mParentProgressMonitor; } public int getProgress() { return this.mProgress; } public void setSubMonitorRange(final int pSubMonitorRangeFrom, final int pSubMonitorRangeTo) { this.mSubMonitorRangeFrom = pSubMonitorRangeFrom; this.mSubMonitorRangeTo = pSubMonitorRangeTo; } // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== /** * @param pProgress between 0 and 100. */ @Override public void onProgressChanged(final int pProgress){ this.mProgress = pProgress; if(this.mParentProgressMonitor != null) { this.mParentProgressMonitor.onSubProgressChanged(pProgress); } else { this.mListener.onProgressChanged(pProgress); } } private void onSubProgressChanged(final int pSubProgress){ final int subRange = this.mSubMonitorRangeTo- this.mSubMonitorRangeFrom; final int subProgressInRange = this.mSubMonitorRangeFrom + (int)(subRange * pSubProgress / 100f); if(this.mParentProgressMonitor != null) { this.mParentProgressMonitor.onSubProgressChanged(subProgressInRange); }else{ this.mListener.onProgressChanged(subProgressInRange); } } }