package com.pixelmaid.dresscode.app.ui.tools; import java.util.ArrayList; import com.pixelmaid.dresscode.drawing.datatype.Point; import com.pixelmaid.dresscode.drawing.math.Geom; import com.pixelmaid.dresscode.drawing.primitive2d.Drawable; import com.pixelmaid.dresscode.events.CustomEvent; public class SelectTool extends Tool { private ArrayList<Drawable> selectedDrawable; private ArrayList<Point> points; private Drawable group = new Drawable(); private boolean selected; private boolean moved; private ArrayList<Drawable> tempDrawables; private double selectDist = 5; public SelectTool(){ selectedDrawable= new ArrayList<Drawable>(); points= new ArrayList<Point>(); } public void init(){ } public void reset(){ for(int i=0;i<tempDrawables.size();i++){ tempDrawables.get(i).setSelected(false); } selectedDrawable.clear(); group.removeAllChildren(); group = new Drawable(); selected = false; moved = false; } @Override public void setActive(boolean a){ this.reset(); active = a; } public void setDrawables(ArrayList<Drawable>tD){ tempDrawables = tD; } @Override public void mouseReleased(double mouseX, double mouseY, boolean special) { if(moved){ this.fireToolEvent(CustomEvent.DRAWABLE_MOVED); } } @Override public void mousePressed(double mouseX, double mouseY, boolean special) { for(int i=tempDrawables.size()-1;i>=0;i--){ Point origin = tempDrawables.get(i).getOrigin(); if(!special){ reset(); } if((Math.abs(mouseX-origin.getX())<selectDist)&&(Math.abs(mouseY-origin.getY())<selectDist)){ Drawable sD = tempDrawables.get(i); selectedDrawable.add(sD); selected=true; sD.setSelected(true); System.out.println("selected object at"+i); break; } } this.fireToolEvent(CustomEvent.REDRAW_REQUEST); } @Override public void mouseDragged(double mouseX, double mouseY, boolean special) { if(selected){ points.clear(); for(int i=0;i<selectedDrawable.size();i++){ points.add(selectedDrawable.get(i).getOrigin()); } if(selectedDrawable.size()>1){ Point centroid = Geom.getAveragePoint(points); for(int i=0;i<selectedDrawable.size();i++){ Drawable sD = selectedDrawable.get(i); double dX = mouseX-centroid.getX(); double dY = mouseY-centroid.getY(); Point o = sD.getOrigin(); sD.moveBy(dX,dY); } moved=true; } else{ Drawable sD = selectedDrawable.get(0); sD.moveTo(mouseX,mouseY); moved=true; System.out.println("select drag"); System.out.println(sD.getOrigin().getX()+","+sD.getOrigin().getY()); } this.fireToolEvent(CustomEvent.REDRAW_REQUEST); } } public boolean shapeSelected(){ return selected; } public boolean shapeMoved(){ return moved; } public ArrayList<Drawable> getSelected(){ return this.selectedDrawable; } }