Newer
Older
AnchorGarden_M / src / main / java / jaist / css / covis / PPickEventHandler.java
@motoki miura motoki miura on 21 Jun 2022 2 KB ppath error
package jaist.css.covis;

import java.util.ArrayList;

import org.piccolo2d.PNode;
import org.piccolo2d.event.PDragSequenceEventHandler;
import org.piccolo2d.event.PInputEvent;
import org.piccolo2d.util.PDimension;

/**
 * ATNWindow右上メニューの[pick]
 * @author miuramo
 *
 */
public class PPickEventHandler extends PDragSequenceEventHandler {
	AnchorGarden window;

	long lastRelease; //ダブルクリック判定用

	public PPickEventHandler(AnchorGarden _window){
		window = _window;
	}

	PNode targetPN; // ターゲット

//	public void mousePressed(PInputEvent e){
//	super.mousePressed(e);
//	if (e.getPickedNode().getAttribute("info")!=null){
//	System.out.println(e.getPickedNode().getAttribute("info"));
//	}
//	}
	public void startDrag(PInputEvent e){
		super.startDrag(e);
		if (e.getPickedNode() instanceof PNode && (e.getPickedNode().getAttribute("moveTarget")!=null)){
			targetPN = (PNode) e.getPickedNode().getAttribute("moveTarget");
		} else {
			targetPN = null;
		}
	}

	public void drag(PInputEvent e){
		super.drag(e);
		if (targetPN != null){
			PDimension d = e.getDeltaRelativeTo(window.canvas.getLayer());
			targetPN.translate(d.getWidth(), d.getHeight());
			targetPN.raiseToTop();//TODO: moveToFront();

			if (targetPN instanceof Selectable){
				Selectable sel = (Selectable)targetPN;
				if (sel.isSelected()){
					//選択されたほかのSelectableも一緒に動かしてあげたい.ただし,子ラベルは既に動かしているので除く
					ArrayList<Selectable> synchroMoveNodes = new ArrayList<Selectable>();
					synchroMoveNodes.addAll(window.flowmenuEventHandler.selectionHandler.tempSelect);
					synchroMoveNodes.remove(sel);
					for(Selectable s: sel.getAllChildren()){
						synchroMoveNodes.remove(s);
					}
//					for(Selectable s: synchroMoveNodes){
//						((Historical)s).moveWithHist(d.getWidth(), d.getHeight());
//					}
				}
			}
		} else {
			PDimension d = e.getDelta();
			window.canvas.getCamera().translateView(d.getWidth(), d.getHeight());
		}
	}

	public void endDrag(PInputEvent e){
		super.endDrag(e);

//		if (System.currentTimeMillis() - lastRelease < 350){ //ダブルクリック判定 dbl
//			if (targetPN != null){
//				PBounds pb = targetPN.getGlobalFullBounds();
//				pb = BUtil.zoomBounds(pb, 1.05);
//				window.canvas.getCamera().animateViewToCenterBounds(pb, true, 500);
//
////				if (targetPN instanceof Student){
////				((Student)targetPN).createNewLabel();
////				}
//			}
//		}
		targetPN = null;
		lastRelease = System.currentTimeMillis();
	}
}