package org.geogebra.desktop.geogebra3D.euclidian3D; import java.awt.Dimension; import java.util.ArrayList; import javax.swing.ImageIcon; import org.geogebra.common.euclidian.EuclidianConstants; import org.geogebra.common.geogebra3D.euclidian3D.EuclidianStyleBarStatic3D; import org.geogebra.common.geogebra3D.euclidian3D.EuclidianView3D; import org.geogebra.common.geogebra3D.kernel3D.geos.GeoClippingCube3D; import org.geogebra.common.gui.util.SelectionTable; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.desktop.euclidian.EuclidianStyleBarD; import org.geogebra.desktop.geogebra3D.gui.GuiResources3D; import org.geogebra.desktop.gui.util.MyToggleButtonD; import org.geogebra.desktop.gui.util.PopupMenuButtonD; import org.geogebra.desktop.main.AppD; /** * StyleBar for 3D euclidian view * * @author Mathieu * */ public class EuclidianStyleBar3D extends EuclidianStyleBarD { /** * */ private static final long serialVersionUID = 1L; private PopupMenuButtonD btnRotateView, btnClipping; private MyToggleButtonD btnShowPlane; private PopupMenuButtonD btnViewProjection, btnViewDirection; /** * Common constructor. * * @param ev */ public EuclidianStyleBar3D(EuclidianView3D ev) { super(ev); } @Override protected void createDefaultMap() { super.createDefaultMap(); EuclidianStyleBarStatic3D.addToDefaultMap(defaultGeoMap); } @Override protected void addBtnShowPlane() { add(btnShowPlane); } @Override protected void addBtnRotateView() { add(btnRotateView); add(btnViewDirection); add(btnClipping); add(btnViewProjection); } @Override protected boolean isVisibleInThisView(GeoElement geo) { return geo.isVisibleInView3D(); } @Override protected void processSource(Object source, ArrayList<GeoElement> targetGeos) { if (source.equals(btnShowPlane)) { getView().getSettings().togglePlane(); } else if (source.equals(btnRotateView)) { if (btnRotateView.getMySlider().isShowing()) {// if slider is // showing, start // rotation getView().setRotContinueAnimation(0, (btnRotateView.getSliderValue()) * 0.01); } else {// if button has been clicked, toggle rotation if (getView().isRotAnimatedContinue()) { getView().stopAnimation(); btnRotateView.setSelected(false); } else { getView().setRotContinueAnimation(0, (btnRotateView.getSliderValue()) * 0.01); btnRotateView.setSelected(true); } } } else if (source.equals(btnClipping)) { if (btnClipping.getMySlider().isShowing()) { getView().getSettings() .setClippingReduction(btnClipping.getSliderValue()); } else { getView().toggleShowAndUseClippingCube(); } } else if (source.equals(btnViewDirection)) { int si = btnViewDirection.getSelectedIndex(); switch (si) { default: case 0: getView().setRotAnimation(-90, 90, true); break; case 1: getView().setRotAnimation(-90, 0, true); break; case 2: getView().setRotAnimation(0, 0, true); break; case 3: getView().setDefaultRotAnimation(); break; } } else if (source.equals(btnViewProjection)) { int si = btnViewProjection.getSelectedIndex(); getView().getSettings().setProjection(si); } else { super.processSource(source, targetGeos); } } @SuppressWarnings("serial") private class PopupMenuButtonForView3D extends PopupMenuButtonD { public PopupMenuButtonForView3D(AppD app1) { super(app1, null, -1, -1, new Dimension(app1.getScaledIconSize(), app1.getScaledIconSize()), SelectionTable.MODE_ICON, false, true); } @Override public void update(Object[] geos) { this.setVisible( geos.length == 0 && mode != EuclidianConstants.MODE_PEN); } /* * @Override public Point getToolTipLocation(MouseEvent e) { return new * Point(TOOLTIP_LOCATION_X, TOOLTIP_LOCATION_Y); } */ } @Override protected void createButtons() { super.createButtons(); getBtnPointStyle().getMyTable().setVisible(false); // ======================================== // show grid button btnShowPlane = new MyToggleButtonDforEV( app.getScaledIcon(GuiResources3D.STYLINGBAR_GRAPHICS3D_PLANE), iconHeight); btnShowPlane.addActionListener(this); // ======================================== // rotate view button btnRotateView = new PopupMenuButtonForView3D(app); btnRotateView.setIcon(app.getScaledIcon( GuiResources3D.STYLINGBAR_GRAPHICS3D_ROTATEVIEW_PLAY)); btnRotateView.getMySlider().setMinimum(-10); btnRotateView.getMySlider().setMaximum(10); btnRotateView.getMySlider().setMajorTickSpacing(10); btnRotateView.getMySlider().setMinorTickSpacing(1); btnRotateView.getMySlider().setPaintTicks(true); // btnRotateView.getMySlider().setPaintLabels(true); btnRotateView.getMySlider().setPaintTrack(false); btnRotateView.getMySlider().setSnapToTicks(true); btnRotateView.setSliderValue(5); btnRotateView.addActionListener(this); // ======================================== // clipping button btnClipping = new PopupMenuButtonForView3D(app); btnClipping.setIcon(app.getScaledIcon( GuiResources3D.STYLINGBAR_GRAPHICS3D_CLIPPING_MEDIUM)); btnClipping.getMySlider().setMinimum(GeoClippingCube3D.REDUCTION_MIN); btnClipping.getMySlider().setMaximum(GeoClippingCube3D.REDUCTION_MAX); btnClipping.getMySlider().setMajorTickSpacing(1); btnClipping.getMySlider().setMinorTickSpacing(1); btnClipping.getMySlider().setPaintTicks(true); // btnRotateView.getMySlider().setPaintLabels(true); btnClipping.getMySlider().setPaintTrack(true); btnClipping.getMySlider().setSnapToTicks(true); btnClipping.setSliderValue(getView().getClippingReduction()); btnClipping.addActionListener(this); // ======================================== // view yz direction ImageIcon[] directionIcons = new ImageIcon[4]; directionIcons[0] = app .getScaledIcon(GuiResources3D.STYLINGBAR_GRAPHICS3D_VIEW_XY); directionIcons[1] = app .getScaledIcon(GuiResources3D.STYLINGBAR_GRAPHICS3D_VIEW_XZ); directionIcons[2] = app .getScaledIcon(GuiResources3D.STYLINGBAR_GRAPHICS3D_VIEW_YZ); directionIcons[3] = app.getScaledIcon( GuiResources3D.STYLINGBAR_GRAPHICS3D_STANDARDVIEW_ROTATE); btnViewDirection = new ProjectionPopup(app, directionIcons); btnViewDirection.addActionListener(this); // ======================================== // projection view button ImageIcon[] projectionIcons = new ImageIcon[4]; projectionIcons[0] = app .getScaledIcon(GuiResources3D.PROJECTION_ORTOGRAPHIC); projectionIcons[1] = app .getScaledIcon(GuiResources3D.PROJECTION_PERSPECTIVE); projectionIcons[2] = app .getScaledIcon(GuiResources3D.PROJECTION_GLASSES); projectionIcons[3] = app .getScaledIcon(GuiResources3D.PROJECTION_OBLIQUE); btnViewProjection = new ProjectionPopup(app, projectionIcons); btnViewProjection.addActionListener(this); } private class ProjectionPopup extends PopupMenuButtonD {// implements // ActionListener{ private static final long serialVersionUID = 1L; public ProjectionPopup(AppD app, ImageIcon[] projectionIcons) { super(app, projectionIcons, 1, projectionIcons.length, new Dimension(app.getScaledIconSize(), app.getScaledIconSize()), SelectionTable.MODE_ICON, true, false); setIcon(projectionIcons[getView().getProjection()]); } @Override public void update(Object[] geos) { this.setVisible( geos.length == 0 && mode != EuclidianConstants.MODE_PEN); } /* * @Override public Point getToolTipLocation(MouseEvent e) { return new * Point(TOOLTIP_LOCATION_X, TOOLTIP_LOCATION_Y); } */ } @Override public void setLabels() { super.setLabels(); btnShowPlane.setToolTipText(loc.getPlainTooltip("stylebar.xOyPlane")); btnRotateView .setToolTipText(loc.getPlainTooltip("stylebar.RotateView")); btnViewDirection .setToolTipText(loc.getPlainTooltip("stylebar.ViewDirection")); btnViewDirection.setToolTipArray( new String[] { loc.getPlainTooltip("stylebar.ViewXY"), loc.getPlainTooltip("stylebar.ViewXZ"), loc.getPlainTooltip("stylebar.ViewYZ"), loc.getPlainTooltip("stylebar.ViewDefaultRotate") }); btnClipping.setToolTipText(loc.getPlainTooltip("stylebar.Clipping")); btnViewProjection .setToolTipText(loc.getPlainTooltip("stylebar.ViewProjection")); btnViewProjection.setToolTipArray(new String[] { loc.getPlainTooltip("stylebar.ParallelProjection"), loc.getPlainTooltip("stylebar.PerspectiveProjection"), loc.getPlainTooltip("stylebar.GlassesProjection"), loc.getPlainTooltip("stylebar.ObliqueProjection") }); // btnViewProjection.setSelectedIndex(getView().getProjection()); } @Override public void updateGUI() { if (isIniting) { return; } super.updateGUI(); btnShowPlane.removeActionListener(this); btnShowPlane.setSelected(getView().getShowPlane()); btnShowPlane.addActionListener(this); btnRotateView.removeActionListener(this); btnRotateView.setSelected(false); btnRotateView.addActionListener(this); /* * btnViewDirection.removeActionListener(this); * btnViewDirection.setSelectedIndex(0); * btnViewDirection.addActionListener(this); */ btnClipping.removeActionListener(this); btnClipping.setSelected(getView().showClippingCube()); btnClipping.setSliderValue(getView().getClippingReduction()); btnClipping.addActionListener(this); btnViewProjection.removeActionListener(this); btnViewProjection.setSelectedIndex(getView().getProjection()); btnViewProjection.addActionListener(this); } @Override protected PopupMenuButtonD[] newPopupBtnList() { PopupMenuButtonD[] superList = super.newPopupBtnList(); PopupMenuButtonD[] ret = new PopupMenuButtonD[superList.length + 4]; for (int i = 0; i < superList.length; i++) { ret[i] = superList[i]; } int index = superList.length; ret[index] = btnRotateView; index++; ret[index] = btnViewDirection; index++; ret[index] = btnClipping; index++; ret[index] = btnViewProjection; return ret; } @Override protected MyToggleButtonD[] newToggleBtnList() { MyToggleButtonD[] superList = super.newToggleBtnList(); MyToggleButtonD[] ret = new MyToggleButtonD[superList.length + 1]; for (int i = 0; i < superList.length; i++) { ret[i] = superList[i]; } int index = superList.length; ret[index] = btnShowPlane; index++; return ret; } public EuclidianView3D getView() { return (EuclidianView3D) ev; } @Override protected void selectPointStyle(int idx) { // no point style in 3D } }