|
From: SVN by r. <sv...@ca...> - 2008-11-09 21:16:57
|
Author: roy
Date: 2008-11-09 22:16:45 +0100 (Sun, 09 Nov 2008)
New Revision: 329
Modified:
src/main/java/nl/improved/sqlclient/charva/SQLShellComponent.java
Log:
implement 'non native' paste and copy methods using mouse
Modified: src/main/java/nl/improved/sqlclient/charva/SQLShellComponent.java
===================================================================
--- src/main/java/nl/improved/sqlclient/charva/SQLShellComponent.java 2008-11-09 21:07:33 UTC (rev 328)
+++ src/main/java/nl/improved/sqlclient/charva/SQLShellComponent.java 2008-11-09 21:16:45 UTC (rev 329)
@@ -14,10 +14,13 @@
import charvax.swing.JTextArea;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
+import nl.improved.sqlclient.SQLProperties;
+import nl.improved.sqlclient.SQLUtil;
/**
*
@@ -26,6 +29,7 @@
public class SQLShellComponent extends JTextArea {
private CharvaSQLShellWindow sqlshellWindow = new CharvaSQLShellWindow(this);
+ private Point startPos;
public SQLShellComponent() {
setEditable(false);
@@ -37,24 +41,106 @@
sqlshellWindow.keyTyped(evt);
}
+ void setSelection(int pStart, int pEnd) {
+ if (!"all".equals(SQLProperties.getProperty(SQLProperties.PropertyName.MOUSE_HANDLING))) {
+ return;
+ }
+ int start, end;
+ if (pEnd < pStart) {
+ end = pStart;
+ start = pEnd;
+ } else {
+ start = pStart;
+ end = pEnd;
+ }
+ end = Math.min(getText().length(), end);
+ sqlshellWindow.debug("SET SELECTION: "+ start +" -> "+ end);
+ sqlshellWindow.debug("SET TO CLIPBOARD: "+ getText().substring(start, end));
+ Clipboard clipBoard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard();
+ final String text = getText().substring(start, Math.min(getText().length(), end));
+ Transferable tf = new Transferable() {
+
+ public DataFlavor[] getTransferDataFlavors() {
+ return new DataFlavor[] {DataFlavor.stringFlavor};
+ }
+
+ public boolean isDataFlavorSupported(DataFlavor flavor) {
+ return DataFlavor.stringFlavor == flavor;
+ }
+
+ public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
+ return text;
+ }
+ };
+ clipBoard.setContents(tf, null);
+ }
+
@Override
public void processMouseEvent(MouseEvent evt) {
super.processMouseEvent(evt);
- if (evt.getModifiers() == evt.MOUSE_PRESSED) {
- if (evt.getButton() == MouseEvent.BUTTON2) {
- Clipboard clipBoard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard();
- try {
- String clipBoardContents = (String) clipBoard.getData(DataFlavor.stringFlavor);
- //sqlshellWindow.debug(clipBoardContents);
- sqlshellWindow.insertText(clipBoardContents);
- sqlshellWindow.repaintScreen();
- } catch (UnsupportedFlavorException ex) {
- Logger.getLogger(SQLShellComponent.class.getName()).log(Level.SEVERE, null, ex);
- } catch (IOException ex) {
- Logger.getLogger(SQLShellComponent.class.getName()).log(Level.SEVERE, null, ex);
+ if (evt.getModifiers() == MouseEvent.MOUSE_CLICKED) {
+ if (evt.getButton() == MouseEvent.BUTTON1) {
+ if (evt.getClickCount() == 2) { // double click.. select word under char
+ try {
+ int line = getLineStartOffset(evt.getY()-1);
+ String text = getText();
+ int start, end;
+ for (start = line + evt.getX(); start > 0; start--) {
+ if (SQLUtil.isBreakCharacter(text.charAt(start))) {
+ break;
+ }
+ }
+ for (end = line + evt.getX(); end < text.length(); end++) {
+ if (SQLUtil.isBreakCharacter(text.charAt(end))) {
+ break;
+ }
+ }
+ setSelection(start, end);
+ } catch(Exception e) { }
}
-
}
+ } else if (evt.getModifiers() == MouseEvent.MOUSE_PRESSED) {
+ sqlshellWindow.debug("PRESSED");
+ if (evt.getButton() == MouseEvent.BUTTON1) {
+ if (startPos == null) {
+ startPos = new Point(evt.getX()-1, evt.getY()-1);
+ } else {
+ try {
+ Point endPos = new Point(evt.getX()-1, evt.getY()-1);
+ int start = getLineStartOffset(startPos.y) + startPos.x;
+ int end = getLineStartOffset(endPos.y) + endPos.x;
+ setSelection(start, end);
+ startPos = null;
+ } catch(Exception e) {}
+ }
+ }
+ if (evt.getButton() == MouseEvent.BUTTON2) { // paste from clipboard
+ String mouseHandling = SQLProperties.getProperty(SQLProperties.PropertyName.MOUSE_HANDLING);
+ if ("all".equals(mouseHandling) || "paste".equals(mouseHandling)) {
+ Clipboard clipBoard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard();
+ try {
+ String clipBoardContents = (String) clipBoard.getData(DataFlavor.stringFlavor);
+ //sqlshellWindow.debug(clipBoardContents);
+ sqlshellWindow.insertText(clipBoardContents);
+ sqlshellWindow.repaintScreen();
+ } catch (UnsupportedFlavorException ex) {
+ Logger.getLogger(SQLShellComponent.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (IOException ex) {
+ Logger.getLogger(SQLShellComponent.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+ } else if (evt.getModifiers() == MouseEvent.MOUSE_RELEASED) {
+ sqlshellWindow.debug("RELEASED: " + startPos);
+ Point endPos = new Point(evt.getX()-1, evt.getY()-1);
+ if (startPos != null) {
+ try {
+ int start = getLineStartOffset(startPos.y) + startPos.x;
+ int end = getLineStartOffset(endPos.y) + endPos.x;
+ setSelection(start, end);
+ startPos = null;
+ } catch(Exception e) { /* ignore */ }
+ }
}
}
|