package com.drawbridge.dm;
import java.awt.image.BufferedImage;
import java.util.LinkedList;
import com.drawbridge.dm.DMImageFactory.DMImage;
import com.drawbridge.jsengine.JsEngine.JSEngineListener;
import com.drawbridge.jsengine.Scope;
import com.drawbridge.paper.PaperPanel;
import com.drawbridge.paper.PaperPanel.PaperPanelListener;
import com.drawbridge.utils.JSUtils;
/**
* DMModel just shows execution from the JSEngine, and pushes through changes back to the E-AST
* @author Alistair Stead
*
*/
public class DMModel implements JSEngineListener, PaperPanelListener
{
private final LinkedList<DMModelListener> mListeners;
private LinkedList<DMImage> dmImages;
public DMModel(DMModelListener firstListener){
dmImages = new LinkedList<DMImage>();
PaperPanel.getInstance().addOnUpdateListener(this);
mListeners = new LinkedList<DMModelListener>();
mListeners.add(firstListener);
}
public LinkedList<DMImage> getModelObjects(){
return dmImages;
}
public interface DMModelListener{
public void onDMModelUpdate(DMModel model);
}
@Override
public void onPaperPanelUpdate(PaperPanel panel)
{
BufferedImage image = panel.getImage();
dmImages.clear();
dmImages = DMImageFactory.decodeBufferedImage(image);
updateDMModelListeners();
JSUtils.executeStaticImageCode(dmImages, true);
}
public void updateDMModelListeners(){
for(DMModelListener listener: mListeners){
listener.onDMModelUpdate(this);
}
}
public void addDMModelListener(DMModelListener listener){
mListeners.add(listener);
}
@Override
public void modelChange(Scope scope)
{
// TODO Auto-generated method stub
}
}