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