package org.geogebra.web.html5.main; import org.geogebra.common.GeoGebraConstants; import org.geogebra.common.kernel.View; import org.geogebra.common.main.App; import org.geogebra.common.main.Feature; import org.geogebra.common.util.debug.GeoGebraProfiler; import org.geogebra.common.util.debug.Log; import org.geogebra.web.html5.Browser; import org.geogebra.web.html5.euclidian.EuclidianSimplePanelW; import org.geogebra.web.html5.gui.GeoGebraFrameW; import org.geogebra.web.html5.util.ArticleElement; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Widget; /** * Simple app, may only have one EV * */ public class AppWsimple extends AppW { private GeoGebraFrameW frame; /****************************************************** * Constructs AppW for applets * * @param ae * article element * @param gf * frame * * @param undoActive * if true you can undo by CTRL+Z and redo by CTRL+Y */ public AppWsimple(ArticleElement ae, GeoGebraFrameW gf, final boolean undoActive) { super(ae, 2, null); this.frame = gf; setAppletHeight(frame.getComputedHeight()); setAppletWidth(frame.getComputedWidth()); this.useFullGui = false; Log.info("GeoGebra " + GeoGebraConstants.VERSION_STRING + " " + GeoGebraConstants.BUILD_DATE + " " + Window.Navigator.getUserAgent()); initCommonObjects(); initing = true; // TODO: EuclidianSimplePanelW this.euclidianViewPanel = new EuclidianSimplePanelW(this); // (EuclidianDockPanelW)getGuiManager().getLayout().getDockManager().getPanel(App.VIEW_EUCLIDIAN); this.canvas = this.euclidianViewPanel.getCanvas(); canvas.setWidth("1px"); canvas.setHeight("1px"); canvas.setCoordinateSpaceHeight(1); canvas.setCoordinateSpaceWidth(1); initCoreObjects(this); setUndoActive(undoActive); afterCoreObjectsInited(); resetFonts(); Browser.removeDefaultContextMenu(this.getArticleElement()); if (Browser.runningLocal() && ArticleElement.isEnableUsageStats()) { new GeoGebraTubeAPIWSimple(has(Feature.TUBE_BETA)) .checkAvailable(null); } } @Override protected void afterCoreObjectsInited() { // Code to run before buildApplicationPanel // initGuiManager();// TODO: comment it out GeoGebraFrameW.handleLoadFile(articleElement, this); initing = false; } @Override public void buildApplicationPanel() { if (frame != null) { frame.clear(); frame.add((Widget) getEuclidianViewpanel()); getEuclidianViewpanel() .setPixelSize( getSettings().getEuclidian(1).getPreferredSize() .getWidth(), getSettings().getEuclidian(1).getPreferredSize() .getHeight()); } } @Override public void afterLoadFileAppOrNot() { buildApplicationPanel(); getScriptManager().ggbOnInit(); // put this here from Application // constructor because we have to delay // scripts until the EuclidianView is // shown initUndoInfoSilent(); getEuclidianView1().synCanvasSize(); getEuclidianView1().createImage(); getAppletFrame().resetAutoSize(); getEuclidianView1().doRepaint2(); stopCollectingRepaints(); if (frame.splash != null) { frame.splash.canNowHide(); } if (!articleElement.preventFocus()) { requestFocusInWindow(); } setDefaultCursor(); GeoGebraFrameW.useDataParamBorder(getArticleElement(), frame); GeoGebraProfiler.getInstance().profileEnd(); setAltText(); } @Override public void focusLost(View v, Element el) { super.focusLost(v, el); GeoGebraFrameW.useDataParamBorder(getArticleElement(), frame); this.getGlobalKeyDispatcher().setFocused(false); } @Override public void focusGained(View v, Element el) { super.focusGained(v, el); GeoGebraFrameW.useFocusedBorder(getArticleElement(), frame); Log.debug("AppWsimple_focusGained"); // if focusLost sets this to false, it is probably // right to set this to true again here! Otherwise // it would only be set to true in case of key ENTER, // but of course, we also want to be able to focus by mouse // Graphics views and Algebra views register GlobalKeyDispatcher, // so in those cases, this is good, otherwise (?) switch (v.getViewID()) { case App.VIEW_ALGEBRA: case App.VIEW_EUCLIDIAN: case App.VIEW_EUCLIDIAN2: this.getGlobalKeyDispatcher().setFocusedIfNotTab(); break; default: if (App.isView3D(v.getViewID()) || ((v.getViewID() >= App.VIEW_EUCLIDIAN_FOR_PLANE_START) && (v .getViewID() <= App.VIEW_EUCLIDIAN_FOR_PLANE_END))) { this.getGlobalKeyDispatcher().setFocusedIfNotTab(); } } } @Override public Element getFrameElement() { return frame.getElement(); } @Override public HasAppletProperties getAppletFrame() { return frame; } @Override public void openSearch(String query) { // no browser } @Override public void uploadToGeoGebraTube() { // no upload } @Override public void set1rstMode() { setMoveMode(); } @Override protected void updateTreeUI() { // TODO Auto-generated method stub } @Override public boolean isSelectionRectangleAllowed() { return getToolbar() != null; } @Override public void setLanguage(final String browserLang) { // no localization support needed in webSimple } @Override public boolean hasEuclidianView2EitherShowingOrNot(int idx) { return false; } }