package org.geogebra.web.editor;
import org.geogebra.common.io.latex.GeoGebraSerializer;
import org.geogebra.keyboard.web.KeyboardResources;
import org.geogebra.keyboard.web.UpdateKeyBoardListener;
import org.geogebra.web.html5.gui.util.MathKeyboardListener;
import org.geogebra.web.keyboard.OnScreenKeyBoard;
import org.geogebra.web.resources.StyleInjector;
import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.RootPanel;
import com.himamis.retex.editor.share.event.MathFieldListener;
import com.himamis.retex.editor.share.model.MathSequence;
import com.himamis.retex.editor.web.JlmEditorLib;
import com.himamis.retex.editor.web.MathFieldW;
import com.himamis.retex.renderer.share.platform.FactoryProvider;
import com.himamis.retex.renderer.web.CreateLibrary;
import com.himamis.retex.renderer.web.FactoryProviderGWT;
import com.himamis.retex.renderer.web.font.opentype.Opentype;
public class Editor implements EntryPoint, MathFieldListener {
private JlmEditorLib library;
private Opentype opentype;
@Override
public void onModuleLoad() {
FactoryProvider.setInstance(new FactoryProviderGWT());
library = new JlmEditorLib();
opentype = Opentype.INSTANCE;
CreateLibrary.exportLibrary(library, opentype);
addEditorFunction(this);
StyleInjector.inject(KeyboardResources.INSTANCE.keyboardStyle());
}
public void edit(Element parent) {
Canvas canvas = Canvas.createIfSupported();
String id = "JlmEditorKeyboard" + DOM.createUniqueId();
parent.setId(id);
RootPanel parentWidget = RootPanel.get(id);
Element el = DOM.createDiv();
el.appendChild(canvas.getCanvasElement());
MathFieldW fld = new MathFieldW(parentWidget, canvas,
this, false);
final OnScreenKeyBoard kb = new OnScreenKeyBoard(new KeyboardContext(),
false);
kb.setListener(new UpdateKeyBoardListener() {
@Override
public void keyBoardNeeded(boolean show,
MathKeyboardListener textField) {
// no real app frame
}
@Override
public void doShowKeyBoard(boolean b,
MathKeyboardListener textField) {
// no real app frame
}
});
kb.setProcessing(new MathFieldProcessing(fld));
parentWidget.add(fld.asWidget());
parentWidget.add(kb);
kb.show();
// Timer t = new Timer() {
//
// @Override
// public void run() {
// kb.updateSize();
// kb.setStyleName();
// }
// };
// t.schedule(0);
// fld.requestViewFocus();
}
private native void addEditorFunction(Editor library) /*-{
$wnd.tryEditor = function(el) {
library.@org.geogebra.web.editor.Editor::edit(Lcom/google/gwt/dom/client/Element;)(el);
}
}-*/;
@Override
public void onEnter() {
// TODO Auto-generated method stub
}
@Override
public void onKeyTyped() {
// TODO Auto-generated method stub
}
@Override
public void onCursorMove() {
// TODO Auto-generated method stub
}
@Override
public String alt(int unicodeKeyChar, boolean shift) {
return unicodeKeyChar + "";
}
@Override
public void onDownKeyPressed() {
// TODO Auto-generated method stub
}
@Override
public void onUpKeyPressed() {
// TODO Auto-generated method stub
}
@Override
public String serialize(MathSequence selectionText) {
return GeoGebraSerializer.serialize(selectionText);
}
@Override
public void onInsertString() {
// TODO Auto-generated method stub
}
public boolean onEscape() {
// TODO Auto-generated method stub
return false;
}
}