From: <kp...@us...> - 2010-04-08 22:38:17
|
Revision: 17604 http://jedit.svn.sourceforge.net/jedit/?rev=17604&view=rev Author: kpouer Date: 2010-04-08 22:38:10 +0000 (Thu, 08 Apr 2010) Log Message: ----------- ability to choose a prefered DataFlavor when pasting text to textArea Modified Paths: -------------- jEdit/trunk/org/gjt/sp/jedit/Registers.java jEdit/trunk/org/gjt/sp/jedit/datatransfer/RichTextTransferable.java Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/datatransfer/JEditDataFlavor.java Modified: jEdit/trunk/org/gjt/sp/jedit/Registers.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/Registers.java 2010-04-08 20:59:58 UTC (rev 17603) +++ jEdit/trunk/org/gjt/sp/jedit/Registers.java 2010-04-08 22:38:10 UTC (rev 17604) @@ -30,6 +30,7 @@ import java.io.*; import org.gjt.sp.jedit.buffer.JEditBuffer; +import org.gjt.sp.jedit.datatransfer.JEditDataFlavor; import org.gjt.sp.jedit.datatransfer.JEditRichText; import org.gjt.sp.jedit.datatransfer.RichTextTransferable; import org.gjt.sp.jedit.datatransfer.TransferHandler; @@ -208,6 +209,17 @@ paste(textArea,register,false); } + /** + * Insets the contents of the specified register into the text area. + * @param textArea The text area + * @param register The register + * @since jEdit 2.7pre2 + */ + public static void paste(TextArea textArea, char register, DataFlavor preferredDataFlavor) + { + paste(textArea,register,false, preferredDataFlavor); + } + /** * Inserts the contents of the specified register into the text area. * @param textArea The text area @@ -234,37 +246,26 @@ Transferable transferable = reg.getTransferable(); Mode mode = null; String selection = null; - if (transferable.isDataFlavorSupported(RichTextTransferable.jEditRichTextDataFlavor)) + if (transferable.isDataFlavorSupported(JEditDataFlavor.jEditRichTextDataFlavor)) { try { - JEditRichText data = (JEditRichText) transferable.getTransferData(RichTextTransferable.jEditRichTextDataFlavor); + JEditRichText data = (JEditRichText) transferable.getTransferData(JEditDataFlavor.jEditRichTextDataFlavor); mode = data.getMode(); selection = data.getText(); } catch (UnsupportedFlavorException e) { - e.printStackTrace(); + Log.log(Log.ERROR, Registers.class, e); } catch (IOException e) { - e.printStackTrace(); + Log.log(Log.ERROR, Registers.class, e); } } else if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) { - try - { - selection = (String) transferable.getTransferData(DataFlavor.stringFlavor); - } - catch (UnsupportedFlavorException e) - { - e.printStackTrace(); - } - catch (IOException e) - { - e.printStackTrace(); - } + selection = getTextFromTransferable(transferable, DataFlavor.stringFlavor); } if(selection == null) { @@ -329,6 +330,122 @@ HistoryModel.getModel("clipboard").addItem(selection); } //}}} + /** + * Inserts the contents of the specified register into the text area. + * @param textArea The text area + * @param register The register + * @param vertical Vertical (columnar) paste + * @param preferredDataFlavor the preferred dataflavor. If not available + * <tt>DataFlavor.stringFlavor</tt> will be used + * @since jEdit 4.4pre1 + */ + public static void paste(TextArea textArea, char register, + boolean vertical, DataFlavor preferredDataFlavor) + { + if (JEditDataFlavor.jEditRichTextDataFlavor.equals(preferredDataFlavor)) + { + paste(textArea,register,vertical); + return; + } + if(!textArea.isEditable()) + { + textArea.getToolkit().beep(); + return; + } + + Register reg = getRegister(register); + + if(reg == null) + { + textArea.getToolkit().beep(); + return; + } + Transferable transferable = reg.getTransferable(); + String selection = null; + if (transferable.isDataFlavorSupported(preferredDataFlavor)) + { + selection = getTextFromTransferable(transferable, preferredDataFlavor); + } + else if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) + { + selection = getTextFromTransferable(transferable, DataFlavor.stringFlavor); + } + if(selection == null) + { + textArea.getToolkit().beep(); + return; + } + JEditBuffer buffer = textArea.getBuffer(); + try + { + buffer.beginCompoundEdit(); + + /* vertical paste */ + if(vertical && textArea.getSelectionCount() == 0) + { + int caret = textArea.getCaretPosition(); + int caretLine = textArea.getCaretLine(); + Selection.Rect rect = new Selection.Rect( + caretLine,caret,caretLine,caret); + textArea.setSelectedText(rect,selection); + caretLine = textArea.getCaretLine(); + + if(caretLine != textArea.getLineCount() - 1) + { + + int startColumn = rect.getStartColumn( + buffer); + int offset = buffer + .getOffsetOfVirtualColumn( + caretLine + 1,startColumn,null); + if(offset == -1) + { + buffer.insertAtColumn(caretLine + 1,startColumn,""); + textArea.setCaretPosition( + buffer.getLineEndOffset( + caretLine + 1) - 1); + } + else + { + textArea.setCaretPosition( + buffer.getLineStartOffset( + caretLine + 1) + offset); + } + } + } + else /* Regular paste */ + { + textArea.replaceSelection(selection); + } + } + finally + { + buffer.endCompoundEdit(); + } + + HistoryModel.getModel("clipboard").addItem(selection); + } //}}} + + private static String getTextFromTransferable(Transferable transferable, DataFlavor dataFlavor) + { + try + { + Object data = transferable.getTransferData(dataFlavor); + if (dataFlavor.getRepresentationClass().equals(String.class)) + return (String) data; + return data.toString(); + } + catch (UnsupportedFlavorException e) + { + Log.log(Log.ERROR, Registers.class, e); + } + catch (IOException e) + { + Log.log(Log.ERROR, Registers.class, e); + } + return null; + } + //{{{ getRegister() method /** * Returns the specified register. Added: jEdit/trunk/org/gjt/sp/jedit/datatransfer/JEditDataFlavor.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/datatransfer/JEditDataFlavor.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/datatransfer/JEditDataFlavor.java 2010-04-08 22:38:10 UTC (rev 17604) @@ -0,0 +1,36 @@ +/* + * JEditDataFlavor.java + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2010 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package org.gjt.sp.jedit.datatransfer; + +import java.awt.datatransfer.DataFlavor; + +/** + * @author Matthieu Casanova + * @since jEdit 4.4.x + */ +public class JEditDataFlavor +{ + public static final DataFlavor jEditRichTextDataFlavor = new DataFlavor(JEditRichText.class, DataFlavor.javaJVMLocalObjectMimeType); + public static final DataFlavor html = new DataFlavor("text/html; class=java.lang.String", "text/html"); + +} Modified: jEdit/trunk/org/gjt/sp/jedit/datatransfer/RichTextTransferable.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/datatransfer/RichTextTransferable.java 2010-04-08 20:59:58 UTC (rev 17603) +++ jEdit/trunk/org/gjt/sp/jedit/datatransfer/RichTextTransferable.java 2010-04-08 22:38:10 UTC (rev 17604) @@ -32,8 +32,7 @@ */ public class RichTextTransferable implements Transferable { - public static final DataFlavor jEditRichTextDataFlavor = new DataFlavor(JEditRichText.class, DataFlavor.javaJVMLocalObjectMimeType); - private static final DataFlavor[] supportedDataFlavor = {jEditRichTextDataFlavor}; + private static final DataFlavor[] supportedDataFlavor = {JEditDataFlavor.jEditRichTextDataFlavor}; private final String text; private final String mode; @@ -51,7 +50,7 @@ public boolean isDataFlavorSupported(DataFlavor flavor) { - return jEditRichTextDataFlavor.equals(flavor); + return JEditDataFlavor.jEditRichTextDataFlavor.equals(flavor); } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |