package com.hackerdude.apps.sqlide.plugins; //import textarea.JEditTextArea; import java.awt.BorderLayout; import java.awt.Font; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.io.IOException; import java.util.Properties; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import com.hackerdude.apps.sqlide.ProgramConfig; import com.hackerdude.apps.sqlide.pluginapi.NodeIDEItem; //import textarea.TextAreaDefaults; //import textarea.syntax.SyntaxDocument; /** * Extension of JEditTextArea that supports dropping of Browser Node Items. * * * @author David Martinez * @version 1.0 */ public class SyntaxTextArea extends JPanel implements DropTargetListener { JTextArea textArea = new JTextArea(); DropTarget dropTarget = null; Properties configuration = new Properties(); BorderLayout layout = new BorderLayout(); JScrollPane scroller = new JScrollPane(textArea); public SyntaxTextArea() { super(); jbInit(); } public void jbInit() { this.setLayout(layout); this.add(scroller, BorderLayout.CENTER); } public String getText() { return textArea.getText(); } public void cut() { textArea.cut(); } public void copy() { textArea.copy(); } public void paste() { textArea.paste(); } public SyntaxTextArea(Properties configuration) {//TextAreaDefaults defaults) { super(); this.configuration = configuration; dropTarget = new DropTarget(this, this); jbInit(); // setPreferredSize(new Dimension(300,100)); } /** * a drop has occurred * */ public void drop (DropTargetDropEvent event) { /** @todo Accept targets by inserting at cursor location instead of replacing the whole text. */ String dropped = null; try { Transferable transferable = event.getTransferable(); // we accept Strings and local objects if ( transferable.isDataFlavorSupported(NodeIDEItem.localDataFlavor()) ){ event.acceptDrop(DnDConstants.ACTION_MOVE); NodeIDEItem item = (NodeIDEItem)transferable.getTransferData(NodeIDEItem.localDataFlavor()); System.out.println("[SyntaxTextArea] Got Item "+item.toString()); dropped = item.toString(); event.getDropTargetContext().dropComplete(true); this.grabFocus(); } else if ( transferable.isDataFlavorSupported(DataFlavor.stringFlavor) ){ event.acceptDrop(DnDConstants.ACTION_MOVE); dropped = (String)transferable.getTransferData (DataFlavor.stringFlavor); System.out.println("[SyntaxTextArea] Got String "+dropped); } else{ event.rejectDrop(); } } catch (IOException exception) { exception.printStackTrace(); System.err.println( "Exception" + exception.getMessage()); event.rejectDrop(); } catch (UnsupportedFlavorException ufException ) { ufException.printStackTrace(); System.err.println( "Exception" + ufException.getMessage()); event.rejectDrop(); } if ( dropped != null ) setText(textArea.getText()+dropped); } public void fireConfigurationChanged() { Font theFont = ProgramConfig.getFont(configuration, ProgramConfig.PROP_FONT_FOR_EDITOR); textArea.setFont(theFont); } public void setText(String text) { textArea.setText(text); } /** * is invoked when you are exit the DropSite without dropping */ public void dragExit (DropTargetEvent event) { // System.out.println( "dragExit"); } public void setEditable(boolean isEditable) { textArea.setEditable(isEditable); } /** * is invoked if the use modifies the current drop gesture */ public void dropActionChanged ( DropTargetDragEvent event ) { } /** * is invoked when a drag operation is going on */ public void dragOver (DropTargetDragEvent event) { // System.out.println( "dragOver"); } /** * is invoked when you are dragging over the DropSite */ public void dragEnter (DropTargetDragEvent event) { event.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); } /** * @return Returns the textArea. */ public JTextArea getTextArea() { return textArea; } }