package org.geogebra.web.geogebra3D.web.main; import org.geogebra.common.euclidian.EuclidianController; import org.geogebra.common.euclidian3D.EuclidianView3DInterface; import org.geogebra.common.geogebra3D.euclidian3D.openGL.GLFactory; import org.geogebra.common.geogebra3D.main.App3DCompanion; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.main.App; import org.geogebra.common.main.AppCompanion; import org.geogebra.common.main.DialogManager; import org.geogebra.common.main.settings.EuclidianSettings; import org.geogebra.web.geogebra3D.web.euclidian3D.EuclidianController3DW; import org.geogebra.web.geogebra3D.web.euclidian3D.EuclidianView3DW; import org.geogebra.web.geogebra3D.web.euclidian3D.openGL.GLFactoryW; import org.geogebra.web.geogebra3D.web.gui.GuiManager3DW; import org.geogebra.web.html5.Browser; import org.geogebra.web.html5.euclidian.EuclidianPanelWAbstract; import org.geogebra.web.html5.euclidian.EuclidianViewW; import org.geogebra.web.html5.util.ArticleElement; import org.geogebra.web.web.gui.GuiManagerW; import org.geogebra.web.web.gui.applet.GeoGebraFrameBoth; import org.geogebra.web.web.gui.dialog.DialogManager3DW; import org.geogebra.web.web.gui.laf.GLookAndFeel; import org.geogebra.web.web.main.AppWapplet; import org.geogebra.web.web.main.GDevice; public class AppWapplet3D extends AppWapplet { private EuclidianView3DW euclidianView3D; private EuclidianController3DW euclidianController3D; /** * Constructs AppW for applets * * @param ae * article element * @param gf * frame * @param laf * look and feel * @param device * browser or tablet */ public AppWapplet3D(ArticleElement ae, GeoGebraFrameBoth gf, GLookAndFeel laf, GDevice device) { super(ae, gf, 3, laf, device); } @Override protected Kernel newKernel(App this_app) { return App3DW.newKernel(this_app); } @Override public boolean hasEuclidianView3D() { return true; } @Override public EuclidianView3DInterface getEuclidianView3D() { // Window.alert("getEuclidianView3D()"); if (this.euclidianView3D == null) { euclidianController3D = App3DW.newEuclidianController3DW(kernel); euclidianView3D = App3DW.newEuclidianView3DW(euclidianController3D, getSettings().getEuclidian(3)); } return euclidianView3D; } @Override protected GuiManagerW newGuiManager() { return App3DW.newGuiManager(this, getDevice()); } @Override public boolean supportsView(int viewID) { if (viewID == App.VIEW_EUCLIDIAN3D) { return Browser.supportsWebGL() && getSettings().getEuclidian(-1).isEnabled(); } return super.supportsView(viewID); } @Override public void recalculateEnvironments() { super.recalculateEnvironments(); if (this.isEuclidianView3Dinited()) { getEuclidianView3D().getEuclidianController() .calculateEnvironment(); } ((App3DCompanionW) companion).recalculateEnvironments(); } @Override protected void initFactories() { super.initFactories(); if (GLFactory.getPrototype() == null) { GLFactory.setPrototypeIfNull(new GLFactoryW()); } } @Override public void updateViewSizes() { super.updateViewSizes(); if (((GuiManager3DW) getGuiManager()).getEuclidian3DPanel() != null) { ((GuiManager3DW) getGuiManager()).getEuclidian3DPanel() .deferredOnResize(); } ((App3DCompanionW) companion).updateViewSizes(); } @Override public void updateStyleBars() { super.updateStyleBars(); if (showView(App.VIEW_EUCLIDIAN3D)) { getEuclidianView3D().getStyleBar().updateStyleBar(); } } @Override public boolean isEuclidianView3Dinited() { return euclidianView3D != null; } @Override public EuclidianViewW newEuclidianView(EuclidianPanelWAbstract evPanel, EuclidianController ec, boolean[] evShowAxes, boolean evShowGrid, int id, EuclidianSettings evSettings) { return App3DW.newEuclidianView(evPanel, ec, id, evSettings); } @Override public EuclidianController newEuclidianController(Kernel kernel1) { return App3DW.newEuclidianController(kernel1); } @Override protected AppCompanion newAppCompanion() { return new App3DCompanionW(this); } @Override public void setCurrentFile(Object file) { super.setCurrentFile(file); if (this.isEuclidianView3Dinited()) { ((EuclidianView3DW) getEuclidianView3D()) .setCurrentFile(getCurrentFile()); } } @Override public DialogManager getDialogManager() { if (dialogManager == null) { dialogManager = new DialogManager3DW(this); } return dialogManager; } @Override public boolean is3D() { return true; } @Override public String getCompleteUserInterfaceXML(boolean asPreference) { StringBuilder sb = new StringBuilder(); // save super settings sb.append(super.getCompleteUserInterfaceXML(asPreference)); // save euclidianView3D settings if (isEuclidianView3Dinited()) { euclidianView3D.getXML(sb, asPreference); } // save euclidian views for plane settings ((App3DCompanion) companion).addCompleteUserInterfaceXMLForPlane(sb, asPreference); return sb.toString(); } @Override public void ggwGraphicsView3DDimChanged(int width, int height) { App3DW.ggwGraphicsView3DDimChanged(this, width, height); } }