//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);
}
}
}
/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 20:52:44 - 03.01.2010
*/
interface ProgressCallable {
//
// Final Fields
//
//
// Methods
//
/**
* Computes a result, or throws an exception if unable to do so.
* @param pProgressListener
* @return computed result
* @throws Exception if unable to compute a result
*/
public T call(final IProgressListener pProgressListener) throws Exception;
}
/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 18:07:35 - 09.07.2009
*/
interface IProgressListener {
//
// Constants
//
//
// Methods
//
/**
* @param pProgress between 0 and 100.
*/
public void onProgressChanged(final int pProgress);
}