package jp.ac.kyutech.mns.ist.filter;

import java.awt.Color;
import java.awt.geom.Dimension2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;

import jp.ac.kyutech.mns.ist.ConfigWindow;
import jp.ac.kyutech.mns.ist.Sheet;
import jp.ac.kyutech.mns.ist.ShortStroke;
import edu.umd.cs.piccolo.nodes.PPath;
import edu.umd.cs.piccolo.util.PBounds;

public class RegionSS extends PPath {
	private static final long serialVersionUID = -6969562948322340525L;
	public ArrayList<RegionSS> parent;
	public RegionSSFilter filter;
	public RegionSS(Rectangle2D rect){
		super(rect);
		
		addInputEventListener(new Event_onRegionsSS(this));
	}
	//削除するために，親のアレイリストを覚えておく．これは登録時に覚える．もし移動機能をつけるなら，これも考慮すべき．
	public void setParent(ArrayList<RegionSS> _parent){
		parent = _parent;
	}
	public void setFilter(RegionSSFilter _fil){
		filter = _fil;
	}
	
	public RegionSS(double x, double y, double w, double h) {
		this(new Rectangle2D.Double(x,y,w,h));
	}

	protected void enlarge(Dimension2D delta) {
		PBounds pb = getBounds();
		pb.setSize(pb.getWidth()+delta.getWidth(), pb.getHeight()+delta.getHeight());
		setBounds(pb); // setPathToだと失敗する！
	}
	public void move(double dx , double dy){
		 this.translate(dx, dy);
	}
	public void locate(double x, double y){
		double yoffset = y - getY();
		this.setOffset(getXOffset(), yoffset);
	}

	//右クリックメニューから削除したとき
	public void delete() {
		this.removeFromParent(); //画面，つまりSheetから取り外す
		parent.remove(this);
		filter.remove(this);
		ConfigWindow.configWin.filter.table.repaint();//フィルタ一覧の表示を更新
	}
	//手動で登録した時に確認の為，ちょっとフラッシュさせる
	//ただし，本当の意味でのフィルタ動作の確認ではない．ロジックが違うため
	public void checkSS() {
		Sheet s = (Sheet)getParent();
		AvgVarCalc<ShortStroke> avc = new AvgVarCalc<ShortStroke>();
		for(ShortStroke ss: s.getAllShortStroke()){
			if (getBounds().contains(ss.getBounds())){
				ss.animateToFlushColor(Color.red, 1000, 0);
				ss.calcMetrics();
				avc.add(ss);
			}
		}
		avc.print();		
	}
	
}
