summaryrefslogtreecommitdiffstats
path: root/libjava/javax/swing/text
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/javax/swing/text')
-rw-r--r--libjava/javax/swing/text/AbstractDocument.java163
-rw-r--r--libjava/javax/swing/text/DefaultEditorKit.java77
-rw-r--r--libjava/javax/swing/text/DefaultStyledDocument.java195
-rw-r--r--libjava/javax/swing/text/EditorKit.java20
-rw-r--r--libjava/javax/swing/text/GapContent.java2
-rw-r--r--libjava/javax/swing/text/JTextComponent.java160
-rw-r--r--libjava/javax/swing/text/PasswordView.java32
-rw-r--r--libjava/javax/swing/text/PlainDocument.java36
-rw-r--r--libjava/javax/swing/text/PlainView.java26
-rw-r--r--libjava/javax/swing/text/Position.java8
-rw-r--r--libjava/javax/swing/text/Segment.java12
-rw-r--r--libjava/javax/swing/text/StringContent.java304
-rw-r--r--libjava/javax/swing/text/StyledEditorKit.java522
-rw-r--r--libjava/javax/swing/text/TextAction.java69
-rw-r--r--libjava/javax/swing/text/View.java153
-rw-r--r--libjava/javax/swing/text/ViewFactory.java2
16 files changed, 1324 insertions, 457 deletions
diff --git a/libjava/javax/swing/text/AbstractDocument.java b/libjava/javax/swing/text/AbstractDocument.java
index f579fbb213b..a2c3fa65701 100644
--- a/libjava/javax/swing/text/AbstractDocument.java
+++ b/libjava/javax/swing/text/AbstractDocument.java
@@ -1,5 +1,5 @@
/* AbstractDocument.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,8 +38,8 @@ exception statement from your version. */
package javax.swing.text;
+import java.io.PrintStream;
import java.io.Serializable;
-import java.util.Collections;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.EventListener;
@@ -59,7 +59,9 @@ public abstract class AbstractDocument
implements Document, Serializable
{
private static final long serialVersionUID = -116069779446114664L;
+
protected static final String BAD_LOCATION = "document location failure";
+
public static final String BidiElementName = "bidi level";
public static final String ContentElementName = "content";
public static final String ParagraphElementName = "paragraph";
@@ -68,6 +70,8 @@ public abstract class AbstractDocument
Content content;
AttributeContext context;
+ DocumentFilter documentFilter;
+
protected EventListenerList listenerList = new EventListenerList();
protected AbstractDocument(Content doc)
@@ -139,7 +143,7 @@ public abstract class AbstractDocument
protected void fireUndoableEditUpdate(UndoableEditEvent event)
{
UndoableEditListener[] listeners = getUndoableEditListeners();
-
+
for (int index = 0; index < listeners.length; ++index)
listeners[index].undoableEditHappened(event);
}
@@ -187,7 +191,7 @@ public abstract class AbstractDocument
public int getLength()
{
- return content.length();
+ return content.length() - 1;
}
public EventListener[] getListeners(Class listenerType)
@@ -219,9 +223,9 @@ public abstract class AbstractDocument
}
public String getText(int offset, int length) throws BadLocationException
- {
- return content.getString(offset, length);
- }
+ {
+ return content.getString(offset, length);
+ }
public void getText(int offset, int length, Segment segment)
throws BadLocationException
@@ -372,6 +376,27 @@ public abstract class AbstractDocument
{
}
+ /**
+ * @since 1.4
+ */
+ public DocumentFilter getDocumentFilter()
+ {
+ return documentFilter;
+ }
+
+ /**
+ * @since 1.4
+ */
+ public void setDocumentFilter(DocumentFilter filter)
+ {
+ this.documentFilter = filter;
+ }
+
+ public void dump(PrintStream out)
+ {
+ ((AbstractElement) getDefaultRootElement()).dump(out, 0);
+ }
+
public interface AttributeContext
{
AttributeSet addAttribute(AttributeSet old, Object name, Object value);
@@ -415,7 +440,6 @@ public abstract class AbstractDocument
AttributeSet attributes;
Element element_parent;
- Vector element_children;
TreeNode tree_parent;
Vector tree_children;
@@ -428,15 +452,9 @@ public abstract class AbstractDocument
// TreeNode implementation
- public Enumeration children()
- {
- return Collections.enumeration(tree_children);
- }
+ public abstract Enumeration children();
- public boolean getAllowsChildren()
- {
- return true;
- }
+ public abstract boolean getAllowsChildren();
public TreeNode getChildAt(int index)
{
@@ -553,10 +571,7 @@ public abstract class AbstractDocument
return AbstractDocument.this;
}
- public Element getElement(int index)
- {
- return (Element) element_children.get(index);
- }
+ public abstract Element getElement(int index);
public String getName()
{
@@ -575,13 +590,49 @@ public abstract class AbstractDocument
public abstract int getElementIndex(int offset);
public abstract int getStartOffset();
+
+ private void dumpElement(PrintStream stream, String indent, Element element)
+ {
+ System.out.println(indent + "<" + element.getName() +">");
+
+ if (element.isLeaf())
+ {
+ int start = element.getStartOffset();
+ int end = element.getEndOffset();
+ String text = "";
+ try
+ {
+ text = getContent().getString(start, end - start);
+ }
+ catch (BadLocationException e)
+ {
+ }
+ System.out.println(indent + " ["
+ + start + ","
+ + end + "]["
+ + text + "]");
+ }
+ else
+ {
+ for (int i = 0; i < element.getElementCount(); ++i)
+ dumpElement(stream, indent + " ", element.getElement(i));
+ }
+ }
+
+ public void dump(PrintStream stream, int indent)
+ {
+ String indentStr = "";
+ for (int i = 0; i < indent; ++i)
+ indentStr += " ";
+ dumpElement(stream, indentStr, this);
+ }
}
public class BranchElement extends AbstractElement
{
private static final long serialVersionUID = -8595176318868717313L;
- private Vector children = new Vector();
+ private Element[] children = new Element[0];
public BranchElement(Element parent, AttributeSet attributes)
{
@@ -590,7 +641,15 @@ public abstract class AbstractDocument
public Enumeration children()
{
- return children.elements();
+ if (children.length == 0)
+ return null;
+
+ Vector tmp = new Vector();
+
+ for (int index = 0; index < children.length; ++index)
+ tmp.add(children[index]);
+
+ return tmp.elements();
}
public boolean getAllowsChildren()
@@ -600,43 +659,46 @@ public abstract class AbstractDocument
public Element getElement(int index)
{
- if (index < 0 || index >= children.size())
+ if (index < 0 || index >= children.length)
return null;
- return (Element) children.get(index);
+ return children[index];
}
public int getElementCount()
{
- return children.size();
+ return children.length;
}
public int getElementIndex(int offset)
{
- if (children.size() == 0)
- return 0;
-
- Element element = positionToElement(offset);
+ // XXX: There is surely a better algorithm
+ // as beginning from first element each time.
+ for (int index = 0; index < children.length; ++index)
+ {
+ Element elem = children[index];
- if (element == null)
- return 0;
-
- return children.indexOf(element);
+ if ((elem.getStartOffset() <= offset)
+ && (offset < elem.getEndOffset()))
+ return index;
+ }
+
+ return 0;
}
public int getEndOffset()
{
- return ((Element) children.lastElement()).getEndOffset();
+ return children[children.length - 1].getEndOffset();
}
public String getName()
{
- return "AbstractDocument.BranchElement";
+ return ParagraphElementName;
}
public int getStartOffset()
{
- return ((Element) children.firstElement()).getStartOffset();
+ return children[0].getStartOffset();
}
public boolean isLeaf()
@@ -648,9 +710,9 @@ public abstract class AbstractDocument
{
// XXX: There is surely a better algorithm
// as beginning from first element each time.
- for (int index = 0; index < children.size(); ++index)
+ for (int index = 0; index < children.length; ++index)
{
- Element elem = (Element) children.get(index);
+ Element elem = children[index];
if ((elem.getStartOffset() <= position)
&& (position < elem.getEndOffset()))
@@ -660,18 +722,22 @@ public abstract class AbstractDocument
return null;
}
- public void replace(int offset, int length, Element[] elems)
+ public void replace(int offset, int length, Element[] elements)
{
- for (int index = 0; index < length; ++index)
- children.removeElementAt(offset);
-
- for (int index = 0; index < elems.length; ++index)
- children.add(offset + index, elems[index]);
+ Element[] target = new Element[children.length - length
+ + elements.length];
+ System.arraycopy(children, 0, target, 0, offset);
+ System.arraycopy(elements, 0, target, offset, elements.length);
+ System.arraycopy(children, offset + length, target,
+ offset + elements.length,
+ children.length - offset - length);
+ children = target;
}
public String toString()
{
- return getName() + ": " + "content";
+ return ("BranchElement(" + getName() + ") "
+ + getStartOffset() + "," + getEndOffset() + "\n");
}
}
@@ -782,7 +848,7 @@ public abstract class AbstractDocument
return false;
}
- public Element getElement()
+ public Element getElement(int index)
{
return null;
}
@@ -804,7 +870,7 @@ public abstract class AbstractDocument
public String getName()
{
- return "AbstractDocument.LeafElement";
+ return ContentElementName;
}
public int getStartOffset()
@@ -819,7 +885,8 @@ public abstract class AbstractDocument
public String toString()
{
- return getName() + ": " + "content";
+ return ("LeafElement(" + getName() + ") "
+ + getStartOffset() + "," + getEndOffset() + "\n");
}
}
}
diff --git a/libjava/javax/swing/text/DefaultEditorKit.java b/libjava/javax/swing/text/DefaultEditorKit.java
index 0e3be209688..ecec70731ce 100644
--- a/libjava/javax/swing/text/DefaultEditorKit.java
+++ b/libjava/javax/swing/text/DefaultEditorKit.java
@@ -1,5 +1,5 @@
-/* DefaultEditorKit.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+/* DefaultEditorKit.java --
+ Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,14 +40,16 @@ 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;
-import javax.swing.JEditorPane;
public class DefaultEditorKit extends EditorKit
{
@@ -84,6 +86,7 @@ public class DefaultEditorKit extends EditorKit
{
super(cutAction);
}
+
public void actionPerformed(ActionEvent event)
{
}
@@ -96,6 +99,7 @@ public class DefaultEditorKit extends EditorKit
{
super(defaultKeyTypedAction);
}
+
public void actionPerformed(ActionEvent event)
{
JTextComponent t = getTextComponent(event);
@@ -123,6 +127,7 @@ public class DefaultEditorKit extends EditorKit
{
super(insertBreakAction);
}
+
public void actionPerformed(ActionEvent event)
{
}
@@ -147,6 +152,7 @@ public class DefaultEditorKit extends EditorKit
{
super(insertTabAction);
}
+
public void actionPerformed(ActionEvent event)
{
}
@@ -159,6 +165,7 @@ public class DefaultEditorKit extends EditorKit
{
super(pasteAction);
}
+
public void actionPerformed(ActionEvent event)
{
}
@@ -328,17 +335,6 @@ public class DefaultEditorKit extends EditorKit
},
};
- /**
- * Called when the kit is being removed from the JEditorPane.
- */
- public void deinstall(JEditorPane c)
- {
- }
-
- public void install(JEditorPane c)
- {
- }
-
public Caret createCaret()
{
return new DefaultCaret();
@@ -355,32 +351,47 @@ public class DefaultEditorKit extends EditorKit
}
public String getContentType()
- {
- return "text/plain";
- }
-
+ {
+ return "text/plain";
+ }
+
public ViewFactory getViewFactory()
- {
- return null;
- }
+ {
+ return null;
+ }
- public void read(InputStream in, Document doc, int pos)
+ public void read(InputStream in, Document document, int offset)
throws BadLocationException, IOException
- {
- }
+ {
+ read(new InputStreamReader(in), document, offset);
+ }
- public void read(Reader in, Document doc, int pos)
+ public void read(Reader in, Document document, int offset)
throws BadLocationException, IOException
- {
- }
+ {
+ BufferedReader reader = new BufferedReader(in);
+
+ String line;
+ StringBuffer content = new StringBuffer();
- public void write(OutputStream out, Document doc, int pos, int len)
+ while ((line = reader.readLine()) != null)
+ {
+ content.append(line);
+ content.append("\n");
+ }
+
+ document.insertString(offset, content.toString(),
+ SimpleAttributeSet.EMPTY);
+ }
+
+ public void write(OutputStream out, Document document, int offset, int len)
throws BadLocationException, IOException
- {
- }
+ {
+ write(new OutputStreamWriter(out), document, offset, len);
+ }
- public void write(Writer out, Document doc, int pos, int len)
+ public void write(Writer out, Document document, int offset, int len)
throws BadLocationException, IOException
- {
- }
+ {
+ }
}
diff --git a/libjava/javax/swing/text/DefaultStyledDocument.java b/libjava/javax/swing/text/DefaultStyledDocument.java
new file mode 100644
index 00000000000..83da23a2638
--- /dev/null
+++ b/libjava/javax/swing/text/DefaultStyledDocument.java
@@ -0,0 +1,195 @@
+/* DefaultStyledDocument.java --
+ Copyright (C) 2004 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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.Color;
+import java.awt.Font;
+import java.io.Serializable;
+
+/**
+ * @author Michael Koch (konqueror@gmx.de)
+ */
+public class DefaultStyledDocument extends AbstractDocument
+ implements StyledDocument
+{
+ public class ElementBuffer
+ implements Serializable
+ {
+ private Element root;
+
+ public ElementBuffer(Element root)
+ {
+ this.root = root;
+ }
+
+ public Element getRootElement()
+ {
+ return root;
+ }
+ }
+
+ public static final int BUFFER_SIZE_DEFAULT = 4096;
+
+ protected DefaultStyledDocument.ElementBuffer buffer;
+
+ public DefaultStyledDocument()
+ {
+ this(new GapContent(BUFFER_SIZE_DEFAULT), new StyleContext());
+ }
+
+ public DefaultStyledDocument(StyleContext context)
+ {
+ this(new GapContent(BUFFER_SIZE_DEFAULT), context);
+ }
+
+ public DefaultStyledDocument(AbstractDocument.Content content,
+ StyleContext context)
+ {
+ super(content, context);
+ buffer = new ElementBuffer(createDefaultRoot());
+ setLogicalStyle(0, context.getStyle(StyleContext.DEFAULT_STYLE));
+ }
+
+ public Style addStyle(String nm, Style parent)
+ {
+ StyleContext context = (StyleContext) getAttributeContext();
+ return context.addStyle(nm, parent);
+ }
+
+ protected AbstractDocument.AbstractElement createDefaultRoot()
+ {
+ Element[] tmp;
+ BranchElement section = new BranchElement(null, null);
+
+ BranchElement paragraph = new BranchElement(section, null);
+ tmp = new Element[1];
+ tmp[0] = paragraph;
+ section.replace(0, 0, tmp);
+
+ LeafElement leaf = new LeafElement(paragraph, null, 0, 1);
+ tmp = new Element[1];
+ tmp[0] = leaf;
+ paragraph.replace(0, 0, tmp);
+
+ return section;
+ }
+
+ public Element getCharacterElement(int position)
+ {
+ Element element = getDefaultRootElement();
+
+ while (! element.isLeaf())
+ {
+ int index = element.getElementIndex(position);
+ element = element.getElement(index);
+ }
+
+ return element;
+ }
+
+ public Color getBackground(AttributeSet attributes)
+ {
+ StyleContext context = (StyleContext) getAttributeContext();
+ return context.getBackground(attributes);
+ }
+
+ public Element getDefaultRootElement()
+ {
+ return buffer.getRootElement();
+ }
+
+ public Font getFont(AttributeSet attributes)
+ {
+ StyleContext context = (StyleContext) getAttributeContext();
+ return context.getFont(attributes);
+ }
+
+ public Color getForeground(AttributeSet attributes)
+ {
+ StyleContext context = (StyleContext) getAttributeContext();
+ return context.getForeground(attributes);
+ }
+
+ public Style getLogicalStyle(int position)
+ {
+ Element paragraph = getParagraphElement(position);
+ AttributeSet attributes = paragraph.getAttributes();
+ return (Style) attributes.getResolveParent();
+ }
+
+ public Element getParagraphElement(int position)
+ {
+ Element element = getCharacterElement(position);
+ return element.getParentElement();
+ }
+
+ public Style getStyle(String nm)
+ {
+ StyleContext context = (StyleContext) getAttributeContext();
+ return context.getStyle(nm);
+ }
+
+ public void removeStyle(String nm)
+ {
+ StyleContext context = (StyleContext) getAttributeContext();
+ context.removeStyle(nm);
+ }
+
+ public void setCharacterAttributes(int offset, int length,
+ AttributeSet attributes,
+ boolean replace)
+ {
+ // FIXME: Implement me.
+ throw new Error("not implemented");
+ }
+
+ public void setLogicalStyle(int position, Style style)
+ {
+ // FIXME: Implement me.
+ throw new Error("not implemented");
+ }
+
+ public void setParagraphAttributes(int offset, int length,
+ AttributeSet attributes,
+ boolean replace)
+ {
+ // FIXME: Implement me.
+ throw new Error("not implemented");
+ }
+}
diff --git a/libjava/javax/swing/text/EditorKit.java b/libjava/javax/swing/text/EditorKit.java
index efca9657e26..5d89a11ba7f 100644
--- a/libjava/javax/swing/text/EditorKit.java
+++ b/libjava/javax/swing/text/EditorKit.java
@@ -1,4 +1,4 @@
-/* EditorKit.java --
+/* EditorKit.java --
Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -54,31 +54,31 @@ public abstract class EditorKit
private static final long serialVersionUID = -5044124649345887822L;
public EditorKit()
- {
- }
+ {
+ }
public Object clone()
- {
+ {
try
{
return super.clone();
- }
+ }
catch (CloneNotSupportedException e)
- {
+ {
return null;
- }
+ }
}
/**
* Called when the kit is being removed from the JEditorPane.
*/
public void deinstall(JEditorPane c)
- {
- }
+ {
+ }
public void install(JEditorPane c)
{
-}
+ }
public abstract Caret createCaret();
public abstract Document createDefaultDocument();
diff --git a/libjava/javax/swing/text/GapContent.java b/libjava/javax/swing/text/GapContent.java
index 5826128724f..44a8dcb5864 100644
--- a/libjava/javax/swing/text/GapContent.java
+++ b/libjava/javax/swing/text/GapContent.java
@@ -35,6 +35,7 @@ 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.io.Serializable;
@@ -57,6 +58,7 @@ public class GapContent
public GapContent(int size)
{
+ buf.append("\n");
}
public Position createPosition(final int offset) throws BadLocationException
diff --git a/libjava/javax/swing/text/JTextComponent.java b/libjava/javax/swing/text/JTextComponent.java
index 0bca84b0fcf..dee496d6b40 100644
--- a/libjava/javax/swing/text/JTextComponent.java
+++ b/libjava/javax/swing/text/JTextComponent.java
@@ -44,8 +44,15 @@ import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.event.ActionEvent;
import java.awt.event.InputMethodListener;
import java.awt.event.KeyEvent;
+import java.io.IOException;
import java.util.Enumeration;
import java.util.Hashtable;
@@ -61,6 +68,7 @@ import javax.swing.JComponent;
import javax.swing.JViewport;
import javax.swing.KeyStroke;
import javax.swing.Scrollable;
+import javax.swing.TransferHandler;
import javax.swing.UIManager;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
@@ -546,7 +554,92 @@ public abstract class JTextComponent extends JComponent
{
parent = p;
}
+ }
+
+ class DefaultTransferHandler
+ extends TransferHandler
+ {
+ public boolean canImport(JComponent component, DataFlavor[] flavors)
+ {
+ JTextComponent textComponent = (JTextComponent) component;
+
+ if (! (textComponent.isEnabled()
+ && textComponent.isEditable()
+ && flavors != null))
+ return false;
+
+ for (int i = 0; i < flavors.length; ++i)
+ if (flavors[i].equals(DataFlavor.stringFlavor))
+ return true;
+
+ return false;
+ }
+
+ public void exportToClipboard(JComponent component, Clipboard clipboard,
+ int action)
+ {
+ JTextComponent textComponent = (JTextComponent) component;
+ int start = textComponent.getSelectionStart();
+ int end = textComponent.getSelectionEnd();
+ if (start == end)
+ return;
+
+ try
+ {
+ // Copy text to clipboard.
+ String data = textComponent.getDocument().getText(start, end);
+ StringSelection selection = new StringSelection(data);
+ clipboard.setContents(selection, null);
+
+ // Delete selected text on cut action.
+ if (action == MOVE)
+ doc.remove(start, end - start);
+ }
+ catch (BadLocationException e)
+ {
+ // Ignore this and do nothing.
+ }
+ }
+
+ public int getSourceActions()
+ {
+ return NONE;
+ }
+
+ public boolean importData(JComponent component, Transferable transferable)
+ {
+ DataFlavor flavor = null;
+ DataFlavor[] flavors = transferable.getTransferDataFlavors();
+
+ if (flavors == null)
+ return false;
+
+ for (int i = 0; i < flavors.length; ++i)
+ if (flavors[i].equals(DataFlavor.stringFlavor))
+ flavor = flavors[i];
+
+ if (flavor == null)
+ return false;
+
+ try
+ {
+ JTextComponent textComponent = (JTextComponent) component;
+ String data = (String) transferable.getTransferData(flavor);
+ textComponent.replaceSelection(data);
+ return true;
+ }
+ catch (IOException e)
+ {
+ // Ignored.
+ }
+ catch (UnsupportedFlavorException e)
+ {
+ // Ignored.
+ }
+
+ return false;
+ }
}
private static final long serialVersionUID = -8796518220218978795L;
@@ -554,8 +647,11 @@ public abstract class JTextComponent extends JComponent
public static final String DEFAULT_KEYMAP = "default";
public static final String FOCUS_ACCELERATOR_KEY = "focusAcceleratorKey";
+ private static DefaultTransferHandler defaultTransferHandler;
private static Hashtable keymaps = new Hashtable();
private Keymap keymap;
+ private char focusAccelerator = '\0';
+ private NavigationFilter navigationFilter;
/**
* Get a Keymap from the global keymap table, by name.
@@ -875,6 +971,7 @@ public abstract class JTextComponent extends JComponent
}
catch (BadLocationException e)
{
+ // This can never happen.
}
}
@@ -1369,4 +1466,67 @@ public abstract class JTextComponent extends JComponent
{
dragEnabled = enabled;
}
+
+ public void copy()
+ {
+ doTransferAction("copy", TransferHandler.getCopyAction());
+ }
+
+ public void cut()
+ {
+ doTransferAction("cut", TransferHandler.getCutAction());
+ }
+
+ public void paste()
+ {
+ doTransferAction("paste", TransferHandler.getPasteAction());
+ }
+
+ private void doTransferAction(String name, Action action)
+ {
+ // Install default TransferHandler if none set.
+ if (getTransferHandler() == null)
+ {
+ if (defaultTransferHandler == null)
+ defaultTransferHandler = new DefaultTransferHandler();
+
+ setTransferHandler(defaultTransferHandler);
+ }
+
+ // Perform action.
+ ActionEvent event = new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
+ action.getValue(Action.NAME).toString());
+ action.actionPerformed(event);
+ }
+
+ public void setFocusAccelerator(char newKey)
+ {
+ if (focusAccelerator == newKey)
+ return;
+
+ char oldKey = focusAccelerator;
+ focusAccelerator = newKey;
+ firePropertyChange(FOCUS_ACCELERATOR_KEY, oldKey, newKey);
+ }
+
+ public char getFocusAccelerator()
+ {
+ return focusAccelerator;
+ }
+
+ /**
+ * @since 1.4
+ */
+ public NavigationFilter getNavigationFilter()
+ {
+ return navigationFilter;
+ }
+
+ /**
+ * @since 1.4
+ */
+ public void setNavigationFilter(NavigationFilter filter)
+ {
+ navigationFilter = filter;
+ }
}
diff --git a/libjava/javax/swing/text/PasswordView.java b/libjava/javax/swing/text/PasswordView.java
index f9db0417057..ad18350e947 100644
--- a/libjava/javax/swing/text/PasswordView.java
+++ b/libjava/javax/swing/text/PasswordView.java
@@ -56,6 +56,16 @@ public class PasswordView extends FieldView
super(elem);
}
+ /**
+ * Draws one echo character at a given position.
+ *
+ * @param g the <code>Graphics</code> object to draw to
+ * @param x the x-position
+ * @param y the y-position
+ * @param ch the echo character
+ *
+ * @return the next x position right of the drawn character
+ */
protected int drawEchoCharacter(Graphics g, int x, int y, char ch)
{
// Update font metrics.
@@ -79,6 +89,17 @@ public class PasswordView extends FieldView
return ch;
}
+ /**
+ * Draws selected text at a given position.
+ *
+ * @param g the <code>Graphics</code> object to draw to
+ * @param x the x-position
+ * @param y the y-position
+ * @param p0 the position of the first character to draw
+ * @param p1 the position of the first character not to draw
+ *
+ * @return the next x position right of the drawn character
+ */
protected int drawSelectedText(Graphics g, int x, int y, int p0, int p1)
throws BadLocationException
{
@@ -107,6 +128,17 @@ public class PasswordView extends FieldView
return x + len * metrics.charWidth(ch);
}
+ /**
+ * Draws unselected text at a given position.
+ *
+ * @param g the <code>Graphics</code> object to draw to
+ * @param x the x-position
+ * @param y the y-position
+ * @param p0 the position of the first character to draw
+ * @param p1 the position of the first character not to draw
+ *
+ * @return the next x position right of the drawn character
+ */
protected int drawUnselectedText(Graphics g, int x, int y, int p0, int p1)
throws BadLocationException
{
diff --git a/libjava/javax/swing/text/PlainDocument.java b/libjava/javax/swing/text/PlainDocument.java
index 22808700a03..64e9c8ab3f4 100644
--- a/libjava/javax/swing/text/PlainDocument.java
+++ b/libjava/javax/swing/text/PlainDocument.java
@@ -35,6 +35,7 @@ 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.util.ArrayList;
@@ -61,7 +62,7 @@ public class PlainDocument extends AbstractDocument
rootElement = createDefaultRoot();
}
- protected void reindex()
+ private void reindex()
{
Element[] lines;
try
@@ -70,24 +71,23 @@ public class PlainDocument extends AbstractDocument
ArrayList elts = new ArrayList();
int j = 0;
- for (int i = str.indexOf('\n', 0); i != -1; i = str.indexOf('\n', i+1))
+ for (int i = str.indexOf('\n', 0); i != -1; i = str.indexOf('\n', i + 1))
{
- elts.add(createLeafElement(rootElement, null, j, i));
- j = i;
+ elts.add(createLeafElement(rootElement, SimpleAttributeSet.EMPTY, j, i + 1));
+ j = i + 1;
}
if (j < content.length())
- elts.add(createLeafElement(rootElement, null, j, content.length()));
+ elts.add(createLeafElement(rootElement, SimpleAttributeSet.EMPTY, j, content.length()));
lines = new Element[elts.size()];
for (int i = 0; i < elts.size(); ++i)
lines[i] = (Element) elts.get(i);
-
}
catch (BadLocationException e)
{
lines = new Element[1];
- lines[0] = createLeafElement(rootElement, null, 0, 1);
+ lines[0] = createLeafElement(rootElement, SimpleAttributeSet.EMPTY, 0, 1);
}
((BranchElement) rootElement).replace(0, rootElement.getElementCount(), lines);
@@ -95,19 +95,28 @@ public class PlainDocument extends AbstractDocument
protected AbstractDocument.AbstractElement createDefaultRoot()
{
- rootElement = createBranchElement(null, null);
- reindex();
- return (AbstractElement) rootElement;
+ BranchElement root =
+ (BranchElement) createBranchElement(null, SimpleAttributeSet.EMPTY);
+
+ Element[] array = new Element[1];
+ array[0] = createLeafElement(root, SimpleAttributeSet.EMPTY, 0, 1);
+ root.replace(0, 0, array);
+
+ return root;
}
- protected void insertUpdate(DefaultDocumentEvent chng, AttributeSet attr)
+ protected void insertUpdate(DefaultDocumentEvent event, AttributeSet attributes)
{
reindex();
+
+ super.insertUpdate(event, attributes);
}
- protected void removeUpdate(DefaultDocumentEvent chng)
+ protected void removeUpdate(DefaultDocumentEvent event)
{
reindex();
+
+ super.removeUpdate(event);
}
public Element getDefaultRootElement()
@@ -117,6 +126,7 @@ public class PlainDocument extends AbstractDocument
public Element getParagraphElement(int pos)
{
- return null;
+ Element root = getDefaultRootElement();
+ return root.getElement(root.getElementIndex(pos));
}
}
diff --git a/libjava/javax/swing/text/PlainView.java b/libjava/javax/swing/text/PlainView.java
index bcec3538d64..c852c1d69b4 100644
--- a/libjava/javax/swing/text/PlainView.java
+++ b/libjava/javax/swing/text/PlainView.java
@@ -1,5 +1,5 @@
/* PlainView.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,6 @@ import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Shape;
-
public class PlainView extends View
implements TabExpander
{
@@ -93,6 +92,9 @@ public class PlainView extends View
public Shape modelToView(int position, Shape a, Position.Bias b)
throws BadLocationException
{
+ // Ensure metrics are up-to-date.
+ updateMetrics();
+
Document document = getDocument();
// Get rectangle of the line containing position.
@@ -115,13 +117,14 @@ public class PlainView extends View
return rect;
}
- public void drawLine(int lineIndex, Graphics g, int x, int y)
+ protected void drawLine(int lineIndex, Graphics g, int x, int y)
{
try
{
metrics = g.getFontMetrics();
// FIXME: Selected text are not drawn yet.
- drawUnselectedText(g, x, y, 0, getDocument().getLength());
+ Element line = getDocument().getDefaultRootElement().getElement(lineIndex);
+ drawUnselectedText(g, x, y, line.getStartOffset(), line.getEndOffset());
//drawSelectedText(g, , , , );
}
catch (BadLocationException e)
@@ -150,6 +153,9 @@ public class PlainView extends View
public void paint(Graphics g, Shape s)
{
+ // Ensure metrics are up-to-date.
+ updateMetrics();
+
JTextComponent textComponent = (JTextComponent) getContainer();
g.setFont(textComponent.getFont());
@@ -159,10 +165,18 @@ public class PlainView extends View
Rectangle rect = s.getBounds();
// FIXME: Text may be scrolled.
- drawLine(0, g, rect.x, rect.y);
+ Document document = textComponent.getDocument();
+ Element root = document.getDefaultRootElement();
+ int y = rect.y;
+
+ for (int i = 0; i < root.getElementCount(); i++)
+ {
+ drawLine(i, g, rect.x, y);
+ y += metrics.getHeight();
+ }
}
- public int getTabSize()
+ protected int getTabSize()
{
return 8;
}
diff --git a/libjava/javax/swing/text/Position.java b/libjava/javax/swing/text/Position.java
index 64a91f2e1a4..2fe2bd347d3 100644
--- a/libjava/javax/swing/text/Position.java
+++ b/libjava/javax/swing/text/Position.java
@@ -40,8 +40,8 @@ package javax.swing.text;
public interface Position
{
- static class Bias
- {
+ static class Bias
+ {
public static final Bias Backward = new Bias("backward");
public static final Bias Forward = new Bias("forward");
@@ -56,7 +56,7 @@ public interface Position
{
return name;
}
- }
+ }
- int getOffset();
+ int getOffset();
}
diff --git a/libjava/javax/swing/text/Segment.java b/libjava/javax/swing/text/Segment.java
index 218768e05e2..3b1d9e7aa91 100644
--- a/libjava/javax/swing/text/Segment.java
+++ b/libjava/javax/swing/text/Segment.java
@@ -1,4 +1,4 @@
-/* Segment.java --
+/* Segment.java --
Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -59,13 +59,13 @@ public class Segment
this.offset = offset;
this.count = count;
}
-
- public Object clone()
- {
+
+ public Object clone()
+ {
try
{
- return super.clone();
- }
+ return super.clone();
+ }
catch (CloneNotSupportedException e)
{
return null;
diff --git a/libjava/javax/swing/text/StringContent.java b/libjava/javax/swing/text/StringContent.java
new file mode 100644
index 00000000000..f470dddf241
--- /dev/null
+++ b/libjava/javax/swing/text/StringContent.java
@@ -0,0 +1,304 @@
+/* StringContent.java --
+ Copyright (C) 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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.io.Serializable;
+import java.util.Vector;
+import java.util.Iterator;
+
+import javax.swing.undo.UndoableEdit;
+import javax.swing.undo.AbstractUndoableEdit;
+import javax.swing.undo.CannotUndoException;
+import javax.swing.undo.CannotRedoException;
+
+/**
+ * An implementation of the <code>AbstractDocument.Content</code>
+ * interface useful for small documents or debugging. The character
+ * content is a simple character array. It's not really efficient.
+ *
+ * <p>Do not use this class for large size.</p>
+ */
+public final class StringContent implements AbstractDocument.Content, Serializable
+{
+ private char[] content;
+
+ private int count;
+
+ private Vector positions = new Vector();
+
+ private class InsertUndo extends AbstractUndoableEdit
+ {
+ private int start;
+
+ private int length;
+
+ private String redoContent;
+
+ public InsertUndo(int start, int length)
+ {
+ super();
+ this.start = start;
+ this.length = length;
+ }
+
+ public void undo()
+ {
+ super.undo();
+ try
+ {
+ StringContent.this.checkLocation(this.start, this.length);
+ this.redoContent = new String(StringContent.this.content, this.start, this.length);
+ StringContent.this.remove(this.start, this.length);
+ }
+ catch (BadLocationException b)
+ {
+ throw new CannotUndoException();
+ }
+ }
+
+ public void redo()
+ {
+ super.redo();
+ try
+ {
+ StringContent.this.insertString(this.start, this.redoContent);
+ }
+ catch (BadLocationException b)
+ {
+ throw new CannotRedoException();
+ }
+ }
+ }
+
+ private class RemoveUndo extends AbstractUndoableEdit
+ {
+ private int start;
+
+ private String undoString;
+
+ public RemoveUndo(int start, String str)
+ {
+ super();
+ this.start = start;
+ this.undoString = str;
+ }
+
+ public void undo()
+ {
+ super.undo();
+ try
+ {
+ StringContent.this.insertString(this.start, this.undoString);
+ }
+ catch (BadLocationException bad)
+ {
+ throw new CannotUndoException();
+ }
+ }
+
+ public void redo()
+ {
+ super.redo();
+ try
+ {
+ int end = this.undoString.length();
+ StringContent.this.remove(this.start, end);
+ }
+ catch (BadLocationException bad)
+ {
+ throw new CannotRedoException();
+ }
+ }
+ }
+
+ private class StickyPosition implements Position
+ {
+ private int offset = -1;
+
+ public StickyPosition(int offset)
+ {
+ this.offset = offset;
+ }
+
+ private void setOffset(int offset)
+ {
+ this.offset = this.offset >= 0 ? offset : -1;
+ }
+
+ /**
+ * Should be >=0.
+ */
+ public int getOffset()
+ {
+ return offset < 0 ? 0 : offset;
+ }
+ }
+
+ public StringContent()
+ {
+ this(1);
+ }
+
+ public StringContent(int initialLength)
+ {
+ super();
+ if (initialLength < 1)
+ initialLength = 1;
+ this.content = new char[initialLength];
+ this.content[0] = '\n';
+ this.count = 1;
+ }
+
+ protected Vector getPositionsInRange(Vector v,
+ int offset,
+ int length)
+ {
+ Vector refPos = new Vector();
+ Iterator iter = this.positions.iterator();
+ while(iter.hasNext())
+ {
+ Position p = (Position)iter.next();
+ if ((offset <= p.getOffset())
+ && (p.getOffset() <= (offset + length)))
+ refPos.add(p);
+ }
+ return refPos;
+ }
+
+ public Position createPosition(int offset) throws BadLocationException
+ {
+ if (offset < this.count || offset > this.count)
+ checkLocation(offset, 0);
+ StickyPosition sp = new StickyPosition(offset);
+ this.positions.add(sp);
+ return sp;
+ }
+
+ public int length()
+ {
+ return this.count;
+ }
+
+ public UndoableEdit insertString(int where, String str)
+ throws BadLocationException
+ {
+ checkLocation(where, 0);
+ if (where == this.count)
+ throw new BadLocationException("Invalid location", 1);
+ if (str == null)
+ throw new NullPointerException();
+ char[] insert = str.toCharArray();
+ char[] temp = new char[this.content.length + insert.length];
+ this.count += insert.length;
+ // Copy array and insert the string.
+ if (where > 0)
+ System.arraycopy(this.content, 0, temp, 0, where);
+ System.arraycopy(insert, 0, temp, where, insert.length);
+ System.arraycopy(this.content, where, temp, (where + insert.length), (temp.length - where - insert.length));
+ if (this.content.length < temp.length)
+ this.content = new char[temp.length];
+ // Copy the result in the original char array.
+ System.arraycopy(temp, 0, this.content, 0, temp.length);
+ // Move all the positions.
+ Vector refPos = getPositionsInRange(this.positions, where, temp.length - where);
+ Iterator iter = refPos.iterator();
+ while (iter.hasNext())
+ {
+ StickyPosition p = (StickyPosition)iter.next();
+ p.setOffset(p.getOffset() + str.length());
+ }
+ InsertUndo iundo = new InsertUndo(where, insert.length);
+ return iundo;
+ }
+
+ public UndoableEdit remove(int where, int nitems) throws BadLocationException
+ {
+ checkLocation(where, nitems);
+ char[] temp = new char[(this.content.length - nitems)];
+ this.count = this.count - nitems;
+ RemoveUndo rundo = new RemoveUndo(where, new String(this.content, where, nitems));
+ // Copy array.
+ System.arraycopy(this.content, 0, temp, 0, where);
+ System.arraycopy(this.content, where + nitems, temp, where, this.content.length - where - nitems);
+ this.content = new char[temp.length];
+ // Then copy the result in the original char array.
+ System.arraycopy(temp, 0, this.content, 0, this.content.length);
+ // Move all the positions.
+ Vector refPos = getPositionsInRange(this.positions, where, this.content.length + nitems - where);
+ Iterator iter = refPos.iterator();
+ while (iter.hasNext())
+ {
+ StickyPosition p = (StickyPosition)iter.next();
+ int result = p.getOffset() - nitems;
+ p.setOffset(result);
+ if (result < 0)
+ this.positions.remove(p);
+ }
+ return rundo;
+ }
+
+ public String getString(int where, int len) throws BadLocationException
+ {
+ checkLocation(where, len);
+ return new String (this.content, where, len);
+ }
+
+ public void getChars(int where, int len, Segment txt) throws BadLocationException
+ {
+ checkLocation(where, len);
+ if (txt != null)
+ {
+ txt.array = this.content;
+ txt.offset = where;
+ txt.count = len;
+ }
+ }
+
+ private void checkLocation(int where, int len) throws BadLocationException
+ {
+ if (where < 0)
+ throw new BadLocationException("Invalid location", 1);
+ else if (where > this.count)
+ throw new BadLocationException("Invalid location", this.count);
+ else if ((where + len)>this.count)
+ throw new BadLocationException("Invalid range", this.count);
+ }
+
+}
+
diff --git a/libjava/javax/swing/text/StyledEditorKit.java b/libjava/javax/swing/text/StyledEditorKit.java
index f1858309a5a..148ebd32bd2 100644
--- a/libjava/javax/swing/text/StyledEditorKit.java
+++ b/libjava/javax/swing/text/StyledEditorKit.java
@@ -52,452 +52,452 @@ import javax.swing.event.CaretListener;
/**
* StyledEditorKit
*
- * @author Andrew Selkirk
+ * @author Andrew Selkirk
*/
public class StyledEditorKit extends DefaultEditorKit
{
private static final long serialVersionUID = 7002391892985555948L;
- /**
- * UnderlineAction
- */
+ /**
+ * UnderlineAction
+ */
public static class UnderlineAction extends StyledEditorKit.StyledTextAction
{
- /**
- * Constructor UnderlineAction
- */
+ /**
+ * Constructor UnderlineAction
+ */
public UnderlineAction()
{
- super("TODO");
- // TODO
+ super("TODO");
+ // TODO
}
- /**
- * actionPerformed
- * @param event TODO
- */
+ /**
+ * actionPerformed
+ * @param event TODO
+ */
public void actionPerformed(ActionEvent event)
{
- // TODO
+ // TODO
}
}
- /**
- * ItalicAction
- */
+ /**
+ * ItalicAction
+ */
public static class ItalicAction extends StyledEditorKit.StyledTextAction
{
- /**
- * Constructor ItalicAction
- */
+ /**
+ * Constructor ItalicAction
+ */
public ItalicAction()
{
- super("TODO");
- // TODO
+ super("TODO");
+ // TODO
}
- /**
- * actionPerformed
- * @param event TODO
- */
+ /**
+ * actionPerformed
+ * @param event TODO
+ */
public void actionPerformed(ActionEvent event)
{
- // TODO
+ // TODO
}
}
- /**
- * BoldAction
- */
+ /**
+ * BoldAction
+ */
public static class BoldAction extends StyledEditorKit.StyledTextAction
{
- /**
- * Constructor BoldAction
- */
+ /**
+ * Constructor BoldAction
+ */
public BoldAction()
{
- super("TODO");
- // TODO
+ super("TODO");
+ // TODO
}
- /**
- * actionPerformed
- * @param event TODO
- */
+ /**
+ * actionPerformed
+ * @param event TODO
+ */
public void actionPerformed(ActionEvent event)
{
- // TODO
+ // TODO
}
}
- /**
- * AlignmentAction
- */
+ /**
+ * AlignmentAction
+ */
public static class AlignmentAction extends StyledEditorKit.StyledTextAction
{
- /**
- * a
- */
- private int a;
-
- /**
- * Constructor AlignmentAction
- * @param nm TODO
- * @param a TODO
- */
+ /**
+ * a
+ */
+ private int a;
+
+ /**
+ * Constructor AlignmentAction
+ * @param nm TODO
+ * @param a TODO
+ */
public AlignmentAction(String nm, int a)
{
- super("TODO");
- // TODO
+ super("TODO");
+ // TODO
}
- /**
- * actionPerformed
- * @param event TODO
- */
+ /**
+ * actionPerformed
+ * @param event TODO
+ */
public void actionPerformed(ActionEvent event)
{
- // TODO
+ // TODO
}
}
- /**
- * ForegroundAction
- */
+ /**
+ * ForegroundAction
+ */
public static class ForegroundAction extends StyledEditorKit.StyledTextAction
{
- /**
- * fg
- */
- private Color fg;
-
- /**
- * Constructor ForegroundAction
- * @param nm TODO
- * @param fg TODO
- */
+ /**
+ * fg
+ */
+ private Color fg;
+
+ /**
+ * Constructor ForegroundAction
+ * @param nm TODO
+ * @param fg TODO
+ */
public ForegroundAction(String nm, Color fg)
{
- super("TODO");
- // TODO
+ super("TODO");
+ // TODO
}
- /**
- * actionPerformed
- * @param event TODO
- */
+ /**
+ * actionPerformed
+ * @param event TODO
+ */
public void actionPerformed(ActionEvent event)
{
- // TODO
+ // TODO
}
}
- /**
- * FontSizeAction
- */
+ /**
+ * FontSizeAction
+ */
public static class FontSizeAction extends StyledEditorKit.StyledTextAction
{
- /**
- * size
- */
- private int size;
-
- /**
- * Constructor FontSizeAction
- * @param nm TODO
- * @param size TODO
- */
+ /**
+ * size
+ */
+ private int size;
+
+ /**
+ * Constructor FontSizeAction
+ * @param nm TODO
+ * @param size TODO
+ */
public FontSizeAction(String nm, int size)
{
- super("TODO");
- // TODO
+ super("TODO");
+ // TODO
}
- /**
- * actionPerformed
- * @param event TODO
- */
+ /**
+ * actionPerformed
+ * @param event TODO
+ */
public void actionPerformed(ActionEvent event)
{
- // TODO
+ // TODO
}
}
- /**
- * FontFamilyAction
- */
+ /**
+ * FontFamilyAction
+ */
public static class FontFamilyAction extends StyledEditorKit.StyledTextAction
{
- /**
- * family
- */
- private String family;
-
- /**
- * Constructor FontFamilyAction
- * @param nm TODO
- * @param family TODO
- */
+ /**
+ * family
+ */
+ private String family;
+
+ /**
+ * Constructor FontFamilyAction
+ * @param nm TODO
+ * @param family TODO
+ */
public FontFamilyAction(String nm, String family)
{
- super("TODO");
- // TODO
+ super("TODO");
+ // TODO
}
- /**
- * actionPerformed
- * @param event TODO
- */
+ /**
+ * actionPerformed
+ * @param event TODO
+ */
public void actionPerformed(ActionEvent event)
{
- // TODO
+ // TODO
}
}
- /**
- * StyledTextAction
- */
+ /**
+ * StyledTextAction
+ */
public abstract static class StyledTextAction extends TextAction
{
- /**
- * Constructor StyledTextAction
- * @param nm TODO
- */
+ /**
+ * Constructor StyledTextAction
+ * @param nm TODO
+ */
public StyledTextAction(String nm)
{
- super(nm);
- // TODO
+ super(nm);
+ // TODO
}
- /**
- * getEditor
- * @param event TODO
- * @returns JEditorPane
- */
+ /**
+ * getEditor
+ * @param event TODO
+ * @returns JEditorPane
+ */
protected final JEditorPane getEditor(ActionEvent event)
{
- return null; // TODO
+ return null; // TODO
}
- /**
- * setCharacterAttributes
- * @param value0 TODO
- * @param value1 TODO
- * @param value2 TODO
- */
+ /**
+ * setCharacterAttributes
+ * @param value0 TODO
+ * @param value1 TODO
+ * @param value2 TODO
+ */
protected final void setCharacterAttributes(JEditorPane value0,
AttributeSet value1,
boolean value2)
{
- // TODO
+ // TODO
}
- /**
- * getStyledDocument
- * @param value0 TODO
- * @returns StyledDocument
- */
+ /**
+ * getStyledDocument
+ * @param value0 TODO
+ * @returns StyledDocument
+ */
protected final StyledDocument getStyledDocument(JEditorPane value0)
{
- return null; // TODO
+ return null; // TODO
}
- /**
- * getStyledEditorKit
- * @param value0 TODO
- * @returns StyledEditorKit
- */
+ /**
+ * getStyledEditorKit
+ * @param value0 TODO
+ * @returns StyledEditorKit
+ */
protected final StyledEditorKit getStyledEditorKit(JEditorPane value0)
{
- return null; // TODO
+ return null; // TODO
}
- /**
- * setParagraphAttributes
- * @param value0 TODO
- * @param value1 TODO
- * @param value2 TODO
- */
+ /**
+ * setParagraphAttributes
+ * @param value0 TODO
+ * @param value1 TODO
+ * @param value2 TODO
+ */
protected final void setParagraphAttributes(JEditorPane value0,
AttributeSet value1,
boolean value2)
{
- // TODO
+ // TODO
}
}
- /**
- * StyledViewFactory
- */
+ /**
+ * StyledViewFactory
+ */
static class StyledViewFactory
implements ViewFactory
{
- /**
- * Constructor StyledViewFactory
- */
+ /**
+ * Constructor StyledViewFactory
+ */
StyledViewFactory()
{
- // TODO
+ // TODO
}
- /**
- * create
- * @param value0 TODO
- * @returns View
- */
+ /**
+ * create
+ * @param value0 TODO
+ * @returns View
+ */
public View create(Element value0)
{
- return null; // TODO
+ return null; // TODO
}
}
- /**
- * AttributeTracker
- */
+ /**
+ * AttributeTracker
+ */
class AttributeTracker
implements CaretListener, PropertyChangeListener, Serializable
{
- /**
- * Constructor AttributeTracker
- * @param value0 TODO
- */
+ /**
+ * Constructor AttributeTracker
+ * @param value0 TODO
+ */
AttributeTracker(StyledEditorKit value0)
{
- // TODO
+ // TODO
}
- /**
- * updateInputAttributes
- * @param value0 TODO
- * @param value1 TODO
- * @param value2 TODO
- */
+ /**
+ * updateInputAttributes
+ * @param value0 TODO
+ * @param value1 TODO
+ * @param value2 TODO
+ */
void updateInputAttributes(int value0, int value1, JTextComponent value2)
{
- // TODO
+ // TODO
}
- /**
- * propertyChange
- * @param value0 TODO
- */
+ /**
+ * propertyChange
+ * @param value0 TODO
+ */
public void propertyChange(PropertyChangeEvent value0)
{
- // TODO
+ // TODO
}
- /**
- * caretUpdate
- * @param value0 TODO
- */
+ /**
+ * caretUpdate
+ * @param value0 TODO
+ */
public void caretUpdate(CaretEvent value0)
{
- // TODO
+ // TODO
}
}
- /**
- * currentRun
- */
- Element currentRun;
+ /**
+ * currentRun
+ */
+ Element currentRun;
- /**
- * currentParagraph
- */
- Element currentParagraph;
+ /**
+ * currentParagraph
+ */
+ Element currentParagraph;
- /**
- * inputAttributes
- */
- MutableAttributeSet inputAttributes;
+ /**
+ * inputAttributes
+ */
+ MutableAttributeSet inputAttributes;
- /**
- * Constructor StyledEditorKit
- */
+ /**
+ * Constructor StyledEditorKit
+ */
public StyledEditorKit()
{
- // TODO
+ // TODO
}
- /**
- * clone
- * @returns Object
- */
+ /**
+ * clone
+ * @returns Object
+ */
public Object clone()
{
- return null; // TODO
+ return null; // TODO
}
- /**
- * getActions
- * @returns Action[]
- */
+ /**
+ * getActions
+ * @returns Action[]
+ */
public Action[] getActions()
{
- return null; // TODO
+ return null; // TODO
}
- /**
- * getInputAttributes
- * @returns MutableAttributeSet
- */
+ /**
+ * getInputAttributes
+ * @returns MutableAttributeSet
+ */
public MutableAttributeSet getInputAttributes()
{
- return null; // TODO
+ return null; // TODO
}
- /**
- * getCharacterAttributeRun
- * @returns Element
- */
+ /**
+ * getCharacterAttributeRun
+ * @returns Element
+ */
public Element getCharacterAttributeRun()
{
- return null; // TODO
+ return null; // TODO
}
- /**
- * createDefaultDocument
- * @returns Document
- */
+ /**
+ * createDefaultDocument
+ * @returns Document
+ */
public Document createDefaultDocument()
{
- return null; // TODO
+ return null; // TODO
}
- /**
- * install
- * @param component TODO
- */
+ /**
+ * install
+ * @param component TODO
+ */
public void install(JEditorPane component)
{
- // TODO
+ // TODO
}
- /**
- * deinstall
- * @param component TODO
- */
+ /**
+ * deinstall
+ * @param component TODO
+ */
public void deinstall(JEditorPane component)
{
- // TODO
+ // TODO
}
- /**
- * getViewFactory
- * @returns ViewFactory
- */
+ /**
+ * getViewFactory
+ * @returns ViewFactory
+ */
public ViewFactory getViewFactory()
{
- return null; // TODO
+ return null; // TODO
}
- /**
- * createInputAttributes
- * @param element TODO
- * @param set TODO
- */
+ /**
+ * createInputAttributes
+ * @param element TODO
+ * @param set TODO
+ */
protected void createInputAttributes(Element element, MutableAttributeSet set)
{
- // TODO
+ // TODO
}
}
diff --git a/libjava/javax/swing/text/TextAction.java b/libjava/javax/swing/text/TextAction.java
index d07bcbf1f43..0191a2dc41c 100644
--- a/libjava/javax/swing/text/TextAction.java
+++ b/libjava/javax/swing/text/TextAction.java
@@ -39,56 +39,73 @@ exception statement from your version. */
package javax.swing.text;
import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.HashSet;
import javax.swing.AbstractAction;
import javax.swing.Action;
/**
* TextAction
- * @author Andrew Selkirk
+ * @author Andrew Selkirk
*/
public abstract class TextAction extends AbstractAction
{
- /**
- * Constructor TextAction
- * @param name TODO
- */
+ /**
+ * Constructor TextAction
+ * @param name TODO
+ */
public TextAction(String name)
{
super(name);
}
- /**
- * getTextComponent
- * @param event TODO
- * @return JTextComponent
- */
+ /**
+ * Returns the <code>JTextComponent</code> object associated with the given
+ * <code>ActionEvent</code>. If the source of the event is not a
+ * <code>JTextComponent</code> the currently focused text component is returned.
+ *
+ * @param event the action event
+ *
+ * @return the <code>JTextComponent</code>
+ */
protected final JTextComponent getTextComponent(ActionEvent event)
{
- if (event.getSource() != null &&
- event.getSource() instanceof JTextComponent)
+ if (event.getSource() instanceof JTextComponent)
return (JTextComponent) event.getSource();
- else
- return getFocusedComponent();
+
+ return getFocusedComponent();
}
- /**
- * augmentList
- * @param list1 TODO
- * @param list2 TODO
- * @return Action[]
- */
+ /**
+ * Creates a new array of <code>Action</code> containing both given arrays.
+ *
+ * @param list1 the first action array
+ * @param list2 the second action array
+ *
+ * @return the augmented array of actions
+ */
public static final Action[] augmentList(Action[] list1, Action[] list2)
{
- return null; // TODO
+ HashSet actionSet = new HashSet();
+
+ for (int i = 0; i < list1.length; ++i)
+ actionSet.add(list1[i]);
+
+ for (int i = 0; i < list2.length; ++i)
+ actionSet.add(list2[i]);
+
+ ArrayList list = new ArrayList(actionSet);
+ return (Action[]) list.toArray(new Action[actionSet.size()]);
}
- /**
- * getFocusedComponent
- * @return JTextComponent
- */
+ /**
+ * Returns the current focused <code>JTextComponent</code> object.
+ *
+ * @return the <code>JTextComponent</code>
+ */
protected final JTextComponent getFocusedComponent()
{
- return null; // TODO
+ return null; // TODO
}
}
diff --git a/libjava/javax/swing/text/View.java b/libjava/javax/swing/text/View.java
index f9e44a90f54..46f42b50374 100644
--- a/libjava/javax/swing/text/View.java
+++ b/libjava/javax/swing/text/View.java
@@ -1,5 +1,5 @@
/* View.java --
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -35,6 +35,7 @@ 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.Container;
@@ -57,91 +58,113 @@ public abstract class View implements SwingConstants
private Element elt;
private View parent;
- /**
+ /**
* Creates a new <code>View</code> instance.
*
* @param elem an <code>Element</code> value
- */
- public View(Element elem)
- {
- elt = elem;
- }
+ */
+ public View(Element elem)
+ {
+ elt = elem;
+ }
public abstract void paint(Graphics g, Shape s);
- public void setParent(View a)
- {
- parent = a;
- }
-
+ public void setParent(View parent)
+ {
+ this.parent = parent;
+ }
+
public View getParent()
- {
+ {
return parent;
- }
-
- public void setSize(int w, int h)
- {
- width = w;
- height = h;
- }
+ }
public Container getContainer()
- {
+ {
+ View parent = getParent();
return parent != null ? parent.getContainer() : null;
- }
-
+ }
+
public Document getDocument()
- {
+ {
return getElement().getDocument();
- }
-
+ }
+
public Element getElement()
- {
+ {
return elt;
- }
+ }
public abstract float getPreferredSpan(int axis);
+
+ public int getResizeWeight(int axis)
+ {
+ return 0;
+ }
+
+ public float getMaximumSpan(int axis)
+ {
+ if (getResizeWeight(axis) <= 0)
+ return getPreferredSpan(axis);
+
+ return Integer.MAX_VALUE;
+ }
+
+ public float getMinimumSpan(int axis)
+ {
+ if (getResizeWeight(axis) <= 0)
+ return getPreferredSpan(axis);
+
+ return Integer.MAX_VALUE;
+ }
+
+ public void setSize(float width, float height)
+ {
+ // The default implementation does nothing.
+ }
public float getAlignment(int axis)
- {
+ {
return 0.5f;
- }
-
+ }
+
public AttributeSet getAttributes()
- {
- return elt.getAttributes();
- }
-
+ {
+ return getElement().getAttributes();
+ }
+
public boolean isVisible()
- {
+ {
return true;
- }
+ }
public int getViewCount()
- {
+ {
return 0;
- }
-
+ }
+
public View getView(int index)
- {
+ {
return null;
- }
+ }
public ViewFactory getViewFactory()
- {
+ {
+ View parent = getParent();
return parent != null ? parent.getViewFactory() : null;
}
public void replace(int offset, int length, View[] views)
- {
+ {
// Default implementation does nothing.
}
public void insert(int offset, View view)
- {
+ {
View[] array = { view };
replace(offset, 1, array);
- }
+ }
public void append(View view)
{
@@ -152,7 +175,7 @@ public abstract class View implements SwingConstants
public void removeAll()
{
replace(0, getViewCount(), null);
- }
+ }
public void remove(int index)
{
@@ -167,12 +190,12 @@ public abstract class View implements SwingConstants
public int getStartOffset()
{
- return elt.getStartOffset();
+ return getElement().getStartOffset();
}
public int getEndOffset()
{
- return elt.getEndOffset();
+ return getElement().getEndOffset();
}
public Shape getChildAllocation(int index, Shape a)
@@ -205,5 +228,37 @@ public abstract class View implements SwingConstants
return null;
}
+
+ /**
+ * @since 1.3
+ */
+ public Graphics getGraphics()
+ {
+ return getContainer().getGraphics();
+ }
+
+ public void preferenceChanged(View child, boolean width, boolean height)
+ {
+ if (parent != null)
+ parent.preferenceChanged(this, width, height);
+ }
+
+ public int getBreakWeight(int axis, float pos, float len)
+ {
+ return BadBreakWeight;
+ }
+
+ public View breakView(int axis, int offset, float pos, float len)
+ {
+ return this;
+ }
+
+ /**
+ * @since 1.3
+ */
+ public int getViewIndex(int pos, Position.Bias b)
+ {
+ return -1;
+ }
}
diff --git a/libjava/javax/swing/text/ViewFactory.java b/libjava/javax/swing/text/ViewFactory.java
index 52be67ba557..c9cc4b792b8 100644
--- a/libjava/javax/swing/text/ViewFactory.java
+++ b/libjava/javax/swing/text/ViewFactory.java
@@ -46,5 +46,5 @@ public interface ViewFactory
*
* @return a new created view
*/
- View create (Element elem);
+ View create(Element elem);
}
OpenPOWER on IntegriCloud