Newer
Older
piccolo2d.java / anchorgarden / src / main / java / jaist / css / covis / pui / PMenuBar.java
@Motoki Miura Motoki Miura on 14 Apr 2022 2 KB edu.umd.cs.piccolo -> org.piccolo2d
package jaist.css.covis.pui;

import jaist.css.covis.AnchorGarden;

import java.awt.Dimension;
import java.util.ArrayList;

import edu.umd.cs.piccolo.PCamera;
import edu.umd.cs.piccolo.event.PBasicInputEventHandler;
import edu.umd.cs.piccolo.event.PInputEvent;
import edu.umd.cs.piccolo.nodes.PPath;
import edu.umd.cs.piccolo.util.PBounds;

public class PMenuBar extends PBasicInputEventHandler implements CameraFittable, Runnable {
	// private static final long serialVersionUID = 1776018940471391776L;
	
	public PPath mybar;
	PCamera camera;
	AnchorGarden window;
//	float transparency = 0.8f;
	float base_transparency = 0.9f;
	Thread transparencyThread = null;
	boolean quitTransparencyThread = true;
	ArrayList<CameraFitConstraint> cfcList;
	public PMenuBar(PCamera _cam, AnchorGarden _win){
		camera = _cam;
		window = _win;
		mybar = new PPath();
		mybar.setTransparency(base_transparency);
		camera.addChild(mybar);
		camera.addInputEventListener(this);
		cfcList = new ArrayList<CameraFitConstraint>();
	}
	public void addPMenuRoot(PMenuRoot root, CameraFitConstraint.PositionEnum pos, Dimension _defaultGap){
		mybar.addChild(root);
//		Point2D initP = new Point2D.Double(window.buffer.gkjProperty.viewsizey - root.getFullBoundsReference().getWidth(),0);
//		if (pos == CameraFitConstraint.PositionEnum.TOPLEFT) initP.setLocation(0,0);
//		root.setOffset(initP);
		CameraFitConstraint cfc = new CameraFitConstraint(root, camera, pos, _defaultGap);
		cfc.fitTo(camera.getBoundsReference());
		camera.addPropertyChangeListener(cfc);
	}
	public PBounds getFullBounds() {
		return mybar.getFullBounds();
	}
	public void setOffset(double x, double y) {
		mybar.setOffset(x,y);
	}
	public void setPathToRectangle(float x, float y, float w, float h) {
		mybar.setPathToRectangle(x,y,w,h);
	}
	
	public void mouseMoved(PInputEvent event) {
		double y = event.getPositionRelativeTo(camera).getY();
		if (y < getFullBounds().getHeight()*2){
			if (transparencyThread != null) quitTransparencyThread = true;
			mybar.setTransparency(base_transparency);
			mybar.repaint();
		} else {
			if (mybar.getTransparency() == base_transparency) transparencyThread_Start();
		}
	}
	void transparencyThread_Start(){
		if (transparencyThread == null){
			quitTransparencyThread = false;
			transparencyThread = new Thread(this);
			transparencyThread.start();
		}
	}
	public void run() {
		for(float f = base_transparency; f>=0.0f; f-=0.05){
			mybar.setTransparency(f);
			mybar.repaint();
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			if (quitTransparencyThread) {
				mybar.setTransparency(base_transparency);
				mybar.repaint();
				transparencyThread = null;
				break;
			}
		}
		mybar.setTransparency(0.0f);
		mybar.repaint();
		transparencyThread = null;
	}
	public void manualFit(PBounds pb) {
		for(CameraFitConstraint cfc: cfcList){
			cfc.fitTo(pb);
		}
	}

}