package org.geogebra.desktop.geogebra3D.gui.layout.panels; import javax.swing.ImageIcon; import javax.swing.JComponent; import org.geogebra.common.euclidian.EuclidianView; import org.geogebra.common.gui.toolbar.ToolBar; import org.geogebra.common.main.App; import org.geogebra.desktop.geogebra3D.App3D; import org.geogebra.desktop.gui.layout.DockManagerD; import org.geogebra.desktop.gui.layout.DockPanelD; import org.geogebra.desktop.gui.layout.panels.EuclidianDockPanelAbstract; import org.geogebra.desktop.main.AppD; import org.geogebra.desktop.util.GuiResourcesD; /** * Dock panel for the primary euclidian view. */ public class EuclidianDockPanel3DD extends EuclidianDockPanelAbstract { private static final long serialVersionUID = 1L; /** * @param app * application */ public EuclidianDockPanel3DD(AppD app) { super(App.VIEW_EUCLIDIAN3D, // view id "GraphicsView3D", // view title ToolBar.getAllToolsNoMacros3D(), // toolbar string true, // style bar? 6, // menu order '3' // ctrl-shift-3 ); setApp(app); setEmbeddedSize(300); } @Override protected JComponent loadStyleBar() { return (JComponent) ((App3D) app).getEuclidianView3D().getStyleBar(); } @Override public EuclidianView getEuclidianView() { return ((App3D) app).getEuclidianView3D(); } @Override public boolean isEuclidianDockPanel3D() { return true; } @Override public ImageIcon getIcon() { return app.getMenuIcon(GuiResourcesD.MENU_VIEW_GRAPHICS3D); } /** * force openGL to refresh * * @param manager * dock manager */ public void refresh(DockManagerD manager) { if (!isVisible()) { return; } if (isOpenInFrame()) { // just put the panel in a main window and put it again in a frame // to force openGL to restart unwindowPanel(); windowPanel(); } else { // if 3D view is alone, we put algebra view in main window to avoid // gray panel boolean isAlone = manager.containsLessThanTwoPanels(); DockPanelD algebraPanel = null; if (isAlone) { algebraPanel = manager.getPanel(App.VIEW_ALGEBRA); if (algebraPanel.isVisible()) { // algebra view is visible and in a frame, so we put it in // the main window algebraPanel.unwindowPanel(); } else { // makes algebraPanel = null as a flag algebraPanel = null; manager.show(App.VIEW_ALGEBRA); } } // just put the panel in a frame and put it again in main window to // force openGL to restart windowPanel(); unwindowPanel(); // we put algebra view in old state again if (isAlone) { if (algebraPanel == null) { // algebra panel was not visible before manager.hide(App.VIEW_ALGEBRA, false); } else { // algebra panel was visible in a frame before algebraPanel.windowPanel(); } } } } @Override public boolean updateResizeWeight() { resumeRenderer(); return true; } @Override public void updatePanel() { super.updatePanel(); resumeRenderer(); } /** * ensure that 3D animator is running */ public void resumeRenderer() { if (visible) { ((App3D) app).getEuclidianView3D().getRenderer().resumeAnimator(); } } }