diff options
author | Roman Kennke <roman@kennke.org> | 2006-11-30 19:38:04 +0000 |
---|---|---|
committer | Roman Kennke <roman@kennke.org> | 2006-11-30 19:38:04 +0000 |
commit | 73ee7fab7219cb0edb4ded57f73dea804846d6b2 (patch) | |
tree | b498c8e2d6b7daa2127102e318928ac30866135f /javax/swing/text/html/FrameView.java | |
parent | 5a7b622274d47160f2e755b7dbb7af2999196a51 (diff) | |
download | classpath-73ee7fab7219cb0edb4ded57f73dea804846d6b2.tar.gz |
2006-11-30 Roman Kennke <kennke@aicas.com>
* javax/swing/text/html/FormSubmitEvent.java: New class.
* javax/swing/text/html/FormView.java
(SubmitThread): New class for submitting data in a separate thread.
(actionPerformed): Fetch the actual for data.
(addData): New helper method.
(getElementFormData): New helper method.
(getFormData): New helper method.
(getInputFormData): New helper method.
(submitData): Implemented.
* javax/swing/text/html/FrameView.java
(createComponent): Add this as hyperlink listener.
Set the target document as frame document.
(getTopEditorPane): New helper method.
(hyperlinkUpdate): Implementation of the HyperlinkListener interface.
(handleHyperlinkEvent): New helper method.
(handleFormSubmitEvent): New helper method.
* javax/swing/text/html/HTMLDocument.java
(HTMLReader.BaseAction.start): Track the base target.
(HTMLReader.BaseAction.end): Removed.
(baseTarget): New field.
(frameDocument): New field.
(getBaseTarget): New property accessor.
(isFrameDocument): New property accessor.
(processHTMLFrameHyperlinkEvent): Implemented.
(setFrameDocument): New property accessor.
(updateFrame): New helper method.
(updateFrameSet): New helper method.
* javax/swing/text/html/HTMLEditorKit.java
(LinkController.createHyperlinkEvent): Handle frame documents.
(autoFormSubmission): New field.
(HTMLEditorKit): Set autoFormSubmission to true.
(isAutoFormSubmission): New property accessor.
(setAutoFormSubmission): New property accessor.
Diffstat (limited to 'javax/swing/text/html/FrameView.java')
-rw-r--r-- | javax/swing/text/html/FrameView.java | 133 |
1 files changed, 132 insertions, 1 deletions
diff --git a/javax/swing/text/html/FrameView.java b/javax/swing/text/html/FrameView.java index e91c0c731..cd4e44a98 100644 --- a/javax/swing/text/html/FrameView.java +++ b/javax/swing/text/html/FrameView.java @@ -44,9 +44,12 @@ import java.net.MalformedURLException; import java.net.URL; import javax.swing.JEditorPane; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; import javax.swing.text.AttributeSet; import javax.swing.text.ComponentView; import javax.swing.text.Element; +import javax.swing.text.View; /** * A view that is responsible for rendering HTML frame tags. @@ -55,6 +58,7 @@ import javax.swing.text.Element; */ class FrameView extends ComponentView + implements HyperlinkListener { /** @@ -78,6 +82,7 @@ class FrameView Element el = getElement(); AttributeSet atts = el.getAttributes(); JEditorPane html = new JEditorPane(); + html.addHyperlinkListener(this); URL base = ((HTMLDocument) el.getDocument()).getBase(); String srcAtt = (String) atts.getAttribute(HTML.Attribute.SRC); if (srcAtt != null && ! srcAtt.equals("")) @@ -86,7 +91,7 @@ class FrameView { URL page = new URL(base, srcAtt); html.setPage(page); - System.err.println("loading: " + page); + ((HTMLDocument) html.getDocument()).setFrameDocument(true); } catch (MalformedURLException ex) { @@ -99,4 +104,130 @@ class FrameView } return html; } + + /** + * Catches hyperlink events on that frame's editor and forwards it to + * the outermost editorpane. + */ + public void hyperlinkUpdate(HyperlinkEvent event) + { + JEditorPane outer = getTopEditorPane(); + if (outer != null) + { + if (event instanceof HTMLFrameHyperlinkEvent) + { + HTMLFrameHyperlinkEvent hfhe = (HTMLFrameHyperlinkEvent) event; + if (hfhe.getEventType() == HyperlinkEvent.EventType.ACTIVATED) + { + String target = hfhe.getTarget(); + if (event instanceof FormSubmitEvent) + { + handleFormSubmitEvent(hfhe, outer, target); + } + else // No FormSubmitEvent. + { + handleHyperlinkEvent(hfhe, outer, target); + } + } + } + else + { + // Simply forward this event. + outer.fireHyperlinkUpdate(event); + } + } + } + + /** + * Handles normal hyperlink events. + * + * @param event the event + * @param outer the top editor + * @param target the target + */ + private void handleHyperlinkEvent(HyperlinkEvent event, + JEditorPane outer, String target) + { + if (target.equals("_top")) + { + try + { + outer.setPage(event.getURL()); + } + catch (IOException ex) + { + // Well... + ex.printStackTrace(); + } + } + if (! outer.isEditable()) + { + outer.fireHyperlinkUpdate + (new HTMLFrameHyperlinkEvent(outer, + event.getEventType(), + event.getURL(), + event.getDescription(), + getElement(), + target)); + } + } + + /** + * Handles form submit events. + * + * @param event the event + * @param outer the top editor + * @param target the target + */ + private void handleFormSubmitEvent(HTMLFrameHyperlinkEvent event, + JEditorPane outer, + String target) + { + HTMLEditorKit kit = (HTMLEditorKit) outer.getEditorKit(); + if (kit != null && kit.isAutoFormSubmission()) + { + if (target.equals("_top")) + { + try + { + outer.setPage(event.getURL()); + } + catch (IOException ex) + { + // Well... + ex.printStackTrace(); + } + } + else + { + HTMLDocument doc = + (HTMLDocument) outer.getDocument(); + doc.processHTMLFrameHyperlinkEvent(event); + } + } + else + { + outer.fireHyperlinkUpdate(event); + } + } + + /** + * Determines the topmost editor in a nested frameset. + * + * @return the topmost editor in a nested frameset + */ + private JEditorPane getTopEditorPane() + { + View parent = getParent(); + View top = null; + while (parent != null) + { + if (parent instanceof FrameSetView) + top = parent; + } + JEditorPane editor = null; + if (top != null) + editor = (JEditorPane) top.getContainer(); + return editor; + } } |