/** 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); }
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); } }