You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2009/04/16 10:14:23 UTC

svn commit: r765504 [2/2] - in /myfaces/tobago/trunk: core/src/main/java/org/apache/myfaces/tobago/component/ core/src/main/java/org/apache/myfaces/tobago/model/ core/src/main/java/org/apache/myfaces/tobago/taglib/component/ core/src/main/java/org/apac...

Modified: myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-normal.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-normal.xhtml?rev=765504&r1=765503&r2=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-normal.xhtml (original)
+++ myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-normal.xhtml Thu Apr 16 08:14:22 2009
@@ -17,18 +17,19 @@
  * limitations under the License.
 -->
 
-<ui:composition template="/WEB-INF/tags/layout/overview.xhtml"
+<ui:composition template="/WEB-INF/tags/layout/plain.xhtml"
                 xmlns:jsp="http://java.sun.com/JSP/Page"
                 xmlns:tc="http://myfaces.apache.org/tobago/component"
                 xmlns:tx="http://myfaces.apache.org/tobago/extension"
                 xmlns:ui="http://java.sun.com/jsf/facelets"
                 xmlns:h="http://java.sun.com/jsf/html"
                 xmlns:f="http://java.sun.com/jsf/core">
-  <ui:param name="title" value="Tree - General"/>
-  <tc:box label="Tree - General">
+  <ui:param name="title" value="Tree - General (Event)"/>
+  <tc:box label="Tree - General (Event)">
     <f:facet name="layout">
-      <tc:gridLayout margin="10px"/>
+      <tc:gridLayout margin="10px" rows="fixed;*"/>
     </f:facet>
+    <tc:out value="A tree with a mixed model of static and dynamic nodes. It uses the tree event mechanism." />
     <tc:tree id="tree"
              showIcons="true"
              showJunctions="true"

Copied: myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-state.xhtml (from r722373, myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-normal.xhtml)
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-state.xhtml?p2=myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-state.xhtml&p1=myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-normal.xhtml&r1=722373&r2=765504&rev=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-normal.xhtml (original)
+++ myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-state.xhtml Thu Apr 16 08:14:22 2009
@@ -17,35 +17,35 @@
  * limitations under the License.
 -->
 
-<ui:composition template="/WEB-INF/tags/layout/overview.xhtml"
+<ui:composition template="/WEB-INF/tags/layout/plain.xhtml"
                 xmlns:jsp="http://java.sun.com/JSP/Page"
                 xmlns:tc="http://myfaces.apache.org/tobago/component"
                 xmlns:tx="http://myfaces.apache.org/tobago/extension"
                 xmlns:ui="http://java.sun.com/jsf/facelets"
                 xmlns:h="http://java.sun.com/jsf/html"
                 xmlns:f="http://java.sun.com/jsf/core">
-  <ui:param name="title" value="Tree - General"/>
-  <tc:box label="Tree - General">
+  <ui:param name="title" value="Tree - General (State)"/>
+  <tc:box label="Tree - General (State)">
     <f:facet name="layout">
-      <tc:gridLayout margin="10px"/>
+      <tc:gridLayout margin="10px" rows="fixed;*"/>
     </f:facet>
+    <tc:out value="A tree with a mixed model of static and dynamic nodes. It uses the tree state mechanism." />
     <tc:tree id="tree"
              showIcons="true"
              showJunctions="true"
              showRootJunction="true"
-             showRoot="true">
+             showRoot="true"
+             state="#{demo.treeState}">
       <tc:treeNode label="Root" id="root" expanded="true">
         <tc:treeData value="#{treeController.tree}" var="node" id="data">
           <tc:treeNode label="#{node.userObject.name}"
                        id="template"
-                       expanded="#{node.userObject.expanded}"
                        markup="#{node.userObject.markup}"
                        tip="#{node.userObject.tip}"
                        action="#{node.userObject.action}"
                        disabled="#{node.userObject.disabled}"
                        value="#{node}"
-                       image="image/feather.png"
-                       treeExpansionListener="#{node.userObject.expansionListener}"/>
+                       image="image/feather.png"/>
         </tc:treeData>
         <tc:treeNode label="2 Action 1" action="#{treeController.action1}" id="action1">
           <f:facet name="addendum">

Propchange: myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-state.xhtml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-state.xhtml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/tobago/trunk/example/demo/src/main/webapp/reference/tree/tree-state.xhtml
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java?rev=765504&r1=765503&r2=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java Thu Apr 16 08:14:22 2009
@@ -17,11 +17,6 @@
  * limitations under the License.
  */
 
-/*
- * Created 07.02.2003 16:00:00.
- * $Id$
- */
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -33,14 +28,11 @@
 import org.apache.myfaces.tobago.component.UITreeNode;
 import org.apache.myfaces.tobago.context.ResourceManagerUtil;
 import org.apache.myfaces.tobago.context.ResourceUtils;
-import org.apache.myfaces.tobago.model.MixedTreeModel;
+import org.apache.myfaces.tobago.event.TreeExpansionEvent;
+import org.apache.myfaces.tobago.model.TreeState;
 import org.apache.myfaces.tobago.renderkit.CommandRendererBase;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlConstants;
-import static org.apache.myfaces.tobago.renderkit.html.HtmlConstants.A;
-import static org.apache.myfaces.tobago.renderkit.html.HtmlConstants.DIV;
-import static org.apache.myfaces.tobago.renderkit.html.HtmlConstants.IMG;
-import static org.apache.myfaces.tobago.renderkit.html.HtmlConstants.SPAN;
 import org.apache.myfaces.tobago.renderkit.html.HtmlStyleMap;
 import org.apache.myfaces.tobago.renderkit.html.StyleClasses;
 import org.apache.myfaces.tobago.renderkit.html.util.CommandRendererHelper;
@@ -52,7 +44,6 @@
 import javax.faces.component.NamingContainer;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
-import javax.swing.tree.DefaultMutableTreeNode;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
@@ -71,14 +62,15 @@
   @Override
   public void decode(FacesContext facesContext, UIComponent component) {
 
-    super.decode(facesContext, component);
+    UITreeNode node = (UITreeNode) component;
 
-    if (ComponentUtil.isOutputOnly(component)) {
+    super.decode(facesContext, node);
+
+    if (ComponentUtil.isOutputOnly(node)) {
       return;
     }
 
-    AbstractUITreeNode node = (AbstractUITreeNode) component;
-    AbstractUITree tree = node.findTree();
+    UITree tree = (UITree)node.findTree();
     String treeId = tree.getClientId(facesContext);
     String nodeStateId = node.nodeStateId(facesContext);
     Map requestParameterMap = facesContext.getExternalContext().getRequestParameterMap();
@@ -86,7 +78,7 @@
 
     // expand state
     boolean expanded = Boolean.parseBoolean((String) requestParameterMap.get(id + "-expanded"));
-    node.setExpanded(expanded);
+    setExpanded(node, tree, expanded);
 
     // select
     String searchString;
@@ -113,32 +105,22 @@
   public void encodeBegin(FacesContext facesContext, UIComponent component) throws IOException {
 
     UITreeNode node = (UITreeNode) component;
-    UITree root = (UITree) node.findTree();
-    MixedTreeModel mixedModel = root.getModel();
-
-    mixedModel.onEncodeBegin();
-
-    TobagoResponseWriter writer = HtmlRendererUtil.getTobagoResponseWriter(facesContext);
-
-    String treeId = root.getClientId(facesContext);
-
-    DefaultMutableTreeNode modelNode = (DefaultMutableTreeNode) node.getValue();
-
-    boolean folder = mixedModel.isFolder();
+    UITree tree = (UITree) node.findTree();
 
+    String treeId = tree.getClientId(facesContext);
+    boolean folder = node.isFolder();
     boolean marked = node.isMarked();
     String id = node.getClientId(facesContext);
-    boolean expanded = node.isExpanded();
-    boolean menuMode = root.getMode().equals("menu");
-
-    boolean showIcons = root.isShowIcons();
-    boolean showJunctions = root.isShowJunctions();
-    boolean showRootJunction = root.isShowRootJunction();
-    boolean showRoot = root.isShowRoot();
-    int depth = mixedModel.getDepth();
-    boolean isRoot = mixedModel.isRoot();
-    boolean hasNextSibling = mixedModel.hasCurrentNodeNextSibling();
-    List<Boolean> junctions = mixedModel.getJunctions();
+    int depth = node.getDepth();
+    boolean hasNextSibling = node.isHasNextSibling();
+    List<Boolean> junctions = node.getJunctions();
+
+    boolean expanded = isExpanded(tree, node);
+    boolean menuMode = tree.getMode().equals("menu");
+    boolean showIcons = tree.isShowIcons();
+    boolean showJunctions = tree.isShowJunctions();
+    boolean showRootJunction = tree.isShowRootJunction();
+    boolean showRoot = tree.isShowRoot();
 
     if (!showRoot && junctions.size() > 0) {
       junctions.remove(0);
@@ -175,9 +157,10 @@
     }
 
     CommandRendererHelper helper = new CommandRendererHelper(facesContext, node);
+    TobagoResponseWriter writer = HtmlRendererUtil.getTobagoResponseWriter(facesContext);
 
-    if (showRoot || !isRoot) {
-      writer.startElement(DIV, null);
+    if (showRoot || depth != 0) {
+      writer.startElement(HtmlConstants.DIV, null);
 
       // div id
       writer.writeIdAttribute(id);
@@ -188,7 +171,7 @@
       // div class (css)
       StyleClasses styleClasses = StyleClasses.ensureStyleClasses(node);
       styleClasses.updateClassAttributeAndMarkup(node, "treeNode");
-      if ("menu".equals(root.getMode())) {
+      if ("menu".equals(tree.getMode())) {
         styleClasses.addClass("treeNode", "menu");
         if (marked) {
           styleClasses.addClass("treeNode", "marker");
@@ -199,7 +182,7 @@
 
       // div style (width)
       Integer width = null;
-      HtmlStyleMap style = (HtmlStyleMap) root.getAttributes().get(Attributes.STYLE);
+      HtmlStyleMap style = (HtmlStyleMap) tree.getAttributes().get(Attributes.STYLE);
       if (style != null) {
         width = style.getInt("width");
       }
@@ -233,24 +216,15 @@
         RenderUtil.encode(facesContext, facet);
       }
 
-      writer.endElement(DIV);
+      writer.endElement(HtmlConstants.DIV);
     }
 
     if (folder) {
       String contentStyle = "display: " + (expanded ? "block" : "none") + ";";
-      writer.startElement(DIV, null);
+      writer.startElement(HtmlConstants.DIV, null);
       writer.writeIdAttribute(id + "-cont");
       writer.writeStyleAttribute(contentStyle);
     }
-    if (LOG.isDebugEnabled()) {
-      String label = node.getLabel();
-      int level = modelNode.getLevel();
-      StringBuilder builder = new StringBuilder();
-      for (int i = 0; i < level; i++) {
-        builder.append("    ");
-      }
-      LOG.debug(builder + "<div name=" + label + ">");
-    }
   }
 
   private void encodeExpandedHidden(TobagoResponseWriter writer, AbstractUITreeNode node, String clientId,
@@ -276,13 +250,13 @@
       onclick += ";" + objOnclick;
     }
     String src = expanded ? menuOpen : menuClose;
-    writer.startElement(IMG, null);
+    writer.startElement(HtmlConstants.IMG, null);
     writer.writeClassAttribute("tobago-tree-menu-icon");
     writer.writeIdAttribute(id + "-menuIcon");
     writer.writeAttribute("src", src, true);
     writer.writeAttribute("onclick", onclick, true);
     writer.writeAttribute("alt", "", false);
-    writer.endElement(IMG);
+    writer.endElement(HtmlConstants.IMG);
   }
 
   private void encodeIndent(
@@ -293,14 +267,14 @@
     String perpendicular = ResourceManagerUtil.getImageWithPath(facesContext, "image/I.gif");
 
     for (Boolean junction : junctions) {
-      writer.startElement(IMG, null);
+      writer.startElement(HtmlConstants.IMG, null);
       writer.writeClassAttribute("tree-junction");
       if (junction && !menuMode) {
         writer.writeAttribute("src", perpendicular, true);
       } else {
         writer.writeAttribute("src", blank, true);
       }
-      writer.endElement(IMG);
+      writer.endElement(HtmlConstants.IMG);
     }
   }
 
@@ -312,19 +286,19 @@
     if (!(!showJunctions
         || !showRootJunction && depth == 0
         || !showRootJunction && !showRoot && depth == 1)) {
-      writer.startElement(IMG, null);
+      writer.startElement(HtmlConstants.IMG, null);
       writer.writeClassAttribute("tree-junction");
       writer.writeIdAttribute(id + "-junction");
 
       String gif = folder && expanded
           ? (depth == 0
-          ? "Rminus.gif"
-          : (hasNextSibling ? "Tminus.gif" : "Lminus.gif"))
+            ? "Rminus.gif"
+            : (hasNextSibling ? "Tminus.gif" : "Lminus.gif"))
           : ((depth == 0)
-          ? "Rplus.gif"
-          : (hasNextSibling)
-          ? (folder ? "Tplus.gif" : "T.gif")
-          : (folder ? "Lplus.gif" : "L.gif")
+            ? "Rplus.gif"
+            : (hasNextSibling)
+              ? (folder ? "Tplus.gif" : "T.gif")
+              : (folder ? "Lplus.gif" : "L.gif")
       );
 
       String src = ResourceManagerUtil.getImageWithPath(facesContext, "image/" + gif);
@@ -337,7 +311,7 @@
 //      str += '<img class="tree-junction" id="' + this.id
 //          + '-junction" src="' + this.treeResources.getImage("blank.gif")
 //          + '" alt="">';
-      writer.endElement(IMG);
+      writer.endElement(HtmlConstants.IMG);
     }
   }
 
@@ -347,7 +321,7 @@
       throws IOException {
 
     if (showIcons) {
-      writer.startElement(IMG, null);
+      writer.startElement(HtmlConstants.IMG, null);
       writer.writeClassAttribute("tree-icon");
       writer.writeIdAttribute(id + "-icon");
 
@@ -356,7 +330,7 @@
         writer.writeAttribute("onclick", createOnclickForToggle(treeId, openSource, closedSource), true);
       }
       writer.writeAttribute("alt", "", false);
-      writer.endElement(IMG);
+      writer.endElement(HtmlConstants.IMG);
     }
   }
 
@@ -388,9 +362,9 @@
       throws IOException {
 
     if (helper.isDisabled()) {
-      writer.startElement(SPAN, null);
+      writer.startElement(HtmlConstants.SPAN, null);
     } else {
-      writer.startElement(A, null);
+      writer.startElement(HtmlConstants.A, null);
       writer.writeAttribute(HtmlAttributes.HREF, helper.getHref(), true);
       writer.writeAttribute(HtmlAttributes.ONCLICK, helper.getOnclick(), true); // xxx is escaping required?
       writer.writeAttribute(
@@ -413,9 +387,9 @@
     }
     writer.writeText(label);
     if (helper.isDisabled()) {
-      writer.endElement(SPAN);
+      writer.endElement(HtmlConstants.SPAN);
     } else {
-      writer.endElement(A);
+      writer.endElement(HtmlConstants.A);
     }
   }
 
@@ -423,31 +397,42 @@
   public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException {
 
     UITreeNode node = (UITreeNode) component;
-    UITree root = (UITree) node.findTree();
-    MixedTreeModel mixedModel = root.getModel();
-    boolean folder = mixedModel.isFolder();
-
-    mixedModel.onEncodeEnd();
-
+    boolean folder = node.isFolder();
     String id = node.getClientId(facesContext);
 
     TobagoResponseWriter writer = HtmlRendererUtil.getTobagoResponseWriter(facesContext);
 
     if (folder) {
-      writer.endElement(DIV);
+      writer.endElement(HtmlConstants.DIV);
       writer.writeComment("\nend of " + id + "-cont ");
     }
+  }
 
-    if (LOG.isDebugEnabled()) {
-      String label = node.getLabel();
-      int level = mixedModel.getDepth();
-      StringBuilder builder = new StringBuilder();
-      for (int i = 0; i < level; i++) {
-        builder.append("    ");
+  private boolean isExpanded(UITree tree, UITreeNode node) {
+    TreeState state = (TreeState) tree.getState();
+    if (state != null) {
+      return state.getExpanded().contains(node.getPath());
+    } else if (node.isExpanded() != null) {
+      return node.isExpanded();
+    } else {
+      return false;
+    }
+  }
+
+  private void setExpanded(UITreeNode node, UITree tree, boolean expanded) {
+    boolean oldExpanded = isExpanded(tree, node);
 
+    if (tree.getState() != null) {
+      if (expanded) {
+        ((TreeState) tree.getState()).getExpanded().add(node.getPath());
+      } else {
+        ((TreeState) tree.getState()).getExpanded().remove(node.getPath());
       }
-      LOG.debug(builder + "</div> <!-- " + label + " -->");
+    } else {
+      node.setExpanded(expanded);
+    }
+    if (oldExpanded != expanded) {
+      node.queueEvent(new TreeExpansionEvent(node, node.isExpanded(), expanded));
     }
   }
-
 }

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/mozilla/style/style.css
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/mozilla/style/style.css?rev=765504&r1=765503&r2=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/mozilla/style/style.css (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/mozilla/style/style.css Thu Apr 16 08:14:22 2009
@@ -31,15 +31,6 @@
 
 /* Tree -------------------------------------------------------------------- */
 
-div.tobago-treeOld-default {
-  height: 100%;
-}
-
-table.tobago-treeOld-default {
-/* this fixes scroolbar bug in mozilla >= 1.6 */
-  margin: 1px;
-}
-
 /* toolBar -------------------------------------------------------------------- */
 
 .tobago-toolBar-button-menu-background-image {

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css?rev=765504&r1=765503&r2=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css Thu Apr 16 08:14:22 2009
@@ -110,15 +110,6 @@
 
 /* Tree old -------------------------------------------------------------------- */
 
-.tobago-treeOld-default {
-  overflow: auto;
-  padding: 0px;
-  margin: 0px;
-  font: icon;
-  color: black;
-  white-space: nowrap;
-}
-
 .tree-folder-label, .tree-item-label, .tree-folder-label:active,
   .tree-item-label:active, .tree-folder-label:hover, .tree-item-label:hover {
   margin-left: 3px;

Copied: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java (from r713180, myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionStateChangeListener.java)
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java?p2=myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java&p1=myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionStateChangeListener.java&r1=713180&r2=765504&rev=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionStateChangeListener.java (original)
+++ myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java Thu Apr 16 08:14:22 2009
@@ -17,29 +17,29 @@
  * limitations under the License.
  */
 
-import javax.el.MethodExpression;
 import javax.el.ELContext;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.context.FacesContext;
+import javax.el.MethodExpression;
 import javax.faces.component.StateHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
 
 
-public class MethodExpressionStateChangeListener implements SheetStateChangeListener, StateHolder {
+public class MethodExpressionTreeExpansionListener implements TreeExpansionListener, StateHolder {
 
   private MethodExpression methodExpression;
 
   private boolean isTransient = false;
 
-  public MethodExpressionStateChangeListener() {
+  public MethodExpressionTreeExpansionListener() {
   }
 
-  public MethodExpressionStateChangeListener(MethodExpression methodExpression) {
+  public MethodExpressionTreeExpansionListener(MethodExpression methodExpression) {
     this.methodExpression = methodExpression;
   }
 
-  public void processSheetStateChange(SheetStateChangeEvent actionEvent) throws AbortProcessingException {
+  public void treeExpanded(TreeExpansionEvent event) {
     try {
-      Object[] params = new Object[]{actionEvent};
+      Object[] params = new Object[]{event};
       methodExpression.invoke(elContext(), params);
     } catch (Exception e) {
       throw new AbortProcessingException(e);
@@ -66,4 +66,4 @@
     return isTransient;
   }
 
-}
+}
\ No newline at end of file

Propchange: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java (from r713180, myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TabChangeEvent.java)
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java?p2=myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java&p1=myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TabChangeEvent.java&r1=713180&r2=765504&rev=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TabChangeEvent.java (original)
+++ myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java Thu Apr 16 08:14:22 2009
@@ -18,69 +18,53 @@
  */
 
 import javax.faces.component.UIComponent;
-import javax.faces.event.ActionEvent;
+import javax.faces.event.FacesEvent;
 import javax.faces.event.FacesListener;
 
-/*
- * User: weber
- * Date: 13.12.2004
- * Time: 16:25:03
- */
-public class TabChangeEvent extends ActionEvent {
+public class TreeExpansionEvent extends FacesEvent {
 
   private static final long serialVersionUID = 422186716954088729L;
 
-  private Integer oldTabIndex;
-  private Integer newTabIndex;
-
-  public TabChangeEvent(UIComponent uiComponent, Integer oldTabIndex, Integer newTabIndex) {
-    super(uiComponent);
-    this.oldTabIndex = oldTabIndex;
-    this.newTabIndex = newTabIndex;
-  }
+  private boolean oldExpanded;
+  private boolean newExpanded;
 
-  @Deprecated
-  public TabChangeEvent(UIComponent uiComponent, Object oldState, Object newState) {
-    super(uiComponent);
-    setOldState(oldState);
-    setNewState(newState);
+  public TreeExpansionEvent(UIComponent node, boolean oldExpanded, boolean newExpanded) {
+    super(node);
+    this.oldExpanded = oldExpanded;
+    this.newExpanded = newExpanded;
   }
 
   public boolean isAppropriateListener(FacesListener facesListener) {
-    return facesListener instanceof TabChangeListener;
+    return facesListener instanceof TreeExpansionListener;
   }
 
   public void processListener(FacesListener facesListener) {
-    if (facesListener instanceof TabChangeListener) {
-      ((TabChangeListener) facesListener).processTabChange(this);
+    if (facesListener instanceof TreeExpansionListener) {
+      if (oldExpanded && !newExpanded) {
+   //todo     ((TreeExpansionListener) facesListener).treeCollapsed(this);
+        ((TreeExpansionListener) facesListener).treeExpanded(this);
+      } else if (!oldExpanded && newExpanded) {
+        ((TreeExpansionListener) facesListener).treeExpanded(this);
+      } else {
+        // nothing to do
+      }
     }
   }
 
-  public int getOldTabIndex() {
-    return oldTabIndex;
-  }
-
-  public int getNewTabIndex() {
-    return newTabIndex;
-  }
-
-  @Deprecated
-  public Object getOldState() {
-    return oldTabIndex;
-  }
-
-  @Deprecated
-  public void setOldState(Object oldTabIndex) {
-    this.oldTabIndex = oldTabIndex instanceof Integer ? (Integer) oldTabIndex : -1;
+  public boolean isOldExpanded() {
+    return oldExpanded;
   }
 
-  @Deprecated
-  public Object getNewState() {
-    return newTabIndex;
+  public boolean isNewExpanded() {
+    return newExpanded;
   }
 
-  @Deprecated
-  public void setNewState(Object newTabIndex) {
-    this.newTabIndex = newTabIndex instanceof Integer ? (Integer) newTabIndex : -1;
+  @Override
+  public String toString() {
+    return new StringBuilder()
+        .append(super.toString())
+        .append("expanded=")
+        .append(newExpanded)
+        .toString();
   }
 }

Propchange: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionListener.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionListener.java?rev=765504&view=auto
==============================================================================
--- myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionListener.java (added)
+++ myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionListener.java Thu Apr 16 08:14:22 2009
@@ -0,0 +1,6 @@
+package org.apache.myfaces.tobago.event;
+
+public interface TreeExpansionListener {
+
+  void treeExpanded(TreeExpansionEvent event);
+}

Modified: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/PropertyInfo.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/PropertyInfo.java?rev=765504&r1=765503&r2=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/PropertyInfo.java (original)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/generate/PropertyInfo.java Thu Apr 16 08:14:22 2009
@@ -81,6 +81,10 @@
     return type;
   }
 
+  public String getInternalType() {
+    return "boolean".equals(type) ? Boolean.class.getName() : getType();
+  }
+
   public boolean isWidthOrHeight() {
     return "width".equals(name) || "height".equals(name);
   }

Modified: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component1.1.stg
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component1.1.stg?rev=765504&r1=765503&r2=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component1.1.stg (original)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component1.1.stg Thu Apr 16 08:14:22 2009
@@ -280,7 +280,7 @@
 }
 >>
 
-BooleanProperty(property) ::= <<
+booleanProperty(property) ::= <<
 
 public boolean is<property.upperCamelCaseName>() {
   if (<property.propertyName> != null) {
@@ -305,10 +305,39 @@
 }
 >>
 
+BooleanProperty(property) ::= <<
+
+public java.lang.Boolean is<property.upperCamelCaseName>() {
+  if (<property.propertyName> != null) {
+    return <property.propertyName>;
+  }
+  <getValueExpression(property)>
+  if (vb != null) {
+    Boolean bool = (Boolean) <getValue(property)>
+    if (bool != null) {
+      return bool;
+    }
+  }
+  <if(property.defaultCode)>
+  return <property.defaultCode>;
+  <else>
+  return null;
+  <endif>
+}
+
+public void set<property.upperCamelCaseName>(java.lang.Boolean <property.propertyName>) {
+  this.<property.propertyName> = <property.propertyName>;
+}
+>>
+
 SeverityProperty(property) ::= <<
 <NormalProperty(property)>
 >>
 
+MeasureProperty(property) ::= <<
+<NormalProperty(property)>
+>>
+
 OrderByProperty(property) ::= <<
 <NormalProperty(property)>
 >>
@@ -367,15 +396,7 @@
 
 
 field() ::= <<
-private <it.type> <it.propertyName>;
->>
-
-restoreStateField() ::= <<
-<it.propertyName> = (<it.type>) values[<i>];
->>
-
-saveStateField() ::= <<
-values[<it.indexPlusOne>] = <it.propertyName>;
+private <it.internalType> <it.propertyName>;
 >>
 
 WizardSaveStateProperty() ::= <<
@@ -398,6 +419,10 @@
 values[<it.indexPlusOne>] = <it.propertyName>;
 >>
 
+booleanSaveStateProperty() ::= <<
+values[<it.indexPlusOne>] = <it.propertyName>;
+>>
+
 BooleanSaveStateProperty() ::= <<
 values[<it.indexPlusOne>] = <it.propertyName>;
 >>
@@ -439,6 +464,10 @@
 <it.propertyName> = (<it.type>) values[<it.indexPlusOne>];
 >>
 
+booleanRestoreStateProperty() ::= <<
+<it.propertyName> = (<it.internalType>) values[<it.indexPlusOne>];
+>>
+
 BooleanRestoreStateProperty() ::= <<
 <it.propertyName> = (<it.type>) values[<it.indexPlusOne>];
 >>

Modified: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component1.2.stg
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component1.2.stg?rev=765504&r1=765503&r2=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component1.2.stg (original)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component1.2.stg Thu Apr 16 08:14:22 2009
@@ -183,7 +183,7 @@
 }
 >>
 
-BooleanProperty(property) ::= <<
+booleanProperty(property) ::= <<
 
 public boolean is<property.upperCamelCaseName>() {
   if (<property.propertyName> != null) {
@@ -212,6 +212,35 @@
 }
 >>
 
+BooleanProperty(property) ::= <<
+
+public java.lang.Boolean is<property.upperCamelCaseName>() {
+  if (<property.propertyName> != null) {
+    return <property.propertyName>;
+  }
+  <getValueExpression(property)>
+  if (ve != null) {
+    try {
+      Boolean bool = (Boolean) <getValue(property)>
+      if (bool != null) {
+        return bool;
+      }
+    } catch (javax.el.ELException e) {
+		  throw new javax.faces.FacesException(e);
+	  }
+  }
+  <if(property.defaultCode)>
+  return <property.defaultCode>;
+  <else>
+  return null;
+  <endif>
+}
+
+public void set<property.upperCamelCaseName>(java.lang.Boolean <property.propertyName>) {
+  this.<property.propertyName> = <property.propertyName>;
+}
+>>
+
 SeverityProperty(property) ::= <<
 <NormalProperty(property)>
 >>
@@ -344,6 +373,10 @@
 values[<it.indexPlusOne>] = <it.propertyName>;
 >>
 
+booleanSaveStateProperty() ::= <<
+values[<it.indexPlusOne>] = <it.propertyName>;
+>>
+
 BooleanSaveStateProperty() ::= <<
 values[<it.indexPlusOne>] = <it.propertyName>;
 >>
@@ -392,6 +425,10 @@
 <it.propertyName> = (<it.type>) values[<it.indexPlusOne>];
 >>
 
+booleanRestoreStateProperty() ::= <<
+<it.propertyName> = (<it.internalType>) values[<it.indexPlusOne>];
+>>
+
 BooleanRestoreStateProperty() ::= <<
 <it.propertyName> = (<it.type>) values[<it.indexPlusOne>];
 >>

Modified: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.1.stg
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.1.stg?rev=765504&r1=765503&r2=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.1.stg (original)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.1.stg Thu Apr 16 08:14:22 2009
@@ -154,6 +154,16 @@
 }
 >>
 
+boolean() ::= <<
+if (<it.propertyName> != null) {
+  if (isValueReference(<it.propertyName>)) {
+    <createValueBinding(it)>
+  } else {
+    component.set<it.upperCamelCaseName>(Boolean.parseBoolean(<it.propertyName>));
+  }
+}
+>>
+
 Boolean() ::= <<
 if (<it.propertyName> != null) {
   if (isValueReference(<it.propertyName>)) {
@@ -179,6 +189,18 @@
 }
 >>
 
+/*
+Measure() ::= <<
+if (<it.propertyName> != null) {
+  if (isValueReference(<it.propertyName>)) {
+    <createValueBinding(it)>
+  } else {
+    component.set<it.upperCamelCaseName>(org.apache.myfaces.tobago.layout.Measure.parse(<it.propertyName>));
+  }
+}
+>>
+*/
+
 OrderBy() ::= <<
 if (<it.propertyName> != null) {
   if (isValueReference(<it.propertyName>)) {
@@ -234,6 +256,13 @@
 }
 >>
 
+TreeExpansionListener() ::= <<
+if (<it.propertyName> != null && isValueReference(<it.propertyName>)) {
+  <createMethodBinding(it)>
+  component.set<it.template>(methodBinding);
+}
+>>
+
 SuggestMethod() ::= <<
 if (<it.propertyName> != null && isValueReference(<it.propertyName>)) {
   <createMethodBinding(it)>

Modified: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.2.stg
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.2.stg?rev=765504&r1=765503&r2=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.2.stg (original)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.2.stg Thu Apr 16 08:14:22 2009
@@ -182,6 +182,16 @@
 }
 >>
 
+boolean() ::= <<
+if (<it.propertyName> != null) {
+  if (!<it.propertyName>.isLiteralText()) {
+    <createValueBinding(it)>
+  } else {
+    component.set<it.upperCamelCaseName>(Boolean.parseBoolean(<it.propertyName>.getExpressionString()));
+  }
+}
+>>
+
 Boolean() ::= <<
 if (<it.propertyName> != null) {
   if (!<it.propertyName>.isLiteralText()) {
@@ -260,6 +270,12 @@
 }
 >>
 
+TreeExpansionListener() ::= <<
+if (<it.propertyName> != null) {
+  component.add<it.template>(new org.apache.myfaces.tobago.event.MethodExpressionTreeExpansionListener(<it.propertyName>));
+}
+>>
+
 SuggestMethod() ::= <<
 if (<it.propertyName> != null) {
   component.set<it.template>Expression(<it.propertyName>);

Modified: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tagAbstract1.1.stg
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tagAbstract1.1.stg?rev=765504&r1=765503&r2=765504&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tagAbstract1.1.stg (original)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tagAbstract1.1.stg Thu Apr 16 08:14:22 2009
@@ -158,6 +158,18 @@
 }
 >>
 
+/*
+Measure() ::= <<
+if (<it.propertyName> != null) {
+  if (isValueReference(<it.propertyName>)) {
+    <createValueBinding(it)>
+  } else {
+    component.set<it.upperCamelCaseName>(org.apache.myfaces.tobago.layout.Measure.parse(<it.propertyName>));
+  }
+}
+>>
+*/
+
 OrderBy() ::= <<
 if (<it.propertyName> != null) {
   if (isValueReference(<it.propertyName>)) {