tkormann 01/10/03 09:08:20
Modified: resources/org/apache/batik/apps/svgbrowser/resources
FindDialog.properties GUI.properties
sources/org/apache/batik/apps/svgbrowser FindDialog.java
sources/org/apache/batik/gvt TextPainter.java
sources/org/apache/batik/swing/gvt JGVTComponent.java
TextSelectionManager.java
Log:
commit the text search. Selection is now working. Zoom is disable at this time.
Revision Changes Path
1.3 +14 -11
xml-batik/resources/org/apache/batik/apps/svgbrowser/resources/FindDialog.properties
Index: FindDialog.properties
===================================================================
RCS file:
/home/cvs/xml-batik/resources/org/apache/batik/apps/svgbrowser/resources/FindDialog.properties,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FindDialog.properties 2001/05/07 23:49:51 1.2
+++ FindDialog.properties 2001/10/03 16:08:19 1.3
@@ -9,10 +9,10 @@
# FindDialog properties file
#
# Author: [EMAIL PROTECTED]
-# $Id: FindDialog.properties,v 1.2 2001/05/07 23:49:51 tkormann Exp $
+# $Id: FindDialog.properties,v 1.3 2001/10/03 16:08:19 tkormann Exp $
#
-Dialog.title = Find...
+Dialog.title = Batik: Find
Panel.title = Search for text
FindLabel.text = Find :
@@ -23,19 +23,22 @@
EnableZoomCheckBox.text = Enable zoom
EnableZoomCheckBox.mnemonic = A
-NextButton.text = Next
-NextButton.mnemonic = N
-NextButton.action = NextButtonAction
-
-PreviousButton.text = Previous
-PreviousButton.mnemonic = P
-PreviousButton.action = PreviousButtonAction
+FindButton.text = Find
+FindButton.mnemonic = F
+FindButton.action = FindButtonAction
+
+ClearButton.text = Clear
+ClearButton.mnemonic = C
+ClearButton.action = ClearButtonAction
-CloseButton.text = Close
-CloseButton.mnemonic = C
+CloseButton.text = Closec
+CloseButton.mnemonic = X
CloseButton.action = CloseButtonAction
+End.text = End of document reached; continue from beginning.
+End.title = Batik: Find wrap
+
1.32 +3 -3
xml-batik/resources/org/apache/batik/apps/svgbrowser/resources/GUI.properties
Index: GUI.properties
===================================================================
RCS file:
/home/cvs/xml-batik/resources/org/apache/batik/apps/svgbrowser/resources/GUI.properties,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- GUI.properties 2001/09/28 15:40:08 1.31
+++ GUI.properties 2001/10/03 16:08:19 1.32
@@ -9,7 +9,7 @@
# The viewer's GUI resources.
#
# Author: [EMAIL PROTECTED]
-# $Id: GUI.properties,v 1.31 2001/09/28 15:40:08 hillion Exp $
+# $Id: GUI.properties,v 1.32 2001/10/03 16:08:19 tkormann Exp $
#
ViewSource.width = 750
@@ -129,9 +129,9 @@
# Edit menu ################
-#Edit = FindDialog - Preferences
+Edit = FindDialog - Preferences
#Edit = Preferences Flush
-Edit = Preferences
+#Edit = Preferences
Edit.type = MENU
Edit.text = Edit
1.4 +68 -91
xml-batik/sources/org/apache/batik/apps/svgbrowser/FindDialog.java
Index: FindDialog.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/FindDialog.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FindDialog.java 2001/09/17 13:37:30 1.3
+++ FindDialog.java 2001/10/03 16:08:19 1.4
@@ -18,6 +18,8 @@
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
+import java.text.AttributedCharacterIterator;
+
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
@@ -34,6 +36,7 @@
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
+import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
@@ -45,7 +48,10 @@
import org.apache.batik.gvt.GraphicsNode;
import org.apache.batik.gvt.TextNode;
+import org.apache.batik.gvt.text.Mark;
+
import org.apache.batik.swing.JSVGCanvas;
+import org.apache.batik.swing.gvt.TextSelectionManager;
import org.apache.batik.util.gui.ExtendedGridBagConstraints;
import org.apache.batik.util.gui.resource.ActionMap;
@@ -58,7 +64,7 @@
* an SVG document.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a>
- * @version $Id: FindDialog.java,v 1.3 2001/09/17 13:37:30 tkormann Exp $
+ * @version $Id: FindDialog.java,v 1.4 2001/10/03 16:08:19 tkormann Exp $
*/
public class FindDialog extends JDialog implements ActionMap {
@@ -69,8 +75,8 @@
"org.apache.batik.apps.svgbrowser.resources.FindDialog";
// action names
- public final static String NEXT_ACTION = "NextButtonAction";
- public final static String PREVIOUS_ACTION = "PreviousButtonAction";
+ public final static String FIND_ACTION = "FindButtonAction";
+ public final static String CLEAR_ACTION = "ClearButtonAction";
public final static String CLOSE_ACTION = "CloseButtonAction";
/**
@@ -101,13 +107,13 @@
protected JTextField search;
/** The next button. */
- protected JButton next;
+ protected JButton findButton;
/** The next button. */
- protected JButton previous;
+ protected JButton clearButton;
/** The cancel button. */
- protected JButton close;
+ protected JButton closeButton;
/** The case sensitive button. */
protected JCheckBox caseSensitive;
@@ -134,8 +140,8 @@
buttonFactory = new ButtonFactory(bundle, this);
- listeners.put(NEXT_ACTION, new NextButtonAction());
- listeners.put(PREVIOUS_ACTION, new PreviousButtonAction());
+ listeners.put(FIND_ACTION, new FindButtonAction());
+ listeners.put(CLEAR_ACTION, new ClearButtonAction());
listeners.put(CLOSE_ACTION, new CloseButtonAction());
getContentPane().add(createFindPanel(), BorderLayout.CENTER);
@@ -165,7 +171,6 @@
gbc.setWeight(1.0, 0);
gbc.setGridBounds(1, 0, 2, 1);
panel.add(search = new JTextField(20), gbc);
- search.getDocument().addDocumentListener(new TextTracker());
gbc.fill = ExtendedGridBagConstraints.NONE;
gbc.anchor = ExtendedGridBagConstraints.WEST;
@@ -179,7 +184,7 @@
gbc.setWeight(0, 0);
gbc.setGridBounds(2, 1, 1, 1);
enableZoom = buttonFactory.createJCheckBox("EnableZoomCheckBox");
- panel.add(enableZoom, gbc);
+ //panel.add(enableZoom, gbc);
return panel;
}
@@ -189,12 +194,9 @@
*/
protected JPanel createButtonsPanel() {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
- panel.add(next = buttonFactory.createJButton("NextButton"));
- panel.add(previous = buttonFactory.createJButton("PreviousButton"));
- panel.add(close = buttonFactory.createJButton("CloseButton"));
-
- updateButtonState();
-
+ panel.add(findButton = buttonFactory.createJButton("FindButton"));
+ panel.add(clearButton = buttonFactory.createJButton("ClearButton"));
+ panel.add(closeButton = buttonFactory.createJButton("CloseButton"));
return panel;
}
@@ -210,7 +212,6 @@
} else {
this.walker = null;
}
- updateButtonState();
}
/**
@@ -220,6 +221,9 @@
* @param text the text to match
*/
protected GraphicsNode getNext(String text) {
+ if (walker == null && gvtRoot != null) {
+ walker = new GVTTreeWalker(gvtRoot);
+ }
GraphicsNode gn = walker.nextGraphicsNode();
while (gn != null && !match(gn, text)) {
gn = walker.nextGraphicsNode();
@@ -234,6 +238,9 @@
* @param text the text to match
*/
protected GraphicsNode getPrevious(String text) {
+ if (walker == null && gvtRoot != null) {
+ walker = new GVTTreeWalker(gvtRoot);
+ }
GraphicsNode gn = walker.previousGraphicsNode();
while (gn != null && !match(gn, text)) {
gn = walker.previousGraphicsNode();
@@ -242,11 +249,11 @@
}
/**
- * Returns true if the specified node matches the following text, false
- * otherwise.
+ * Returns the index inside the specified TextNode of the specified text, or
+ * -1 if not found.
*
* @param node the graphics node to check
- * @param text the text use to match
+ * @param text the text use to match
*/
protected boolean match(GraphicsNode node, String text) {
if (!(node instanceof TextNode)
@@ -254,29 +261,14 @@
|| text == null || text.length() == 0) {
return false;
}
-
String s = ((TextNode)node).getText();
if (!caseSensitive.isSelected()) {
s = s.toLowerCase();
text = text.toLowerCase();
}
- return s.startsWith(text);
- }
-
- /**
- * Updates the state of the 'next', 'previous' buttons and 'search' text
- * field.
- */
- private void updateButtonState() {
- boolean b1 = (gvtRoot != null);
- String text = search.getText();
- boolean b2 = (text != null && text.length() > 0);
- next.setEnabled(b1 && b2);
- previous.setEnabled(b1 && b2);
- search.setEnabled(b1);
+ return (s.indexOf(text) >= 0);
}
-
/**
* Shows the current selected <tt>TextNode</tt>.
*/
@@ -285,7 +277,24 @@
if (!(gn instanceof TextNode)) {
return;
}
- System.out.println(((TextNode)gn).getText());
+ TextNode textNode = (TextNode)gn;
+ // mark the selection of the substring found
+ String text = textNode.getText();
+ String pattern = search.getText();
+ AttributedCharacterIterator aci =
+ textNode.getAttributedCharacterIterator();
+ aci.first();
+ for (int i=0; i < text.indexOf(pattern); ++i) {
+ aci.next();
+ }
+ Mark startMark = textNode.getMarkerForChar(aci.getIndex(), true);
+ for (int i = 0; i < pattern.length()-1; ++i) {
+ aci.next();
+ }
+ Mark endMark = textNode.getMarkerForChar(aci.getIndex(), false);
+ svgCanvas.select(startMark, endMark);
+
+ // zoom on the TextNode if needed
if (enableZoom.isSelected()) {
Rectangle2D bounds = gn.getBounds();
bounds = gn.getGlobalTransform().createTransformedShape
@@ -300,7 +309,6 @@
}
}
-
// ActionMap implementation
/**
@@ -323,32 +331,35 @@
//////////////////////////////////////////////////////////////////////////
/**
- * The action associated to the 'next' button.
+ * The action associated to the 'find' button.
*/
- protected class NextButtonAction extends AbstractAction {
+ protected class FindButtonAction extends AbstractAction {
public void actionPerformed(ActionEvent e) {
- GraphicsNode gn = getNext(search.getText());
- if (gn != null) {
- previous.setEnabled(true);
- showSelectedGraphicsNode();
- } else {
- next.setEnabled(false);
- }
- }
+ String text = search.getText();
+ if (text == null || text.length() == 0) {
+ return;
+ }
+ GraphicsNode gn = getNext(text);
+ if (gn != null) {
+ showSelectedGraphicsNode();
+ } else {
+ // end of document reached
+ walker = null;
+ JOptionPane.showMessageDialog(FindDialog.this,
+ resources.getString("End.text"),
+ resources.getString("End.title"),
+ JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
}
/**
- * The action associated to the 'previous' button.
+ * The action associated to the 'clear' button.
*/
- protected class PreviousButtonAction extends AbstractAction {
+ protected class ClearButtonAction extends AbstractAction {
public void actionPerformed(ActionEvent e) {
- GraphicsNode gn = getPrevious(search.getText());
- if (gn != null) {
- next.setEnabled(true);
- showSelectedGraphicsNode();
- } else {
- previous.setEnabled(false);
- }
+ search.setText(null);
+ walker = null;
}
}
@@ -358,40 +369,6 @@
protected class CloseButtonAction extends AbstractAction {
public void actionPerformed(ActionEvent e) {
dispose();
- }
- }
-
- /**
- * This class is used to track all modifications of the search TextField.
- */
- protected class TextTracker implements DocumentListener {
-
- public void changedUpdate(DocumentEvent e) { }
-
- public void insertUpdate(DocumentEvent e) {
- updateButtonState();
- String text = search.getText();
- // go to next only if the current node does not match the text
- if (!match(walker.getCurrentGraphicsNode(), text)) {
- GraphicsNode gn = getNext(text);
- if (gn != null) {
- previous.setEnabled(true);
- showSelectedGraphicsNode();
- } else {
- next.setEnabled(false);
- }
- }
- }
-
- public void removeUpdate(DocumentEvent e) {
- updateButtonState();
- GraphicsNode gn = getPrevious(search.getText());
- if (gn != null) {
- next.setEnabled(true);
- showSelectedGraphicsNode();
- } else {
- previous.setEnabled(false);
- }
}
}
}
1.15 +2 -3 xml-batik/sources/org/apache/batik/gvt/TextPainter.java
Index: TextPainter.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/TextPainter.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- TextPainter.java 2001/09/27 20:09:10 1.14
+++ TextPainter.java 2001/10/03 16:08:19 1.15
@@ -21,7 +21,7 @@
* Renders the attributed character iterator of a <tt>TextNode</tt>.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a>
- * @version $Id: TextPainter.java,v 1.14 2001/09/27 20:09:10 deweese Exp $
+ * @version $Id: TextPainter.java,v 1.15 2001/10/03 16:08:19 tkormann Exp $
*/
public interface TextPainter {
@@ -33,8 +33,7 @@
* @param g2d the Graphics2D to use
* @param context the rendering context.
*/
- void paint(TextNode node,
- Graphics2D g2d);
+ void paint(TextNode node, Graphics2D g2d);
/**
* Initiates a text selection on a particular AttributedCharacterIterator,
1.18 +32 -1 xml-batik/sources/org/apache/batik/swing/gvt/JGVTComponent.java
Index: JGVTComponent.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/gvt/JGVTComponent.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- JGVTComponent.java 2001/09/18 21:19:01 1.17
+++ JGVTComponent.java 2001/10/03 16:08:19 1.18
@@ -47,11 +47,13 @@
import org.apache.batik.gvt.renderer.ImageRenderer;
import org.apache.batik.gvt.renderer.ImageRendererFactory;
+import org.apache.batik.gvt.text.Mark;
+
/**
* This class represents a component which can display a GVT tree.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a>
- * @version $Id: JGVTComponent.java,v 1.17 2001/09/18 21:19:01 deweese Exp $
+ * @version $Id: JGVTComponent.java,v 1.18 2001/10/03 16:08:19 tkormann Exp $
*/
public class JGVTComponent extends JComponent {
@@ -288,6 +290,35 @@
}
}
}
+
+ ////////////////////////////////////////////////////////////////////////
+ // Selection methods
+ ////////////////////////////////////////////////////////////////////////
+
+ /**
+ * Sets the selection to the specified start and end mark.
+ *
+ * @param start the mark used to define where the selection starts
+ * @param end the mark used to define where the selection ends
+ */
+ public void select(Mark start, Mark end) {
+ if (textSelectionManager != null) {
+ textSelectionManager.setSelection(start, end);
+ }
+ }
+
+ /**
+ * Deselects all.
+ */
+ public void deselectAll() {
+ if (textSelectionManager != null) {
+ textSelectionManager.clearSelection();
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////
+ // Painting methods
+ ////////////////////////////////////////////////////////////////////////
/**
* Whether to enable the progressive paint.
1.10 +8 -1
xml-batik/sources/org/apache/batik/swing/gvt/TextSelectionManager.java
Index: TextSelectionManager.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/swing/gvt/TextSelectionManager.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- TextSelectionManager.java 2001/09/27 21:19:44 1.9
+++ TextSelectionManager.java 2001/10/03 16:08:19 1.10
@@ -36,7 +36,7 @@
* This class represents an object which manage GVT text nodes selection.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a>
- * @version $Id: TextSelectionManager.java,v 1.9 2001/09/27 21:19:44 deweese Exp $
+ * @version $Id: TextSelectionManager.java,v 1.10 2001/10/03 16:08:19 tkormann Exp $
*/
public class TextSelectionManager {
@@ -113,6 +113,13 @@
*/
public void setSelection(Mark start, Mark end) {
textSelector.setSelection(start, end);
+ }
+
+ /**
+ * Clears the selection.
+ */
+ public void clearSelection() {
+ textSelector.clearSelection();
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]