package com.pixelmaid.dresscode.data;
import java.util.ArrayList;
import java.util.Map;
import com.pixelmaid.dresscode.antlr.types.tree.DCNode;
import com.pixelmaid.dresscode.antlr.types.tree.NodeEvent;
import com.pixelmaid.dresscode.antlr.types.tree.functions.DrawableNode;
import com.pixelmaid.dresscode.app.ui.usercreated.UserUI;
import com.pixelmaid.dresscode.drawing.primitive2d.Drawable;
import com.pixelmaid.dresscode.events.CustomEvent;
import com.pixelmaid.dresscode.events.CustomEventListener;
//manages all of the current drawables generated by the user and controls access to them
public class DrawableManager extends NodeEvent implements CustomEventListener {
private ArrayList<Drawable> drawables = new ArrayList<Drawable>();
public void addDrawable(Drawable d) {
drawables.add(d);
}
public void swapDrawable(Drawable a, Drawable b){
int i = drawables.indexOf(a);
setDrawable(b,i);
}
public void setDrawable(Drawable a, int i){
drawables.set(i, a);
}
public boolean removeDrawable(Drawable d){
return drawables.remove(d);
}
public boolean removeDrawableAt(int i){
return drawables.remove(i)==null?false:true;
}
public void clearAllDrawables() {
drawables.clear();
}
public ArrayList<Drawable> getDrawables(){
return this.drawables;
}
@Override
public void handleCustomDrawableEvent(Object source, int eventType, Drawable d) {
System.out.println("drawable event called");
switch (eventType){
case CustomEvent.DRAWABLE_CREATED:
this.addDrawable(d);
d.addEventListener(this);
//System.out.println("drawable created");
break;
case CustomEvent.REMOVE_DRAWABLE:
this.removeDrawable(d);
d.removeEventListener(this);
//System.out.println("drawable removed");
//System.out.println("condensing holes");
break;
case CustomEvent.SHAPE_LOAD_REQUESTED:
this.fireDrawableEvent(CustomEvent.SHAPE_LOAD_REQUESTED, d);
break;
}
System.out.println("num drawables="+this.drawables.size());
}
@Override
public void handleCustomDrawableEvent(Object source, int eventType, Drawable d1, Drawable d2) {
//System.out.println("drawable event called");
switch (eventType){
case CustomEvent.SWAP_DRAWABLE:
int i = this.drawables.indexOf(d1);
drawables.set(i, d2);
d2.addEventListener(this);
System.out.println("drawable swapped");
break;
}
}
@Override
public void handleCustomInstructionEvent(Object source, int eventType) {
}
@Override
public void handleCustomToolEvent(Object source, int event) {
}
@Override
public void handleCustomRuntimeErrorEventDrawableEvent(Object source,
int event, String message) {
System.out.println("error event d ="+message);
}
@Override
public void handleCustomPrintEvent(Object source, int event, String value) {
System.out.println("print event d ="+value);
this.firePrintEvent(CustomEvent.PRINT_STATEMENT, value);
}
public void deselectAll() {
for(int i=0;i<drawables.size();i++){
drawables.get(i).setSelected(false);
}
}
public void selectAll() {
for(int i=0;i<drawables.size();i++){
drawables.get(i).setSelected(true);
}
}
@Override
public void handleCustomUINodeEvent(Object nodeEvent, int event, UserUI d) {
// TODO Auto-generated method stub
}
@Override
public void handleCustomUIEvent(Object source, int event) {
// TODO Auto-generated method stub
}
}