Revision: 4399 http://sourceforge.net/p/jump-pilot/code/4399 Author: michaudm Date: 2015-04-14 20:42:14 +0000 (Tue, 14 Apr 2015) Log Message: ----------- Sources for spatialite plugin
Added Paths: ----------- plug-ins/SpatialitePlugin/ plug-ins/SpatialitePlugin/trunk/ plug-ins/SpatialitePlugin/trunk/lib/ plug-ins/SpatialitePlugin/trunk/lib/jts-1.13.jar plug-ins/SpatialitePlugin/trunk/lib/libcharset1.dll plug-ins/SpatialitePlugin/trunk/lib/libgeos-3-1-1.dll plug-ins/SpatialitePlugin/trunk/lib/libgeos_c-1.dll plug-ins/SpatialitePlugin/trunk/lib/libiconv2.dll plug-ins/SpatialitePlugin/trunk/lib/libproj-0.dll plug-ins/SpatialitePlugin/trunk/lib/libspatialite-1.dll plug-ins/SpatialitePlugin/trunk/lib/log4j-1.2.16.jar plug-ins/SpatialitePlugin/trunk/lib/openjump-1.6.0alpha.jar plug-ins/SpatialitePlugin/trunk/lib/sqlite-jdbc-3.7.15-SNAPSHOT.jar plug-ins/SpatialitePlugin/trunk/lib/sqlite3.jar plug-ins/SpatialitePlugin/trunk/lib/sqlite3jni.dll plug-ins/SpatialitePlugin/trunk/src/ plug-ins/SpatialitePlugin/trunk/src/META-INF/ plug-ins/SpatialitePlugin/trunk/src/META-INF/MANIFEST.MF plug-ins/SpatialitePlugin/trunk/src/jedit/ plug-ins/SpatialitePlugin/trunk/src/jedit/DefaultInputHandler.class plug-ins/SpatialitePlugin/trunk/src/jedit/DefaultInputHandler.java plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$MacroRecorder.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRecordable.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRepeatable.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$Wrapper.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace_word.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete_word.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_end.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_home.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$end.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$home.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_break.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_char.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_tab.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_char.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_line.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_page.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_word.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$overwrite.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_char.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_line.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_page.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_word.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$repeat.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$toggle_rect.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler.class plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler.java plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler$1.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretBlinker.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretUndo.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ComponentHandler.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DocumentHandler.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DragHandler.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$FocusHandler.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MouseHandler.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MutableCaretEvent.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ScrollLayout.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea.class plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea.java plug-ins/SpatialitePlugin/trunk/src/jedit/KeywordMap$Keyword.class plug-ins/SpatialitePlugin/trunk/src/jedit/KeywordMap.class plug-ins/SpatialitePlugin/trunk/src/jedit/KeywordMap.java plug-ins/SpatialitePlugin/trunk/src/jedit/README.txt plug-ins/SpatialitePlugin/trunk/src/jedit/SQLTokenMarker.class plug-ins/SpatialitePlugin/trunk/src/jedit/SQLTokenMarker.java plug-ins/SpatialitePlugin/trunk/src/jedit/SyntaxDocument.class plug-ins/SpatialitePlugin/trunk/src/jedit/SyntaxDocument.java plug-ins/SpatialitePlugin/trunk/src/jedit/SyntaxStyle.class plug-ins/SpatialitePlugin/trunk/src/jedit/SyntaxStyle.java plug-ins/SpatialitePlugin/trunk/src/jedit/SyntaxUtilities.class plug-ins/SpatialitePlugin/trunk/src/jedit/SyntaxUtilities.java plug-ins/SpatialitePlugin/trunk/src/jedit/TeXTokenMarker.class plug-ins/SpatialitePlugin/trunk/src/jedit/TeXTokenMarker.java plug-ins/SpatialitePlugin/trunk/src/jedit/TextAreaDefaults.class plug-ins/SpatialitePlugin/trunk/src/jedit/TextAreaDefaults.java plug-ins/SpatialitePlugin/trunk/src/jedit/TextAreaPainter$Highlight.class plug-ins/SpatialitePlugin/trunk/src/jedit/TextAreaPainter.class plug-ins/SpatialitePlugin/trunk/src/jedit/TextAreaPainter.java plug-ins/SpatialitePlugin/trunk/src/jedit/TextUtilities.class plug-ins/SpatialitePlugin/trunk/src/jedit/TextUtilities.java plug-ins/SpatialitePlugin/trunk/src/jedit/Token.class plug-ins/SpatialitePlugin/trunk/src/jedit/Token.java plug-ins/SpatialitePlugin/trunk/src/jedit/TokenMarker$LineInfo.class plug-ins/SpatialitePlugin/trunk/src/jedit/TokenMarker.class plug-ins/SpatialitePlugin/trunk/src/jedit/TokenMarker.java plug-ins/SpatialitePlugin/trunk/src/org/ plug-ins/SpatialitePlugin/trunk/src/org/jam/ plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/ plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/ plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/ImportLayer.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/ImportLayer.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/PrintLog.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/PrintLog.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/PuglinTest.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/PuglinTest.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/RendererTree.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteDb.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteDb.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteDialog$1.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteDialog$2.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteDialog.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteDialog.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteExtension.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteExtension.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteGeometryBlob.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteGeometryBlob.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialitePluging.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialitePluging.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteValueConverterFactory$WKBGeometryValueConverter.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteValueConverterFactory.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SpatialiteValueConverterFactory.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SqliteTokenMarker.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/SqliteTokenMarker.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/TableType.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/Tnode.class plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/Tnode.java plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/funchlp.xml plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/ plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/addlayer.png plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/database.png plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/folder.png plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/fsql.png plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/fun.png plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/geotable.png plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/geotablefdo.png plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/geotablevir.png plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/runsql.png plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/images/table.png plug-ins/SpatialitePlugin/trunk/src/org/jam/openjump/spatialiteplugin/spatialite.properties Added: plug-ins/SpatialitePlugin/trunk/lib/jts-1.13.jar =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/jts-1.13.jar =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/jts-1.13.jar 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/jts-1.13.jar 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/jts-1.13.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/libcharset1.dll =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/libcharset1.dll =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/libcharset1.dll 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/libcharset1.dll 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/libcharset1.dll ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/libgeos-3-1-1.dll =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/libgeos-3-1-1.dll =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/libgeos-3-1-1.dll 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/libgeos-3-1-1.dll 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/libgeos-3-1-1.dll ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/libgeos_c-1.dll =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/libgeos_c-1.dll =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/libgeos_c-1.dll 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/libgeos_c-1.dll 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/libgeos_c-1.dll ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/libiconv2.dll =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/libiconv2.dll =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/libiconv2.dll 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/libiconv2.dll 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/libiconv2.dll ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/libproj-0.dll =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/libproj-0.dll =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/libproj-0.dll 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/libproj-0.dll 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/libproj-0.dll ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/libspatialite-1.dll =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/libspatialite-1.dll =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/libspatialite-1.dll 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/libspatialite-1.dll 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/libspatialite-1.dll ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/log4j-1.2.16.jar =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/log4j-1.2.16.jar =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/log4j-1.2.16.jar 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/log4j-1.2.16.jar 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/log4j-1.2.16.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/openjump-1.6.0alpha.jar =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/openjump-1.6.0alpha.jar =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/openjump-1.6.0alpha.jar 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/openjump-1.6.0alpha.jar 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/openjump-1.6.0alpha.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/sqlite-jdbc-3.7.15-SNAPSHOT.jar =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/sqlite-jdbc-3.7.15-SNAPSHOT.jar =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/sqlite-jdbc-3.7.15-SNAPSHOT.jar 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/sqlite-jdbc-3.7.15-SNAPSHOT.jar 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/sqlite-jdbc-3.7.15-SNAPSHOT.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/sqlite3.jar =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/sqlite3.jar =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/sqlite3.jar 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/sqlite3.jar 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/sqlite3.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/lib/sqlite3jni.dll =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/lib/sqlite3jni.dll =================================================================== --- plug-ins/SpatialitePlugin/trunk/lib/sqlite3jni.dll 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/lib/sqlite3jni.dll 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/lib/sqlite3jni.dll ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/META-INF/MANIFEST.MF =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/META-INF/MANIFEST.MF (rev 0) +++ plug-ins/SpatialitePlugin/trunk/src/META-INF/MANIFEST.MF 2015-04-14 20:42:14 UTC (rev 4399) @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Class-Path: sqlite3.jar openjump-1.6.0alpha.jar jts-1.13.jar log4j-1.2 + .16.jar + Added: plug-ins/SpatialitePlugin/trunk/src/jedit/DefaultInputHandler.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/DefaultInputHandler.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/DefaultInputHandler.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/DefaultInputHandler.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/DefaultInputHandler.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/DefaultInputHandler.java =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/DefaultInputHandler.java (rev 0) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/DefaultInputHandler.java 2015-04-14 20:42:14 UTC (rev 4399) @@ -0,0 +1,348 @@ +package jedit; + +/* + * DefaultInputHandler.java - Default implementation of an input handler + * Copyright (C) 1999 Slava Pestov + * + * You may use and modify this package for any purpose. Redistribution is + * permitted, in both source and binary form, provided that this notice + * remains intact in all source distributions of this package. + */ + +import javax.swing.KeyStroke; +import java.awt.event.*; +import java.awt.Toolkit; +import java.util.Hashtable; +import java.util.StringTokenizer; + +/** + * The default input handler. It maps sequences of keystrokes into actions + * and inserts key typed events into the text area. + * @author Slava Pestov + * @version $Id: DefaultInputHandler.java,v 1.18 1999/12/13 03:40:30 sp Exp $ + */ +public class DefaultInputHandler extends InputHandler +{ + /** + * Creates a new input handler with no key bindings defined. + */ + public DefaultInputHandler() + { + bindings = currentBindings = new Hashtable(); + } + + /** + * Sets up the default key bindings. + */ + public void addDefaultKeyBindings() + { + addKeyBinding("BACK_SPACE",BACKSPACE); + addKeyBinding("C+BACK_SPACE",BACKSPACE_WORD); + addKeyBinding("DELETE",DELETE); + addKeyBinding("C+DELETE",DELETE_WORD); + + addKeyBinding("ENTER",INSERT_BREAK); + addKeyBinding("TAB",INSERT_TAB); + + addKeyBinding("INSERT",OVERWRITE); + addKeyBinding("C+\\",TOGGLE_RECT); + + addKeyBinding("HOME",HOME); + addKeyBinding("END",END); + addKeyBinding("S+HOME",SELECT_HOME); + addKeyBinding("S+END",SELECT_END); + addKeyBinding("C+HOME",DOCUMENT_HOME); + addKeyBinding("C+END",DOCUMENT_END); + addKeyBinding("CS+HOME",SELECT_DOC_HOME); + addKeyBinding("CS+END",SELECT_DOC_END); + + addKeyBinding("PAGE_UP",PREV_PAGE); + addKeyBinding("PAGE_DOWN",NEXT_PAGE); + addKeyBinding("S+PAGE_UP",SELECT_PREV_PAGE); + addKeyBinding("S+PAGE_DOWN",SELECT_NEXT_PAGE); + + addKeyBinding("LEFT",PREV_CHAR); + addKeyBinding("S+LEFT",SELECT_PREV_CHAR); + addKeyBinding("C+LEFT",PREV_WORD); + addKeyBinding("CS+LEFT",SELECT_PREV_WORD); + addKeyBinding("RIGHT",NEXT_CHAR); + addKeyBinding("S+RIGHT",SELECT_NEXT_CHAR); + addKeyBinding("C+RIGHT",NEXT_WORD); + addKeyBinding("CS+RIGHT",SELECT_NEXT_WORD); + addKeyBinding("UP",PREV_LINE); + addKeyBinding("S+UP",SELECT_PREV_LINE); + addKeyBinding("DOWN",NEXT_LINE); + addKeyBinding("S+DOWN",SELECT_NEXT_LINE); + + addKeyBinding("C+ENTER",REPEAT); + } + + /** + * Adds a key binding to this input handler. The key binding is + * a list of white space separated key strokes of the form + * <i>[modifiers+]key</i> where modifier is C for Control, A for Alt, + * or S for Shift, and key is either a character (a-z) or a field + * name in the KeyEvent class prefixed with VK_ (e.g., BACK_SPACE) + * @param keyBinding The key binding + * @param action The action + */ + public void addKeyBinding(String keyBinding, ActionListener action) + { + Hashtable current = bindings; + + StringTokenizer st = new StringTokenizer(keyBinding); + while(st.hasMoreTokens()) + { + KeyStroke keyStroke = parseKeyStroke(st.nextToken()); + if(keyStroke == null) + return; + + if(st.hasMoreTokens()) + { + Object o = current.get(keyStroke); + if(o instanceof Hashtable) + current = (Hashtable)o; + else + { + o = new Hashtable(); + current.put(keyStroke,o); + current = (Hashtable)o; + } + } + else + current.put(keyStroke,action); + } + } + + /** + * Removes a key binding from this input handler. This is not yet + * implemented. + * @param keyBinding The key binding + */ + public void removeKeyBinding(String keyBinding) + { + throw new InternalError("Not yet implemented"); + } + + /** + * Removes all key bindings from this input handler. + */ + public void removeAllKeyBindings() + { + bindings.clear(); + } + + /** + * Returns a copy of this input handler that shares the same + * key bindings. Setting key bindings in the copy will also + * set them in the original. + */ + public InputHandler copy() + { + return new DefaultInputHandler(this); + } + + /** + * Handle a key pressed event. This will look up the binding for + * the key stroke and execute it. + */ + public void keyPressed(KeyEvent evt) + { + int keyCode = evt.getKeyCode(); + int modifiers = evt.getModifiers(); + + if(keyCode == KeyEvent.VK_CONTROL || + keyCode == KeyEvent.VK_SHIFT || + keyCode == KeyEvent.VK_ALT || + keyCode == KeyEvent.VK_META) + return; + + if((modifiers & ~KeyEvent.SHIFT_MASK) != 0 + || evt.isActionKey() + || keyCode == KeyEvent.VK_BACK_SPACE + || keyCode == KeyEvent.VK_DELETE + || keyCode == KeyEvent.VK_ENTER + || keyCode == KeyEvent.VK_TAB + || keyCode == KeyEvent.VK_ESCAPE) + { + if(grabAction != null) + { + handleGrabAction(evt); + return; + } + + KeyStroke keyStroke = KeyStroke.getKeyStroke(keyCode, + modifiers); + Object o = currentBindings.get(keyStroke); + if(o == null) + { + // Don't beep if the user presses some + // key we don't know about unless a + // prefix is active. Otherwise it will + // beep when caps lock is pressed, etc. + if(currentBindings != bindings) + { + Toolkit.getDefaultToolkit().beep(); + // F10 should be passed on, but C+e F10 + // shouldn't + repeatCount = 0; + repeat = false; + evt.consume(); + } + currentBindings = bindings; + return; + } + else if(o instanceof ActionListener) + { + currentBindings = bindings; + + executeAction(((ActionListener)o), + evt.getSource(),null); + + evt.consume(); + return; + } + else if(o instanceof Hashtable) + { + currentBindings = (Hashtable)o; + evt.consume(); + return; + } + } + } + + /** + * Handle a key typed event. This inserts the key into the text area. + */ + public void keyTyped(KeyEvent evt) + { + int modifiers = evt.getModifiers(); + char c = evt.getKeyChar(); + if(c != KeyEvent.CHAR_UNDEFINED && + (modifiers & KeyEvent.ALT_MASK) == 0) + { + if(c >= 0x20 && c != 0x7f) + { + KeyStroke keyStroke = KeyStroke.getKeyStroke( + Character.toUpperCase(c)); + Object o = currentBindings.get(keyStroke); + + if(o instanceof Hashtable) + { + currentBindings = (Hashtable)o; + return; + } + else if(o instanceof ActionListener) + { + currentBindings = bindings; + executeAction((ActionListener)o, + evt.getSource(), + String.valueOf(c)); + return; + } + + currentBindings = bindings; + + if(grabAction != null) + { + handleGrabAction(evt); + return; + } + + // 0-9 adds another 'digit' to the repeat number + if(repeat && Character.isDigit(c)) + { + repeatCount *= 10; + repeatCount += (c - '0'); + return; + } + + executeAction(INSERT_CHAR,evt.getSource(), + String.valueOf(evt.getKeyChar())); + + repeatCount = 0; + repeat = false; + } + } + } + + /** + * Converts a string to a keystroke. The string should be of the + * form <i>modifiers</i>+<i>shortcut</i> where <i>modifiers</i> + * is any combination of A for Alt, C for Control, S for Shift + * or M for Meta, and <i>shortcut</i> is either a single character, + * or a keycode name from the <code>KeyEvent</code> class, without + * the <code>VK_</code> prefix. + * @param keyStroke A string description of the key stroke + */ + public static KeyStroke parseKeyStroke(String keyStroke) + { + if(keyStroke == null) + return null; + int modifiers = 0; + int index = keyStroke.indexOf('+'); + if(index != -1) + { + for(int i = 0; i < index; i++) + { + switch(Character.toUpperCase(keyStroke + .charAt(i))) + { + case 'A': + modifiers |= InputEvent.ALT_MASK; + break; + case 'C': + modifiers |= InputEvent.CTRL_MASK; + break; + case 'M': + modifiers |= InputEvent.META_MASK; + break; + case 'S': + modifiers |= InputEvent.SHIFT_MASK; + break; + } + } + } + String key = keyStroke.substring(index + 1); + if(key.length() == 1) + { + char ch = Character.toUpperCase(key.charAt(0)); + if(modifiers == 0) + return KeyStroke.getKeyStroke(ch); + else + return KeyStroke.getKeyStroke(ch,modifiers); + } + else if(key.length() == 0) + { + System.err.println("Invalid key stroke: " + keyStroke); + return null; + } + else + { + int ch; + + try + { + ch = KeyEvent.class.getField("VK_".concat(key)) + .getInt(null); + } + catch(Exception e) + { + System.err.println("Invalid key stroke: " + + keyStroke); + return null; + } + + return KeyStroke.getKeyStroke(ch,modifiers); + } + } + + // private members + private Hashtable bindings; + private Hashtable currentBindings; + + private DefaultInputHandler(DefaultInputHandler copy) + { + bindings = currentBindings = copy.bindings; + } +} Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$MacroRecorder.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$MacroRecorder.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$MacroRecorder.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$MacroRecorder.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$MacroRecorder.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRecordable.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRecordable.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRecordable.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRecordable.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRecordable.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRepeatable.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRepeatable.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRepeatable.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRepeatable.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$NonRepeatable.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$Wrapper.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$Wrapper.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$Wrapper.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$Wrapper.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$Wrapper.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace_word.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace_word.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace_word.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace_word.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$backspace_word.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete_word.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete_word.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete_word.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete_word.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$delete_word.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_end.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_end.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_end.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_end.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_end.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_home.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_home.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_home.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_home.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$document_home.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$end.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$end.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$end.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$end.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$end.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$home.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$home.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$home.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$home.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$home.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_break.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_break.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_break.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_break.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_break.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_char.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_char.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_char.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_char.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_char.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_tab.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_tab.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_tab.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_tab.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$insert_tab.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_char.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_char.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_char.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_char.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_char.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_line.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_line.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_line.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_line.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_line.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_page.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_page.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_page.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_page.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_page.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_word.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_word.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_word.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_word.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$next_word.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$overwrite.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$overwrite.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$overwrite.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$overwrite.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$overwrite.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_char.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_char.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_char.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_char.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_char.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_line.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_line.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_line.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_line.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_line.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_page.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_page.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_page.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_page.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_page.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_word.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_word.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_word.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_word.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$prev_word.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$repeat.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$repeat.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$repeat.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$repeat.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$repeat.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$toggle_rect.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$toggle_rect.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$toggle_rect.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$toggle_rect.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler$toggle_rect.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler.java =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler.java (rev 0) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/InputHandler.java 2015-04-14 20:42:14 UTC (rev 4399) @@ -0,0 +1,1071 @@ +package jedit; + +/* + * InputHandler.java - Manages key bindings and executes actions + * Copyright (C) 1999 Slava Pestov + * + * You may use and modify this package for any purpose. Redistribution is + * permitted, in both source and binary form, provided that this notice + * remains intact in all source distributions of this package. + */ + +import javax.swing.text.*; +import javax.swing.JPopupMenu; +import java.awt.event.*; +import java.awt.Component; +import java.util.*; + +/** + * An input handler converts the user's key strokes into concrete actions. + * It also takes care of macro recording and action repetition.<p> + * + * This class provides all the necessary support code for an input + * handler, but doesn't actually do any key binding logic. It is up + * to the implementations of this class to do so. + * + * @author Slava Pestov + * @version $Id: InputHandler.java,v 1.14 1999/12/13 03:40:30 sp Exp $ + * @see org.gjt.sp.jedit.textarea.DefaultInputHandler + */ +public abstract class InputHandler extends KeyAdapter +{ + /** + * If this client property is set to Boolean.TRUE on the text area, + * the home/end keys will support 'smart' BRIEF-like behaviour + * (one press = start/end of line, two presses = start/end of + * viewscreen, three presses = start/end of document). By default, + * this property is not set. + */ + public static final String SMART_HOME_END_PROPERTY = "InputHandler.homeEnd"; + + public static final ActionListener BACKSPACE = new backspace(); + public static final ActionListener BACKSPACE_WORD = new backspace_word(); + public static final ActionListener DELETE = new delete(); + public static final ActionListener DELETE_WORD = new delete_word(); + public static final ActionListener END = new end(false); + public static final ActionListener DOCUMENT_END = new document_end(false); + public static final ActionListener SELECT_END = new end(true); + public static final ActionListener SELECT_DOC_END = new document_end(true); + public static final ActionListener INSERT_BREAK = new insert_break(); + public static final ActionListener INSERT_TAB = new insert_tab(); + public static final ActionListener HOME = new home(false); + public static final ActionListener DOCUMENT_HOME = new document_home(false); + public static final ActionListener SELECT_HOME = new home(true); + public static final ActionListener SELECT_DOC_HOME = new document_home(true); + public static final ActionListener NEXT_CHAR = new next_char(false); + public static final ActionListener NEXT_LINE = new next_line(false); + public static final ActionListener NEXT_PAGE = new next_page(false); + public static final ActionListener NEXT_WORD = new next_word(false); + public static final ActionListener SELECT_NEXT_CHAR = new next_char(true); + public static final ActionListener SELECT_NEXT_LINE = new next_line(true); + public static final ActionListener SELECT_NEXT_PAGE = new next_page(true); + public static final ActionListener SELECT_NEXT_WORD = new next_word(true); + public static final ActionListener OVERWRITE = new overwrite(); + public static final ActionListener PREV_CHAR = new prev_char(false); + public static final ActionListener PREV_LINE = new prev_line(false); + public static final ActionListener PREV_PAGE = new prev_page(false); + public static final ActionListener PREV_WORD = new prev_word(false); + public static final ActionListener SELECT_PREV_CHAR = new prev_char(true); + public static final ActionListener SELECT_PREV_LINE = new prev_line(true); + public static final ActionListener SELECT_PREV_PAGE = new prev_page(true); + public static final ActionListener SELECT_PREV_WORD = new prev_word(true); + public static final ActionListener REPEAT = new repeat(); + public static final ActionListener TOGGLE_RECT = new toggle_rect(); + + // Default action + public static final ActionListener INSERT_CHAR = new insert_char(); + + private static Hashtable actions; + + static + { + actions = new Hashtable(); + actions.put("backspace",BACKSPACE); + actions.put("backspace-word",BACKSPACE_WORD); + actions.put("delete",DELETE); + actions.put("delete-word",DELETE_WORD); + actions.put("end",END); + actions.put("select-end",SELECT_END); + actions.put("document-end",DOCUMENT_END); + actions.put("select-doc-end",SELECT_DOC_END); + actions.put("insert-break",INSERT_BREAK); + actions.put("insert-tab",INSERT_TAB); + actions.put("home",HOME); + actions.put("select-home",SELECT_HOME); + actions.put("document-home",DOCUMENT_HOME); + actions.put("select-doc-home",SELECT_DOC_HOME); + actions.put("next-char",NEXT_CHAR); + actions.put("next-line",NEXT_LINE); + actions.put("next-page",NEXT_PAGE); + actions.put("next-word",NEXT_WORD); + actions.put("select-next-char",SELECT_NEXT_CHAR); + actions.put("select-next-line",SELECT_NEXT_LINE); + actions.put("select-next-page",SELECT_NEXT_PAGE); + actions.put("select-next-word",SELECT_NEXT_WORD); + actions.put("overwrite",OVERWRITE); + actions.put("prev-char",PREV_CHAR); + actions.put("prev-line",PREV_LINE); + actions.put("prev-page",PREV_PAGE); + actions.put("prev-word",PREV_WORD); + actions.put("select-prev-char",SELECT_PREV_CHAR); + actions.put("select-prev-line",SELECT_PREV_LINE); + actions.put("select-prev-page",SELECT_PREV_PAGE); + actions.put("select-prev-word",SELECT_PREV_WORD); + actions.put("repeat",REPEAT); + actions.put("toggle-rect",TOGGLE_RECT); + actions.put("insert-char",INSERT_CHAR); + } + + /** + * Returns a named text area action. + * @param name The action name + */ + public static ActionListener getAction(String name) + { + return (ActionListener)actions.get(name); + } + + /** + * Returns the name of the specified text area action. + * @param listener The action + */ + public static String getActionName(ActionListener listener) + { + Enumeration enu = getActions(); + while(enu.hasMoreElements()) + { + String name = (String)enu.nextElement(); + ActionListener _listener = getAction(name); + if(_listener == listener) + return name; + } + return null; + } + + /** + * Returns an enumeration of all available actions. + */ + public static Enumeration getActions() + { + return actions.keys(); + } + + /** + * Adds the default key bindings to this input handler. + * This should not be called in the constructor of this + * input handler, because applications might load the + * key bindings from a file, etc. + */ + public abstract void addDefaultKeyBindings(); + + /** + * Adds a key binding to this input handler. + * @param keyBinding The key binding (the format of this is + * input-handler specific) + * @param action The action + */ + public abstract void addKeyBinding(String keyBinding, ActionListener action); + + /** + * Removes a key binding from this input handler. + * @param keyBinding The key binding + */ + public abstract void removeKeyBinding(String keyBinding); + + /** + * Removes all key bindings from this input handler. + */ + public abstract void removeAllKeyBindings(); + + /** + * Grabs the next key typed event and invokes the specified + * action with the key as a the action command. + * @param action The action + */ + public void grabNextKeyStroke(ActionListener listener) + { + grabAction = listener; + } + + /** + * Returns if repeating is enabled. When repeating is enabled, + * actions will be executed multiple times. This is usually + * invoked with a special key stroke in the input handler. + */ + public boolean isRepeatEnabled() + { + return repeat; + } + + /** + * Enables repeating. When repeating is enabled, actions will be + * executed multiple times. Once repeating is enabled, the input + * handler should read a number from the keyboard. + */ + public void setRepeatEnabled(boolean repeat) + { + this.repeat = repeat; + } + + /** + * Returns the number of times the next action will be repeated. + */ + public int getRepeatCount() + { + return (repeat ? Math.max(1,repeatCount) : 1); + } + + /** + * Sets the number of times the next action will be repeated. + * @param repeatCount The repeat count + */ + public void setRepeatCount(int repeatCount) + { + this.repeatCount = repeatCount; + } + + /** + * Returns the macro recorder. If this is non-null, all executed + * actions should be forwarded to the recorder. + */ + public InputHandler.MacroRecorder getMacroRecorder() + { + return recorder; + } + + /** + * Sets the macro recorder. If this is non-null, all executed + * actions should be forwarded to the recorder. + * @param recorder The macro recorder + */ + public void setMacroRecorder(InputHandler.MacroRecorder recorder) + { + this.recorder = recorder; + } + + /** + * Returns a copy of this input handler that shares the same + * key bindings. Setting key bindings in the copy will also + * set them in the original. + */ + public abstract InputHandler copy(); + + /** + * Executes the specified action, repeating and recording it as + * necessary. + * @param listener The action listener + * @param source The event source + * @param actionCommand The action command + */ + public void executeAction(ActionListener listener, Object source, + String actionCommand) + { + // create event + ActionEvent evt = new ActionEvent(source, + ActionEvent.ACTION_PERFORMED, + actionCommand); + + // don't do anything if the action is a wrapper + // (like EditAction.Wrapper) + if(listener instanceof Wrapper) + { + listener.actionPerformed(evt); + return; + } + + // remember old values, in case action changes them + boolean _repeat = repeat; + int _repeatCount = getRepeatCount(); + + // execute the action + if(listener instanceof InputHandler.NonRepeatable) + listener.actionPerformed(evt); + else + { + for(int i = 0; i < Math.max(1,repeatCount); i++) + listener.actionPerformed(evt); + } + + // do recording. Notice that we do no recording whatsoever + // for actions that grab keys + if(grabAction == null) + { + if(recorder != null) + { + if(!(listener instanceof InputHandler.NonRecordable)) + { + if(_repeatCount != 1) + recorder.actionPerformed(REPEAT,String.valueOf(_repeatCount)); + + recorder.actionPerformed(listener,actionCommand); + } + } + + // If repeat was true originally, clear it + // Otherwise it might have been set by the action, etc + if(_repeat) + { + repeat = false; + repeatCount = 0; + } + } + } + + /** + * Returns the text area that fired the specified event. + * @param evt The event + */ + public static JEditTextArea getTextArea(EventObject evt) + { + if(evt != null) + { + Object o = evt.getSource(); + if(o instanceof Component) + { + // find the parent text area + Component c = (Component)o; + for(;;) + { + if(c instanceof JEditTextArea) + return (JEditTextArea)c; + else if(c == null) + break; + if(c instanceof JPopupMenu) + c = ((JPopupMenu)c) + .getInvoker(); + else + c = c.getParent(); + } + } + } + + // this shouldn't happen + System.err.println("BUG: getTextArea() returning null"); + System.err.println("Report this to Slava Pestov <s...@gjt.org>"); + return null; + } + + // protected members + + /** + * If a key is being grabbed, this method should be called with + * the appropriate key event. It executes the grab action with + * the typed character as the parameter. + */ + protected void handleGrabAction(KeyEvent evt) + { + // Clear it *before* it is executed so that executeAction() + // resets the repeat count + ActionListener _grabAction = grabAction; + grabAction = null; + executeAction(_grabAction,evt.getSource(), + String.valueOf(evt.getKeyChar())); + } + + // protected members + protected ActionListener grabAction; + protected boolean repeat; + protected int repeatCount; + protected InputHandler.MacroRecorder recorder; + + /** + * If an action implements this interface, it should not be repeated. + * Instead, it will handle the repetition itself. + */ + public interface NonRepeatable {} + + /** + * If an action implements this interface, it should not be recorded + * by the macro recorder. Instead, it will do its own recording. + */ + public interface NonRecordable {} + + /** + * For use by EditAction.Wrapper only. + * @since jEdit 2.2final + */ + public interface Wrapper {} + + /** + * Macro recorder. + */ + public interface MacroRecorder + { + void actionPerformed(ActionListener listener, + String actionCommand); + } + + public static class backspace implements ActionListener + { + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + + if(!textArea.isEditable()) + { + textArea.getToolkit().beep(); + return; + } + + if(textArea.getSelectionStart() + != textArea.getSelectionEnd()) + { + textArea.setSelectedText(""); + } + else + { + int caret = textArea.getCaretPosition(); + if(caret == 0) + { + textArea.getToolkit().beep(); + return; + } + try + { + textArea.getDocument().remove(caret - 1,1); + } + catch(BadLocationException bl) + { + bl.printStackTrace(); + } + } + } + } + + public static class backspace_word implements ActionListener + { + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + int start = textArea.getSelectionStart(); + if(start != textArea.getSelectionEnd()) + { + textArea.setSelectedText(""); + } + + int line = textArea.getCaretLine(); + int lineStart = textArea.getLineStartOffset(line); + int caret = start - lineStart; + + String lineText = textArea.getLineText(textArea + .getCaretLine()); + + if(caret == 0) + { + if(lineStart == 0) + { + textArea.getToolkit().beep(); + return; + } + caret--; + } + else + { + String noWordSep = (String)textArea.getDocument().getProperty("noWordSep"); + caret = TextUtilities.findWordStart(lineText,caret,noWordSep); + } + + try + { + textArea.getDocument().remove( + caret + lineStart, + start - (caret + lineStart)); + } + catch(BadLocationException bl) + { + bl.printStackTrace(); + } + } + } + + public static class delete implements ActionListener + { + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + + if(!textArea.isEditable()) + { + textArea.getToolkit().beep(); + return; + } + + if(textArea.getSelectionStart() + != textArea.getSelectionEnd()) + { + textArea.setSelectedText(""); + } + else + { + int caret = textArea.getCaretPosition(); + if(caret == textArea.getDocumentLength()) + { + textArea.getToolkit().beep(); + return; + } + try + { + textArea.getDocument().remove(caret,1); + } + catch(BadLocationException bl) + { + bl.printStackTrace(); + } + } + } + } + + public static class delete_word implements ActionListener + { + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + int start = textArea.getSelectionStart(); + if(start != textArea.getSelectionEnd()) + { + textArea.setSelectedText(""); + } + + int line = textArea.getCaretLine(); + int lineStart = textArea.getLineStartOffset(line); + int caret = start - lineStart; + + String lineText = textArea.getLineText(textArea + .getCaretLine()); + + if(caret == lineText.length()) + { + if(lineStart + caret == textArea.getDocumentLength()) + { + textArea.getToolkit().beep(); + return; + } + caret++; + } + else + { + String noWordSep = (String)textArea.getDocument().getProperty("noWordSep"); + caret = TextUtilities.findWordEnd(lineText,caret,noWordSep); + } + + try + { + textArea.getDocument().remove(start, + (caret + lineStart) - start); + } + catch(BadLocationException bl) + { + bl.printStackTrace(); + } + } + } + + public static class end implements ActionListener + { + private boolean select; + + public end(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + + int caret = textArea.getCaretPosition(); + + int lastOfLine = textArea.getLineEndOffset( + textArea.getCaretLine()) - 1; + int lastVisibleLine = textArea.getFirstLine() + + textArea.getVisibleLines(); + if(lastVisibleLine >= textArea.getLineCount()) + { + lastVisibleLine = Math.min(textArea.getLineCount() - 1, + lastVisibleLine); + } + else + lastVisibleLine -= (textArea.getElectricScroll() + 1); + + int lastVisible = textArea.getLineEndOffset(lastVisibleLine) - 1; + int lastDocument = textArea.getDocumentLength(); + + if(caret == lastDocument) + { + textArea.getToolkit().beep(); + return; + } + else if(!Boolean.TRUE.equals(textArea.getClientProperty( + SMART_HOME_END_PROPERTY))) + caret = lastOfLine; + else if(caret == lastVisible) + caret = lastDocument; + else if(caret == lastOfLine) + caret = lastVisible; + else + caret = lastOfLine; + + if(select) + textArea.select(textArea.getMarkPosition(),caret); + else + textArea.setCaretPosition(caret); + } + } + + public static class document_end implements ActionListener + { + private boolean select; + + public document_end(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + if(select) + textArea.select(textArea.getMarkPosition(), + textArea.getDocumentLength()); + else + textArea.setCaretPosition(textArea + .getDocumentLength()); + } + } + + public static class home implements ActionListener + { + private boolean select; + + public home(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + + int caret = textArea.getCaretPosition(); + + int firstLine = textArea.getFirstLine(); + + int firstOfLine = textArea.getLineStartOffset( + textArea.getCaretLine()); + int firstVisibleLine = (firstLine == 0 ? 0 : + firstLine + textArea.getElectricScroll()); + int firstVisible = textArea.getLineStartOffset( + firstVisibleLine); + + if(caret == 0) + { + textArea.getToolkit().beep(); + return; + } + else if(!Boolean.TRUE.equals(textArea.getClientProperty( + SMART_HOME_END_PROPERTY))) + caret = firstOfLine; + else if(caret == firstVisible) + caret = 0; + else if(caret == firstOfLine) + caret = firstVisible; + else + caret = firstOfLine; + + if(select) + textArea.select(textArea.getMarkPosition(),caret); + else + textArea.setCaretPosition(caret); + } + } + + public static class document_home implements ActionListener + { + private boolean select; + + public document_home(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + if(select) + textArea.select(textArea.getMarkPosition(),0); + else + textArea.setCaretPosition(0); + } + } + + public static class insert_break implements ActionListener + { + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + + if(!textArea.isEditable()) + { + textArea.getToolkit().beep(); + return; + } + + textArea.setSelectedText("\n"); + } + } + + public static class insert_tab implements ActionListener + { + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + + if(!textArea.isEditable()) + { + textArea.getToolkit().beep(); + return; + } + + textArea.overwriteSetSelectedText("\t"); + } + } + + public static class next_char implements ActionListener + { + private boolean select; + + public next_char(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + int caret = textArea.getCaretPosition(); + if(caret == textArea.getDocumentLength()) + { + textArea.getToolkit().beep(); + return; + } + + if(select) + textArea.select(textArea.getMarkPosition(), + caret + 1); + else + textArea.setCaretPosition(caret + 1); + } + } + + public static class next_line implements ActionListener + { + private boolean select; + + public next_line(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + int caret = textArea.getCaretPosition(); + int line = textArea.getCaretLine(); + + if(line == textArea.getLineCount() - 1) + { + textArea.getToolkit().beep(); + return; + } + + int magic = textArea.getMagicCaretPosition(); + if(magic == -1) + { + magic = textArea.offsetToX(line, + caret - textArea.getLineStartOffset(line)); + } + + caret = textArea.getLineStartOffset(line + 1) + + textArea.xToOffset(line + 1,magic); + if(select) + textArea.select(textArea.getMarkPosition(),caret); + else + textArea.setCaretPosition(caret); + textArea.setMagicCaretPosition(magic); + } + } + + public static class next_page implements ActionListener + { + private boolean select; + + public next_page(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + int lineCount = textArea.getLineCount(); + int firstLine = textArea.getFirstLine(); + int visibleLines = textArea.getVisibleLines(); + int line = textArea.getCaretLine(); + + firstLine += visibleLines; + + if(firstLine + visibleLines >= lineCount - 1) + firstLine = lineCount - visibleLines; + + textArea.setFirstLine(firstLine); + + int caret = textArea.getLineStartOffset( + Math.min(textArea.getLineCount() - 1, + line + visibleLines)); + if(select) + textArea.select(textArea.getMarkPosition(),caret); + else + textArea.setCaretPosition(caret); + } + } + + public static class next_word implements ActionListener + { + private boolean select; + + public next_word(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + int caret = textArea.getCaretPosition(); + int line = textArea.getCaretLine(); + int lineStart = textArea.getLineStartOffset(line); + caret -= lineStart; + + String lineText = textArea.getLineText(textArea + .getCaretLine()); + + if(caret == lineText.length()) + { + if(lineStart + caret == textArea.getDocumentLength()) + { + textArea.getToolkit().beep(); + return; + } + caret++; + } + else + { + String noWordSep = (String)textArea.getDocument().getProperty("noWordSep"); + caret = TextUtilities.findWordEnd(lineText,caret,noWordSep); + } + + if(select) + textArea.select(textArea.getMarkPosition(), + lineStart + caret); + else + textArea.setCaretPosition(lineStart + caret); + } + } + + public static class overwrite implements ActionListener + { + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + textArea.setOverwriteEnabled( + !textArea.isOverwriteEnabled()); + } + } + + public static class prev_char implements ActionListener + { + private boolean select; + + public prev_char(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + int caret = textArea.getCaretPosition(); + if(caret == 0) + { + textArea.getToolkit().beep(); + return; + } + + if(select) + textArea.select(textArea.getMarkPosition(), + caret - 1); + else + textArea.setCaretPosition(caret - 1); + } + } + + public static class prev_line implements ActionListener + { + private boolean select; + + public prev_line(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + int caret = textArea.getCaretPosition(); + int line = textArea.getCaretLine(); + + if(line == 0) + { + textArea.getToolkit().beep(); + return; + } + + int magic = textArea.getMagicCaretPosition(); + if(magic == -1) + { + magic = textArea.offsetToX(line, + caret - textArea.getLineStartOffset(line)); + } + + caret = textArea.getLineStartOffset(line - 1) + + textArea.xToOffset(line - 1,magic); + if(select) + textArea.select(textArea.getMarkPosition(),caret); + else + textArea.setCaretPosition(caret); + textArea.setMagicCaretPosition(magic); + } + } + + public static class prev_page implements ActionListener + { + private boolean select; + + public prev_page(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + int firstLine = textArea.getFirstLine(); + int visibleLines = textArea.getVisibleLines(); + int line = textArea.getCaretLine(); + + if(firstLine < visibleLines) + firstLine = visibleLines; + + textArea.setFirstLine(firstLine - visibleLines); + + int caret = textArea.getLineStartOffset( + Math.max(0,line - visibleLines)); + if(select) + textArea.select(textArea.getMarkPosition(),caret); + else + textArea.setCaretPosition(caret); + } + } + + public static class prev_word implements ActionListener + { + private boolean select; + + public prev_word(boolean select) + { + this.select = select; + } + + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + int caret = textArea.getCaretPosition(); + int line = textArea.getCaretLine(); + int lineStart = textArea.getLineStartOffset(line); + caret -= lineStart; + + String lineText = textArea.getLineText(textArea + .getCaretLine()); + + if(caret == 0) + { + if(lineStart == 0) + { + textArea.getToolkit().beep(); + return; + } + caret--; + } + else + { + String noWordSep = (String)textArea.getDocument().getProperty("noWordSep"); + caret = TextUtilities.findWordStart(lineText,caret,noWordSep); + } + + if(select) + textArea.select(textArea.getMarkPosition(), + lineStart + caret); + else + textArea.setCaretPosition(lineStart + caret); + } + } + + public static class repeat implements ActionListener, + InputHandler.NonRecordable + { + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + textArea.getInputHandler().setRepeatEnabled(true); + String actionCommand = evt.getActionCommand(); + if(actionCommand != null) + { + textArea.getInputHandler().setRepeatCount( + Integer.parseInt(actionCommand)); + } + } + } + + public static class toggle_rect implements ActionListener + { + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + textArea.setSelectionRectangular( + !textArea.isSelectionRectangular()); + } + } + + public static class insert_char implements ActionListener, + InputHandler.NonRepeatable + { + public void actionPerformed(ActionEvent evt) + { + JEditTextArea textArea = getTextArea(evt); + String str = evt.getActionCommand(); + int repeatCount = textArea.getInputHandler().getRepeatCount(); + + if(textArea.isEditable()) + { + StringBuffer buf = new StringBuffer(); + for(int i = 0; i < repeatCount; i++) + buf.append(str); + textArea.overwriteSetSelectedText(buf.toString()); + } + else + { + textArea.getToolkit().beep(); + } + } + } +} Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler$1.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler$1.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler$1.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler$1.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler$1.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$AdjustHandler.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretBlinker.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretBlinker.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretBlinker.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretBlinker.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretBlinker.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretUndo.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretUndo.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretUndo.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretUndo.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$CaretUndo.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ComponentHandler.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ComponentHandler.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ComponentHandler.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ComponentHandler.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ComponentHandler.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DocumentHandler.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DocumentHandler.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DocumentHandler.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DocumentHandler.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DocumentHandler.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DragHandler.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DragHandler.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DragHandler.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DragHandler.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$DragHandler.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$FocusHandler.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$FocusHandler.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$FocusHandler.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$FocusHandler.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$FocusHandler.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MouseHandler.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MouseHandler.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MouseHandler.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MouseHandler.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MouseHandler.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MutableCaretEvent.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MutableCaretEvent.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MutableCaretEvent.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MutableCaretEvent.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$MutableCaretEvent.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ScrollLayout.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ScrollLayout.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ScrollLayout.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ScrollLayout.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea$ScrollLayout.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea.class =================================================================== (Binary files differ) Index: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea.class =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea.class 2015-04-12 17:48:23 UTC (rev 4398) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea.class 2015-04-14 20:42:14 UTC (rev 4399) Property changes on: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea.class ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Added: plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea.java =================================================================== --- plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea.java (rev 0) +++ plug-ins/SpatialitePlugin/trunk/src/jedit/JEditTextArea.java 2015-04-14 20:42:14 UTC (rev 4399) @@ -0,0 +1,2129 @@ +package jedit; + +/* + * JEditTextArea.java - jEdit's text component + * Copyright (C) 1999 Slava Pestov + * + * You may use and modify this package for any purpose. Redistribution is + * permitted, in both source and binary form, provided that this notice + * remains intact in all source distributions of this package. + */ + +import javax.swing.event.*; +import javax.swing.text.*; +import javax.swing.undo.*; +import javax.swing.*; +import java.awt.datatransfer.*; +import java.awt.event.*; +import java.awt.*; +import java.util.Enumeration; +import java.util.Vector; + +/** + * jEdit's text area component. It is more suited for editing program + * source code than JEditorPane, because it drops the unnecessary features + * (images, variable-width lines, and so on) and adds a whole bunch of + * useful goodies such as: + * <ul> + * <li>More flexible key binding scheme + * <li>Supports macro recorders + * <li>Rectangular selection + * <li>Bracket highlighting + * <li>Syntax highlighting + * <li>Command repetition + * <li>Block caret can be enabled + * </ul> + * It is also faster and doesn't have as many problems. It can be used + * in other applications; the only other part of jEdit it depends on is + * the syntax package.<p> + * + * To use it in your app, treat it like any other component, for example: + * <pre>JEditTextArea ta = new JEditTextArea(); + * ta.setTokenMarker(new JavaTokenMarker()); + * ta.setText("public class Test {\n" + * + " public static void main(String[] args) {\n" + * + " System.out.println(\"Hello World\");\n" + * + " }\n" + * + "}");</pre> + * + * @author Slava Pestov + * @version $Id: JEditTextArea.java,v 1.36 1999/12/13 03:40:30 sp Exp $ + */ +public class JEditTextArea extends JComponent +{ + /** + * Adding components with this name to the text area will place + * them left of the horizontal scroll bar. In jEdit, the status + * bar is added this way. + */ + public static String LEFT_OF_SCROLLBAR = "los"; + + /** + * Creates a new JEditTextArea with the default settings. + */ + public JEditTextArea() + { + this(TextAreaDefaults.getDefaults()); + } + + /** + * Creates a new JEditTextArea with the specified settings. + * @param defaults The default settings + */ + public JEditTextArea(TextAreaDefaults defaults) + { + // Enable the necessary events + enableEvents(AWTEvent.KEY_EVENT_MASK); + + // Initialize some misc. stuff + painter = new TextAreaPainter(this,defaults); + documentHandler = new DocumentHandler(); + listenerList = new EventListenerList(); + caretEvent = new MutableCaretEvent(); + lineSegment = new Segment(); + bracketLine = bracketPosition = -1; + blink = true; + + // Initialize the GUI + setLayout(new ScrollLayout()); + add(CENTER,painter); + add(RIGHT,vertical = new JScrollBar(JScrollBar.VERTICAL)); + add(BOTTOM,horizontal = new JScrollBar(JScrollBar.HORIZONTAL)); + + // Add some event listeners + vertical.addAdjustmentListener(new AdjustHandler()); + horizontal.addAdjustmentListener(new AdjustHandler()); + painter.addComponentListener(new ComponentHandler()); + painter.addMouseListener(new MouseHandler()); + painter.addMouseMotionListener(new DragHandler()); + addFocusListener(new FocusHandler()); + + // Load the defaults + setInputHandler(defaults.inputHandler); + setDocument(defaults.document); + editable = defaults.editable; + caretVisible = defaults.caretVisible; + caretBlinks = defaults.caretBlinks; + electricScroll = defaults.electricScroll; + + popup = defaults.popup; + + // We don't seem to get the initial focus event? + focusedComponent = this; + } + + /** + * Returns if this component can be traversed by pressing + * the Tab key. This returns false. + */ + public final boolean isManagingFocus() + { + return true; + } + + /** + * Returns the object responsible for painting this text area. + */ + public final TextAreaPainter getPainter() + { + return painter; + } + + /** + * Returns the input handler. + */ + public final InputHandler getInputHandler() + { + return inputHandler; + } + + /** + * Sets the input handler. + * @param inputHandler The new input handler + */ + public void setInputHandler(InputHandler inputHandler) + { + this.inputHandler = inputHandler; + } + + /** + * Returns true if the caret is blinking, false otherwise. + */ + public final boolean isCaretBlinkEnabled() + { + return caretBlinks; + } + + /** + * Toggles caret blinking. + * @param caretBlinks True if the caret should blink, false otherwise + */ + public void setCaretBlinkEnabled(boolean caretBlinks) + { + this.caretBlinks = caretBlinks; + if(!caretBlinks) + blink = false; + + painter.invalidateSelectedLines(); + } + + /** + * Returns true if the caret is visible, false otherwise. + */ + public final boolean isCaretVisible() + { + return (!caretBlinks || blink) && caretVisible; + } + + /** + * Sets if the caret should be visible. + * @param caretVisible True if the caret should be visible, false + * otherwise + */ + public void setCaretVisible(boolean caretVisible) + { + this.caretVisible = caretVisible; + blink = true; + + painter.invalidateSelectedLines(); + } + + /** + * Blinks the caret. + */ + public final void blinkCaret() + { + if(caretBlinks) + { + blink = !blink; + painter.invalidateSelectedLines(); + } + else + blink = true; + } + + /** + * Returns the number of lines from the top and button of the + * text area that are always visible. + */ + public final int getElectricScroll() + { + return electricScroll; + } + + /** + * Sets the number of lines from the top and bottom of the text + * area that are always visible + * @param electricScroll The number of lines always visible from + * the top or bottom + */ + public final void setElectricScroll(int electricScroll) + { + this.electricScroll = electricScroll; + } + + /** + * Updates the state of the scroll bars. This should be called + * if the number of lines in the document changes, or when the + * size of the text are changes. + */ + public void updateScrollBars() + { + if(vertical != null && visibleLines != 0) + { + vertical.setValues(firstLine,visibleLines,0,getLineCount()); + vertical.setUnitIncrement(2); + vertical.setBlockIncrement(visibleLines); + } + + int width = painter.getWidth(); + if(horizontal != null && width != 0) + { + horizontal.setValues(-horizontalOffset,width,0,width * 5); + horizontal.setUnitIncrement(painter.getFontMetrics() + .charWidth('w')); + horizontal.setBlockIncrement(width / 2); + } + } + + /** + * Returns the line displayed at the text area's origin. + */ + public final int getFirstLine() + { + return firstLine; + } + + /** + * Sets the line displayed at the text area's origin without + * updating the scroll bars. + */ + public void setFirstLine(int firstLine) + { + if(firstLine == this.firstLine) + return; + int oldFirstLine = this.firstLine; + this.firstLine = firstLine; + if(firstLine != vertical.getValue()) + updateScrollBars(); + painter.repaint(); + } + + /** + * Returns the number of lines visible in this text area. + */ + public final int getVisibleLines() + { + return visibleLines; + } + + /** + * Recalculates the number of visible lines. This should not + * be called directly. + */ + public final void recalculateVisibleLines() + { + if(painter == null) + return; + int height = painter.getHeight(); + int lineHeight = painter.getFontMetrics().getHeight(); + int oldVisibleLines = visibleLines; + visibleLines = height / lineHeight; + updateScrollBars(); + } + + /** + * Returns the horizontal offset of drawn lines. + */ + public final int getHorizontalOffset() + { + return horizontalOffset; + } + + /** + * Sets the horizontal offset of drawn lines. This can be used to + * implement horizontal scrolling. + * @param horizontalOffset offset The new horizontal offset + */ + public void setHorizontalOffset(int horizontalOffset) + { + if(horizontalOffset == this.horizontalOffset) + return; + this.horizontalOffset = horizontalOffset; + if(horizontalOffset != horizontal.getValue()) + updateScrollBars(); + painter.repaint(); + } + + /** + * A fast way of changing both the first line and horizontal + * offset. + * @param firstLine The new first line + * @param horizontalOffset The new horizontal offset + * @return True if any of the values were changed, false otherwise + */ + public boolean setOrigin(int firstLine, int horizontalOffset) + { + boolean changed = false; + int oldFirstLine = this.firstLine; + + if(horizontalOffset != this.horizontalOffset) + { + this.horizontalOffset = horizontalOffset; + changed = true; + } + + if(firstLine != this.firstLine) + { + this.firstLine = firstLine; + changed = true; + } + + if(changed) + { + updateScrollBars(); + painter.repaint(); + } + + return changed; + } + + /** + * Ensures that the caret is visible by scrolling the text area if + * necessary. + * @return True if scrolling was actually performed, false if the + * caret was already visible + */ + public boolean scrollToCaret() + { + int line = getCaretLine(); + int lineStart = getLineStartOffset(line); + int offset = Math.max(0,Math.min(getLineLength(line) - 1, + getCaretPosition() - lineStart)); + + return scrollTo(line,offset); + } + + /** + * Ensures that the specified line and offset is visible by scrolling + * the text area if necessary. + * @param line The line to scroll to + * @param offset The offset in the line to scroll to + * @return True if scrolling was actually performed, false if the + * line and offset was already visible + */ + public boolean scrollTo(int line, int offset) + { + // visibleLines == 0 before the component is realized + // we can't do any proper scrolling then, so we have + // this hack... + if(visibleLines == 0) + { + setFirstLine(Math.max(0,line - electricScroll)); + return true; + } + + int newFirstLine = firstLine; + int newHorizontalOffset = horizontalOffset; + + if(line < firstLine + electricScroll) + { + newFirstLine = Math.max(0,line - electricScroll); + } + else if(line + electricScroll >= firstLine + visibleLines) + { + newFirstLine = (line - visibleLines) + electricScroll + 1; + if(newFirstLine + visibleLines >= getLineCount()) + newFirstLine = getLineCount() - visibleLines; + if(newFirstLine < 0) + newFirstLine = 0; + } + + int x = _offsetToX(line,offset); + int width = painter.getFontMetrics().charWidth('w'); + + if(x < 0) + { + newHorizontalOffset = Math.min(0,horizontalOffset + - x + width + 5); + } + else if(x + width >= painter.getWidth()) + { + newHorizontalOffset = horizontalOffset + + (painter.getWidth() - x) - width - 5; + } + + return setOrigin(newFirstLine,newHorizontalOffset); + } + + /** + * Converts a line index to a y co-ordinate. + * @param line The line + */ + public int lineToY(int line) + { + FontMetrics fm = painter.getFontMetrics(); + return (line - firstLine) * fm.getHeight() + - (fm.getLeading() + fm.getMaxDescent()); + } + + /** + * Converts a y co-ordinate to a line index. + * @param y The y co-ordinate + */ + public int yToLine(int y) + { + FontMetrics fm = painter.getFontMetrics(); + int height = fm.getHeight(); + return Math.max(0,Math.min(getLineCount() - 1, + y / height + firstLine)); + } + + /** + * Converts an offset in a line into an x co-ordinate. This is a + * slow version that can be used any time. + * @param line The line + * @param offset The offset, from the start of the line + */ + public final int offsetToX(int line, int offset) + { + // don't use cached tokens + painter.currentLineTokens = null; + return _offsetToX(line,offset); + } + + /** + * Converts an offset in a line into an x co-ordinate. This is a + * fast version that should only be used if no changes were made + * to the text since the last repaint. + * @param line The line + * @param offset The offset, from the start of the line + */ + public int _offsetToX(int line, int offset) + { + TokenMarker tokenMarker = getTokenMarker(); + + /* Use painter's cached info for speed */ + FontMetrics fm = painter.getFontMetrics(); + + getLineText(line,lineSegment); + + int segmentOffset = lineSegment.offset; + int x = horizontalOffset; + + /* If syntax coloring is disabled, do simple translation */ + if(tokenMarker == null) + { + lineSegment.count = offset; + return x + Utilities.getTabbedTextWidth(lineSegment, + fm,x,painter,0); + } + /* If syntax coloring is enabled, we have to do this because + * tokens can vary in width */ + else + { + Token tokens; + if(painter.currentLineIndex == line + && painter.currentLineTokens != null) + tokens = painter.currentLineTokens; + else + { + painter.currentLineIndex = line; + tokens = painter.currentLineTokens + = tokenMarker.markTokens(lineSegment,line); + } + + Toolkit toolkit = painter.getToolkit(); + Font defaultFont = painter.getFont(); + SyntaxStyle[] styles = painter.getStyles(); + + for(;;) + { + byte id = tokens.id; + if(id == Token.END) + { + return x; + } + + if(id == Token.NULL) + fm = painter.getFontMetrics(); + else + fm = styles[id].getFontMetrics(defaultFont); + + int length = tokens.length; + + if(offset + segmentOffset < lineSegment.offset + length) + { + lineSegment.count = offset - (lineSegment.offset - segmentOffset); + return x + Utilities.getTabbedTextWidth( + lineSegment,fm,x,painter,0); + } + else + { + lineSegment.count = length; + x += Utilities.getTabbedTextWidth( + lineSegment,fm,x,painter,0); + lineSegment.offset += length; + } + tokens = tokens.next; + } + } + } + + /** + * Converts an x co-ordinate to an offset within a line. + * @param line The line + * @param x The x co-ordinate + */ + public int xToOffset(int line, int x) + { + TokenMarker tokenMarker = getTokenMarker(); + + /* Use painter's cached info for speed */ + FontMetrics fm = painter.getFontMetrics(); + + getLineText(line,lineSegment); + + char[] segmentArray = lineSegment.array; + int segmentOffset = lineSegment.offset; + int segmentCount = lineSegment.count; + + int width = horizontalOffset; + + if(tokenMarker == null) + { + for(int i = 0; i < segmentCount; i++) + { + char c = segmentArray[i + segmentOffset]; + int charWidth; + if(c == '\t') + charWidth = (int)painter.nextTabStop(width,i) + - width; + else + charWidth = fm.charWidth(c); + + if(painter.isBlockCaretEnabled()) + { + if(x - charWidth <= width) + return i; + } + else + { + if(x - charWidth / 2 <= width) + return i; + } + + width += charWidth; + } + + return segmentCount; + } + else + { + Token tokens; + if(painter.currentLineIndex == line && painter + .currentLineTokens != null) + tokens = painter.currentLineTokens; + else + { + painter.currentLineIndex = line; + tokens = painter.currentLineTokens + = tokenMarker.markTokens(lineSegment,line); + } + + int offset = 0; + Toolkit toolkit = painter.getToolkit(); + Font defaultFont = painter.getFont(); + SyntaxStyle[] styles = painter.getStyles(); + + for(;;) + { + byte id = tokens.id; + if(id == Token.END) + return offset; + + if(id == Token.NULL) + fm = painter.getFontMetrics(); + else + fm = styles[id].getFontMetrics(defaultFont); + + int length = tokens.length; + + for(int i = 0; i < length; i++) + { + char c = segmentArray[segmentOffset + offset + i]; + int charWidth; + if(c == '\t') + charWidth = (int)painter.nextTabStop(width,offset + i) + - width; + else + charWidth = fm.charWidth(c); + + if(painter.isBlockCaretEnabled()) + { + if(x - charWidth <= width) + return offset + i; + } + else + { + if(x - charWidth / 2 <= width) + return offset + i; + } + + width += charWidth; + } + + offset += length; + tokens = tokens.next; + } + } + } + + /** + * Converts a point to an offset, from the start of the text. + * @param x The x co-ordinate of the point + * @param y The y co-ordinate of the point + */ + public int xyToOffset(int x, int y) + { + int line = yToLine(y); + int start = getLineStartOffset(line); + return start + xToOffset(line,x); + } + + /** + * Returns the document this text area is editing. + */ + public final SyntaxDocument getDocument() + { + return document; + } + + /** + * Sets the document this text area is editing. + * @param document The document + */ + public void setDocument(SyntaxDocument document) + { + if(this.document == document) + return; + if(this.document != null) + this.document.removeDocumentListener(documentHandler); + this.document = document; + + document.addDocumentListener(documentHandler); + + select(0,0); + updateScrollBars(); + painter.repaint(); + } + + /** + * Returns the document's token marker. Equivalent to calling + * <code>getDocument().getTokenMarker()</code>. + */ + public final TokenMarker getTokenMarker() + { + return document.getTokenMarker(); + } + + /** + * Sets the document's token marker. Equivalent to caling + * <code>getDocument().setTokenMarker()</code>. + * @param tokenMarker The token marker + */ + public final void setTokenMarker(TokenMarker tokenMarker) + { + document.setTokenMarker(tokenMarker); + } + + /** + * Returns the length of the document. Equivalent to calling + * <code>getDocument().getLength()</code>. + */ + public final int getDocumentLength() + { + return document.getLength(); + } + + /** + * Returns the number of lines in the document. + */ + public final int getLineCount() + { + return document.getDefaultRootElement().getElementCount(); + } + + /** + * Returns the line containing the specified offset. + * @param offset The offset + */ + public final int getLineOfOffset(int offset) + { + return document.getDefaultRootElement().getElementIndex(offset); + } + + /** + * Returns the start offset of the specified line. + * @param line The line + * @return The start offset of the specified line, or -1 if the line is + * invalid + */ + public int getLineStartOffset(int line) + { + Element lineElement = document.getDefaultRootElement() + .getElement(line); + if(lineElement == null) + return -1; + else + return lineElement.getStartOffset(); + } + + /** + * Returns the end offset of the specified line. + * @param line The line + * @return The end offset of the specified line, or -1 if the line is + * invalid. + */ + public int getLineEndOffset(int line) + { + Element lineElement = document.getDefaultRootElement() + .getElement(line); + if(lineElement == null) + return -1; + else + return lineElement.getEndOffset(); + } + + /** + * Returns the length of the specified line. + * @param line The line + */ + public int getLineLength(int line) + { + Element lineElement = document.getDefaultRootElement() + .getElement(line); + if(lineElement == null) + return -1; + else + return lineElement.getEndOffset() + - lineElement.getStartOffset() - 1; + } + + /** + * Returns the entire text of this text area. + */ + public String getText() + { + try + { + return document.getText(0,document.getLength()); + } + catch(BadLocationException bl) + { + bl.printStackTrace(); + return null; + } + } + + /** + * Sets the entire text of this text area. + */ + public void setText(String text) + { + try + { + document.beginCompoundEdit(); + document.remove(0,document.getLength()); + document.insertString(0,text,null); + } + catch(BadLocationException bl) + { + bl.printStackTrace(); + } + finally + { + document.endCompoundEdit(); + } + } + + /** + * Returns the specified substring of the document. + * @param start The start offset + * @param len The length of the substring + * @return The substring, or null if the offsets are invalid + */ + public final String getText(int start, int len) + { + try + { + return document.getText(start,len); + } + catch(BadLocationException bl) + { + bl.printStackTrace(); + return null; + } + } + + /** + * Copies the specified substring of the document into a segment. + * If the offsets are invalid, the segment will contain a null string. + * @param start The start offset + * @param len The length of the substring + * @param segment The segment + */ + public final void getText(int start, int len, Segment segment) + { + try + { + document.getText(start,len,segment); + } + catch(BadLocationException bl) + { + bl.printStackTrace(); + segment.offset = segment.count = 0; + } + } + + /** + * Returns the text on the specified line. + * @param lineIndex The line + * @return The text, or null if the line is invalid + */ + public final String getLineText(int lineIndex) + { + int start = getLineStartOffset(lineIndex); + return getText(start,getLineEndOffset(lineIndex) - start - 1); + } + + /** + * Copies the text on the specified line into a segment. If the line + * is invalid, the segment will contain a null string. + * @param lineIndex The line + */ + public final void getLineText(int lineIndex, Segment segment) + { + int start = getLineStartOffset(lineIndex); + getText(start,getLineEndOffset(lineIndex) - start - 1,segment); + } + + /** + * Returns the selection start offset. + */ + public final int getSelectionStart() + { + return selectionStart; + } + + /** + * Returns the offset where the selection starts on the specified + * line. + */ + public int getSelectionStart(int line) + { + if(line == selectionStartLine) + return selectionStart; + else if(rectSelect) + { + Element map = document.getDefaultRootElement(); + int start = selectionStart - map.getElement(selectionStartLine) + .getStartOffset(); + + Element lineElement = map.getElement(line); + int lineStart = lineElement.getStartOffset(); + int lineEnd = lineElement.getEndOffset() - 1; + return Math.min(lineEnd,lineStart + start); + } + else + return getLineStartOffset(line); + } + + /** + * Returns the selection start line. + */ + public final int getSelectionStartLine() + { + return selectionStartLine; + } + + /** + * Sets the selection start. The new selection will be the new + * selection start and the old selection end. + * @param selectionStart The selection start + * @see #select(int,int) + */ + public final void setSelectionStart(int selectionStart) + { + select(selectionStart,selectionEnd); + } + + /** + * Returns the selection end offset. + */ + public final int getSelectionEnd() + { + return selectionEnd; + } + + /** + * Returns the offset where the selection ends on the specified + * line. + */ + public int getSelectionEnd(int line) + { + if(line == selectionEndLine) + return selectionEnd; + else if(rectSelect) + { + Element map = document.getDefaultRootElement(); + int end = selectionEnd - map.getElement(selectionEndLine) + .getStartOffset(); + + Element lineElement = map.getElement(line); + int lineStart = lineElement.getStartOffset(); + int lineEnd = lineElement.getEndOffset() - 1; + return Math.min(lineEnd,lineStart + end); + } + else + return getLineEndOffset(line) - 1; + } + + /** + * Returns the selection end line. + */ + public final int getSelectionEndLine() + { + return selectionEndLine; + } + + /** + * Sets the selection end. The new selection will be the old + * selection start and the bew selection end. + * @param selectionEnd The selection end + * @see #select(int,int) + */ + public final void setSelectionEnd(int selectionEnd) + { + select(selectionStart,selectionEnd); + } + + /** + * Returns the caret position. This will either be the selection + * start or the selection end, depending on which direction the + * selection was made in. + */ + public final int getCaretPosition() + { + return (biasLeft ? selectionStart : selectionEnd); + } + + /** + * Returns the caret line. + */ + public final int getCaretLine() + { + return (biasLeft ? selectionStartLine : selectionEndLine); + } + + /** + * Returns the mark position. This will be the opposite selection + * bound to the caret position. + * @see #getCaretPosition() + */ + public final int getMarkPosition() + { + return (biasLeft ? selectionEnd : selectionStart); + } + + /** + * Returns the mark line. + */ + public final int getMarkLine() + { + return (biasLeft ? selectionEndLine : selectionStartLine); + } + + /** + * Sets the caret position. The new selection will consist of the + * caret position only (hence no text will be selected) + * @param caret The caret position + * @see #select(int,int) + */ @@ Diff output truncated at 100000 characters. @@ ------------------------------------------------------------------------------ BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT Develop your own process in accordance with the BPMN 2 standard Learn Process modeling best practices with Bonita BPM through live exercises http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel