History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/javax/swing/text/NavigationFilter.java (1 of 18352 files). Show all

Unified · Split

java/pkg/javax/swing/text/NavigationFilter.java+147−0
@@ -0,0 +1,147 @@
1+/*
2+ * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+package javax.swing.text;
26+
27+import java.awt.Shape;
28+
29+/**
30+ * <code>NavigationFilter</code> can be used to restrict where the cursor can
31+ * be positioned. When the default cursor positioning actions attempt to
32+ * reposition the cursor they will call into the
33+ * <code>NavigationFilter</code>, assuming
34+ * the <code>JTextComponent</code> has a non-null
35+ * <code>NavigationFilter</code> set. In this manner
36+ * the <code>NavigationFilter</code> can effectively restrict where the
37+ * cursor can be positioned. Similarly <code>DefaultCaret</code> will call
38+ * into the <code>NavigationFilter</code> when the user is changing the
39+ * selection to further restrict where the cursor can be positioned.
40+ * <p>
41+ * Subclasses can conditionally call into supers implementation to restrict
42+ * where the cursor can be placed, or call directly into the
43+ * <code>FilterBypass</code>.
44+ *
45+ * @see javax.swing.text.Caret
46+ * @see javax.swing.text.DefaultCaret
47+ * @see javax.swing.text.View
48+ *
49+ * @since 1.4
50+ */
51+public class NavigationFilter {
52+ /**
53+ * Invoked prior to the Caret setting the dot. The default implementation
54+ * calls directly into the <code>FilterBypass</code> with the passed
55+ * in arguments. Subclasses may wish to conditionally
56+ * call super with a different location, or invoke the necessary method
57+ * on the <code>FilterBypass</code>
58+ *
59+ * @param fb FilterBypass that can be used to mutate caret position
60+ * @param dot the position >= 0
61+ * @param bias Bias to place the dot at
62+ */
63+ public void setDot(FilterBypass fb, int dot, Position.Bias bias) {
64+ fb.setDot(dot, bias);
65+ }
66+
67+ /**
68+ * Invoked prior to the Caret moving the dot. The default implementation
69+ * calls directly into the <code>FilterBypass</code> with the passed
70+ * in arguments. Subclasses may wish to conditionally
71+ * call super with a different location, or invoke the necessary
72+ * methods on the <code>FilterBypass</code>.
73+ *
74+ * @param fb FilterBypass that can be used to mutate caret position
75+ * @param dot the position >= 0
76+ * @param bias Bias for new location
77+ */
78+ public void moveDot(FilterBypass fb, int dot, Position.Bias bias) {
79+ fb.moveDot(dot, bias);
80+ }
81+
82+ /**
83+ * Returns the next visual position to place the caret at from an
84+ * existing position. The default implementation simply forwards the
85+ * method to the root View. Subclasses may wish to further restrict the
86+ * location based on additional criteria.
87+ *
88+ * @param text JTextComponent containing text
89+ * @param pos Position used in determining next position
90+ * @param bias Bias used in determining next position
91+ * @param direction the direction from the current position that can
92+ * be thought of as the arrow keys typically found on a keyboard.
93+ * This will be one of the following values:
94+ * <ul>
95+ * <li>SwingConstants.WEST
96+ * <li>SwingConstants.EAST
97+ * <li>SwingConstants.NORTH
98+ * <li>SwingConstants.SOUTH
99+ * </ul>
100+ * @param biasRet Used to return resulting Bias of next position
101+ * @return the location within the model that best represents the next
102+ * location visual position
103+ * @exception BadLocationException
104+ * @exception IllegalArgumentException if <code>direction</code>
105+ * doesn't have one of the legal values above
106+ */
107+ public int getNextVisualPositionFrom(JTextComponent text, int pos,
108+ Position.Bias bias, int direction,
109+ Position.Bias[] biasRet)
110+ throws BadLocationException {
111+ return text.getUI().getNextVisualPositionFrom(text, pos, bias,
112+ direction, biasRet);
113+ }
114+
115+
116+ /**
117+ * Used as a way to circumvent calling back into the caret to
118+ * position the cursor. Caret implementations that wish to support
119+ * a NavigationFilter must provide an implementation that will
120+ * not callback into the NavigationFilter.
121+ * @since 1.4
122+ */
123+ public static abstract class FilterBypass {
124+ /**
125+ * Returns the Caret that is changing.
126+ *
127+ * @return Caret that is changing
128+ */
129+ public abstract Caret getCaret();
130+
131+ /**
132+ * Sets the caret location, bypassing the NavigationFilter.
133+ *
134+ * @param dot the position >= 0
135+ * @param bias Bias to place the dot at
136+ */
137+ public abstract void setDot(int dot, Position.Bias bias);
138+
139+ /**
140+ * Moves the caret location, bypassing the NavigationFilter.
141+ *
142+ * @param dot the position >= 0
143+ * @param bias Bias for new location
144+ */
145+ public abstract void moveDot(int dot, Position.Bias bias);
146+ }
147+}