2005-07-16 00:30:23 +00:00
|
|
|
/* DefaultEditorKit.java --
|
|
|
|
Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
This file is part of GNU Classpath.
|
|
|
|
|
|
|
|
GNU Classpath is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
|
|
any later version.
|
|
|
|
|
|
|
|
GNU Classpath is distributed in the hope that it will be useful, but
|
|
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with GNU Classpath; see the file COPYING. If not, write to the
|
|
|
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
|
|
02110-1301 USA.
|
|
|
|
|
|
|
|
Linking this library statically or dynamically with other modules is
|
|
|
|
making a combined work based on this library. Thus, the terms and
|
|
|
|
conditions of the GNU General Public License cover the whole
|
|
|
|
combination.
|
|
|
|
|
|
|
|
As a special exception, the copyright holders of this library give you
|
|
|
|
permission to link this library with independent modules to produce an
|
|
|
|
executable, regardless of the license terms of these independent
|
|
|
|
modules, and to copy and distribute the resulting executable under
|
|
|
|
terms of your choice, provided that you also meet, for each linked
|
|
|
|
independent module, the terms and conditions of the license of that
|
|
|
|
module. An independent module is a module which is not derived from
|
|
|
|
or based on this library. If you modify this library, you may extend
|
|
|
|
this exception to your version of the library, but you are not
|
|
|
|
obligated to do so. If you do not wish to do so, delete this
|
|
|
|
exception statement from your version. */
|
|
|
|
|
|
|
|
|
|
|
|
package javax.swing.text;
|
|
|
|
|
|
|
|
import java.awt.Toolkit;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
import java.io.BufferedReader;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
import java.io.OutputStream;
|
|
|
|
import java.io.OutputStreamWriter;
|
|
|
|
import java.io.Reader;
|
|
|
|
import java.io.Writer;
|
|
|
|
|
|
|
|
import javax.swing.Action;
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* The default implementation of {@link EditorKit}. This <code>EditorKit</code>
|
|
|
|
* a plain text <code>Document</code> and several commands that together
|
|
|
|
* make up a basic editor, like cut / copy + paste.
|
|
|
|
*
|
|
|
|
* @author original author unknown
|
|
|
|
* @author Roman Kennke (roman@kennke.org)
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public class DefaultEditorKit extends EditorKit
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Creates a beep on the PC speaker.
|
|
|
|
*
|
|
|
|
* @see Toolkit#beep()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static class BeepAction
|
|
|
|
extends TextAction
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Creates a new <code>BeepAction</code>.
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public BeepAction()
|
|
|
|
{
|
|
|
|
super(beepAction);
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Performs the <code>Action</code>.
|
|
|
|
*
|
|
|
|
* @param event the action event describing the user action
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
Toolkit.getDefaultToolkit().beep();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Copies the selected content into the system clipboard.
|
|
|
|
*
|
|
|
|
* @see Toolkit#getSystemClipboard()
|
|
|
|
* @see CutAction
|
|
|
|
* @see PasteAction
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static class CopyAction
|
|
|
|
extends TextAction
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a new <code>CopyAction</code>.
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public CopyAction()
|
|
|
|
{
|
|
|
|
super(copyAction);
|
|
|
|
}
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Performs the <code>Action</code>.
|
|
|
|
*
|
|
|
|
* @param event the action event describing the user action
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
// FIXME: Implement me. Tookit.getSystemClipboard should be used
|
|
|
|
// for that.
|
2005-07-16 00:30:23 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Copies the selected content into the system clipboard and deletes the
|
|
|
|
* selection.
|
|
|
|
*
|
|
|
|
* @see Toolkit#getSystemClipboard()
|
|
|
|
* @see CopyAction
|
|
|
|
* @see PasteAction
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static class CutAction
|
|
|
|
extends TextAction
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a new <code>CutAction</code>.
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public CutAction()
|
|
|
|
{
|
|
|
|
super(cutAction);
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Performs the <code>Action</code>.
|
|
|
|
*
|
|
|
|
* @param event the action event describing the user action
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
// FIXME: Implement me. Tookit.getSystemClipboard should be used
|
|
|
|
// for that.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Copies content from the system clipboard into the editor.
|
|
|
|
*
|
|
|
|
* @see Toolkit#getSystemClipboard()
|
|
|
|
* @see CopyAction
|
|
|
|
* @see CutAction
|
|
|
|
*/
|
|
|
|
public static class PasteAction
|
|
|
|
extends TextAction
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a new <code>PasteAction</code>.
|
|
|
|
*/
|
|
|
|
public PasteAction()
|
|
|
|
{
|
|
|
|
super(pasteAction);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Performs the <code>Action</code>.
|
|
|
|
*
|
|
|
|
* @param event the action event describing the user action
|
|
|
|
*/
|
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
// FIXME: Implement me. Tookit.getSystemClipboard should be used
|
|
|
|
// for that.
|
2005-07-16 00:30:23 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This action is executed as default action when a KEY_TYPED
|
|
|
|
* event is received and no keymap entry exists for that. The purpose
|
|
|
|
* of this action is to filter out a couple of characters. This includes
|
|
|
|
* the control characters and characters with the ALT-modifier.
|
|
|
|
*
|
|
|
|
* If an event does not get filtered, it is inserted into the document
|
2005-09-23 21:31:04 +00:00
|
|
|
* of the text component. If there is some text selected in the text
|
|
|
|
* component, this text will be replaced.
|
2005-07-16 00:30:23 +00:00
|
|
|
*/
|
|
|
|
public static class DefaultKeyTypedAction
|
|
|
|
extends TextAction
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a new <code>DefaultKeyTypedAction</code>.
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public DefaultKeyTypedAction()
|
|
|
|
{
|
|
|
|
super(defaultKeyTypedAction);
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Performs the <code>Action</code>.
|
|
|
|
*
|
|
|
|
* @param event the action event describing the user action
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
// first we filter the following events:
|
|
|
|
// - control characters
|
|
|
|
// - key events with the ALT modifier (FIXME: filter that too!)
|
|
|
|
char c = event.getActionCommand().charAt(0);
|
|
|
|
if (Character.isISOControl(c))
|
|
|
|
return;
|
|
|
|
|
|
|
|
JTextComponent t = getTextComponent(event);
|
|
|
|
if (t != null)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
t.getDocument().insertString(t.getCaret().getDot(),
|
|
|
|
event.getActionCommand(), null);
|
2005-07-16 00:30:23 +00:00
|
|
|
t.getCaret().setDot(Math.min(t.getCaret().getDot() + 1,
|
2005-09-23 21:31:04 +00:00
|
|
|
t.getDocument().getEndPosition()
|
|
|
|
.getOffset()));
|
2005-07-16 00:30:23 +00:00
|
|
|
}
|
|
|
|
catch (BadLocationException be)
|
|
|
|
{
|
|
|
|
// FIXME: we're not authorized to throw this.. swallow it?
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This action inserts a newline character into the document
|
|
|
|
* of the text component. This is typically triggered by hitting
|
|
|
|
* ENTER on the keyboard.
|
|
|
|
*/
|
|
|
|
public static class InsertBreakAction
|
|
|
|
extends TextAction
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a new <code>InsertBreakAction</code>.
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public InsertBreakAction()
|
|
|
|
{
|
|
|
|
super(insertBreakAction);
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Performs the <code>Action</code>.
|
|
|
|
*
|
|
|
|
* @param event the action event describing the user action
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
JTextComponent t = getTextComponent(event);
|
|
|
|
t.replaceSelection("\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Places content into the associated editor. If there currently is a
|
|
|
|
* selection, this selection is replaced.
|
|
|
|
*/
|
|
|
|
// FIXME: Figure out what this Action is supposed to do. Obviously text
|
|
|
|
// that is entered by the user is inserted through DefaultKeyTypedAction.
|
2005-07-16 00:30:23 +00:00
|
|
|
public static class InsertContentAction
|
|
|
|
extends TextAction
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a new <code>InsertContentAction</code>.
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public InsertContentAction()
|
|
|
|
{
|
|
|
|
super(insertContentAction);
|
|
|
|
}
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Performs the <code>Action</code>.
|
|
|
|
*
|
|
|
|
* @param event the action event describing the user action
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Inserts a TAB character into the text editor.
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static class InsertTabAction
|
|
|
|
extends TextAction
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a new <code>TabAction</code>.
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public InsertTabAction()
|
|
|
|
{
|
|
|
|
super(insertTabAction);
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Performs the <code>Action</code>.
|
|
|
|
*
|
|
|
|
* @param event the action event describing the user action
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
// FIXME: Implement this.
|
2005-07-16 00:30:23 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* The serial version of DefaultEditorKit.
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
private static final long serialVersionUID = 9017245433028523428L;
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret one character
|
|
|
|
* backwards.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String backwardAction = "caret-backward";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that creates a beep in the speaker.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String beepAction = "beep";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the <code>Document</code>.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String beginAction = "caret-begin";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the current line.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String beginLineAction = "caret-begin-line";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the current paragraph.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String beginParagraphAction = "caret-begin-paragraph";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the current word.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String beginWordAction = "caret-begin-word";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that copies the selected content
|
|
|
|
* into the system clipboard.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String copyAction = "copy-to-clipboard";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that copies the selected content
|
|
|
|
* into the system clipboard and removes the selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String cutAction = "cut-to-clipboard";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that is performed by default if
|
|
|
|
* a key is typed and there is no keymap entry.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String defaultKeyTypedAction = "default-typed";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that deletes the character that
|
|
|
|
* follows the current caret position.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String deleteNextCharAction = "delete-next";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that deletes the character that
|
|
|
|
* precedes the current caret position.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String deletePrevCharAction = "delete-previous";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret one line down.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String downAction = "caret-down";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the end
|
|
|
|
* of the <code>Document</code>.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String endAction = "caret-end";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the end
|
|
|
|
* of the current line.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String endLineAction = "caret-end-line";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* When a document is read and an CRLF is encountered, then we add a property
|
|
|
|
* with this name and a value of "\r\n".
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String EndOfLineStringProperty = "__EndOfLine__";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the end
|
|
|
|
* of the current paragraph.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String endParagraphAction = "caret-end-paragraph";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the end
|
|
|
|
* of the current word.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String endWordAction = "caret-end-word";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret one character
|
|
|
|
* forward.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String forwardAction = "caret-forward";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that inserts a line break.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String insertBreakAction = "insert-break";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that inserts some content.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String insertContentAction = "insert-content";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that inserts a TAB.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String insertTabAction = "insert-tab";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the next word.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String nextWordAction = "caret-next-word";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret one page down.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String pageDownAction = "page-down";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret one page up.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String pageUpAction = "page-up";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that copies content from the system
|
|
|
|
* clipboard into the document.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String pasteAction = "paste-from-clipboard";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the previous word.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String previousWordAction = "caret-previous-word";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that sets the editor in read only
|
|
|
|
* mode.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String readOnlyAction = "set-read-only";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that selects the whole document.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectAllAction = "select-all";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret one character
|
|
|
|
* backwards, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionBackwardAction = "selection-backward";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the document, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionBeginAction = "selection-begin";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the current line, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionBeginLineAction = "selection-begin-line";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the current paragraph, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionBeginParagraphAction =
|
|
|
|
"selection-begin-paragraph";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the current word, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionBeginWordAction = "selection-begin-word";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret one line down,
|
|
|
|
* possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionDownAction = "selection-down";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the end
|
|
|
|
* of the document, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionEndAction = "selection-end";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the end
|
|
|
|
* of the current line, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionEndLineAction = "selection-end-line";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the end
|
|
|
|
* of the current paragraph, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionEndParagraphAction =
|
|
|
|
"selection-end-paragraph";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the end
|
|
|
|
* of the current word, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionEndWordAction = "selection-end-word";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret one character
|
|
|
|
* forwards, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionForwardAction = "selection-forward";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the next word, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionNextWordAction = "selection-next-word";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret to the beginning
|
|
|
|
* of the previous word, possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionPreviousWordAction =
|
|
|
|
"selection-previous-word";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret one line up,
|
|
|
|
* possibly extending the current selection.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectionUpAction = "selection-up";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that selects the line around the
|
|
|
|
* caret.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectLineAction = "select-line";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that selects the paragraph around the
|
|
|
|
* caret.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectParagraphAction = "select-paragraph";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that selects the word around the
|
|
|
|
* caret.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String selectWordAction = "select-word";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that moves the caret one line up.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String upAction = "caret-up";
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The name of the <code>Action</code> that sets the editor in read-write
|
|
|
|
* mode.
|
|
|
|
*
|
|
|
|
* @see #getActions()
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public static final String writableAction = "set-writable";
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Creates a new <code>DefaultEditorKit</code>.
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public DefaultEditorKit()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* The <code>Action</code>s that are supported by the
|
|
|
|
* <code>DefaultEditorKit</code>.
|
|
|
|
*/
|
|
|
|
// TODO: All these inner classes look ugly. Maybe work out a better way
|
|
|
|
// to handle this.
|
2005-07-16 00:30:23 +00:00
|
|
|
private static Action[] defaultActions =
|
|
|
|
new Action[] {
|
|
|
|
new BeepAction(),
|
|
|
|
new CopyAction(),
|
|
|
|
new CutAction(),
|
|
|
|
new DefaultKeyTypedAction(),
|
|
|
|
new InsertBreakAction(),
|
|
|
|
new InsertContentAction(),
|
|
|
|
new InsertTabAction(),
|
|
|
|
new PasteAction(),
|
|
|
|
new TextAction(deleteNextCharAction)
|
|
|
|
{
|
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
JTextComponent t = getTextComponent(event);
|
|
|
|
if (t != null)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
int pos = t.getCaret().getDot();
|
|
|
|
if (pos < t.getDocument().getEndPosition().getOffset())
|
|
|
|
{
|
|
|
|
t.getDocument().remove(t.getCaret().getDot(), 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (BadLocationException e)
|
|
|
|
{
|
|
|
|
// FIXME: we're not authorized to throw this.. swallow it?
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
new TextAction(deletePrevCharAction)
|
|
|
|
{
|
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
JTextComponent t = getTextComponent(event);
|
|
|
|
if (t != null)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
int pos = t.getCaret().getDot();
|
|
|
|
if (pos > t.getDocument().getStartPosition().getOffset())
|
|
|
|
{
|
|
|
|
t.getDocument().remove(pos - 1, 1);
|
|
|
|
t.getCaret().setDot(pos - 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (BadLocationException e)
|
|
|
|
{
|
|
|
|
// FIXME: we're not authorized to throw this.. swallow it?
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
new TextAction(backwardAction)
|
|
|
|
{
|
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
JTextComponent t = getTextComponent(event);
|
|
|
|
if (t != null)
|
|
|
|
{
|
|
|
|
t.getCaret().setDot(Math.max(t.getCaret().getDot() - 1,
|
|
|
|
t.getDocument().getStartPosition().getOffset()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
new TextAction(forwardAction)
|
|
|
|
{
|
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
JTextComponent t = getTextComponent(event);
|
|
|
|
if (t != null)
|
|
|
|
{
|
|
|
|
t.getCaret().setDot(Math.min(t.getCaret().getDot() + 1,
|
|
|
|
t.getDocument().getEndPosition().getOffset()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
new TextAction(selectionBackwardAction)
|
|
|
|
{
|
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
JTextComponent t = getTextComponent(event);
|
|
|
|
if (t != null)
|
|
|
|
{
|
|
|
|
t.getCaret().moveDot(Math.max(t.getCaret().getDot() - 1,
|
|
|
|
t.getDocument().getStartPosition().getOffset()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
new TextAction(selectionForwardAction)
|
|
|
|
{
|
|
|
|
public void actionPerformed(ActionEvent event)
|
|
|
|
{
|
|
|
|
JTextComponent t = getTextComponent(event);
|
|
|
|
if (t != null)
|
|
|
|
{
|
|
|
|
t.getCaret().moveDot(Math.min(t.getCaret().getDot() + 1,
|
|
|
|
t.getDocument().getEndPosition().getOffset()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Creates the <code>Caret</code> for this <code>EditorKit</code>. This
|
|
|
|
* returns a {@link DefaultCaret} in this case.
|
|
|
|
*
|
|
|
|
* @return the <code>Caret</code> for this <code>EditorKit</code>
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public Caret createCaret()
|
|
|
|
{
|
|
|
|
return new DefaultCaret();
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Creates the default {@link Document} that this <code>EditorKit</code>
|
|
|
|
* supports. This is a {@link PlainDocument} in this case.
|
|
|
|
*
|
|
|
|
* @return the default {@link Document} that this <code>EditorKit</code>
|
|
|
|
* supports
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public Document createDefaultDocument()
|
|
|
|
{
|
|
|
|
return new PlainDocument();
|
|
|
|
}
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the <code>Action</code>s supported by this <code>EditorKit</code>.
|
|
|
|
*
|
|
|
|
* @return the <code>Action</code>s supported by this <code>EditorKit</code>
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public Action[] getActions()
|
|
|
|
{
|
|
|
|
return defaultActions;
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Returns the content type that this <code>EditorKit</code> supports.
|
|
|
|
* The <code>DefaultEditorKit</code> supports the content type
|
|
|
|
* <code>text/plain</code>.
|
|
|
|
*
|
|
|
|
* @return the content type that this <code>EditorKit</code> supports
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public String getContentType()
|
|
|
|
{
|
|
|
|
return "text/plain";
|
|
|
|
}
|
2005-09-23 21:31:04 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns a {@link ViewFactory} that is able to create {@link View}s for
|
|
|
|
* the <code>Element</code>s that are used in this <code>EditorKit</code>'s
|
|
|
|
* model. This returns null which lets the UI of the text component supply
|
|
|
|
* <code>View</code>s.
|
|
|
|
*
|
|
|
|
* @return a {@link ViewFactory} that is able to create {@link View}s for
|
|
|
|
* the <code>Element</code>s that are used in this
|
|
|
|
* <code>EditorKit</code>'s model
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public ViewFactory getViewFactory()
|
|
|
|
{
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Reads a document of the supported content type from an {@link InputStream}
|
|
|
|
* into the actual {@link Document} object.
|
|
|
|
*
|
|
|
|
* @param in the stream from which to read the document
|
|
|
|
* @param document the document model into which the content is read
|
|
|
|
* @param offset the offset inside to document where the content is inserted
|
|
|
|
*
|
|
|
|
* @throws BadLocationException if <code>offset</code> is an invalid location
|
|
|
|
* inside <code>document</code>
|
|
|
|
* @throws IOException if something goes wrong while reading from
|
|
|
|
* <code>in</code>
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void read(InputStream in, Document document, int offset)
|
|
|
|
throws BadLocationException, IOException
|
|
|
|
{
|
|
|
|
read(new InputStreamReader(in), document, offset);
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Reads a document of the supported content type from a {@link Reader}
|
|
|
|
* into the actual {@link Document} object.
|
|
|
|
*
|
|
|
|
* @param in the reader from which to read the document
|
|
|
|
* @param document the document model into which the content is read
|
|
|
|
* @param offset the offset inside to document where the content is inserted
|
|
|
|
*
|
|
|
|
* @throws BadLocationException if <code>offset</code> is an invalid location
|
|
|
|
* inside <code>document</code>
|
|
|
|
* @throws IOException if something goes wrong while reading from
|
|
|
|
* <code>in</code>
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void read(Reader in, Document document, int offset)
|
|
|
|
throws BadLocationException, IOException
|
|
|
|
{
|
|
|
|
BufferedReader reader = new BufferedReader(in);
|
|
|
|
|
|
|
|
String line;
|
|
|
|
StringBuffer content = new StringBuffer();
|
|
|
|
|
|
|
|
while ((line = reader.readLine()) != null)
|
|
|
|
{
|
|
|
|
content.append(line);
|
|
|
|
content.append("\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
document.insertString(offset, content.toString(),
|
|
|
|
SimpleAttributeSet.EMPTY);
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Writes the <code>Document</code> (or a fragment of the
|
|
|
|
* <code>Document</code>) to an {@link OutputStream} in the
|
|
|
|
* supported content type format.
|
|
|
|
*
|
|
|
|
* @param out the stream to write to
|
|
|
|
* @param document the document that should be written out
|
|
|
|
* @param offset the beginning offset from where to write
|
|
|
|
* @param len the length of the fragment to write
|
|
|
|
*
|
|
|
|
* @throws BadLocationException if <code>offset</code> or
|
|
|
|
* <code>offset + len</code>is an invalid location inside
|
|
|
|
* <code>document</code>
|
|
|
|
* @throws IOException if something goes wrong while writing to
|
|
|
|
* <code>out</code>
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void write(OutputStream out, Document document, int offset, int len)
|
|
|
|
throws BadLocationException, IOException
|
|
|
|
{
|
|
|
|
write(new OutputStreamWriter(out), document, offset, len);
|
|
|
|
}
|
|
|
|
|
2005-09-23 21:31:04 +00:00
|
|
|
/**
|
|
|
|
* Writes the <code>Document</code> (or a fragment of the
|
|
|
|
* <code>Document</code>) to a {@link Writer} in the
|
|
|
|
* supported content type format.
|
|
|
|
*
|
|
|
|
* @param out the writer to write to
|
|
|
|
* @param document the document that should be written out
|
|
|
|
* @param offset the beginning offset from where to write
|
|
|
|
* @param len the length of the fragment to write
|
|
|
|
*
|
|
|
|
* @throws BadLocationException if <code>offset</code> or
|
|
|
|
* <code>offset + len</code>is an invalid location inside
|
|
|
|
* <code>document</code>
|
|
|
|
* @throws IOException if something goes wrong while writing to
|
|
|
|
* <code>out</code>
|
|
|
|
*/
|
2005-07-16 00:30:23 +00:00
|
|
|
public void write(Writer out, Document document, int offset, int len)
|
|
|
|
throws BadLocationException, IOException
|
|
|
|
{
|
2005-09-23 21:31:04 +00:00
|
|
|
// TODO: Implement this properly.
|
2005-07-16 00:30:23 +00:00
|
|
|
}
|
|
|
|
}
|