Modified:
/trunk/src/com/google/minijoe/html/BlockWidget.java
/trunk/src/com/google/minijoe/html/HtmlWidget.java
/trunk/src/com/google/minijoe/samples/browser/HtmlBrowser.java
/trunk/src/com/google/minijoe/samples/browser/HtmlScreen.java
=======================================
--- /trunk/src/com/google/minijoe/html/BlockWidget.java Wed Feb 17 16:21:17
2010
+++ /trunk/src/com/google/minijoe/html/BlockWidget.java Fri Feb 19 16:14:29
2010
@@ -180,12 +180,26 @@
} else if (("select".equals(name)
&& !e.getAttributeBoolean("multiple")) ||
"option".equals(name) || "textarea".equals(name) |
| "button".equals(name)) {
children.addElement(new InputWidget(e));
- } else if (style.isBlock(false)) {
- children.addElement(new BlockWidget(e, flags));
} else {
- // Element does not get its own block widget, just add the element's
- // children to this block
- addChildren(e, flags);
+ Object widget = ElementHandler.DEFAULT_HANDLING;
+ if (element.htmlWidget.elementHandlers != null) {
+ ElementHandler handler = (ElementHandler)
element.htmlWidget.elementHandlers.get(e.getName());
+ if (handler != null) {
+ widget = handler.handle(e, true);
+ }
+ }
+
+ if (widget == ElementHandler.DEFAULT_HANDLING) {
+ if (style.isBlock(false)) {
+ children.addElement(new BlockWidget(e, flags));
+ } else {
+ // Element does not get its own block widget, just add the
element's
+ // children to this block
+ addChildren(e, flags);
+ }
+ } else if (widget != ElementHandler.IGNORE_ELEMENT) {
+ children.addElement((BlockWidget) widget);
+ }
}
String label = e.getAttributeValue("id");
=======================================
--- /trunk/src/com/google/minijoe/html/HtmlWidget.java Mon Feb 15 16:34:01
2010
+++ /trunk/src/com/google/minijoe/html/HtmlWidget.java Fri Feb 19 16:14:29
2010
@@ -115,6 +115,12 @@
/** Enable desktop rendering for CSS debugging purposes. */
private boolean desktopRendering;
+ /**
+ * Table mapping element names to ElementHandler instances for custom
element
+ * support.
+ */
+ Hashtable elementHandlers;
+
/**
* returns true if the media string is null or contains "all"
or "screen";
* "handheld" is accepted, too, if not in desktop rendering mode.
@@ -135,11 +141,12 @@
* @param documentUrl document URL, used as base URL for resolving
relative links
* @param destopRendering enables desktop rendering for debugging
purposes
*/
- public HtmlWidget(SystemRequestHandler requestHandler, String
documentUrl,
+ public HtmlWidget(SystemRequestHandler requestHandler, String
documentUrl, Hashtable elementHandlers,
boolean desktopRendering) {
super(null, false);
this.requestHandler = requestHandler;
this.desktopRendering = desktopRendering;
+ this.elementHandlers = elementHandlers;
if (documentUrl != null) {
this.documentUrl = title = baseURL = documentUrl;
=======================================
--- /trunk/src/com/google/minijoe/samples/browser/HtmlBrowser.java Mon Feb
15 16:34:01 2010
+++ /trunk/src/com/google/minijoe/samples/browser/HtmlBrowser.java Fri Feb
19 16:14:29 2010
@@ -16,6 +16,7 @@
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.util.Hashtable;
import java.util.Vector;
import com.google.minijoe.common.Util;
@@ -355,4 +356,11 @@
display.setCurrent(currentScreen);
screenStack.removeElementAt(screenStack.size() - 1);}
}
-}
+
+ /**
+ * Overwrite this in a subclass to support additional elements.
+ */
+ public Hashtable getElementHandlers() {
+ return null;
+ }
+}
=======================================
--- /trunk/src/com/google/minijoe/samples/browser/HtmlScreen.java Sun Feb
14 18:05:31 2010
+++ /trunk/src/com/google/minijoe/samples/browser/HtmlScreen.java Fri Feb
19 16:14:29 2010
@@ -82,7 +82,7 @@
titleWidget.setTextColor(0xffffff);
titleWidget.setText(url);
- htmlWidget = new HtmlWidget(browser, url, false);
+ htmlWidget = new HtmlWidget(browser, url,
browser.getElementHandlers(), false);
scrollWidget.addChild(titleWidget);
scrollWidget.addChild(htmlWidget);