package org.geogebra.web.web.euclidian;
import org.geogebra.common.awt.GPoint;
import org.geogebra.common.euclidian.EuclidianController;
import org.geogebra.common.euclidian.event.PointerEventType;
import org.geogebra.web.html5.gui.GPopupPanel;
import org.geogebra.web.html5.gui.util.ClickEndHandler;
import org.geogebra.web.html5.gui.util.ClickStartHandler;
import org.geogebra.web.html5.main.AppW;
import org.geogebra.web.web.gui.ContextMenuGeoElementW;
import org.geogebra.web.web.gui.GuiManagerW;
import org.geogebra.web.web.gui.images.AppResources;
import org.geogebra.web.web.gui.images.ImgResourceHelper;
import org.geogebra.web.web.gui.util.MyCJButton;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
public class ContextMenuPopup extends MyCJButton
implements CloseHandler<GPopupPanel> {
private static final int GAP_Y = 5;
private EuclidianController ec;
private GPoint location;
private boolean menuShown = false;
private AppW app;
ContextMenuGeoElementW popup;
public ContextMenuPopup(AppW app) {
super();
this.app = app;
ImgResourceHelper.setIcon(AppResources.INSTANCE.dots(), this);
ec = app.getActiveEuclidianView().getEuclidianController();
location = new GPoint();
updateLocation();
createPopup();
addStyleName("MyCanvasButton-borderless");
}
private void updateLocation() {
int x = getAbsoluteLeft();
int y = getAbsoluteTop() + getOffsetHeight() + GAP_Y;
location.setLocation(x, y);
}
private void createPopup() {
popup = ((GuiManagerW) app.getGuiManager())
.getPopupMenu(ec.getAppSelectedGeos());
popup.getWrappedPopup().getPopupPanel().addCloseHandler(this);
// addClickHandler(this);
ClickStartHandler.init(this, new ClickStartHandler(false, true) {
@Override
public void onClickStart(int x, int y, PointerEventType type) {
showMenu();
}
});
ClickEndHandler.init(this, new ClickEndHandler(false, true) {
@Override
public void onClickEnd(int x, int y, PointerEventType type) {
// only stop
}
});
}
public void showMenu() {
updateLocation();
popup.update();
popup.show(location);
ImgResourceHelper.setIcon(AppResources.INSTANCE.dots_active(), this);
menuShown = true;
}
public void hideMenu() {
menuShown = false;
ImgResourceHelper.setIcon(AppResources.INSTANCE.dots(), this);
}
public void onClose(CloseEvent<GPopupPanel> event) {
hideMenu();
}
public boolean isMenuShown() {
return menuShown;
}
public void close() {
popup.getWrappedPopup().hide();
}
}