package org.geogebra.web.web.gui.view.algebra;
import org.geogebra.common.awt.GPoint;
import org.geogebra.common.gui.SetLabels;
import org.geogebra.common.main.Feature;
import org.geogebra.common.main.Localization;
import org.geogebra.keyboard.web.TabbedKeyboard;
import org.geogebra.web.html5.main.AppW;
import org.geogebra.web.web.css.MaterialDesignResources;
import org.geogebra.web.web.gui.GuiManagerW;
import org.geogebra.web.web.gui.images.StyleBarResources;
import org.geogebra.web.web.gui.inputbar.InputBarHelpPanelW;
import org.geogebra.web.web.gui.menubar.MainMenu;
import org.geogebra.web.web.javax.swing.GPopupMenuW;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.MenuItem;
import com.himamis.retex.editor.share.event.KeyEvent;
import com.himamis.retex.editor.web.MathFieldW;
public class ContextMenuPlus implements SetLabels {
protected GPopupMenuW wrappedPopup;
protected Localization loc;
private AppW app;
private RadioTreeItem item;
private MathFieldW mf;
private TabbedKeyboard kbd;
/**
* Creates new context menu
*
* @param item
* application
*/
ContextMenuPlus(RadioTreeItem item) {
app = item.getApplication();
loc = app.getLocalization();
this.item = item;
mf = ((LatexTreeItemController)item.getController()).getRetexListener().getMathField();
kbd = (TabbedKeyboard)((GuiManagerW)app.getGuiManager()).getOnScreenKeyboard(item, null);
wrappedPopup = new GPopupMenuW(app);
if (app.has(Feature.NEW_TOOLBAR)) {
wrappedPopup.getPopupPanel().addStyleName("matMenu");
} else {
wrappedPopup.getPopupPanel().addStyleName("mioMenu");
}
buildGUI();
}
private void buildGUI() {
wrappedPopup.clearItems();
addExpressionItem();
addTextItem();
addImageItem();
addHelpItem();
}
private void addExpressionItem() {
String img = StyleBarResources.INSTANCE.description().getSafeUri()
.asString();
MenuItem mi = new MenuItem(MainMenu.getMenuBarHtml(img,
loc.getPlain("Expression"), true), true,
new Command() {
@Override
public void execute() {
item.getController().setInputAsText(false);
item.setText(" ");
mf.getKeyListener().onKeyPressed(new KeyEvent(KeyEvent.VK_SPACE));
kbd.selectNumbers();
}
});
wrappedPopup.addItem(mi);
}
private void addTextItem() {
String img = MaterialDesignResources.INSTANCE.icon_quote_black()
.getSafeUri()
.asString();
MenuItem mi = new MenuItem(
MainMenu.getMenuBarHtml(img, loc.getPlain("Text"), true), true,
new Command() {
@Override
public void execute() {
item.getController().setInputAsText(true);
item.setText(" ");
mf.getKeyListener().onKeyPressed(new KeyEvent(KeyEvent.VK_SPACE));
kbd.selectAbc();
}
});
wrappedPopup.addItem(mi);
}
private void addImageItem() {
String img = MaterialDesignResources.INSTANCE.insert_photo_black()
.getSafeUri()
.asString();
MenuItem mi = new MenuItem(
MainMenu.getMenuBarHtml(img, loc.getPlain("Image"), true), true,
new Command() {
@Override
public void execute() {
item.getController().setInputAsText(false);
app.getImageManager().setPreventAuxImage(true);
((GuiManagerW)app.getGuiManager()).loadImage(null, null, false, app.getActiveEuclidianView());
}
});
wrappedPopup.addItem(mi);
}
private void addHelpItem() {
String img = MaterialDesignResources.INSTANCE.icon_help_black()
.getSafeUri()
.asString();
MenuItem mi = new MenuItem(MainMenu.getMenuBarHtml(img, loc.getMenu("Help"), true),
true, new Command() {
@Override
public void execute() {
showHelp();
}
});
wrappedPopup.addItem(mi);
}
public void show(GPoint p) {
wrappedPopup.show(p);
}
public void show(int x, int y) {
wrappedPopup.show(new GPoint(x, y));
}
@Override
public void setLabels() {
buildGUI();
}
private void showHelp() {
item.preventBlur();
item.requestFocus();
if (item.showCurrentError()) {
return;
}
item.app.hideKeyboard();
Scheduler.get().scheduleDeferred(
new Scheduler.ScheduledCommand() {
@Override
public void execute() {
item.setShowInputHelpPanel(
true);
((InputBarHelpPanelW) item.app
.getGuiManager()
.getInputHelpPanel())
.focusCommand(
item.getCommand());
}
});
}
}