package org.geogebra.common.gui.toolbar;
import java.util.List;
import java.util.TreeSet;
import java.util.Vector;
import org.geogebra.common.euclidian.EuclidianConstants;
import org.geogebra.common.kernel.Kernel;
import org.geogebra.common.kernel.Macro;
import org.geogebra.common.main.App;
import org.geogebra.common.main.Feature;
/**
* @author gabor
*
* This class is not a superclass of ToolBar, only common method stack
*/
public class ToolBar {
/**
* Integer used to indicate a separator in the toolbar.
*/
public static final Integer SEPARATOR = Integer.valueOf(-1);
/**
* Returns with the default definition of the general tool bar without
* macros.
*
* @param html5
* true, if all menus must appear. (On the web there are some
* tools, which don't appear.)
* @param exam
* true, if exam mode is set.
* @param app
* TODO
* @return The default definition of the general tool bar without macros.
*/
public static String getAllToolsNoMacros(boolean html5, boolean exam,
App app) {
StringBuilder sb = new StringBuilder();
// move
sb.append(EuclidianConstants.MODE_MOVE);
if (!html5) {
// these two are old tools that we don't want to enable in HTML5
sb.append(" ");
sb.append(EuclidianConstants.MODE_MOVE_ROTATE);
}
// freehand tools in with move tool
sb.append(" ");
sb.append(EuclidianConstants.MODE_FREEHAND_SHAPE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PEN);
if (app != null && app.has(Feature.ERASER)) {
sb.append(" ");
sb.append(EuclidianConstants.MODE_ERASER);
}
// points
sb.append(" | ");
sb.append(EuclidianConstants.MODE_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POINT_ON_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ATTACH_DETACH);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_INTERSECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIDPOINT);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_COMPLEX_NUMBER);
sb.append(" ");
sb.append(EuclidianConstants.MODE_EXTREMUM);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ROOTS);
// basic lines
sb.append(" | ");
sb.append(EuclidianConstants.MODE_JOIN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT_FIXED);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_RAY);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POLYLINE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_VECTOR_FROM_POINT);
// advanced lines
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ORTHOGONAL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARALLEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_LINE_BISECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ANGULAR_BISECTOR);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_TANGENTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POLAR_DIAMETER);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_FITLINE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_LOCUS);
// polygon
sb.append(" | ");
sb.append(EuclidianConstants.MODE_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_REGULAR_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_RIGID_POLYGON);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_VECTOR_POLYGON);
// circles, arcs
sb.append(" | ");
sb.append(EuclidianConstants.MODE_CIRCLE_TWO_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_POINT_RADIUS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_COMPASSES);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_THREE_POINTS);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_SEMICIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_ARC_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_ARC_THREE_POINTS);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CIRCLE_SECTOR_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_SECTOR_THREE_POINTS);
// conics
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ELLIPSE_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_HYPERBOLA_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARABOLA);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CONIC_FIVE_POINTS);
// measurements
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ANGLE_FIXED);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DISTANCE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_AREA);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SLOPE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CREATE_LIST);
sb.append(" ");
sb.append(EuclidianConstants.MODE_RELATION);
sb.append(" ");
sb.append(EuclidianConstants.MODE_FUNCTION_INSPECTOR);
// transformations
sb.append(" | ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_LINE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_CIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ROTATE_BY_ANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_TRANSLATE_BY_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_DILATE_FROM_POINT);
// objects with actions
sb.append(" | ");
sb.append(EuclidianConstants.MODE_SLIDER);
// in exam mode text and image cannot be inserted
if (!exam) {
sb.append(" ");
sb.append(EuclidianConstants.MODE_TEXT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_IMAGE);
}
sb.append(" ");
sb.append(EuclidianConstants.MODE_BUTTON_ACTION);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_CHECKBOX);
sb.append(" ");
sb.append(EuclidianConstants.MODE_TEXTFIELD_ACTION);
// properties
sb.append(" | ");
sb.append(EuclidianConstants.MODE_TRANSLATEVIEW);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ZOOM_IN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ZOOM_OUT);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_LABEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_COPY_VISUAL_STYLE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DELETE);
return sb.toString();
}
/**
* @return toolBar definition string for white board
*/
public static String getWBToolBarDefString() {
StringBuilder sb = new StringBuilder();
sb.append(EuclidianConstants.MODE_MOVE);
sb.append(" | ");
// write tools + erasers
sb.append(EuclidianConstants.MODE_PEN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_FREEHAND_SHAPE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_DELETE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ERASER);
sb.append(" | ");
// geometry objects
sb.append(EuclidianConstants.MODE_JOIN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_REGULAR_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_TWO_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ELLIPSE_THREE_POINTS);
sb.append(" | ");
// shapes
sb.append(EuclidianConstants.MODE_SHAPE_TRIANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_SQUARE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_RECTANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_RECTANGLE_ROUND_EDGES);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_FREEFORM);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_CIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_ELLIPSE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_LINE);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_TEXT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_IMAGE);
return sb.toString();
}
public static String getMOWMediaToolBarDefString() {
StringBuilder sb = new StringBuilder();
sb.append(EuclidianConstants.MODE_TEXT);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_IMAGE);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_VIDEO);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_AUDIO);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_GEOGEBRA);
return sb.toString();
}
public static String getMOWToolsShapesDefString() {
StringBuilder sb = new StringBuilder();
sb.append(EuclidianConstants.MODE_SHAPE_LINE);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_SHAPE_SQUARE);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_SHAPE_RECTANGLE);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_SHAPE_CIRCLE);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_FREEHAND_SHAPE);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_SHAPE_ELLIPSE);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_SHAPE_POLYGON);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_SHAPE_FREEFORM);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_SHAPE_TRIANGLE);
return sb.toString();
}
public static String getMOWToolsPointsDefString() {
StringBuilder sb = new StringBuilder();
sb.append(EuclidianConstants.MODE_POINT);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_POINT_ON_OBJECT);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ATTACH_DETACH);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_INTERSECT);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_MIDPOINT);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_COMPLEX_NUMBER);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_EXTREMUM);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ROOTS);
return sb.toString();
}
public static String getMOWToolsLinesDefString() {
StringBuilder sb = new StringBuilder();
sb.append(EuclidianConstants.MODE_LINE_BISECTOR);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_SEGMENT);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_RAY);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_POLYLINE);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_VECTOR);
sb.append(" | ");
sb.append(EuclidianConstants.MODE_COMPLEX_NUMBER);
return sb.toString();
}
public static String getMOWToolsDefString() {
StringBuilder sb = new StringBuilder();
sb.append(EuclidianConstants.MODE_SHAPE_RECTANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_SQUARE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_CIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_ELLIPSE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_FREEFORM);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_TRIANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHAPE_LINE);
sb.append(" | ");
// Points
sb.append(EuclidianConstants.MODE_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POINT_ON_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ATTACH_DETACH);
sb.append(" ");
sb.append(EuclidianConstants.MODE_INTERSECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIDPOINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_COMPLEX_NUMBER);
sb.append(" ");
sb.append(EuclidianConstants.MODE_EXTREMUM);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ROOTS);
sb.append(" | ");
// Lines
sb.append(EuclidianConstants.MODE_JOIN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_RAY);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POLYLINE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_VECTOR_FROM_POINT);
sb.append(" | ");
// Polygons
sb.append(EuclidianConstants.MODE_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_REGULAR_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_RIGID_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_VECTOR_POLYGON);
sb.append(" | ");
// Circles, arcs
sb.append(EuclidianConstants.MODE_CIRCLE_TWO_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_COMPASSES);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_THREE_POINTS);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_SEMICIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_ARC_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_ARC_THREE_POINTS);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CIRCLE_SECTOR_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_SECTOR_THREE_POINTS);
// conics
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ELLIPSE_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CONIC_FIVE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_HYPERBOLA_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARABOLA);
// reflects
sb.append(" | ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_LINE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_CIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ROTATE_BY_ANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_TRANSLATE_BY_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_DILATE_FROM_POINT);
// advanced lines
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ORTHOGONAL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARALLEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_LINE_BISECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ANGULAR_BISECTOR);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_TANGENTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POLAR_DIAMETER);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_FITLINE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_LOCUS);
// measurements
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SLOPE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DISTANCE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_AREA);
return sb.toString();
}
/**
* @return The default definition of the general tool bar without macros.
*/
public static String getAllToolsNoMacrosForPlane() {
StringBuilder sb = new StringBuilder();
// move
sb.append(EuclidianConstants.MODE_MOVE);
// sb.append(" ");
// sb.append(EuclidianConstants.MODE_MOVE_ROTATE);
// sb.append(" ");
// sb.append(EuclidianConstants.MODE_RECORD_TO_SPREADSHEET);
// points
sb.append(" | ");
sb.append(EuclidianConstants.MODE_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POINT_ON_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ATTACH_DETACH);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_INTERSECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIDPOINT);
// sb.append(" , ");
// sb.append(EuclidianConstants.MODE_COMPLEX_NUMBER);
// basic lines
sb.append(" | ");
sb.append(EuclidianConstants.MODE_JOIN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT_FIXED);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_RAY);
// sb.append(" ");
// sb.append(EuclidianConstants.MODE_POLYLINE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_VECTOR_FROM_POINT);
// advanced lines
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ORTHOGONAL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARALLEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_LINE_BISECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ANGULAR_BISECTOR);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_TANGENTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POLAR_DIAMETER);
// sb.append(" , ");
// sb.append(EuclidianView.MODE_FITLINE);
// sb.append(" , ");
// sb.append(EuclidianView.MODE_LOCUS);
// polygon
sb.append(" | ");
sb.append(EuclidianConstants.MODE_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_REGULAR_POLYGON);
// sb.append(" ");
// sb.append(EuclidianView.MODE_RIGID_POLYGON);
// sb.append(" ");
// sb.append(EuclidianView.MODE_POLYLINE);
// circles, arcs
sb.append(" | ");
sb.append(EuclidianConstants.MODE_CIRCLE_TWO_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_POINT_RADIUS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_COMPASSES);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_THREE_POINTS);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_SEMICIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_ARC_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_ARC_THREE_POINTS);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CIRCLE_SECTOR_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_SECTOR_THREE_POINTS);
// conics
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ELLIPSE_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_HYPERBOLA_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARABOLA);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CONIC_FIVE_POINTS);
// measurements
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ANGLE_FIXED);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DISTANCE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_AREA);
// sb.append(" ");
// sb.append(EuclidianConstants.MODE_SLOPE);
// transformations
sb.append(" | ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_LINE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_POINT);
// sb.append(" "); sb.append(EuclidianConstants.MODE_MIRROR_AT_CIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ROTATE_BY_ANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_TRANSLATE_BY_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_DILATE_FROM_POINT);
// dialogs
sb.append(" | ");
// sb.append(EuclidianConstants.MODE_SLIDER);
// sb.append(" , ");
sb.append(EuclidianConstants.MODE_TEXT);
/*
* sb.append(" "); sb.append(EuclidianView.MODE_IMAGE); sb.append(" ");
* sb.append(EuclidianView.MODE_PEN); sb.append(" , ");
* sb.append(EuclidianView.MODE_RELATION); sb.append(" ");
* sb.append(EuclidianView.MODE_PROBABILITY_CALCULATOR); sb.append(" ");
* sb.append(EuclidianView.MODE_FUNCTION_INSPECTOR);
*/
// objects with actions
/*
* sb.append(" | "); sb.append(EuclidianView.MODE_SHOW_HIDE_CHECKBOX);
* sb.append(" "); sb.append(EuclidianView.MODE_BUTTON_ACTION);
* sb.append(" "); sb.append(EuclidianView.MODE_TEXTFIELD_ACTION);
*/
// properties
sb.append(" | ");
sb.append(EuclidianConstants.MODE_TRANSLATEVIEW);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ZOOM_IN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ZOOM_OUT);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_LABEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_COPY_VISUAL_STYLE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DELETE);
return sb.toString();
}
/**
* @return default toolbar (3D)
*/
public static String getAllToolsNoMacros3D() {
StringBuilder sb = new StringBuilder();
// move
sb.append(EuclidianConstants.MODE_MOVE);
sb.append(" | ");
// points
sb.append(EuclidianConstants.MODE_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POINT_ON_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_INTERSECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIDPOINT);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_ATTACH_DETACH);
// sb.append( " , ");
// sb.append( EuclidianConstants.MODE_COMPLEX_NUMBER );
sb.append(" | ");
// lines
sb.append(EuclidianConstants.MODE_JOIN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT_FIXED);
sb.append(" ");
sb.append(EuclidianConstants.MODE_RAY);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_VECTOR_FROM_POINT);
sb.append(" | ");
// specific lines
sb.append(EuclidianConstants.MODE_ORTHOGONAL_THREE_D);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARALLEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ANGULAR_BISECTOR);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_TANGENTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POLAR_DIAMETER);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_LOCUS);
sb.append(" | ");
// polygons
sb.append(EuclidianConstants.MODE_POLYGON);
sb.append(" | ");
// conics
sb.append(EuclidianConstants.MODE_CIRCLE_AXIS_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_POINT_RADIUS_DIRECTION);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_THREE_POINTS);
sb.append(" , ");
// sb.append(EuclidianView.MODE_SEMICIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_ARC_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_ARC_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_SECTOR_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_SECTOR_THREE_POINTS);
// sb.append( " | ");
sb.append(" , "); // regroup conic stuff to avoid too much toolbar items
// conics
sb.append(EuclidianConstants.MODE_ELLIPSE_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_HYPERBOLA_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARABOLA);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CONIC_FIVE_POINTS);
sb.append(" | ");
// intersection curve
sb.append(EuclidianConstants.MODE_INTERSECTION_CURVE);
sb.append(" | ");
// planes
sb.append(EuclidianConstants.MODE_PLANE_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PLANE);
sb.append(" , ");
// specific planes
sb.append(EuclidianConstants.MODE_ORTHOGONAL_PLANE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARALLEL_PLANE);
sb.append(" | ");
// prisms/pyramids/cones/cylinders
sb.append(EuclidianConstants.MODE_PYRAMID);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PRISM);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CONIFY);
sb.append(" ");
sb.append(EuclidianConstants.MODE_EXTRUSION);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CONE_TWO_POINTS_RADIUS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CYLINDER_TWO_POINTS_RADIUS);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_TETRAHEDRON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CUBE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_NET);
sb.append(" | ");
// spheres
sb.append(EuclidianConstants.MODE_SPHERE_TWO_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SPHERE_POINT_RADIUS);
sb.append(" | ");
// measures
sb.append(EuclidianConstants.MODE_ANGLE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DISTANCE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_AREA);
sb.append(" ");
sb.append(EuclidianConstants.MODE_VOLUME);
sb.append(" | ");
// transformations
sb.append(EuclidianConstants.MODE_MIRROR_AT_PLANE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_LINE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ROTATE_AROUND_LINE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_TRANSLATE_BY_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_DILATE_FROM_POINT);
sb.append(" | ");
// texts, sliders, etc.
sb.append(EuclidianConstants.MODE_TEXT);
sb.append(" | ");
// view control
sb.append(EuclidianConstants.MODE_ROTATEVIEW);
sb.append(" ");
sb.append(EuclidianConstants.MODE_TRANSLATEVIEW);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ZOOM_IN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ZOOM_OUT);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_LABEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_COPY_VISUAL_STYLE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DELETE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_VIEW_IN_FRONT_OF);
return sb.toString();
}
public static String getAllToolsNoMacrosPhone(App app) {
StringBuilder sb = new StringBuilder();
// move
sb.append(EuclidianConstants.MODE_MOVE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_FREEHAND_SHAPE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PEN);
// points
sb.append(" | ");
sb.append(EuclidianConstants.MODE_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POINT_ON_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ATTACH_DETACH);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_INTERSECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIDPOINT);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_COMPLEX_NUMBER);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_EXTREMUM);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_ROOTS);
// basic lines
sb.append(" | ");
sb.append(EuclidianConstants.MODE_JOIN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT_FIXED);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_RAY);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POLYLINE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_VECTOR_FROM_POINT);
// advanced lines
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ORTHOGONAL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARALLEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_LINE_BISECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ANGULAR_BISECTOR);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_TANGENTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POLAR_DIAMETER);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_FITLINE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_LOCUS);
// polygon
sb.append(" | ");
sb.append(EuclidianConstants.MODE_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_REGULAR_POLYGON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_RIGID_POLYGON);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_VECTOR_POLYGON);
// circles, arcs
sb.append(" | ");
sb.append(EuclidianConstants.MODE_CIRCLE_TWO_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_POINT_RADIUS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_COMPASSES);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_THREE_POINTS);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_SEMICIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_ARC_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_ARC_THREE_POINTS);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CIRCLE_SECTOR_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_SECTOR_THREE_POINTS);
// conics
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ELLIPSE_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_HYPERBOLA_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARABOLA);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CONIC_FIVE_POINTS);
// measurements
sb.append(" | ");
sb.append(EuclidianConstants.MODE_ANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ANGLE_FIXED);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DISTANCE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_AREA);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SLOPE);
// transformations
sb.append(" | ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_LINE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_CIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ROTATE_BY_ANGLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_TRANSLATE_BY_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_DILATE_FROM_POINT);
//
sb.append(" | ");
sb.append(EuclidianConstants.MODE_RELATION);
// objects with actions
sb.append(" | ");
sb.append(EuclidianConstants.MODE_SLIDER);
// properties
sb.append(" | ");
sb.append(EuclidianConstants.MODE_TRANSLATEVIEW);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ZOOM_IN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ZOOM_OUT);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_LABEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_COPY_VISUAL_STYLE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DELETE);
return sb.toString();
}
public static String getAllToolsNoMacros3DPhone(App app) {
StringBuilder sb = new StringBuilder();
// move
sb.append(EuclidianConstants.MODE_MOVE);
sb.append(" | ");
// points
sb.append(EuclidianConstants.MODE_POINT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POINT_ON_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_INTERSECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIDPOINT);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_ATTACH_DETACH);
// sb.append( " , ");
// sb.append( EuclidianConstants.MODE_COMPLEX_NUMBER );
sb.append(" | ");
// lines
sb.append(EuclidianConstants.MODE_JOIN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SEGMENT_FIXED); // dialog OK, result
// undefined -
// MOB-545
sb.append(" ");
sb.append(EuclidianConstants.MODE_RAY);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_VECTOR_FROM_POINT);
sb.append(" | ");
// specific lines
sb.append(EuclidianConstants.MODE_ORTHOGONAL_THREE_D);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARALLEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ANGULAR_BISECTOR);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_TANGENTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_POLAR_DIAMETER);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_LOCUS); // exception: MOB-546 -- maybe
// related to MOB-542
sb.append(" | ");
// polygons
sb.append(EuclidianConstants.MODE_POLYGON); // preview shows and
// disappear: MOB-468
sb.append(" | ");
// conics
sb.append(EuclidianConstants.MODE_CIRCLE_AXIS_POINT);
sb.append(" ");
// sb.append(EuclidianConstants.MODE_CIRCLE_POINT_RADIUS_DIRECTION); //
// needs dialog: MOB-556
// sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_THREE_POINTS);
sb.append(" , ");
// sb.append(EuclidianView.MODE_SEMICIRCLE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_ARC_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_ARC_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCLE_SECTOR_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CIRCUMCIRCLE_SECTOR_THREE_POINTS);
// sb.append( " | ");
sb.append(" , "); // regroup conic stuff to avoid too much toolbar items
// conics
sb.append(EuclidianConstants.MODE_ELLIPSE_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_HYPERBOLA_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARABOLA);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CONIC_FIVE_POINTS);
sb.append(" | ");
// intersection curve
sb.append(EuclidianConstants.MODE_INTERSECTION_CURVE); // OK by clicking
// several
// objects, not
// clicking
// intersection:
// MOB-547
sb.append(" | ");
// planes
sb.append(EuclidianConstants.MODE_PLANE_THREE_POINTS);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PLANE);
sb.append(" , ");
// specific planes
sb.append(EuclidianConstants.MODE_ORTHOGONAL_PLANE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_PARALLEL_PLANE);
sb.append(" | ");
// prisms/pyramids/cones/cylinders
sb.append(EuclidianConstants.MODE_PYRAMID); // preview problem, maybe
// the same as polygon
// MOB-468
sb.append(" ");
sb.append(EuclidianConstants.MODE_PRISM); // preview problem, maybe the
// same as polygon MOB-468
sb.append(" , ");
sb.append(EuclidianConstants.MODE_CONIFY); // OK on drag, dialog missing
// on click: MOB-557
sb.append(" ");
sb.append(EuclidianConstants.MODE_EXTRUSION); // OK on drag, dialog
// missing on click:
// MOB-557
// sb.append(" , ");
// sb.append(EuclidianConstants.MODE_CONE_TWO_POINTS_RADIUS); // needs
// dialog: MOB-558
// sb.append(" ");
// sb.append(EuclidianConstants.MODE_CYLINDER_TWO_POINTS_RADIUS); //
// needs dialog: MOB-558
sb.append(" , ");
sb.append(EuclidianConstants.MODE_TETRAHEDRON);
sb.append(" ");
sb.append(EuclidianConstants.MODE_CUBE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_NET); // OK -- slider hard to find:
// MOB-548
sb.append(" | ");
// spheres
sb.append(EuclidianConstants.MODE_SPHERE_TWO_POINTS);
// sb.append(" ");
// sb.append(EuclidianConstants.MODE_SPHERE_POINT_RADIUS); // needs
// dialog: MOB-559
sb.append(" | ");
// measures
sb.append(EuclidianConstants.MODE_ANGLE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DISTANCE); // text not visible in 3D
// view: MOB-549
sb.append(" ");
sb.append(EuclidianConstants.MODE_AREA); // text not visible in 3D view:
// MOB-549
sb.append(" ");
sb.append(EuclidianConstants.MODE_VOLUME); // text not visible in 3D
// view: MOB-549
sb.append(" | ");
// transformations
sb.append(EuclidianConstants.MODE_MIRROR_AT_PLANE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_LINE);
sb.append(" ");
sb.append(EuclidianConstants.MODE_MIRROR_AT_POINT);
sb.append(" ");
// sb.append(EuclidianConstants.MODE_ROTATE_AROUND_LINE); // needs
// dialog: MOB-560
// sb.append(" ");
sb.append(EuclidianConstants.MODE_TRANSLATE_BY_VECTOR);
sb.append(" ");
sb.append(EuclidianConstants.MODE_DILATE_FROM_POINT); // OK -- check
// output visual
// style:
// MOB-550
sb.append(" | ");
// texts, sliders, etc.
// sb.append(EuclidianConstants.MODE_TEXT); // needs dialog
// sb.append(" | ");
// view control
sb.append(EuclidianConstants.MODE_ROTATEVIEW);
sb.append(" ");
sb.append(EuclidianConstants.MODE_TRANSLATEVIEW); // check clipping box
// update: MOB-551
sb.append(" ");
sb.append(EuclidianConstants.MODE_ZOOM_IN);
sb.append(" ");
sb.append(EuclidianConstants.MODE_ZOOM_OUT);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_OBJECT);
sb.append(" ");
sb.append(EuclidianConstants.MODE_SHOW_HIDE_LABEL);
sb.append(" ");
sb.append(EuclidianConstants.MODE_COPY_VISUAL_STYLE); // works reverse
// (as in 2D
// view)
sb.append(" , ");
sb.append(EuclidianConstants.MODE_DELETE);
sb.append(" , ");
sb.append(EuclidianConstants.MODE_VIEW_IN_FRONT_OF);
return sb.toString();
}
/**
* Parses a toolbar definition string like "0 , 1 2 | 3 4 5 || 7 8 9" where
* the int values are mode numbers, "," adds a separator within a menu, "|"
* starts a new menu and "||" adds a separator before starting a new menu.
*
* @param toolbarString
* toolbar definition string
*
* @return toolbar as nested Vector objects with Integers for the modes.
* Note: separators have negative values.
* @throws NumberFormatException
* when non-integer is encountered
*/
public static Vector<ToolbarItem> parseToolbarString(String toolbarString)
throws NumberFormatException {
return parseToolbarString(toolbarString, defaultToolsRemover);
}
public static Vector<ToolbarItem> parseToolbarString(String toolbarString,
ToolsRemover toolsRemover) throws NumberFormatException {
Vector<ToolbarItem> toolbar = new Vector<ToolbarItem>();
StringBuilder currentNumber = new StringBuilder();
Vector<Integer> menu = new Vector<Integer>();
for (int i = 0; i < toolbarString.length(); i++) {
char ch = toolbarString.charAt(i);
if ('0' <= ch && ch <= '9') {
currentNumber.append(ch);
} else if (ch == '|') {
flush(currentNumber, menu, toolsRemover);
if (menu.size() > 0) {
toolbar.add(new ToolbarItem(menu));
}
menu = new Vector<Integer>();
} else if (ch == ',') {
flush(currentNumber, menu, toolsRemover);
menu.add(SEPARATOR);
} else {
flush(currentNumber, menu, toolsRemover);
}
}
flush(currentNumber, menu, toolsRemover);
if (menu.size() > 0) {
toolbar.add(new ToolbarItem(menu));
}
return toolbar;
}
private static void flush(StringBuilder currentNumber, Vector<Integer> menu,
ToolsRemover toolsRemover) {
if (currentNumber.length() > 0) {
int mode = Integer.parseInt(currentNumber.toString());
if (toolsRemover.keep(mode)) {
menu.addElement(mode);
}
currentNumber.setLength(0);
}
}
public static String addMode(String toolbarString, int mode) {
int pos = toolbarString.lastIndexOf('|');
if (pos > 0) {
String after = toolbarString.substring(pos + 1).trim();
int digits = (EuclidianConstants.MACRO_MODE_ID_OFFSET + "")
.length();
boolean mayStartWithMacro = after.length() >= digits;
for (int i = 0; i < digits && mayStartWithMacro; i++) {
if (after.charAt(i) > '9' || after.charAt(i) < '0') {
mayStartWithMacro = false;
}
}
if (mayStartWithMacro) {
String before = toolbarString.substring(0, pos).trim();
return before + " | " + mode + " " + after;
}
}
return toolbarString + " | " + mode;
}
/**
* @param app
* @return All tools as a toolbar definition string
*/
public static String getAllTools(App app) {
StringBuilder sb = new StringBuilder();
sb.append(ToolBar.getAllToolsNoMacros(true, app.isExam(), app));
// macros
Kernel kernel = app.getKernel();
int macroNumber = kernel.getMacroNumber();
// check if at least one macro is shown
// to avoid strange GUI
boolean at_least_one_shown = false;
for (int i = 0; i < macroNumber; i++) {
Macro macro = kernel.getMacro(i);
if (macro.isShowInToolBar()) {
at_least_one_shown = true;
break;
}
}
if (macroNumber > 0 && at_least_one_shown) {
sb.append(" || ");
for (int i = 0; i < macroNumber; i++) {
Macro macro = kernel.getMacro(i);
if (macro.isShowInToolBar()) {
sb.append(i + EuclidianConstants.MACRO_MODE_ID_OFFSET);
sb.append(" ");
}
}
}
return sb.toString();
}
public static void removeSeparators(List<ToolbarItem> standardToolbar) {
for (ToolbarItem item : standardToolbar) {
Vector<Integer> menu = item.getMenu();
// iterate through menu backwards because items might be removed
for (int i = menu.size() - 1; i > -1; i--) {
if (ToolBar.SEPARATOR.equals(menu.get(i))) {
menu.remove(i);
}
}
}
}
static public class ToolsRemover {
public ToolsRemover() {
init();
}
protected void init() {
// to override
}
public boolean keep(int mode) {
if (mode != 59 && mode != 1011) {
return true;
}
return false;
}
}
static private ToolsRemover defaultToolsRemover = new ToolsRemover();
/**
* any toolbar composed of a set of following menus should be considered as
* default toolbar (old default toolbar)
*/
static private final String[][] DEFAULT_TOOLBAR_PRE_5_0_280 = {
{ "0", "0 39" }, { "1 501 67 5 19 72", "1 501 67 5 19 72 75 76" },
{ "2 15 45 18 65 7 37" }, { "4 3 8 9 13 44 58 47" },
{ "16 51 64 70" }, { "10 34 53 11 24 20 22 21 23" },
{ "55 56 57 12" }, { "36 46 38 49 50 71" }, { "30 29 54 32 31 33" },
{ "17 26 62 73 14 68", "17 26 62 14 66 68",
"17 26 62 73 14 66 68" },
{ "25 52 60 61" }, { "40 41 42 27 28 35 6" } };
/**
* any toolbar composed of a set of following menus should be considered as
* default toolbar
*/
static private final String[][] DEFAULT_TOOLBAR = {
{"0 39 73 62 110"},
{"1 501 67 5 19 72 75 76"},
{"2 15 45 18 65 7 37"},
{"4 3 8 9 13 44 58 47"},
{"16 51 64 70"},
{"10 34 53 11 24 20 22 21 23"},
{"55 56 57 12"},
{"36 46 38 49 50 71 14 68"},
{"30 29 54 32 31 33"},
{"25 17 26 60 52 61"},
{"40 41 42 27 28 35 6"}
};
/**
* any toolbar composed of a set of following menus should be considered as
* default toolbar
*/
static private final String[][] DEFAULT_TOOLBAR_3D = {
{"0"},
{"1 501 5 19 67"},
{"2 15 45 18 7 37"},
{"514 3 9 13 44 47"},
{"16"},
{"551 550 11 20 22 21 23 55 56 57 12"},
{"69"},
{"510 511 512 513"},
{"533 531 534 532 522 523 537 536 535"},
{"521 520"},
{"36 38 49 560"},
{"571 30 29 570 31 33"},
{"17"},
{"540 40 41 42 27 28 35 6 502"}
};
final static private String[] split(String definition) {
String def2 = definition.replaceAll(",", ""); // remove comas
def2 = def2.replaceAll("59", ""); // remove record to spreadsheet tool
def2 = def2.replaceAll("\\|{2,}", " \\| "); // remove double vertical
// bars
def2 = def2.replaceAll(" {2,}", " "); // remove multiple spaces
return def2.split(" \\| "); // split by tool menus
}
final static public boolean isOldDefaultToolbar(String definition) {
if (definition == null) {
return false;
}
String[] defSplit = split(definition);
return isDefaultToolbar(defSplit, DEFAULT_TOOLBAR_PRE_5_0_280);
}
final static public boolean isDefaultToolbar(String definition) {
if (definition == null) {
return false;
}
String[] defSplit = split(definition);
if (isDefaultToolbar(defSplit, DEFAULT_TOOLBAR_PRE_5_0_280)) {
return true;
}
return isDefaultToolbar(defSplit, DEFAULT_TOOLBAR);
}
final static public boolean isDefaultToolbar3D(String definition) {
if (definition == null) {
return false;
}
String[] defSplit = split(definition);
return isDefaultToolbar(defSplit, DEFAULT_TOOLBAR_3D);
}
final static private boolean isDefaultToolbar(String[] split, String[][] defaultToolbar) {
if (split.length != defaultToolbar.length) {
return false;
}
for (int i = 0; i < defaultToolbar.length; i++) {
boolean found = false;
String menu = split[i];
String[] defaults = defaultToolbar[i];
for (int j = 0; j < defaults.length && !found; j++) {
if (defaults[j].equals(menu)) {
found = true;
}
}
if (!found) {
return false;
}
}
return true;
}
final static public TreeSet<Integer> toSet(String definition) {
String def2 = definition.replaceAll(",", ""); // remove comas
def2 = def2.replaceAll("\\|", " "); // remove vertical bars
def2 = def2.replaceAll(" {2,}", " "); // remove multiple spaces
String[] split = def2.split(" "); // split by tool menus
TreeSet<Integer> ret = new TreeSet<Integer>();
for (String s : split) {
try {
int mode = Integer.parseInt(s);
ret.add(mode);
} catch (NumberFormatException e) {
// not an integer
}
}
return ret;
}
}