package org.geogebra.desktop.geogebra3D.gui; import java.awt.Component; import java.awt.Point; import java.awt.event.ActionEvent; import java.util.ArrayList; import javax.swing.AbstractAction; import org.geogebra.common.awt.GPoint; import org.geogebra.common.euclidian.EuclidianView; import org.geogebra.common.euclidian.EuclidianViewInterfaceCommon; import org.geogebra.common.euclidian3D.EuclidianView3DInterface; import org.geogebra.common.geogebra3D.main.App3DCompanion; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.main.App; import org.geogebra.common.main.Localization; import org.geogebra.common.main.settings.EuclidianSettings; import org.geogebra.desktop.euclidian.EuclidianViewD; import org.geogebra.desktop.euclidianND.EuclidianViewInterfaceD; import org.geogebra.desktop.geogebra3D.App3D; import org.geogebra.desktop.geogebra3D.euclidianFor3D.EuclidianControllerFor3DD; import org.geogebra.desktop.geogebra3D.euclidianFor3D.EuclidianViewFor3DD; import org.geogebra.desktop.geogebra3D.gui.dialogs.DialogManager3D; import org.geogebra.desktop.geogebra3D.gui.layout.panels.EuclidianDockPanel3DD; import org.geogebra.desktop.geogebra3D.gui.view.algebra.AlgebraView3D; import org.geogebra.desktop.geogebra3D.gui.view.properties.PropertiesView3DD; import org.geogebra.desktop.gui.ContextMenuChooseGeoD; import org.geogebra.desktop.gui.ContextMenuGeoElementD; import org.geogebra.desktop.gui.GuiManagerD; import org.geogebra.desktop.gui.view.algebra.AlgebraControllerD; import org.geogebra.desktop.gui.view.algebra.AlgebraViewD; import org.geogebra.desktop.gui.view.properties.PropertiesViewD; import org.geogebra.desktop.main.AppD; import org.geogebra.desktop.util.GuiResourcesD; /** * Extending DefaultGuiManager class for 3D * * @author Mathieu * */ public class GuiManager3D extends GuiManagerD { private AbstractAction showAxes3DAction, showGrid3DAction, showPlaneAction; /** * default constructor * * @param app * application */ public GuiManager3D(AppD app) { super(app); javax.swing.JPopupMenu.setDefaultLightWeightPopupEnabled(false); // popups // over // the // 3D // canvas javax.swing.ToolTipManager.sharedInstance() .setLightWeightPopupEnabled(false); // tooltips over the 3D // canvas dialogManagerFactory = new DialogManager3D.Factory(); } @Override public void initialize() { super.initialize(); } /** * Add 3D euclidian view to layout. */ @Override protected void initLayoutPanels() { super.initLayoutPanels(); if (app.supportsView(App.VIEW_EUCLIDIAN3D)) { getLayout().registerPanel(new EuclidianDockPanel3DD(getApp())); } } // //////////////////////////// // ACTIONS // //////////////////////////// @Override protected boolean initActions() { if (!super.initActions()) { return false; } Localization loc = getApp().getLocalization(); showAxes3DAction = new AbstractAction( loc.getMenu("Axes"), (getApp()).getScaledIcon(GuiResourcesD.AXES)) { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { // toggle axes ((App3D) getApp()).toggleAxis3D(); // getApp().getEuclidianView().repaint(); getApp().storeUndoInfo(); getApp().updateMenubar(); } }; showGrid3DAction = new AbstractAction( loc.getMenu("Grid"), getApp().getScaledIcon(GuiResourcesD.GRID)) { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { // toggle grid ((App3D) getApp()).toggleGrid3D(); // getApp().getEuclidianView().repaint(); getApp().storeUndoInfo(); getApp().updateMenubar(); } }; showPlaneAction = new AbstractAction( loc.getMenu("Plane"), (getApp()).getScaledIcon(GuiResources3D.PLANE)) { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { // toggle plane ((App3D) getApp()).togglePlane(); getApp().storeUndoInfo(); getApp().updateMenubar(); } }; return true; } /** * @return Action for showing axes in 3D */ public AbstractAction getShowAxes3DAction() { initActions(); return showAxes3DAction; } /** * @return Action for showing grid in 3D */ public AbstractAction getShowGrid3DAction() { initActions(); return showGrid3DAction; } /** * @return Action for showing xOyPlane in 3D */ public AbstractAction getShowPlaneAction() { initActions(); return showPlaneAction; } // //////////////////////////// // POPUP MENU // //////////////////////////// /** * Displays the zoom menu at the position p in the coordinate space of * euclidianView */ /* * public void showDrawingPadPopup(Component invoker, Point p) { // clear * highlighting and selections in views app.getEuclidianView().resetMode(); * * // menu for drawing pane context menu ContextMenuGraphicsWindow3D * popupMenu = new ContextMenuGraphicsWindow3D( app, p.x, p.y); * popupMenu.show(invoker, p.x, p.y); } */ /** * Displays the zoom menu at the position p in the coordinate space of * euclidianView * * @param view * view * @param p * zoom point */ @Override public void showDrawingPadPopup3D(EuclidianViewInterfaceCommon view, GPoint p) { // clear highlighting and selections in views ((App3D) getApp()).getEuclidianView3D().resetMode(); // menu for drawing pane context menu ContextMenuGraphicsWindow3DD popupMenu = new ContextMenuGraphicsWindow3DD( getApp()); popupMenu.getWrappedPopup() .show(((EuclidianViewInterfaceD) view).getJPanel(), p.x, p.y); } /** * Displays the popup menu for geo at the position p in the coordinate space * of the component invoker * * @param selectedGeos * first geos * @param geos * list of geos * @param view * view calling * @param p * place to show the popup menue */ @Override public void showPopupChooseGeo(ArrayList<GeoElement> selectedGeos, ArrayList<GeoElement> geos, EuclidianView view, GPoint p) { if (selectedGeos == null || selectedGeos.get(0) == null) { return; } // clear highlighting and selections in views getApp().getActiveEuclidianView().resetMode(); Component invoker = ((EuclidianViewInterfaceD) view).getJPanel(); Point screenPos = (invoker == null) ? new Point(0, 0) : invoker.getLocationOnScreen(); screenPos.translate(p.x, p.y); ContextMenuGeoElementD popupMenu = new ContextMenuChooseGeoD(getApp(), view, selectedGeos, geos, screenPos, p); popupMenu.getWrappedPopup().show(invoker, p.x, p.y); } // //////////////////////////// // ALGEBRA VIEW // //////////////////////////// @Override protected AlgebraViewD newAlgebraView(AlgebraControllerD algc) { return new AlgebraView3D(algc); } @Override protected EuclidianViewD newEuclidianView(boolean[] showAxis, boolean showGrid, int viewId) { EuclidianSettings settings = app.getSettings().getEuclidian(viewId); return new EuclidianViewFor3DD(new EuclidianControllerFor3DD(kernel), showAxis, showGrid, viewId, settings); } // //////////////////////////// // 3D VIEW // //////////////////////////// @Override protected PropertiesViewD newPropertiesViewD(AppD appD) { return new PropertiesView3DD(appD); } @Override public void setLabels() { super.setLabels(); if (app.isEuclidianView3Dinited()) { EuclidianView3DInterface view = app.getEuclidianView3D(); if (view != null && ((EuclidianView) view).hasStyleBar()) { ((EuclidianView) view).getStyleBar().setLabels(); } } } @Override public boolean loadURL(String urlString, boolean suppressErrorMsg) { ((App3DCompanion) app.getCompanion()).removeAllEuclidianViewForPlane(); return super.loadURL(urlString, suppressErrorMsg); } }