X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/TextAction.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/TextAction.java new file mode 100644 index 0000000..430910b --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/TextAction.java @@ -0,0 +1,146 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import org.eclipse.swt.SWTError; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.dnd.*; +import org.eclipse.webbrowser.internal.WebBrowser; +import org.eclipse.jface.action.Action; +/** + * Text actions (cut, copy, paste) for the Web browser. + */ +public class TextAction extends Action { + protected WebBrowser browser; + protected byte type; + + public static final byte CUT = 0; + public static final byte COPY = 1; + public static final byte PASTE = 2; + + /** + * TextAction constructor comment. + */ + protected TextAction(WebBrowser browser, byte type) { + super(type + "!"); + this.browser = browser; + this.type = type; + } + + /** + * Copies the selected text to the clipboard. The text will be put in the + * clipboard in plain text format. + *

+ * + * @exception SWTException

+ */ + public void copy() { + Point selection = browser.combo.getSelection(); + + int length = selection.y - selection.x; + if (length > 0) { + TextTransfer plainTextTransfer = TextTransfer.getInstance(); + try { + browser.clipboard.setContents( + new String[] { browser.combo.getText().substring(selection.x, selection.y) }, + new Transfer[] { plainTextTransfer }); + } catch (SWTError error) { + // Copy to clipboard failed. This happens when another application + // is accessing the clipboard while we copy. Ignore the error. + // Fixes 1GDQAVN + } + } + } + + /** + * Moves the selected text to the clipboard. The text will be put in the + * clipboard in plain text format and RTF format. + *

+ * + * @exception SWTException

+ */ + public void cut(){ + Point selection = browser.combo.getSelection(); + + if (selection.y > selection.x) { + copy(); + delete(); + } + } + + /** + * Deletes the character to the right of the caret. Delete the selected text if any. + */ + public void delete() { + Point selection = browser.combo.getSelection(); + String text = browser.combo.getText(); + + if (selection.x != selection.y) { + text = text.substring(0, selection.x) + text.substring(selection.y); + browser.combo.setText(text); + browser.combo.setSelection(new Point(selection.x, selection.x)); + } + } + + /** + * Replaces the selection with the clipboard text or insert the text at + * the current caret offset if there is no selection. + * If the widget has the SWT.SINGLE style and the clipboard text contains + * more than one line, only the first line without line delimiters is + * inserted in the widget. + *

+ * + * @exception SWTException

+ */ + public void paste() { + TextTransfer transfer = TextTransfer.getInstance(); + Point selection = browser.combo.getSelection(); + String text = browser.combo.getText(); + + String newText = (String) browser.clipboard.getContents(transfer); + if (newText != null && newText.length() > 0) { + text = text.substring(0, selection.x) + newText + text.substring(selection.y); + browser.combo.setText(text); + + // set the selection to the end of the paste + int x = selection.x + newText.length(); + browser.combo.setSelection(new Point(x, x)); + } + } + + /** + * Implementation of method defined on IAction. + */ + public void run() { + if (browser == null || browser.combo == null) + return; + if (type == CUT) + cut(); + else if (type == COPY) + copy(); + else if (type == PASTE) + paste(); + } + + /** + * + */ + protected void update() { } +} \ No newline at end of file