@Override protected final GeoElement[] perform(Command c) throws MyError { int n = c.getArgumentNumber(); GeoElement arg2[]; switch (n) { case 2: arg2 = resArgs(c); if (arg2[1].isGeoBoolean()) { GeoElement geo = arg2[0]; try { geo.setShowObjectCondition((GeoBoolean) arg2[1]); } catch (CircularDefinitionException e) { e.printStackTrace(); throw argErr(app, c.getName(), arg2[1]); } geo.updateRepaint(); return new GeoElement[0]; } throw argErr(app, c.getName(), arg2[1]); default: throw argNumErr(app, c.getName(), n); } }
/** Just copying the selection as string text format, independently! */ public String copyString(int column1, int row1, int column2, int row2) { StringBuilder cellBufferStrLoc = new StringBuilder(); for (int row = row1; row <= row2; ++row) { for (int column = column1; column <= column2; ++column) { GeoElement value = RelativeCopy.getValue(app, column, row); if (value != null) { String valueString = value.toValueString(StringTemplate.maxPrecision); // for aesthetical copying, it is also good to remove // trailing zeroes (zero is nothing anyway): int indx = valueString.indexOf(app.getKernel().getLocalization().unicodeDecimalPoint); if (indx > -1) { int end = valueString.length() - 1; // only in this case, we should remove trailing zeroes! while (valueString.charAt(end) == '0') end--; if (end == indx) end--; valueString = valueString.substring(0, end + 1); } cellBufferStrLoc.append(valueString); } if (column != column2) { cellBufferStrLoc.append('\t'); } } if (row != row2) { cellBufferStrLoc.append('\n'); } } return new String(cellBufferStrLoc); }
private void removePoint(GeoElement oldPoint) { // remove dependent algorithms (e.g. segments) from update sets of // objects further up (e.g. polygon) the tree ArrayList<AlgoElement> algoList = oldPoint.getAlgorithmList(); for (int k = 0; k < algoList.size(); k++) { AlgoElement algo = algoList.get(k); for (int j = 0; j < input.length; j++) input[j].removeFromUpdateSets(algo); } // remove old point oldPoint.setParentAlgorithm(null); // remove dependent segment algorithm that are part of this polygon // to make sure we don't remove the polygon as well GeoPolygon poly = getPoly(); for (int k = 0; k < algoList.size(); k++) { AlgoElement algo = algoList.get(k); // make sure we don't remove the polygon as well if (algo instanceof AlgoJoinPointsSegmentInterface && ((AlgoJoinPointsSegmentInterface) algo).getPoly() == poly) { continue; } algo.remove(); } algoList.clear(); // remove point oldPoint.doRemove(); }
/** * @param app application * @param view view * @param selectedGeos selected geos * @param geos geos * @param location place to show */ public ContextMenuChooseGeoD( AppD app, EuclidianView view, ArrayList<GeoElement> selectedGeos, ArrayList<GeoElement> geos, Point location, GPoint invokerLocation) { super(app, selectedGeos, location); this.view = view; this.selectedGeos = selectedGeos; // return if just one geo, or if first geos more than one if ( /* geos.size()<2 || */ selectedGeos.size() > 1) { justOneGeo = false; return; } justOneGeo = true; // section to choose a geo // addSeparator(); createSelectAnotherMenu(view.getMode()); this.loc = invokerLocation; this.geos = geos; GeoElement geoSelected = selectedGeos.get(0); // add geos geoAddedForSelectAnother = false; metas = new TreeSet<GeoElement>(); for (GeoElement geo : geos) { if (geo != geoSelected) { // don't add selected geo addGeo(geo); } if (geo.getMetasLength() > 0) { for (GeoElement meta : ((FromMeta) geo).getMetas()) { if (!metas.contains(meta)) { addGeo(meta); } } } } if (geoAddedForSelectAnother) { addSelectAnotherMenu(); } // TODO: clear selection is not working from here this.getWrappedPopup().getSelectionModel().clearSelection(); }
public void update(GeoElement geo) { if (geo.isEmptySpreadsheetCell() && geo.isDefined()) { geo.setEmptySpreadsheetCell(false); } updateWithoutTrace(geo); // trace value if (!isIniting && geo.getSpreadsheetTrace()) { app.getTraceManager().traceToSpreadsheet(geo); } }
private void applyUseAsText(ArrayList<GeoElement> geos) { // btnUseAsText for (int i = 0; i < geos.size(); i++) { GeoElement geo = geos.get(i); if (geo instanceof GeoCasCell) { ((GeoCasCell) geo).setUseAsText(btnUseAsText.isSelected()); geo.updateRepaint(); needUndo = true; } } }
@Override public void mousePressed(MouseEvent e) { if (e.getSource() != table) return; int row = table.rowAtPoint(e.getPoint()); if (row >= 0) { // init drag GeoElement geo = ((ConstructionTableData) data).getGeoElement(row); dragIndex = geo.getConstructionIndex(); minIndex = geo.getMinConstructionIndex(); maxIndex = geo.getMaxConstructionIndex(); } }
private void applyTextColor(ArrayList<GeoElement> geos) { Color color = org.geogebra.desktop.awt.GColorD.getAwtColor(btnTextColor.getSelectedColor()); for (int i = 0; i < geos.size(); i++) { GeoElement geo = geos.get(i); if (geo instanceof GeoCasCell) { ((GeoCasCell) geo).setFontColor(new org.geogebra.desktop.awt.GColorD(color)); geo.updateRepaint(); needUndo = true; } } }
@Override public final void compute() { int size = geoList.size(); if (!geoList.isDefined() || size <= 1) { g.setUndefined(); return; } double sigmax = 0; double sigmay = 0; double sigmaxx = 0; // double sigmayy=0; not needed double sigmaxy = 0; for (int i = 0; i < size; i++) { GeoElement geo = geoList.get(i); if (geo.isGeoPoint()) { double x; double y; if (geo.isGeoElement3D()) { Coords coords = ((GeoPointND) geo).getInhomCoordsInD3(); if (!Kernel.isZero(coords.getZ())) { g.setUndefined(); return; } x = coords.getX(); y = coords.getY(); } else { double xy[] = new double[2]; ((GeoPoint) geo).getInhomCoords(xy); x = xy[0]; y = xy[1]; } sigmax += x; sigmay += y; sigmaxx += x * x; sigmaxy += x * y; // sigmayy+=y*y; not needed } else { g.setUndefined(); return; } } // y on x regression line // (y - sigmay / n) = (Sxx / Sxy)*(x - sigmax / n) // rearranged to eliminate all divisions g.x = size * sigmax * sigmay - size * size * sigmaxy; g.y = size * size * sigmaxx - size * sigmax * sigmax; g.z = size * sigmax * sigmaxy - size * sigmaxx * sigmay; // (g.x)x + // (g.y)y + // g.z = 0 }
/** Calls doRemove() for all output objects of this algorithm except for keepGeo. */ @Override public void removeOutputExcept(GeoElement keepGeo) { for (int i = 0; i < super.getOutputLength(); i++) { GeoElement geo = super.getOutput(i); if (geo != keepGeo) { if (geo.isGeoPoint()) { removePoint(geo); } else { geo.doRemove(); } } } }
@Override public List<String> getChoiches(Localization loc) { TreeSet<GeoElement> points = app.getKernel().getPointSet(); choices.clear(); choices.add(""); Iterator<GeoElement> it = points.iterator(); int count = 0; while (it.hasNext() || ++count > MAX_CHOICES) { GeoElement p = it.next(); choices.add(p.getLabel(StringTemplate.editTemplate)); } return choices; }
/** @param cell initialize table with cell information */ protected void initData(GeoCasCell cell) { HashSet<GeoElement> vars = new HashSet<GeoElement>(); if (cell.getInputVE().getVariables() != null) { for (GeoElement var : cell.getInputVE().getVariables()) { addVariables(var, vars); } } // get the substitution list from cell ArrayList<Vector<String>> substList = cell.getSubstList(); Vector<String> row; data = new Vector<Vector<String>>(vars.size() + 1); Iterator<GeoElement> iter = vars.iterator(); while (iter.hasNext()) { row = new Vector<String>(2); GeoElement var = iter.next(); String nextVar = var.getLabel(StringTemplate.defaultTemplate); int i = 0; for (i = 0; i < data.size(); i++) { if (data.get(i).firstElement().compareTo(nextVar) >= 0) { break; } } if (i == data.size() || !data.get(i).firstElement().equals(nextVar)) { row.add(nextVar); boolean added = false; if (substList != null && !substList.isEmpty()) { // search for nextVar in subst list for (int k = 0; k < substList.size(); k++) { // case we found it if (substList.get(k).get(0).equals(nextVar)) { // add to substitution data row.add(substList.get(k).get(1)); added = true; break; } } } // case we didn't found if (!added) { row.add(""); } data.insertElementAt(row, i); } } row = new Vector<String>(2); row.add(""); row.add(""); data.add(row); }
@Override public boolean doHighlighting() { // if the polygon depends on a polyhedron, look at the meta' // highlighting if (getGeoElement().getMetasLength() > 0) { for (GeoElement meta : ((FromMeta) getGeoElement()).getMetas()) { if (meta != null && meta.doHighlighting()) return true; } } return super.doHighlighting(); }
/** * @param mouseLoc mouse location * @return first hitted label geo */ public GeoElement getLabelHit(GPoint mouseLoc) { for (Drawable3DList list : lists) { for (Drawable3D d : list) { if (d.isVisible()) { GeoElement geo = d.getGeoElement(); if (!geo.isGeoText() && geo.isPickable() && d.label.hit(mouseLoc)) { return geo; } } } } return null; }
public AlgoQuadricLimitedPointPointRadius( Construction c, String[] labels, GeoPointND origin, GeoPointND secondPoint, NumberValue r, int type) { super(c); this.origin = origin; this.secondPoint = secondPoint; this.radius = r; quadric = new GeoQuadric3DLimited(c); // ,origin,secondPoint); quadric.setType(type); input = new GeoElement[] {(GeoElement) origin, (GeoElement) secondPoint, (GeoElement) r}; ((GeoElement) origin).addAlgorithm(this); ((GeoElement) secondPoint).addAlgorithm(this); ((GeoElement) r).addAlgorithm(this); // parent of output quadric.setParentAlgorithm(this); cons.addToAlgorithmList(this); setQuadric(); algoSide = new AlgoQuadricSide(cons, quadric, true, null); cons.removeFromConstructionList(algoSide); side = (GeoQuadric3DPart) algoSide.getQuadric(); side.setParentAlgorithm(this); quadric.setSide(side); algoEnds = createEnds(); bottom.setParentAlgorithm(this); top.setParentAlgorithm(this); quadric.setBottomTop(bottom, top); // output = new GeoElement[] {quadric,bottom,top,side}; setOutput(); quadric.initLabelsIncludingBottom(labels); quadric.updatePartsVisualStyle(); // force update for side update(); }
public void copy(int column1, int row1, int column2, int row2, boolean skipGeoCopy, boolean nat) { sourceColumn1 = column1; sourceRow1 = row1; // copy tab-delimited geo values into the external buffer if (cellBufferStr == null) { cellBufferStr = new StringBuilder(); } else { cellBufferStr.setLength(0); } for (int row = row1; row <= row2; ++row) { for (int column = column1; column <= column2; ++column) { GeoElement value = RelativeCopy.getValue(app, column, row); if (value != null) { cellBufferStr.append(value.toValueString(StringTemplate.maxPrecision)); } if (column != column2) { cellBufferStr.append('\t'); } } if (row != row2) { cellBufferStr.append('\n'); } } // store the tab-delimited values in the clipboard /*Toolkit toolkit = Toolkit.getDefaultToolkit(); Clipboard clipboard = toolkit.getSystemClipboard(); StringSelection stringSelection = new StringSelection(cellBufferStr); clipboard.setContents(stringSelection, null);*/ // a clipboard inside this application is better than nothing // staticClipboardString = new String(cellBufferStr); if (nat) { // if called from native event, setting clipboard contents // is not crucial, and redundant/harmful in IE... setInternalClipboardContents(new String(cellBufferStr)); } else { setClipboardContents(new String(cellBufferStr), getFocusCallback()); } // store copies of the actual geos in the internal buffer if (skipGeoCopy) { cellBufferGeo = null; } else { cellBufferGeo = RelativeCopy.getValues(app, column1, row1, column2, row2); } }
public Widget getTableCellEditorWidget( MyTableW table0, Object value0, boolean isSelected, int row0, int column0) { table = table0; if (value0 instanceof String) { // clicked to type value = null; } else { value = (GeoElement) value0; } column = column0; row = row0; String text = ""; if (value != null) { text = getEditorInitString(value); int index = text.indexOf("="); if ((!value.isGeoText())) { if (index == -1) { text = "=" + text; } } } autoCompleteTextField.setText(text); autoCompleteTextField.setFont(app.getFontCanDisplay(text)); autoCompleteTextField.requestFocus(); editing = true; return autoCompleteTextField; }
/** * Creates new random element algo * * @param cons * @param label * @param geoList */ public AlgoRandomElement(Construction cons, String label, GeoList geoList) { super(cons); this.geoList = geoList; // init return element as copy of first list element if (geoList.size() > 0) { element = geoList.get(0).copyInternal(cons); } else if (geoList.getTypeStringForXML() != null) { // if the list was non-empty at some point before saving, get the // same type of geo // saved in XML from 4.1.131.0 element = kernel.createGeoElement(cons, geoList.getTypeStringForXML()); } // desperate case: empty list else { // saved in XML from 4.0.18.0 element = cons.getOutputGeo(); } setInputOutput(); compute(); element.setLabel(label); cons.addRandomGeo(element); }
private void applyFontStyle(ArrayList<GeoElement> geos) { int fontStyle = 0; if (btnBold.isSelected()) fontStyle += 1; if (btnItalic.isSelected()) fontStyle += 2; for (int i = 0; i < geos.size(); i++) { GeoElement geo = geos.get(i); Log.debug(((GeoCasCell) geo).getGeoText()); if (geo instanceof GeoCasCell && ((GeoCasCell) geo).getGeoText().getFontStyle() != fontStyle) { ((GeoCasCell) geo).getGeoText().setFontStyle(fontStyle); geo.updateRepaint(); needUndo = true; } } }
public void remove(GeoElement geo) { GPoint location = geo.getSpreadsheetCoords(); if (location != null) { doRemove(geo, location.y, location.x); cellRangeManager.updateCellRangeAlgos(geo, location, true); } }
private void updateWithoutTrace(GeoElement geo) { GPoint location = geo.getSpreadsheetCoords(); if (location != null && location.x < app.getMaxSpreadsheetColumnsVisible() && location.y < app.getMaxSpreadsheetRowsVisible()) { highestUsedColumn = Math.max(highestUsedColumn, location.x); highestUsedRow = Math.max(highestUsedRow, location.y); if (location.y >= getRowCount()) { setRowCount(location.y + 1); } if (location.x >= getColumnCount()) { // table.setMyColumnCount(location.x + 1); // JViewport cH = spreadsheet.getColumnHeader(); // bugfix: double-click to load ggb file gives cH = null // if (cH != null) cH.revalidate(); } setValueAt(geo, location.y, location.x); /* * DONE ELSEWHERE // add tracing geos to the trace collection if * (!isIniting && geo.getSpreadsheetTrace()) { * app.getTraceManager().addSpreadsheetTraceGeo(geo); } */ } }
private void applyTextSize(ArrayList<GeoElement> geos) { double fontSize = GeoText.getRelativeFontSize( btnTextSize.getSelectedIndex()); // transform indices to the range -4, .. , // 4 for (int i = 0; i < geos.size(); i++) { GeoElement geo = geos.get(i); if (geo instanceof GeoCasCell && ((GeoCasCell) geo).getGeoText().getFontSizeMultiplier() != fontSize) { ((GeoCasCell) geo).setFontSizeMultiplier(fontSize); geo.updateRepaint(); needUndo = true; } } }
@Override public Component getTableCellEditorComponent( JTable table1, Object value, boolean isSelected, int rowIndex, int columnIndex) { geo = ((ConstructionTableData) data).getGeoElement(rowIndex); String val = geo.getCaptionDescription(StringTemplate.defaultTemplate); inputPanel = new InputPanelD("", (AppD) app, 20, false); inputPanel.setText(val); inputPanel.setEnabled(true); inputPanel.setVisible(true); return inputPanel; }
@Override protected String getDescription(GeoElement geo) { String text = null; if (geo.isIndependent() && geo.getDefinition() == null) { text = getAlgebraDescriptionTextOrHTML(geo); } else { switch (kernel.getAlgebraStyle()) { case Kernel.ALGEBRA_STYLE_VALUE: text = getAlgebraDescriptionTextOrHTML(geo); break; case Kernel.ALGEBRA_STYLE_DESCRIPTION: IndexHTMLBuilder builder = new IndexHTMLBuilder(true); geo.addLabelTextOrHTML( geo.getDefinitionDescription(StringTemplate.defaultTemplate), builder); text = builder.toString(); break; case Kernel.ALGEBRA_STYLE_DEFINITION: builder = new IndexHTMLBuilder(true); geo.addLabelTextOrHTML(geo.getDefinition(StringTemplate.defaultTemplate), builder); text = builder.toString(); break; } } return text; }
/** * Attempts to create or redefine the cell geo using the current editing string * * @return */ private boolean processGeo() { try { if (allowProcessGeo) { String text = autoCompleteTextField.getText(); // ?// (String) // delegate.getCellEditorValue(); // get GeoElement of current cell value = kernel.lookupLabel(GeoElementSpreadsheet.getSpreadsheetCellName(column, row)); if (text.equals("")) { if (value != null) { value.removeOrSetUndefinedIfHasFixedDescendent(); value = null; } } else { GeoElement newVal = RelativeCopy.prepareAddingValueToTableNoStoringUndoInfo( kernel, app, text, value, column, row, false); if (newVal == null) { return false; } value = newVal; } if (value != null) app.storeUndoInfo(); } } catch (Exception ex) { // show GeoGebra error dialog // kernel.getApplication().showError(ex.getMessage()); ex.printStackTrace(); // TODO super.stopCellEditing(); editing = false; return false; } return true; }
@Override public final void compute() { if (!geoList.isDefined() || geoList.size() == 0) { element.setUndefined(); return; } GeoElement randElement = geoList.get((int) Math.floor((cons.getApplication().getRandomNumber() * geoList.size()))); // check type: if (randElement.getGeoClassType() == element.getGeoClassType()) { element.set(randElement); } else { element.setUndefined(); } }
protected GeoElement copyInternal(Construction cons, GeoElement geo) { return geo.copyInternal(cons); }
protected GeoElement copy(GeoElement geo) { return geo.copy(); }
protected GeoElement getResultTemplate(GeoElement geo) { if (geo instanceof GeoPoly || geo.isLimitedPath()) return copyInternal(cons, geo); if (geo.isGeoList()) return new GeoList(cons); return copy(geo); }
public void geoToPlotPanel(GeoElement listGeo) { listGeo.addView(plotPanel.getViewID()); plotPanel.add(listGeo); listGeo.removeView(App.VIEW_EUCLIDIAN); app.getEuclidianView1().remove(listGeo); }