package org.mt4j.components.visibleComponents.widgets.menus;
import org.mt4j.components.MTComponent;
import org.mt4j.components.visibleComponents.widgets.buttons.MTSvgButton;
import org.mt4j.input.inputProcessors.IGestureEventListener;
import org.mt4j.input.inputProcessors.MTGestureEvent;
import org.mt4j.input.inputProcessors.componentProcessors.tapProcessor.TapEvent;
import org.mt4j.input.inputProcessors.componentProcessors.tapProcessor.TapProcessor;
import org.mt4j.util.math.Vector3D;
import org.mt4j.util.xml.svg.SVGLoader;
import processing.core.PApplet;
public class MTCircularSVGItem extends MTSvgButton {
private MTComponent hoverover;
MTCircularSVGItem children[];
public MTCircularSVGItem(PApplet pa) {
this(pa, null);
}
/**
* The constructor for MTCircularMenuItem can be passed an array of children,
* in the order you wish them to be presented. They will be added as children
* of this object, and adjusted accordingly.
* @param pa
* @param children
*/
public MTCircularSVGItem(PApplet pa, MTCircularSVGItem children[]) {
super("data/svg/circularmenuslice.svg", pa);
this.children = children;
loadHoverover("data/svg/circularmenuslicehover.svg",pa);
addSelfAsListener(pa);
}
private void loadHoverover(String filename, PApplet pa) {
SVGLoader loader = new SVGLoader(pa);
hoverover = loader.loadSvg(filename);
this.addChild(getHoverover());
hoverover.setVisible(false);
}
private void addSelfAsListener(PApplet app) {
this.registerInputProcessor(new TapProcessor(app));
this.addGestureListener(TapProcessor.class, this);
}
public boolean processGestureEvent(MTGestureEvent ge) {
TapEvent te = (TapEvent)ge;
switch (te.getId()) {
case MTGestureEvent.GESTURE_DETECTED:
this.setSelected(true);
break;
case MTGestureEvent.GESTURE_UPDATED:
break;
case MTGestureEvent.GESTURE_ENDED:
this.setSelected(false);
break;
}
return false;
}
public MTComponent getHoverover() {
return hoverover;
}
@Override
public void setSelected(boolean selected) {
super.setSelected(selected);
hoverover.setVisible(selected);
setVisibilityOfChildren(selected);
if (selected)
this.scale(0.4f,0.4f,1.0f,new Vector3D(0,0));
else
this.scale(1f/0.4f,1f/0.4f,1.0f,new Vector3D(0,0));
}
public void setVisibilityOfChildren(boolean visible) {
if (children != null) {
for (MTCircularSVGItem m : children) {
m.setVisible(true);
}
}
}
public int getNumberOfChildren() {
return children.length;
}
}