- /*
- * @(#)NavigationFilter.java 1.4 03/12/19
- *
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- */
- package javax.swing.text;
-
- import java.awt.Shape;
-
- /**
- * <code>NavigationFilter</code> can be used to restrict where the cursor can
- * be positioned. When the default cursor positioning actions attempt to
- * reposition the cursor they will call into the
- * <code>NavigationFilter</code>, assuming
- * the <code>JTextComponent</code> has a non-null
- * <code>NavigationFilter</code> set. In this manner
- * the <code>NavigationFilter</code> can effectively restrict where the
- * cursor can be positioned. Similarly <code>DefaultCaret</code> will call
- * into the <code>NavigationFilter</code> when the user is changing the
- * selection to further restrict where the cursor can be positioned.
- * <p>
- * Subclasses can conditionally call into supers implementation to restrict
- * where the cursor can be placed, or call directly into the
- * <code>FilterBypass</code>.
- *
- * @see javax.swing.text.Caret
- * @see javax.swing.text.DefaultCaret
- * @see javax.swing.text.View
- *
- * @version 1.4 12/19/03
- * @since 1.4
- */
- public class NavigationFilter {
- /**
- * Invoked prior to the Caret setting the dot. The default implementation
- * calls directly into the <code>FilterBypass</code> with the passed
- * in arguments. Subclasses may wish to conditionally
- * call super with a different location, or invoke the necessary method
- * on the <code>FilterBypass</code>
- *
- * @param fb FilterBypass that can be used to mutate caret position
- * @param dot the position >= 0
- * @param bias Bias to place the dot at
- */
- public void setDot(FilterBypass fb, int dot, Position.Bias bias) {
- fb.setDot(dot, bias);
- }
-
- /**
- * Invoked prior to the Caret moving the dot. The default implementation
- * calls directly into the <code>FilterBypass</code> with the passed
- * in arguments. Subclasses may wish to conditionally
- * call super with a different location, or invoke the necessary
- * methods on the <code>FilterBypass</code>.
- *
- * @param fb FilterBypass that can be used to mutate caret position
- * @param dot the position >= 0
- * @param bias Bias for new location
- */
- public void moveDot(FilterBypass fb, int dot, Position.Bias bias) {
- fb.moveDot(dot, bias);
- }
-
- /**
- * Returns the next visual position to place the caret at from an
- * existing position. The default implementation simply forwards the
- * method to the root View. Subclasses may wish to further restrict the
- * location based on additional criteria.
- *
- * @param text JTextComponent containing text
- * @param pos Position used in determining next position
- * @param bias Bias used in determining next position
- * @param direction the direction from the current position that can
- * be thought of as the arrow keys typically found on a keyboard.
- * This will be one of the following values:
- * <ul>
- * <li>SwingConstants.WEST
- * <li>SwingConstants.EAST
- * <li>SwingConstants.NORTH
- * <li>SwingConstants.SOUTH
- * </ul>
- * @param biasRet Used to return resulting Bias of next position
- * @return the location within the model that best represents the next
- * location visual position
- * @exception BadLocationException
- * @exception IllegalArgumentException if <code>direction</code>
- * doesn't have one of the legal values above
- */
- public int getNextVisualPositionFrom(JTextComponent text, int pos,
- Position.Bias bias, int direction,
- Position.Bias[] biasRet)
- throws BadLocationException {
- return text.getUI().getNextVisualPositionFrom(text, pos, bias,
- direction, biasRet);
- }
-
-
- /**
- * Used as a way to circumvent calling back into the caret to
- * position the cursor. Caret implementations that wish to support
- * a NavigationFilter must provide an implementation that will
- * not callback into the NavigationFilter.
- */
- public static abstract class FilterBypass {
- /**
- * Returns the Caret that is changing.
- *
- * @return Caret that is changing
- */
- public abstract Caret getCaret();
-
- /**
- * Sets the caret location, bypassing the NavigationFilter.
- *
- * @param dot the position >= 0
- * @param bias Bias to place the dot at
- */
- public abstract void setDot(int dot, Position.Bias bias);
-
- /**
- * Moves the caret location, bypassing the NavigationFilter.
- *
- * @param dot the position >= 0
- * @param bias Bias for new location
- */
- public abstract void moveDot(int dot, Position.Bias bias);
- }
- }